web-dev-qa-db-fra.com

Erreur de connexion Facebook - Erreur inconnue lors de la création de l'URL (erreur com.facebook.sdk.core 3)

J'obtiens cette erreur en essayant de me connecter avec Facebook: Optional(Error Domain=com.facebook.sdk.core Code=3 "(null)" UserInfo={com.facebook.sdk:FBSDKErrorDeveloperMessageKey=Unknown error building URL.}) J'ai lu dans d'autres posts que c'est un bogue dans la version 4.39.0 de FBSDKLoginKit et que la solution passe à 4.38.o Maintenant, cela m'a donné une autre erreur: Firebase Auth Interop/FIRAuth Interop.h' file not found in the FIRAuth.m #import <FirebaseAuthInterop/FIRAuthInterop.h> Comme je suis novice dans les connexions sociales et que le guide de la page de développeur Facebook n'est pas à jour avec Swift et que certains sont dans obj-c, je risque de l'avoir mal traduit en Swift. Pouvez-vous repérer où se situe le problème? Le cadre FBSDKLogin est également mis en évidence en rouge dans le dossier frameworks, ainsi que tout le cadre dans le dossier pods/Frameworks .

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge], completionHandler: ({_,_ in
        }))

        UNUserNotificationCenter.current().delegate = self

        var error: NSError?
        do {
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
        } catch let error1 as NSError{
            error = error1
            print("could not set session. err:\(error!.localizedDescription)")
        }
        do {
            try AVAudioSession.sharedInstance().setActive(true)
        } catch let error1 as NSError{
            error = error1
            print("could not active session. err:\(error!.localizedDescription)")
        }
        window?.tintColor = UIColor.blue

        // Use Firebase library to configure APIs
        FirebaseApp.configure()

        // goggle only
        GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID
        GIDSignIn.sharedInstance().delegate = self

        // Facebook SDK
//        FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)

        return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)


//        return true
    }

L'URL ouverte où je mets à la fois la connexion Google et Facebook:

// start google sign in methods
    @available(iOS 9.0, *)
    func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any])
        -> Bool {
            // google only
//            return
//                GIDSignIn.sharedInstance().handle(url,
//                                                     sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
//                                                     annotation: options[UIApplicationOpenURLOptionsKey.annotation])

            // both google and facebook

            let googleDidHandle = GIDSignIn.sharedInstance().handle(url,
                                                                       sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
                                                                       annotation: options[UIApplicationOpenURLOptionsKey.annotation])


            guard let source = options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String else { return false }
            let annotation = options[UIApplicationOpenURLOptionsKey.annotation] as? String

            let facebookDidHandle =  FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: source, annotation: annotation)



//            return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: source, annotation: annotation)



            return googleDidHandle || facebookDidHandle
    }

La méthode de connexion vc avec Facebook où j'obtiens l'erreur:

func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
    if error == nil {
        print("User just logged in via Facebook")
        let credentials = FacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.current().tokenString)
        Auth.auth().signInAndRetrieveData(with: credentials) { (user, error) in
            if (error != nil) {
                print("Facebook authentication failed")
            } else {
                print("Facebook authentication succeed")
            }
        }//)
    } else {
        print("An error occured the user couldn't log in")
        print(error)
    }
}
11
vincenzo

J'ai trouvé le problème. Ce n'est pas lié au code. Il semble y avoir un bogue dans les deux dernières versions du SDK de Facebook, alors je l’ai rétrogradé à 

pod 'FBSDKCoreKit', '4.36.0'  
pod 'FBSDKLoginKit', '4.36.0'  
pod 'FacebookCore', '0.4'  
pod 'FacebookLogin', '0.4'

et tout se passe bien ... La pâte pour quelqu'un version 4.38 a résolu le problème, ce n'était pas la voiture pour moi ... Je espère que cela sera utile aux autres.

14
vincenzo

Il s'agit d'un bogue du SDK de Facebook dans la version 4.39.0 qui est à l'origine de cette erreur. Afin de résoudre ce problème, il suffit de rétrograder CoreKit et LoginKit vers 4.38.0, d'effacer les données dérivées ainsi que le dossier de construction propre (CMD + OPTION + SHIFT + K).

pod 'FBSDKCoreKit', '~> 4.38.0'
pod 'FBSDKLoginKit', '~> 4.38.0'

Si vous utilisez FacebookCore et FacebookLogin, procédez comme suit.

pod 'FacebookCore'
pod 'FacebookLogin'
pod 'FBSDKCoreKit', '~> 4.38.0'
pod 'FBSDKLoginKit', '~> 4.38.0'
9
shanezzar

On dirait qu'il y a eu un correctif pour ce 4.39.1 est sorti le 15 janvier 2019 (une semaine dans le futur apparemment)

https://developers.facebook.com/docs/ios/change-log-4x/

2
BROK3N S0UL

Cette solution de contournement sur GitHub a fonctionné pour moi:

https://github.com/facebook/facebook-Swift-sdk/issues/301#issuecomment-446363750

Il existe également quelques solutions de contournement différentes qui ont fonctionné pour d'autres personnes.

Mon fichier pod ressemblait à ceci lorsqu'il fonctionnait:

pod 'FBSDKCoreKit', :git => 'https://github.com/facebook/facebook-objc-sdk.git', :branch => 'master'
pod 'FacebookCore'
pod 'FacebookLogin'
pod 'FacebookShare'
0
Berat Baran Cevik