openSessionWithAllowLoginUI renvoie presque toujours NO

J'ai récemment terminé l'intégration de la dernière FB iOS SDK (3.0) dans mon application (iOS 5). J'ai parcouru les didacticiels, et tout semble être en place selon les documents fournis par le FB. Le problème que j'ai est que chaque fois que je vérifie pour voir si j'ai besoin d'authentifier via:

if (! [self openSessionWithAllowLoginUI: NON]) {[self openSessionWithAllowLoginUI: YES]; }

… souvent (et presque toujours après [FBSession.activeSession close]) openSessionWithAllowLoginUI renvoie NO, et je dois passer à la boîte de dialog d'authentification pour get une session valide. Selon ma compréhension, [FBSession.activeSession close] ne devrait pas perturber la capacité du SDK à réutiliser les anciens jetons et me permettre de recréer une session sans avoir à afficher la boîte de dialog de connection.

Notez que dans mon application, je n'ai pas besoin d'authentification Facebook pour la durée de vie de l'application. Par conséquent, j'ai tendance à établir des sessions à la request, et à les supprimer avec [FBSession.activeSession close] exactement quand j'ai terminé, par opposition à avoir seulement [FBSession.activeSession close] dans applicationWillTerminate.

Est-ce que quelqu'un a des suggestions sur ce que je pourrais faire de mal ou d'essayer?

Merci.

J'ai le même problème et je ne peux pas comprendre … Le sélecteur openSessionWithAllowLoginUI: n'est pas capable de récupérer la session enregistrée pour l'user et toujours je dois montrer l'interface user de connection à l'user.

J'espère le résoudre dès que possible!

METTRE À JOUR ————-

Quelque chose que j'ai compris: lorsqu'un user se connecte à Facebook, le FB SDK fait 2 appels à sessionStateChanged:

Le premier est pour un FBSessionStateOpen et le second pour FBSessionStateClosed. Donc, si vous vérifiez votre file AppDelegate.m, vous findez un code comme celui-ci:

case FBSessionStateClosed: case FBSessionStateClosedLoginFailed: [FBSession.activeSession closeAndClearTokenInformation]; break; 

L'appel à closeAndClearTokenInformation: efface toutes les informations de jeton de sorte que chaque fois que l'application est exécutée, l'interface user de connection est demandée à l'user.

Maintenant, la question est: POURQUOI Facebook d'abord envoyer FBSessionStateOpen et immédiatement FBSessionStateClosed ??

Je ne pourrais jamais ouvrir openSessionWithAllowLoginUI pour fonctionner correctement. Au lieu de cela, utilisez ceci:

 [FBSession openActiveSessionWithPermissions:[NSArray arrayWithObject:@"user_relationships"] allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) { switch (status) { case FBSessionStateOpen: [self start]; break; case FBSessionStateClosed: break; case FBSessionStateCreated: break; case FBSessionStateCreatedOpening: break; case FBSessionStateClosedLoginFailed: break; case FBSessionStateOpenTokenExtended: break; case FBSessionStateCreatedTokenLoaded: break; } }]; 

Ajoutez une méthode [self start] et modifiez le tableau des permissions en fonction de vos besoins. Cela fonctionne de manière cohérente.