W mojej aplikacji próbuję uwierzytelnić (login) przekazując Facebook informacje sesji (żeton i data ważności) do mojego serwera.Session.isOpened() == true ale Session.getAccessToken() == „”
Moja sekwencji logowania do serwera aplikacji jest następująca:
- Uzyskaj aktywną sesję Facebooku.
- Jeśli sesja jest ważna, pobierz token i wyślij go na serwer.
I w kodzie:
Session session = Session.getActiveSession();
if(session != null && session.isOpened() && !didLogin) {
didLogin = true;
String token = session.getAccessToken();
Date expires = session.getExpirationDate();
loginWithFacebookSession(token, expires);
}
Zauważyłem, że nagle, po kilku miesiącach ta działa dobrze, informacje są wysyłane do serwera jest czasami nie ważne, a konkretnie token
jest pusty ciąg znaków i expires
jest nieprawidłową datą.
Po przejściu trochę przez SDK Facebooku (wersja 3.0.1), dostrzegłem to, co jest prawdopodobnie podstawą mojego błędu:
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);
}
Oznacza to, że gdzieś wzdłuż sposób Facebook SDK jest tworzenie pusty token i zwrócenie go z numerem SessionState.Category.OPENED_CATEGORY
.
Dlaczego session.isOpened()
powrocie true
podczas gdy w rzeczywistości nie ma accessToken
informacji? Czy powinienem sprawdzać inną nieruchomość? Czy to błąd w SDK Facebooka?
EDIT:
zgłosiliśmy to na Facebooku: https://developers.facebook.com/bugs/121924628017965
Jak się otwarcie sesji/ustawianie aktywnej sesji? –
Używam klasy 'UiLifecycleHelper' zgodnie z dokumentacją [w witrynie dewelopera Facebooka] (https://developers.facebook.com/docs/tutorials/androidsdk/3.0/scrumptious/authenticate/) – thepoosh
Może musisz sprawdzić, czy sesja jest w stanie OPENED_TOKEN_UPDATED, to znaczy, że token się zmienił, ale sesja jest nadal w stanie otwartym. – 5agado