web-dev-qa-db-ja.com

com.facebook.sdk.loginエラー308が発生するのはなぜですか?

Xcode 7.0を使用し、iOS 9.0.2でテストし、Facebook SDK 4.7.0を使用しています。

ユーザーをログインさせると、ほとんどの場合すべてが正常に機能しますが、時々このエラーが表示され、理由がわかりません!

操作を完了できませんでした。 (com.facebook.sdk.loginエラー308。)

調査した後、parse.comのFBUtilsと公式のFBSDKで同時にログインすると、エラーが発生する人がいるのを見ましたが、FBSDKのみを使用しています私のプロジェクトで。

だから私の質問は、なぜこのエラーが発生するのですか、どうすれば取り除くのですか?

編集-コードの追加

ログインロジックは次のとおりです。

func loginWithFacebook(sender: UIViewController, completion: (profile: FBSDKProfile?, token: String?, cancelled: Bool, error: String?) -> Void ) {

    FBSDKProfile.enableUpdatesOnAccessTokenChange(true)
    NSNotificationCenter.defaultCenter().addObserver( sender , selector: "onProfileUpdated:", name:FBSDKProfileDidChangeNotification, object: nil)
    let loginManager = FBSDKLoginManager()
    loginManager.logInWithReadPermissions(["email", "public_profile"], fromViewController: sender) { (result: FBSDKLoginManagerLoginResult!, error: NSError!) -> Void in
        if error != nil {
            print("ERROR")
            completion(profile: nil, token: nil, cancelled: false, error: error.localizedDescription)
            print(error.localizedDescription)

        } else if result.isCancelled {
            print("CANCELLED")
            completion(profile: nil, token: nil, cancelled: true, error: nil)

        } else {
            print("NO ERROR")
            if FBSDKProfile.currentProfile() == nil {
                print("PROFILE IS NIL")
                completion(profile: nil, token: result.token.tokenString, cancelled: false, error: nil)
            } else {
                print("PROFILE IS NOT NIL")
                completion(profile: FBSDKProfile.currentProfile(), token: result.token.tokenString, cancelled: false, error: nil)
            }

        }

    }
}
26
Swinny89

Xcode8-iOS10の場合、

Enableターゲットの[機能]タブ内のキーチェーン共有により、問題が修正されました。

enter image description here

詳細はこちらをご覧ください: https://github.com/facebook/facebook-sdk-Swift/issues/51


Xamarin Studio(@Kenneth推奨)の場合、

Entitlements.plistファイルを、iOSプロジェクトのiOS Bundle Signingオプションの下のCustom Entitlementsに追加します。

101
Zaid Pathan

この問題の解決策を見つけました。ログインマネージャーのインスタンスを必要な場所で作成していました。

let loginManager = FBSDKLoginManager()

次に、それを使用してログインし、ログアウトメソッドで別のインスタンスを作成していました。アプリ全体で使用する遅延変数を作成することで問題を修正しました。

lazy var fbLoginManager: FBSDKLoginManager = {
   return FBSDKLoginManager()
}()

[〜#〜] update [〜#〜]

Facebookはバグを認識しており、調査中です。私のソリューションが常に機能するとは限らないことがわかり、コードを次のように更新しましたが、その後は見ていません。

private var _fbLoginManager: FBSDKLoginManager?

var fbLoginManager: FBSDKLoginManager {
    get {
        if _fbLoginManager == nil {
            _fbLoginManager = FBSDKLoginManager()
        }
        return _fbLoginManager!
    }
}

Facebookからログアウトするときは、_fbLoginManager = nilおよびインスタンスは、次回のログインに使用されるときに再作成されます。ログアウト後に同じインスタンスを使用して再度ログインする場合、この問題はより頻繁に発生するようですが、FBSDKLoginManagerのインスタンスが複数ある場合はさらに問題が発生するため、上記のように宣言すると問題が修正されたようです。

13
Swinny89

2018年10月。

理由:challengeReceived文字列の「+」記号が「」に置き換えられています。 FBSDKの問題。

迅速かつダーティな修正: https://github.com/facebook/facebook-objc-sdk/pull/922

具体的には、FBSDKLoginManagerの233行目を置き換えます。

NSString *challengeExpected = [self loadExpectedChallenge];

NSString *challengeExpected = [[self loadExpectedChallenge] stringByReplacingOccurrencesOfString:@"+" withString:@" "];
5
Renatus

facebook-objc-sdkで利用可能な修正 https://github.com/facebook/facebook-objc-sdk/releases/tag/sdk-version-4.38.1 以上。

1
Rao

4.9.0で問題が解決したようです。同じ問題が発生しましたが、新しいSDKバージョンで修正されています。
https://developers.facebook.com/docs/ios/change-log-4.x

1
code_ada

再度ログインする前に、ログアウトしていることを確認してください

let loginManager = LoginManager()
loginManager.logOut()
loginManager.logIn(readPermissions: [.email, .publicProfile,
0
Amr Mohamed

また、このエラーが発生したのは、私の場合でした:FacebookログインボタンがあるAuthentificationControllerがNavigation Controllerなしで表示されました。このエラーを解決するには、Navigation Controllerを追加し、AuthentificationControllerをルートとして設定しました。

0