iOS: el cierre de session de Facebook Connect no elimina los datos de inicio de session.

He usado Facebook Connect en otro proyecto con relativamente pocos problemas, sin embargo, en mi proyecto actual parece que cuando llamo [facebook logout]; No elimina los detalles de los usuarios. Si luego reinicio la aplicación, tengo lo siguiente en la function 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 

Mi function de loginToFacebook es la siguiente:

 - (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 lo que a mí respecta, esta vez se me debería pedir que inicie session con mi correo electrónico y mi contraseña. Estoy usando principalmente el simulador, por lo que la aplicación de Facebook en sí no es la causa, y en la class Facebook.h he cambiado

 [self authorizeWithFBAppAuth:NO safariAuth:YES]; 

a

 [self authorizeWithFBAppAuth:NO safariAuth:NO]; 

Sin embargo, lo que sucede es que la window de Facebook brevemente parpadea y desaparece, como lo esperaría cuando ya haya iniciado session. Luego carga mi ID, nombre, list de amigos, etc. de mis datos de inicio de session anteriores. ¡Ya no es posible para mí cambiar a los usuarios! Debo agregar que tengo el siguiente código que se imprime en consecuencia en 'cerrar session':

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

… que se imprime en la console cuando se llama [desconnection de Facebook]. También tengo los esquemas correctos de URL en su lugar, así que no hay ningún problema allí.

Como digo, tengo esto trabajando en otra aplicación, pero no puedo ver lo que podría haber pasado por alto esta vez. Doy la bienvenida a cualquier sugerencia, ya que sospecho que es algo ridículamente simple.

Editar: Acabo de probarlo en un dispositivo y el bash de iniciar session en Facebook hace que la aplicación se bloquee. Sospecho que es porque está intentando iniciar session con la información 'almacenada', que no existe porque todavía no he iniciado session en el dispositivo. Todavía estoy investigando, pero nuevamente, si alguno puede ver un defecto obvio, estaría muy agradecido.

Edit2: He tratado de eliminar las cookies usando el ejemplo de safecase. También imprimo todas las cookies durante a) didFinishLaunchingWithOptions yb) durante fbDidLogout, y obtengo lo siguiente:

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] ( )

Dado que cambia a vacío, supongo que se eliminan. Pero al volver a abrir la aplicación, todos están allí nuevamente.

Edit3: La única forma de evitar esto es eliminar todas las cookies tan pronto como se abra la aplicación, sin embargo, esto significa que el usuario tiene que iniciar session cada vez, incluso si se han registrado la última vez que tuvieron la aplicación abierta. Es una solución temporal por el momento, todavía no estoy seguro de por qué no funciona como debería ser.

Proporciona este método cuando el usuario hace clic en cerrar session y elimina todas las keys almacenadas en userdefault para Facebook

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

Nota: al igual que la aplicación FB almacena información de inicio de session en NSUserDefaults , también almacena información de inicio de session en NSHTTPCookieStorage usando el nombre m_user . Puede eliminar este logging para hacer que FB le solicite nuevamente la información de inicio de session.

Espero que esta información te ayude.

[appDelegate.session closeAndClearTokenInformation];

solo esa línea de código, me ayudó a borrar mis tokens.

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