2012-09-13 14 views
6

Sto usando iOS facebook SDK 3.0. Come posso verificare se l'utente ha già effettuato l'accesso?Verifica se sei loggato su ios facebook sdk 3.0

Ho provato la linea in basso ma non funziona correttamente. E 'a volte restituisce NO anche se sono loggato. Qualche suggerimento?

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

- EDIT -

Ecco come ho aperto la mia sessione di 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 prima volta che ha bisogno di login e così funziona. Se provo questo mentre sono già registrato in FBSession.activeSession.isOpen restituisce NO.

risposta

13

Si può verificare se si dispone di un gettone valido tentativo di aprire una nuova sessione senza che l'interfaccia utente login

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

Just me invia per autenticare ogni singola volta. Come si forza lo sdk a conservare il token di autenticazione? Le autorizzazioni corrispondono all'app ma FBSessionStateCreatedTokenLoaded è lo stato. –

+0

Questa risposta non funziona e presenta problemi con l'account di sistema rispetto a token ottenuti tramite l'app Facebook o UIWebView – jjxtra

+0

@PsychoDad La domanda è per Facebook sdk 3.0 – Moxy

1

Come stai aprendo la tua FBSession?

Se si sta creando un'istanza, assicurarsi di impostare FBSession.activeSession. Questo è stato il mio problema per un po '.

+0

ho modificato la mia domanda –

9

ho fatto come nell'esempio Facebook

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

} 
+1

Non ne sono così sicuro. session.state sembra ora un po 'maschera. puoi anche avere lo stato FBSessionStateOpenTokenExtended. c'è un commento su un bit di apertura dello stato di sessione: lo stato di sessione aperta che indica che l'utente ha effettuato l'accesso o un token memorizzato nella cache è disponibile. Penso che un confronto == non funzionerebbe in tutti i casi. – John

2

La sessione è attivo se lo stato è in FBSessionStateOpen o in FBSessionStateOpenTokenExtended. È possibile utilizzare la funzione di seguito per verificare se l'utente è connesso:

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

Se si utilizza FBSDK maggiore di 4.x allora non esiste il concetto di FBSession. Devi trovare la sessione attiva solo usando [FBSDKAccessToken currentAccessToken], semplicemente controlla se ha il valore nil, nessuna sessione attiva lo è.

Invece, si dovrebbe verificare [FBSDKAccessToken currentAccessToken] a viewDidLoad o simili. Se è disponibile un current token, eseguire il post-login . È inoltre possibile utilizzare currentAccessToken per recuperare i token memorizzati nella cache .

è possibile trovare maggiori qui https://developers.facebook.com/docs/ios/upgrading-4.x

FBSession.activeSession è stato sostituito con [FBSDKAccessToken currentAccessToken] e FBSDKLoginManager. Non esiste il concetto di session state. Invece, utilizzare il gestore per accedere e questo imposta il riferimento currentAccessToken.

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

Generalmente parlando le risposte saranno meglio accolte se spiegheranno perché/come funzionano invece di buttare fuori del codice. –

Problemi correlati