10

Sono un po 'confuso su come funziona facebook.logout (context).Come funziona il logout in Facebook SDK Android

Perché anche dopo aver chiamato il logout, sono in grado di ottenere l'accesso alle informazioni che richiedono un auth_token. Quindi, com'è possibile? Mi sono imbattuto in questo argomento, il che mi ha un po 'confuso: https://stackoverflow.com/a/6597688/487940

Dopo aver letto quella risposta, questa è la mia domanda: quindi se l'utente concede l'accesso alla [mia] applicazione, sarà sempre autenticato se si è loggato l'applicazione facebook [ufficiale]? Anche se provo a chiamare facebook.logout (contesto) nella [mia] applicazione, egli effettuerà l'accesso e la mia applicazione sarà in grado di effettuare chiamate all'API di Facebook? "

Mi dispiace, non sono in grado di capire questo comportamento.

UPDATE: Dopo aver letto la risposta di Torid, sono confuso sulla funzione facebook.logout(). Qual è lo scopo di questa funzione se non registra l'utente? Perché, non vedo più lo scopo di chiamare questo scopo. Non disconnette l'utente.

risposta

8

Ci sono due cose indipendenti succedendo qui: 1) se l'utente è autenticato la vostra applicazione (con le autorizzazioni) per Facebook e 2) se l'utente è collegato a Facebook.

autenticazione è necessaria la prima volta che il vostro utente usa la tua applicazione e dura fino a quando l'utente esplicitamente DE-autentica (ad esempio attraverso le Impostazioni web account di Facebook -> Applicazioni -> Impostazioni App).

Il login può essere richiesto ogni volta che l'utente avvia l'app. Tuttavia, se si utilizza l'autorizzazione SDK predefinita(), che tenta di eseguire un Single Sign-On (SSO), dove l'app Facebook è connessa, l'app viene automaticamente registrata e utilizza il token di accesso esistente.

Se si utilizza SSO, quando si esegue un logout, ciò non ha alcun effetto, in quanto un logout reale dovrebbe disconnettere l'app di Facebook, che l'utente potrebbe non gradire!

è possibile aggirare questo comportamento facendo un'autorizzare della forma

authorize(this, PERMISSIONS, FORCE_DIALOG_AUTH, new LoginDialogListener()); 

che evita SSO e forza una finestra di accesso. Ovviamente, questo costringe il tuo utente a effettuare il login ogni volta che avvii la tua app, a meno che tu non salvi i dettagli di accesso/token di accesso sotto le copertine (che è ciò che fa l'SDK - controlla la fonte).

+0

Quindi, è facebook.isSessionValid() il modo corretto per verificare se l'utente è in realtà connesso? Perché facebook.isSessionValid() restituirà vero, anche quando l'utente è stato connesso. – harsimranb

+2

Non credo che l'SDK fornisce un modo per dire che cosa lo stato di accesso utente è quando si utilizza SSO. logout() cancella semplicemente i cookie della tua app/webview e cancella l'accesso. E isSessionValid() controlla solo se AccessToken è valido. Quindi, dopo che l'app esegue un logout() isSessionValid restituirà false. Ma teh Faceboko applicazione è ancora registrato. Quindi, se poi fai un account di accesso con SSO (il default), che controllerà con l'applicazione Facebook, che è ancora un access token valida, che verrà restituita alla vostra applicazione senza passare attraverso un utente accesso. – Torid

+1

facebook.isSessionValid restituisce true, anche dopo aver chiamato il logout() ... – harsimranb