problème de connexion facebook-canOpenURL: Échec pour URL: "fbauth2: / / /" - erreur: "(null)"
quand je clique sur Connexion avec le bouton Facebook, il ouvre le navigateur safari et se ferme immédiatement. Remarqué d'erreur sur la console.
délégué d'Application de la méthode:
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
print("###### URL : ")
print(url)
print("###### App : ")
print(app)
print(options["UIApplicationOpenURLOptionsSourceApplicationKey"])
return FBSDKApplicationDelegate.sharedInstance().application(app, openURL: url, sourceApplication: options["UIApplicationOpenURLOptionsSourceApplicationKey"] as! String,
annotation: nil)
}
2015-09-18 18:37:51.410 [21036:5050465] -canOpenURL: failed for URL: "fbauth2:///" - error: "(null)" 2015-09-18 18:37:51.417[21036:5050465] -canOpenURL: failed for URL: "fbauth2:///" - error: "(null)" ###### URL : fb4554284912963222://authorize/?error_code=100&error_message=Invalid+Scope%3A+public&state=%7B%22challenge%22%3A%222ZmK6R5F05d%252F060TkCqj8SjPLjc%253D%22%2C%220_auth_logger_id%22%3A%223C79F2C8-61B9-470E-AE1B-E1C68435DB83%22%2C%22com.facebook.sdk_client_state%22%3Atrue%2C%223_method%22%3A%22sfvc_auth%22%7D&e2e=%7B%22init%22%3A145973.000512302%7D#_=_ ###### App : Optional(com.apple.SafariViewService) nil ###### err: Optional(Error Domain=com.facebook.sdk.core Code=8 "(null)" UserInfo={com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCode=100, com.facebook.sdk:FBSDKErrorDeveloperMessageKey=Invalid Scope: public, com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey=0})
IDE: xcode 7
Langue: Swift2
Facebook SDK: 4.6.0
Parse: 1.8.4
j'ai aussi vérifié .plist a toutes les clés nécessaires. Également j'ai vérifié l'Identificateur de paquet pour les erreurs typographiques. Tout l'air bien. Facebook est active.
de l'aide?
9 réponses
j'ai le même avertissement, mais dans les Docs Facebook il y a une réponse.
il s'agit d'un avertissement de Xcode indiquant le canopenurl: appel retourné false. Aussi longtemps que vous avez configuré L'entrée LSApplicationQueriesSchemes dans votre liste comme décrit ci-dessus, vous pouvez ignorer cet avertissement
"- canOpenURL: échec pour l'URL" avertissement est un hareng rouge et signifie tout simplement le FB app n'est pas installé sur l'appareil/simulateur vous êtes en cours d'exécution sur.
il semble que vous demandiez une portée invalide (alias permission) de"Public". Pouvez-vous inclure votre code qui inclut les permissions que vous demandez? public_profile est probablement ce que vous voulez (et ce à quoi le SDK est par défaut si aucun N'est fourni).
plus important encore, ne pas ajoutez fbauth2 à vos CFBundleURLSchemes car cela cassera les flux de connexion. Comme Himanshu l'a fait remarquer, ces entrées doivent être entrées sous les régimes de Lsapplicationqueriess dans notre liste.
si vous recompilez avec IOS SDK 9.0, ajoutez ce qui suit à la liste de votre application si vous utilisez une version du SDK v4 de Facebook.6.0 ou plus:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>
pour préparer l'intégration facebook soutenue à iOS 9, passer par Intégration Facebook pour iOS 9 lignes directrices
pour vérifier la version du SDK facebook, utilisez la ligne de code suivante:
print("SDK version \(FBSDKSettings .sdkVersion())")
j'ai manqué l'importation FBSDKCoreKit
. Plus tard, il a commencé à travailler sur le simulateur, mais pas sur l'iPhone.
a également remarqué la FAQ suivante sur le site Facebook. Pourquoi je vois des messages de console comme
'canOpenURL: échoué pour URL:" fb...://'
ou ? Il s'agit d'un avertissement Xcode indiquant l'appel canOpenURL:
retourné false. Tant que vous avez configuré le LSApplicationQueriesSchemes
l'entrée dans votre plist
comme décrit ci-dessus, vous pouvez ignorer cet avertissement
concernant ne pas fonctionner sur l'appareil iPhone, s'il vous plaît se référer: Parse API-Facebook login ne fonctionne pas sur l'appareil iPhone
il s'agit d'un avertissement Xcode indiquant le canOpenURL: appel retourné faux. Tant que vous avez configuré le
LSApplicationQueriesSchemes
entrée dans votre liste comme décrit ci-dessus, vous pouvez ignorer cet avertissement.
allez à ce lien Sélectionnez votre application et configurez votre info.plist
import
et ajouter ce code dans votre AppDelegate
import FBSDKCoreKit .
import FBSDKLoginKit
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options)
}
Vous avez un supplément de "/" dans l'url "fbauth2:///".
alors vous pouvez voir "error_message=invalide+Scope" dans l'url, vous devriez probablement vérifier les permissions de votre application: https://developers.facebook.com/docs/facebook-login/permissions/v2.4
le problème est dû à la sécurité de Transport App introduit dans iOS 9.
Il ya deux solutions, les deux traitent de la correction de vos informations.fichier plist
voici un guide http://discoverpioneer.com/blog/2015/09/18/updating-facebook-integration-for-ios-9 /
vous devez ajouter cette méthode si votre application tourne sur iOS9 ou au-dessus.
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options {
return [[FBSDKApplicationDelegate sharedInstance] application:app
openURL:url
sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
}
dans le cas où vous avez besoin d'une version Swift:
@available(iOS 9.0, *)
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return SDKApplicationDelegate.shared.application(app,
open: url,
sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
annotation: options[UIApplicationOpenURLOptionsKey.annotation] as Any)
}
j'ai résolu mon problème. C'était juste la syntaxe de la fonction loginButtonClicked. Le message d'erreur me conduisait dans la mauvaise direction. Voici le code de travail.
@objc func loginButtonClicked() {
self.login = FBSDKLoginManager()
self.login.logIn(withReadPermissions: ["public_profile"], from: self, handler: {(result, error) -> Void in
if error != nil {
print("Process error")
}
else if (result?.isCancelled)! {
print("Cancelled")
}
else {
print("Logged in")
DispatchQueue.main.async(execute: {
let viewController:UIViewController = self.storyboard?.instantiateViewController(withIdentifier: "UITabBarController") as! UITabBarController
self.present(viewController, animated: true, completion: nil)
})
}
})
}