В моем приложении я пытаюсь пройти аутентификацию (логин), передавая информацию о сеансе Facebook (токен и срок действия) на мой сервер.Session.isOpened() == true, но Session.getAccessToken() == ""
Моя последовательность Войти на сервер приложений выглядит следующим образом:
- Получить активный сеанс facebook.
- Если сеанс действителен, получите токен и отправьте его на сервер.
И в коде:
Session session = Session.getActiveSession();
if(session != null && session.isOpened() && !didLogin) {
didLogin = true;
String token = session.getAccessToken();
Date expires = session.getExpirationDate();
loginWithFacebookSession(token, expires);
}
Я заметил, что вдруг, через несколько месяцев это работает просто отлично, информация отправляется на сервер иногда не действует, в частности, token
является пустая строка, а expires
- недопустимая дата.
Пройдя немного через SDK Facebook (версия 3.0.1), я заметил, что, вероятно, является основой моей ошибки:
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);
}
Это означает, что где-то по пути, то Facebook SDK создает пустой токен и возврат его с помощью SessionState.Category.OPENED_CATEGORY
.
Почему session.isOpened()
возвращение true
, когда на самом деле нет accessToken
информации? Должен ли я проверять другое свойство? Это ошибка в SDK для Facebook?
EDIT:
Сообщил это Facebook по адресу: https://developers.facebook.com/bugs/121924628017965
Как вы открытия сессии/установка активного сеанса? –
Я использую класс 'UiLifecycleHelper', как описано [на веб-сайте разработчиков Facebook] (https://developers.facebook.com/docs/tutorials/androidsdk/3.0/scrumptious/authenticate/) – thepoosh
Возможно, вам нужно проверить, сеанс находится в состоянии OPENED_TOKEN_UPDATED, то есть токен изменился, но сеанс все еще находится в открытом состоянии. – 5agado