iOS – La connection Facebook Connect ne supprime pas les informations de connection?

J'ai utilisé Facebook Connect sur un autre projet avec relativement peu de problèmes, mais sur mon projet actuel, il semble que lorsque j'appelle [facebook logout]; il ne supprime pas les détails des users. Si je redémarre l'application, j'ai la command suivante dans la fonction didFinishLaunchingWithOptions:

 facebook = [[Facebook alloc] initWithAppId:@"XXXXXXXXXXXXX" andDelegate:self]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]){ facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"]; facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"]; } NSLog(@"startup login"); [self loginToFacebook];//attempt to login automatically on startup 

Ma fonction loginToFacebook est la suivante:

 - (void)loginToFacebook { NSLog(@"Logging into facebook"); //set up facebook and login in automatically if possible NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]){ facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"]; facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"]; } if (![facebook isSessionValid]){ //get permissions that user will need to agree to us using NSArray *permissions = [[NSArray alloc] initWithObjects: @"user_likes",@"read_friendlists",@"offline_access", @"publish_stream", nil]; //authorise our login [facebook authorize:permissions]; [permissions release]; } else { [facebook authorize:nil]; } } 

En ce qui me concerne, cette fois je devrais être invité à me connecter avec mon email et mon mot de passe. J'utilise principalement le simulateur donc l'application Facebook n'est pas la cause, et dans la class Facebook.h j'ai changé

 [self authorizeWithFBAppAuth:NO safariAuth:YES]; 

à

 [self authorizeWithFBAppAuth:NO safariAuth:NO]; 

Cependant, ce qui se passe est que la window facebook clignote brièvement et disparaît, comme je m'y attendais quand je suis déjà connecté. Il charge ensuite mon identifiant, mon nom, ma list d'amis, etc de mes précédents détails de connection. Il n'est plus possible pour moi de changer d'user! Je devrais append que j'ai le code suivant qui imprime en conséquence sur 'logout':

 - (void)fbDidLogout{ NSLog(@"Logged out of facebook"); } 

… qui imprime sur la console quand [facebook se déconnecte] est appelé. J'ai aussi les bons schémas d'URL en place, donc il n'y a pas de problème là-bas.

Comme je l'ai dit, j'ai travaillé sur une autre application, mais je ne vois pas ce que j'aurais pu ignorer cette fois. Je salue toute suggestion, car je pense que c'est quelque chose de ridiculement simple.

Edit: je viens de le tester sur un appareil, et la tentative de connection à Facebook provoque le blocage de l'application. Je suppose que c'est parce qu'il essaie de se connecter en utilisant des informations 'stockées', qui n'existent pas parce que je ne me suis pas encore connecté sur l'appareil. Je suis toujours en train d'enquêter, mais encore une fois, si quelqu'un peut voir un défaut évident, je serais très reconnaissant.

Edit2: J'ai essayé de supprimer les cookies en utilisant l'exemple de safecase. J'imprime également tous les cookies pendant a) didFinishLaunchingWithOptions et b) pendant fbDidLogout, et je reçois ce qui suit:

a) «2012-05-18 10: 40: 40.665 MyApp [15545: 17003] (" ",

 "<NSHTTPCookie version:0 name:\"c_user\" value:\"634361620\" expiresDate:2012-06-17 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:TRUE>", "<NSHTTPCookie version:0 name:\"csm\" value:\"2\" expiresDate:2012-06-17 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:FALSE>", "<NSHTTPCookie version:0 name:\"datr\" value:\"gxe2T8ZyBzMGb5w3LS29Q0kJ\" expiresDate:2014-05-18 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:FALSE>", "<NSHTTPCookie version:0 name:\"locale\" value:\"en_US\" expiresDate:2012-05-25 09:36:43 +0000 created:2012-05-18 09:36:44 +0000 (3.59027e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:FALSE>", "<NSHTTPCookie version:0 name:\"lu\" value:\"RgayA7CMIlsAl-lOD2-Y-O3g\" expiresDate:2014-05-18 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:FALSE>", "<NSHTTPCookie version:0 name:\"m_user\" value:\"0%3A0%3A0%3A0%3Av_1%2Cajax_1%2Cwidth_320%2Cpxr_1%2Cgps_1%3A1337333673%3A2\" expiresDate:2012-08-16 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:FALSE>", "<NSHTTPCookie version:0 name:\"s\" value:\"Aa4WdKU-oOFathmK\" expiresDate:2012-06-17 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:TRUE>", "<NSHTTPCookie version:0 name:\"xs\" value:\"125%3AFFIWXjAXDXUMmw%3A2%3A1337333673\" expiresDate:2012-06-17 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:TRUE>" 

) `

b) 2012-05-18 10:41:16.530 MyApp[15545:17003] ( )

Comme il devient vide, je suppose qu'ils sont supprimés. Mais à la réouverture de l'application, ils sont tous là à nouveau.

Edit3: La seule façon de contourner ce problème est de supprimer tous les cookies dès que l'application s'ouvre, mais cela signifie que l'user doit se connecter à chaque fois, même s'il s'est laissé connecté la dernière fois qu'il a ouvert l'application. C'est une solution temporaire pour le moment, je ne sais toujours pas pourquoi cela ne fonctionne pas comme il se doit.

Vous fournissez cette méthode lorsque l'user clique sur la déconnection et supprime toutes les keys stockées dans userdefault pour facebook

 - (void)fbDidLogout { NSLog(@"Logged out of facebook"); NSHTTPCookie *cookie; NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; for (cookie in [storage cookies]) { NSSsortingng* domainName = [cookie domain]; NSRange domainRange = [domainName rangeOfSsortingng:@"facebook"]; if(domainRange.length > 0) { [storage deleteCookie:cookie]; } } } 

Remarque: ainsi que les informations de connection des magasins d'applications FB dans NSUserDefaults il stocke également les informations de connection dans NSHTTPCookieStorage utilisant le nom m_user . Vous pouvez simplement supprimer cet logging pour que FB vous request à nouveau des informations de connection.

J'espère que cette information vous aidera.

[appDelegate.session closeAndClearTokenInformation];

juste cette ligne de code, m'a aidé à effacer mes jetons.

  [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"FBAccessTokenKey"]; [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"FBExpirationDateKey"];