iOS Facebook SDK Error Domaine com.facebook.sdk Code 2 et Code 7

Je développe l'application qui permet à l'user de se connecter via Facebook (en utilisant Facebook SDK pour cela). L'erreur apparaît lorsqu'un user s'est déjà connecté à Facebook dans les parameters iPhone. Si non, tous fonctionnent correctement.

NSArray *permissions = [[NSArray alloc] initWithObjects:@"email", nil]; [FBSession openActiveSessionWithReadPermissions:permissions allowLoginUI:YES completionHandler: ^(FBSession *session, FBSessionState state, NSError *error) { [self fbSessionStateChanged:session state:state error:error]; }]; 

J'ai déjà essayé de définir des permissions comme tableau nul – rien n'a changé.

Le journal est:

 Error Domain=com.facebook.sdk Code=2 "The operation couldn't be completed. (com.facebook.sdk error 2.)" UserInfo=0x1552c6c0 {com.facebook.sdk:ErrorLoginFailedReason=com.facebook.sdk:SystemLoginDisallowedWithoutError, com.facebook.sdk:ErrorSessionKey=<FBSession: 0xabe8100, state: FBSessionStateClosedLoginFailed, loginHandler: 0x0, appID: APPIDHERE, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy: 0x14b8f3d0>, expirationDate: (null), refreshDate: (null), attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:(null)>} 

Parfois, l'erreur avec le code 7 apparaît aussi. J'ai lu presque tous les sujets liés à cette erreur.

Mes pas étaient:

  1. Comparez mon identifiant d'application dans le file .plist avec l'ID du bundle FB. Ce sont les mêmes!!!
  2. Mon application n'est pas en mode bac à sable!
  3. Si je change de [FBSession openActiveSessionWithReadPermissions:permissions à [FBSession openActiveSessionWithPermissions:permissions – cela fonctionne. Mais il est obsolète.

Oui, après avoir vu cette erreur, si vous allez dans les parameters, vous verrez que le réglage de cette application est désactivée. Mais le problème dans ce cas est que l'user n'a jamais été invité à autoriser l'access – c'est-à-dire que le réglage a été désactivé automatiquement lors de la première connection. Si l'user a été demandé, alors bien sûr cela est compréhensible, mais ce n'est pas le cas (c'est comme si le SDK pressait silencieusement et automatiquement Ne pas autoriser pour l'user). C'est pourquoi c'est un problème.

Avant de lire plus loin, je tiens à noter qu'une fois le paramètre défini, vous ne pouvez pas simplement répéter le process pour le tester, car une fois le paramètre défini, il ne requestra jamais à l'user (même supprimer et réinstaller l'application n'aide pas ). Pour tester ce problème, vous devez réinitialiser les permissions en allant dans Paramètres -> Général -> Réinitialiser -> Réinitialiser l'location et la confidentialité, avant de pouvoir essayer de répliquer à nouveau.

De test, j'ai découvert que si vous avez offline_access dans les permissions que vous requestz pour la première fois, alors il donnera cette erreur de connection (et ne pas inviter l'user et mettre l'autorisation à OFF). Le SDK ne vérifie pas et vous indique que cette autorisation n'est pas autorisée. il ne parvient tout simplement pas à se connecter.

C'est comme ça que j'ai eu le mien à travailler – Passez-lui un tableau d'permissions vide.

 NSArray *permissionsArray = @[]; 

Cependant, assurez-vous que vous avez les permissions que vous souhaitez configurer dans ma page d'application facebook. J'avais seulement besoin de la valeur par défaut, donc ça allait.

J'ai le sentiment que Facebook a changé son code côté server. Mon application fonctionnait correctement, puis ma connection FB a été interrompue.

Je pense que ces codes sont assez vagues pour qu'il y ait beaucoup de choses différentes.

En fin de count, j'ai trouvé que le problème était que mon ID d'set d'applications n'avait pas été mis à jour lorsque j'avais préparé mon application pour l'App Store. Connectez-vous à votre count de développeur Facebook et assurez-vous que l'identifiant de l'application est correct.

Vérifiez que vous avez correctement collé dans le file XML Facebook dans votre Info.plist! (comme vu ici)

 <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <ssortingng>fb{your-app-id}</ssortingng> </array> </dict> </array> <key>FacebookAppID</key> <ssortingng>{your-app-id}</ssortingng> <key>FacebookDisplayName</key> <ssortingng>{your-app-name}</ssortingng> <key>LSApplicationQueriesSchemes</key> <array> <ssortingng>fbapi</ssortingng> <ssortingng>fb-messenger-api</ssortingng> <ssortingng>fbauth2</ssortingng> <ssortingng>fbshareextension</ssortingng> </array> 

J'ai oublié d'omettre les accolades, et à la place remplacé le text intérieur, ce qui donne l'erreur de ce post references. Assurez-vous de replace entièrement le "{votre-app-id}"!