2012-09-13 32 views
6

Estoy usando iOS facebook SDK 3.0. ¿Cómo puedo verificar si el usuario ya inició sesión?Verificar si está conectado en ios facebook sdk 3.0

He intentado la línea a continuación, pero no funciona correctamente. Es veces devuelve NO aunque estoy conectado. ¿Alguna sugerencia?

if (FBSession.activeSession.isOpen == YES) 
{ 
    // post to wall else login 
} 

- EDITAR -

esta es la forma en que abro la sesión de Facebook:

NSArray *permissions = [[NSArray alloc] initWithObjects: 
         @"user_likes", 
         @"read_stream", 
         @"publish_actions", 
         nil]; 
return [FBSession openActiveSessionWithPermissions:permissions 
             allowLoginUI:allowLoginUI 
           completionHandler:^(FBSession *session, 
                FBSessionState state, 
                NSError *error) { 
            [self sessionStateChanged:session 
                 state:state 
                 error:error]; 
           }]; 

La primera vez que necesita inicio de sesión y por lo que funciona. Si intento esto mientras estoy conectado, FBSession.activeSession.isOpen devuelve NO.

Respuesta

13

Puede comprobar si tiene un token válido al tratar de abrir una nueva sesión sin permitir que la interfaz de usuario entrada

if (FBSession.activeSession.isOpen) 
{ 
    // post to wall 
} else { 
    // try to open session with existing valid token 
    NSArray *permissions = [[NSArray alloc] initWithObjects: 
          @"user_likes", 
          @"read_stream", 
          @"publish_actions", 
          nil]; 
    FBSession *session = [[FBSession alloc] initWithPermissions:permissions]; 
    [FBSession setActiveSession:session]; 
    if([FBSession openActiveSessionWithAllowLoginUI:NO]) { 
     // post to wall 
    } else { 
     // you need to log the user 
    } 
} 
+0

Sólo me envía para autenticar cada vez. ¿Cómo fuerza al SDK a retener el token de autenticación? Los permisos coinciden con la aplicación, pero FBSessionStateCreatedTokenLoaded es el estado. –

+0

Esta respuesta no funciona y tiene problemas con la cuenta del sistema en comparación con los tokens obtenidos a través de la aplicación de Facebook o UIWebView – jjxtra

+0

@PsychoDad La pregunta es para Facebook sdk 3.0 – Moxy

1

¿Cómo abre su FBSession?

Si está creando una instancia, asegúrese de establecer FBSession.activeSession. Ese fue mi problema por un tiempo.

+0

he editado mi pregunta –

9

lo hice como en el ejemplo Facebook

if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded) 
{ 

} 
+1

No estoy tan seguro de esto. session.state parece ser ahora una máscara de bit. también puede tener el estado FBSessionStateOpenTokenExtended. hay un comentario sobre un bit de apertura de estado de sesión: estado de sesión abierta que indica que el usuario ha iniciado sesión o está disponible un token en caché. Creo que una == comparación no funcionaría en todos los casos. – John

2

La sesión está activo si el estado está en FBSessionStateOpen o en FBSessionStateOpenTokenExtended. Puede utilizar la función siguiente para comprobar si el usuario se registra en:

- (BOOL)isSessionOpen 
{ 
    return FBSession.activeSession.state == FBSessionStateOpen || FBSession.activeSession.state == FBSessionStateOpenTokenExtended; 
} 
13

Si está utilizando FBSDK mayor que 4.x entonces no existe el concepto de FBSession. Debe encontrar la sesión activa solo usando [FBSDKAccessToken currentAccessToken] simplemente verifique si tiene el valor nil, no hay sesión activa de lo contrario.

En su lugar, usted debe comprobar [FBSDKAccessToken currentAccessToken] en viewDidLoad o similar. Si hay un current token disponible, realice el trabajo de inicio de sesión . También puede usar currentAccessToken para recuperar tokens en caché .

puede encontrar más información aquí https://developers.facebook.com/docs/ios/upgrading-4.x

FBSession.activeSession se ha sustituido por [FBSDKAccessToken currentAccessToken] y FBSDKLoginManager. No hay concepto de session state. En su lugar, use el administrador para iniciar sesión y esto establece la referencia currentAccessToken.

0
if ([FBSDKAccessToken currentAccessToken]) 
{ 
    NSLog(@"Already login"); 
    //[FBSession openActiveSessionWithAllowLoginUI: YES]; 
} 
+0

En general, las respuestas serán mejor recibidas si explican por qué/cómo funcionan en lugar de simplemente arrojar algún código. –

Cuestiones relacionadas