objective-c - porque - eliminar usuario de inicio de sesion facebook ipad
iOS: cierre de sesión de Facebook Connect ¿no elimina los detalles de inicio de sesión? (4)
Nota: así como la aplicación FB almacena información de inicio de sesión en NSUserDefaults
, también almacena la información de inicio de sesión en NSHTTPCookieStorage
usando el nombre m_user
. Solo puede eliminar este registro para provocar que FB le solicite información de inicio de sesión nuevamente.
Espero que esta información te ayude.
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 función 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 función loginToFacebook es esta:
- (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 pedirá que inicie sesión con mi correo electrónico y contraseña. Principalmente uso el simulador, por lo que la aplicación de Facebook no es la causa, y en la clase de Facebook.h he cambiado
[self authorizeWithFBAppAuth:NO safariAuth:YES];
a
[self authorizeWithFBAppAuth:NO safariAuth:NO];
Sin embargo, lo que sucede es que la ventana de Facebook parpadea brevemente y desaparece, como era de esperar cuando ya estoy conectado. A continuación, carga mi identificación, nombre, lista de amigos, etc. de mis datos de inicio de sesión anteriores. ¡Ya no me es posible cambiar usuarios! Debo añadir que tengo el siguiente código que se imprime en consecuencia en ''cerrar sesión'':
- (void)fbDidLogout{
NSLog(@"Logged out of facebook");
}
... que se imprime en la consola cuando se llama a [facebook logout]. También tengo los esquemas de URL correctos para que no haya 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. Agradezco cualquier sugerencia, ya que sospecho que es algo ridículamente simple.
Editar: Acabo de probarlo en un dispositivo, y el intento de iniciar sesión en Facebook hace que la aplicación se cuelgue. Sospecho que es porque está intentando iniciar sesión usando información ''almacenada'', que no existe porque aún no he iniciado sesión en el dispositivo. Todavía estoy investigando, pero de nuevo, si alguno puede ver un defecto obvio, estaría muy agradecido.
Edit2: He intentado 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] ( )
Como cambia a vacío, supongo que se eliminarán. Pero al volver a abrir la aplicación, están todos allí de nuevo.
Editar3: La única forma de solucionar esto es eliminar todas las cookies tan pronto como se abra la aplicación, sin embargo, esto significa que el usuario debe iniciar sesión en todo momento, incluso si se han desconectado 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 está funcionando como debería ser.
Proporciona este método cuando el usuario hace clic en cerrar sesión y elimina todas las claves almacenadas en userdefault para Facebook
- (void)fbDidLogout
{
NSLog(@"Logged out of facebook");
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies])
{
NSString* domainName = [cookie domain];
NSRange domainRange = [domainName rangeOfString:@"facebook"];
if(domainRange.length > 0)
{
[storage deleteCookie:cookie];
}
}
}
[appDelegate.session closeAndClearTokenInformation];
solo esa línea de código, me ayudó a borrar mis tokens.
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"FBAccessTokenKey"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"FBExpirationDateKey"];