Nella mia app, sto tentando di autenticare (accesso) passando le informazioni sulla sessione di Facebook (token e data di scadenza) sul mio server.Session.isOpened() == true ma Session.getAccessToken() == ""
mia sequenza di login al server app è come segue:
- Diventa sessione facebook attiva.
- Se la sessione è valida, ottenere il token e inviarlo al server.
E in codice:
Session session = Session.getActiveSession();
if(session != null && session.isOpened() && !didLogin) {
didLogin = true;
String token = session.getAccessToken();
Date expires = session.getExpirationDate();
loginWithFacebookSession(token, expires);
}
ho notato che improvvisamente, dopo alcuni mesi di questo lavoro bene, le informazioni che vengono inviate al server è di tanto in tanto non è valida, in particolare il token
è un stringa vuota e expires
è una data non valida.
Dopo aver un po 'attraverso l'SDK di Facebook (versione 3.0.1), ho notato quello che probabilmente è alla base del mio errore:
private static final Date MIN_DATE = new Date(Long.MIN_VALUE);
private static final Date ALREADY_EXPIRED_EXPIRATION_TIME = MIN_DATE;
private static final Date DEFAULT_LAST_REFRESH_TIME = new Date();
static AccessToken createEmptyToken(List<String> permissions) {
return new AccessToken("", ALREADY_EXPIRED_EXPIRATION_TIME, permissions, AccessTokenSource.NONE,
DEFAULT_LAST_REFRESH_TIME);
}
Ciò significa che da qualche parte lungo la strada, il Facebook SDK è la creazione di un token vuoto e restituendolo con un SessionState.Category.OPENED_CATEGORY
.
Perché session.isOpened()
restituisce true
quando in effetti non è disponibile l'informazione accessToken
? Dovrei controllare una proprietà diversa? Si tratta di un bug nell'SDK di Facebook?
EDIT:
riferito l'accaduto a Facebook a: https://developers.facebook.com/bugs/121924628017965
Come stai aprendo le sessioni/impostare la sessione attiva? –
Sto usando la classe 'UiLifecycleHelper' come documentata [nel sito web degli sviluppatori di Facebook] (https://developers.facebook.com/docs/tutorials/androidsdk/3.0/scrumptious/authenticate/) – thepoosh
Forse dovresti controllare se la sessione è nello stato OPENED_TOKEN_UPDATED, ovvero il token è stato modificato, ma la sessione è ancora in uno stato aperto. – 5agado