web-dev-qa-db-fra.com

Pourquoi ai-je l'erreur com 308 de com.facebook.sdk.login?

J'utilise Xcode 7.0, je teste sur iOS 9.0.2 et j'utilise Facebook SDK 4.7.0.

Lorsque je me connecte à un utilisateur, la plupart du temps, tout fonctionne comme il se doit, mais parfois, je reçois toujours cette erreur et je ne sais pas pourquoi! 

L'opération n'a pas pu être terminée. (erreur 308. com.facebook.sdk.login)

Après des recherches, j'ai constaté que certaines personnes rencontraient l'erreur en se connectant avec FBUtils et FBSDK officiels de parse.com en même temps, mais je n'utilise que FBSDK dans mon projet. 

Ma question est donc la suivante: pourquoi cette erreur me concerne-t-elle et comment m'en débarrasser?

Modifier - Ajouter du code

Voici ma logique de connexion:

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

        }

    }
}
25
Swinny89

Pour Xcode8 - iOS10,

Activer Le partage du trousseau dans l'onglet Capacités de la cible a corrigé mon problème.

 enter image description here

Plus de détails peuvent être trouvés ici: https://github.com/facebook/facebook-sdk-Swift/issues/51


Pour Xamarin Studio (suggéré par @Kenneth),

Ajoutez le fichier Entitlements.plist à Custom Entitlements sous les options iOS Bundle Signing du projet iOS.

99
Zaid Pathan

J'ai trouvé la solution à ce problème. Je créais une instance du gestionnaire de connexion où j'en avais besoin:

let loginManager = FBSDKLoginManager()

Ensuite, je l'utilisais pour me connecter et je créais une autre instance dans ma méthode de déconnexion. J'ai résolu le problème en créant une variable paresseuse à utiliser dans toute l'application:

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

METTRE À JOUR

Facebook est conscient du bogue et s’y penche. J'ai constaté que ma solution ne fonctionnait pas toujours et j'ai mis à jour mon code comme suit et je ne l'ai pas vu depuis:

private var _fbLoginManager: FBSDKLoginManager?

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

Lorsque vous vous déconnectez de Facebook, vous devez appeler _fbLoginManager = nil et l'instance sera recréée lors de la prochaine connexion. Le problème semble se produire plus souvent lorsque vous utilisez la même instance pour vous reconnecter après la déconnexion mais le problème se produit encore plus lorsqu'il existe plusieurs instances de FBSDKLoginManager.

11
Swinny89

Octobre 2018. 

Raison: le signe "+" est remplacé par "" dans la chaîne challengeReceived. Problème dans FBSDK. 

Solution rapide et incorrecte: https://github.com/facebook/facebook-objc-sdk/pull/922

Plus précisément, remplacez la ligne 233 dans FBSDKLoginManager:

NSString *challengeExpected = [self loadExpectedChallenge];

avec 

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

Correctif disponible dans facebook-objc-sdkhttps://github.com/facebook/facebook-objc-sdk/releases/tag/sdk-version-4.38.1 et ci-dessus.

1
Rao

On dirait que le problème est résolu avec 4.9.0. J'ai eu le même problème et il est corrigé avec la nouvelle version du SDK .
https://developers.facebook.com/docs/ios/change-log-4.x

1
code_ada

Assurez-vous d'être déconnecté avant d'essayer de vous reconnecter

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

J'ai également eu cette erreur la raison était dans mon cas: AuthentificationController sur lequel était le bouton de connexion Facebook a été présenté sans contrôleur de navigation . Pour résoudre cette erreur, je viens d'ajouter contrôleur de navigation et assis mon AuthenticationController en tant que root.

0
Kalyan Trandafil