web-dev-qa-db-fra.com

problème de connexion facebook - canOpenURL: échec pour l'URL: "fbauth2: ///" - erreur: "(null)"

Lorsque je clique sur le bouton de connexion avec le bouton Facebook, le navigateur Safari s'ouvre et se ferme immédiatement. Erreur remarquée sur la console.

Méthode de délégué d'application:

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: échec pour l'URL: "fbauth2: ///" - erreur: "(null)" .______. 2015-09- 18 18: 37: 51.417 [21036: 5050465] -canOpenURL: échec pour l'URL: "fbauth2: ///" - erreur: "(null)" 

 ###### URL: 
 .____ -470E-AE1B-E1C68435DB83% 22% 2C% 22com.facebook.sdk_client_state% 22% 3Au vrai% 2C% 223_méthode% 22% 3A% 22sfvc_auth% 22% 7J & e2e =% 7B% 22% 3A145.3535 _

 ###### App: 


 Facultatif (com.Apple.SafariViewService) 
 Nil 

 ###### err: 

 Facultatif (Domaine d'erreur = 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
Analyse: 1.8.4

J'ai également vérifié. Plist est d'avoir toutes les clés qui sont nécessaires . Également vérifié l'identificateur de paquet pour les erreurs de frappe. Tous ont l'air bien . Facebook est actif.

De l'aide?

56
sfbayman

J'ai le même avertissement, mais dans Facebook Docs, il y a une réponse.

Ceci est un avertissement Xcode indiquant le canOpenURL: appel retourné faux. Tant que vous avez configuré l'entrée LSApplicationQueriesSchemes dans votre plist comme décrit ci-dessus, vous pouvez ignorer cet avertissement.

https://developers.facebook.com/docs/ios/ios9

41
Edoardo Benissimo

L'avertissement "-canOpenURL: failed for URL" est un fil rouge et signifie simplement que l'application FB n'est pas installée sur l'appareil/le simulateur sur lequel vous exécutez l'application.

Il semblerait que vous demandiez une portée non valide (ou autorisation) de "Public". Pouvez-vous inclure votre code qui inclut les autorisations que vous demandez? public_profile est probablement ce que vous voulez (et ce que le SDK utilise par défaut si aucun n'est fourni).

Plus important encore, faitesPASajoutez fbauth2 à vos schémas CFBundleURLS car cela interromprait les flux de connexion. Comme Himanshu l'a fait remarquer, ces entrées doivent être entrées sous LSApplicationQueriesSchemes dans notre plist.

33
Chris Pan

Si vous recompilez avec iOS SDK 9.0, ajoutez les éléments suivants au répertoire de votre application si vous utilisez une version du SDK de Facebook v4.6.0 ou ultérieure:

   <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 de Facebook prise en charge par iOS 9, consultez les instructions de Facebook Integraion pour iOS 9

Pour vérifier la version de Facebook SDK, utilisez la ligne de code ci-dessous:

   print("SDK version \(FBSDKSettings .sdkVersion())")
4
Himanshu Mahajan

J'ai raté l'importation FBSDKCoreKit. Plus tard, il a commencé à fonctionner sur le simulateur mais pas sur l'iPhone. 

A également remarqué le FAQ suivant sur le site Facebook. Pourquoi est-ce que je vois les messages de la console comme 

'canOpenURL: échec de l'URL: "fb ...: //" 

ou ? Ceci est un avertissement Xcode indiquant que l'appel canOpenURL: a renvoyé la valeur false. Tant que vous avez configuré l'entrée LSApplicationQueriesSchemes dans votre plist comme décrit ci-dessus, vous pouvez ignorer cet avertissement.

Pour ne pas travailler sur le périphérique iPhone, veuillez vous reporter à: Parse API - La connexion Facebook ne fonctionne pas sur le périphérique iPhone

2
sfbayman

Ceci est un avertissement Xcode indiquant le canOpenURL: appel retourné faux. Tant que vous avez configuré la LSApplicationQueriesSchemes comme décrit ci-dessus, vous pouvez ignorer cet avertissement.

Allez à ceci Lien Sélectionnez votre application et configurez votre info.plist

import Et ajoutez 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)
}
1
ZAFAR007

Vous avez un extra "/" dans votre URL "fbauth2: ///".

Ensuite, vous pouvez voir "error_message = Invalid + Scope" dans l'URL, vous devriez probablement vérifier les autorisations de votre application: https://developers.facebook.com/docs/facebook-login/permissions/v2. 4

0
Paul Slm

Vous devez ajouter cette méthode si votre application s'exécute sur iOS9 ou une version ultérieure.

- (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]];

}

Si vous avez besoin d'une version de 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)
}
0
Muzammil

J'ai compris mon problème. C'était juste la syntaxe dans la fonction loginButtonClicked. Le message d'erreur me conduisait dans le mauvais chemin. 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)
            })
        }

        })
}
0
Rob Schlackman

Le problème est dû à App Transport Security introduit dans iOS 9.

Il existe deux solutions, les deux traitant de la réparation de votre fichier info.plist

Voici un guide http://discoverpioneer.com/blog/2015/09/18/updating-facebook-integration-for-ios-9/

0
Phil