web-dev-qa-db-ja.com

Facebookログインエラー-URLの作成中に不明なエラー(com.facebook.sdk.coreエラー3)

Facebookでログインしようとすると、このエラーが表示されます。Optional(Error Domain=com.facebook.sdk.core Code=3 "(null)" UserInfo={com.facebook.sdk:FBSDKErrorDeveloperMessageKey=Unknown error building URL.})他の投稿で、FBSDKLoginKitのバージョン4.39.0のバグであり、ソリューションが4.38.oにダウングレードされているバグを読みました。エラー:Firebase Auth Interop/FIRAuth Interop.h' file not found in the FIRAuth.m #import <FirebaseAuthInterop/FIRAuthInterop.h>私はソーシャルログインが初めてであり、Facebook開発者ページのガイドはSwiftで最新のものではなく、一部はobj-cにあります。問題はどこにありますか?また、FBSDKLoginフレームワークは、frameworksフォルダー内の赤で強調表示されており、pods/Frameworksフォルダー内のすべてのフレームワークがコードになっています:AppDelegate

    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
    }

GoogleサインインとFacebookの両方を配置するオープンURL:

// 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
    }

エラーが発生するFacebookメソッドを使用したログインvc:

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)
    }
}
14
Vincenzo

問題が見つかりました。コード関連ではありません。 Facebook SDKの最新の2つのバージョンのバグのようですので、ダウングレードしました

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

スムーズに実行されます。誰かのための生地4.38は、私にとっては車ではないという問題を解決しました。これが他の人に役立つことを願っています。

15
Vincenzo

これは、このエラーの原因となっているバージョン4.39.0のFacebook SDKバグです。このバグを解決するには、単にCoreKitとLoginKitの両方を4.38.0にダウングレードし、派生データを消去し、ビルドフォルダーをクリーンアップします(CMD + OPTION + SHIFT + K)。

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

FacebookCoreとFacebookLoginを使用している場合は、次のようにします。

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

2019年1月15日にリリースされたこの4.39.1のホットフィックスがあったようです(明らかに1週間後)

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

2
BROK3N S0UL

GitHubのこの回避策は私のために働いた:

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

他の人々のために働いたいくつかの異なる回避策もあります。

動作したとき、私のポッドファイルは次のようになりました。

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