2012-02-02 49 views
6

Tenemos un problema en el inicio de sesión de Facebook de iOS. Cuando inicio sesión en Facebook utilizando mi aplicación, solicitará el permiso del usuario con el botón "iniciar sesión" y "cancelar". Pero esta pantalla aparece solo la primera vez. es decir, una vez que iniciamos sesión con safari o la aplicación e incluso si cerramos sesión desde Facebook, la aplicación en la que se solicita el permiso del usuario muestra solo un botón "Aceptar". No permite iniciar sesión como un usuario diferente. ¿Por qué la pantalla con el botón "iniciar sesión" y "cancelar" no se muestra cada vez que se inicia la aplicación? Intenté eliminar las cookies y eliminar NSUserDefaults, pero no tuve suerte.Problema de cierre de sesión con facebook iOS sdk

El problema es después del cierre de sesión, no puedo iniciar sesión en el facebook como otro usuario. Todavía se muestra como el mismo usuario.

Estoy llamando a la función de cierre de sesión a continuación en el SDK

(void)logout:(id<FBSessionDelegate>)delegate { 

    self.sessionDelegate = delegate; 
[_accessToken release]; 
_accessToken = nil; 
[_expirationDate release]; 
_expirationDate = nil; 

NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
NSArray* facebookCookies = [cookies cookiesForURL: 
[NSURL URLWithString:@"http://login.facebook.com"]]; 
for (NSHTTPCookie* cookie in facebookCookies) { 
    [cookies deleteCookie:cookie]; 
} 

if ([self.sessionDelegate respondsToSelector:@selector(fbDidLogout)]) { 
    [_sessionDelegate fbDidLogout]; 
} 
} 

También en función de delegado fbDidLogout He quitado todos los NSUserDefaults objetos

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
if ([defaults objectForKey:@"FBAccessTokenKey"]) { 
    [defaults removeObjectForKey:@"FBAccessTokenKey"]; 
    [defaults removeObjectForKey:@"FBExpirationDateKey"]; 
    [defaults synchronize]; 
} 

regrds Shihab

+0

¿podría escribir cómo implementar su método de cierre de sesión y qué delegados usa? Tal vez puedo ayudarte, he estado luchando con Facebook también. –

+0

¿dónde está tu captura de pantalla? –

+0

Lo siento, no puedo adjuntar la captura de pantalla. El problema que estoy enfrentando es incluso después de desconectarme de mi aplicación, no puedo iniciar sesión como otro usuario. Espero que, después de cerrar la sesión, cuando intento volver a iniciar sesión en el sistema, haya un enlace para cerrar la sesión desde la ventana de contraseña de nombre de usuario de Facebook. He visto lo mismo en algunas aplicaciones de Facebook iOS. – user867662

Respuesta

4

FBSession openWithBehavior: completionHandler: se puede utilizar ..

FBSession *fbSession = [[FBSession alloc] initWithPermissions:[NSArray arrayWithObjects:@"email",@"publish_actions",@"publish_stream", nil]]; 
[fbSession openWithBehavior:FBSessionLoginBehaviorForcingWebView completionHandler:^(FBSession *session,FBSessionState state, NSError *error){ 
    [FBSession setActiveSession:fbSession]; // Retain the Active Session.   
}]; 

Para cerrar la sesión, por Ans Ellen S .. funcionó bien para iOS.

+0

Hola tengo un problema, tengo el mismo problema, mi cierre de sesión se hace con éxito al no poder obtener la pantalla de inicio de sesión para el nuevo usuario –

5

he modificado fbDidLogout método y funcionó, aquí está el código:

-(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]; 
     } 
    } 
}//End of Method 

El método cierra la sesión exitosamente al usuario. Espero que esto ayude!

2

Me acabo de enterar de esto, llegué a la configuración de mi iPhone y llegué a la privacidad, escogí la pestaña de Facebook y la apagué donde dice Las aplicaciones que han solicitado acceso a su cuenta de Facebook aparecerán aquí. ¡¡¡Funciona!!!

7

Puede borrar la sesión, así como la limpieza de las galletas con el siguiente código:

FBSession* session = [FBSession activeSession]; 
[session closeAndClearTokenInformation]; 
[session close]; 
[FBSession setActiveSession:nil]; 

NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
NSArray* facebookCookies = [cookies cookiesForURL:[NSURL URLWithString:@"https://facebook.com/"]]; 

for (NSHTTPCookie* cookie in facebookCookies) { 
    [cookies deleteCookie:cookie]; 
} 
+0

Si está en iOS, no necesita cerrar la sesión y configurar el sesión activa a nil cuando ya cierreAndClearTokenInformation. Tendrá que hacer clic dos veces para iniciar sesión en caso de que lo haga. –

+0

De acuerdo con @AtifImran. Solo 'closeAndClearTokenInformation' hace el trabajo. – Alex

0

Cuando inicie sesión para establecer el comportamiento de inicio de sesión, de modo que cuando salga, con el otro inicio de sesión, no aparecerá solo autorizado, sin la pantalla de inicio de sesión login.loginBehavior = FBSDKLoginBehaviorWeb; Yo uso Facebook 4.11, es el trabajo

Cuestiones relacionadas