2012-08-15 8 views

Respuesta

1

Tuve el mismo problema. Trate de añadir algo como esto:

if(!yourFBLoginView) 
{ 
    yourFBLoginView = [FBLoginView alloc] init...]; 
} 

y/o no se olvide cerrar su sesión activa cuando se rechaza su modalViewController.

if ([[FBSession activeSession] isOpen]) 
{ 
    [[FBSession activeSession] close]; 
} 
+0

no creo que sea prudente cerrar la sesión cuando descarte el modal ya que puede cerrar la sesión del usuario. Tiene que haber otra solución o tenemos que presentar esto bajo los errores – carbonr

5

Tengo el mismo problema y lo trato por un par de días ya. Y, finalmente, esta es mi solución:

if (!FBSession.activeSession.isOpen) { 
    theLoginView = [[FBLoginView alloc] init]; 
    theLoginView.frame = CGRectOffset(theLoginView.frame, 
             ([[UIScreen mainScreen] bounds].size.width-theLoginView.frame.size.width)/2, 
             ([[UIScreen mainScreen] bounds].size.height-theLoginView.frame.size.height)/2 -50); 
    theLoginView.delegate = self; 
    [self.view addSubview:theLoginView]; 
    [theLoginView sizeToFit]; 
} 
//Only close the session when application is terminating, this will save the token information: 
- (void)applicationWillTerminate:(UIApplication *)application { 
    [FBSession.activeSession close]; 
} 

//And keep the FBSession within the app until the user want to logout: 
[FBSession.activeSession closeAndClearTokenInformation]; 

En este momento para mí está funcionando completamente bien. Espero que esto ayude.

+0

¡esto también funciona perfectamente para mí! De hecho, funciona incluso si cierra sesión en 1 vista e inicia sesión en el otro, y viceversa. Aunque realmente no necesitaba cerrar y borrar la información del token en ningún lado. – Paulo

3

Al FB SDK no parece gustarle la creación de más de un FBLoginView. Tal vez puedas si finalizas la sesión correctamente, pero me resultó más fácil simplemente crear el LoginView una vez y mantenerlo.

Hice esto de la siguiente manera:

1) en mi .m modal archivo de controlador de vista, he creado una variable estática

static FBLoginView* loginView; 

2) Al cargar el controlador de vista modal en mi viewDidLoad, en lugar de

FBLoginView *loginview = [[FBLoginView alloc] initWithPermissions: 
          [NSArray arrayWithObject:@"status_update"]]; 
loginview.frame = CGRectOffset(loginview.frame, 10, 10); 

he añadido un cheque para encontrar si su ya inicializado, como esto:

if (!loginView) { 
    loginView = [[FBLoginView alloc] initWithPermissions: 
           [NSArray arrayWithObject:@"status_update"]]; 
    loginView.frame = CGRectOffset(loginView.frame, 10, 10); 

} 

Más allá de eso, acabo de seguir el ejemplo del proyecto HelloFacebook de FB.

Código no es bonito, pero parece que funciona.

0

Creo que la respuesta para mí (una variante de lo que se dijo) fue sólo que tenía que tener:

[FBSession.activeSession closeAndClearTokenInformation];

en el:

(void)applicationWillTerminate:(UIApplication *)application

función. El problema específico para mí fue que, mientras estaba probando ... constantemente estaba terminando la aplicación sin desconectar al usuario sin destruir el FBSession, por lo que cuando volví a la aplicación para probar lo que había cambiado, mi Facebook el usuario aún estaba conectado, y por lo tanto algunos de los condicionales se estaban cumpliendo incorrectamente. Creo que esto es muy importante para cualquier persona que esté probando (y realmente estoy pensando que debería tener esa línea allí de todos modos) para asegurarse de borrar la sesión cada vez que finalice la aplicación para evitar este problema ... Puedo imaginar un escenario donde mi aplicación simplemente se coló en alguien y ahora están volviendo a abrirla y experimentan el bloqueo porque la sesión nunca se borró.

Cuestiones relacionadas