In meiner App versuche ich mich zu authentifizieren (Login), indem ich Facebook-Sitzungsinformationen (Token und Ablaufdatum) an meinen Server übergebe.Session.isOpened() == true, aber Session.getAccessToken() == ""
Meine Login-Sequenz an den App-Server ist wie folgt:
- aktive Facebook-Sitzung Holen.
- Wenn die Sitzung gültig ist, Token abrufen und an den Server senden.
Und in Code:
Session session = Session.getActiveSession();
if(session != null && session.isOpened() && !didLogin) {
didLogin = true;
String token = session.getAccessToken();
Date expires = session.getExpirationDate();
loginWithFacebookSession(token, expires);
}
Ich habe, dass plötzlich bemerkt, nach ein paar Monaten dieses nur gut arbeiten, werden die Informationen an den Server, eine der token
ist speziell gelegentlich nicht gültig gesendet werden leere Zeichenfolge und die expires
ist ein ungültiges Datum.
Nach ein wenig durch die Facebook-SDK gehen (Version 3.0.1), entdeckte ich, was wahrscheinlich der Grund meiner Fehler ist:
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);
}
Das bedeutet, dass irgendwo auf dem Weg, die Facebook-SDK ist die Schaffung ein leeres Token und es mit einer SessionState.Category.OPENED_CATEGORY
zurückgeben.
Warum gibt session.isOpened()
true
zurück, obwohl es in der Tat keine accessToken
Informationen gibt? Sollte ich eine andere Eigenschaft überprüfen? Ist das ein Fehler in Facebooks SDK?
EDIT:
berichtete dies Facebook unter: https://developers.facebook.com/bugs/121924628017965
Wie werden Sie die Sitzungen Öffnen/die aktive Sitzung einstellen? –
Ich benutze die 'UiLifecycleHelper'-Klasse wie dokumentiert [auf der Facebook-Entwickler-Website] (https://developers.facebook.com/docs/tutorials/androidsdk/3.0/scrumptious/authenticate/) – thepoosh
Vielleicht müssen Sie überprüfen, ob Die Sitzung befindet sich im Status OPENED_TOKEN_UPDATED, dh das Token wurde geändert, die Sitzung befindet sich jedoch noch in einem geöffneten Status. – 5agado