2013-05-31 7 views
2

Я пытаюсь получить список друзей пользователей в своем приложении для Android. Для этого я использую: facebook-android-sdk-3.0.1.Android Facebook SDK Недействительный токен доступа после авторизации

SDK поставляется со своим собственным loging/logout button, поэтому я использовал его. Когда я нажимаю login, он обрабатывает событие (экран входа в систему запрашивает разрешение), поэтому мне нечего делать. Сразу после входа в систему, onSessionStateChange функция вызывается, которая находится внутри A_class расширяет фрагмент

private void onSessionStateChange(Session session, SessionState state, Exception exception) { 
     if (state.isOpened()) {    // Session open 
      getFriends();     // Call FQL codes... 
     } else if (state.isClosed()) {  // Session closed 
      // After first login, It always coming here.Couse:Invalid access token. 
     } 
    } 

Я следовал за учебники. Я смог: login> ask basic permissions> получить список друзей (используя FQL)> logout.

После первого успешного входа в систему и аутентификации, если я выхожу из/Выход из приложения, я не могу снова войти в систему. В SDK finishAuthorization он возвращает Исключено недопустимое исключение токена доступа, что не позволяет открыть сеанс.

Если я зарегистрирую свою учетную запись на facebook в браузере и отменил действие приложения facebook в своей учетной записи, я снова смогу войти в систему и получить друзей. Похоже, мне нужно обновить токен доступа или что-то в этом роде ... Спасибо за любые предложения.

Я понял, что токен возвращает пустую строку "".

ответ

0

Вы пытаетесь повторно авторизировать после выхода из системы? Возможно, токен истекает. В моих приложениях я не делаю выход из системы. Токен действителен до истечения срока его действия. Поэтому в этом случае я снова вхожу в систему :).

+0

Ну маркер не истекает ... Но он возвращается как «» (пустая строка) на второй попытке ... Можете ли вы объяснить, как повторно санкционировать. Я не смог этого сделать. –

+0

Вот действительно хороший пример/проект, который объясняет большинство функций facebook, включая обработку токена;). Проверьте это: Hackbook - [https://github.com/facebook/facebook-android-sdk/tree/master/samples/Hackbook] –

0

Я не могу сказать, какое исправление относится к вашей конкретной проблеме, но я помню, что у меня была аналогичная проблема с FB, где токен существовал, но был недействителен.

В основном то, что происходит в SDK, если я правильно помню, это

FB Auth -> есть маркер? -> да -> создать сеанс с токеном

Как вы можете видеть выше, нет способа проверить, действительно ли токен действителен, поэтому он всегда возвращает закрытый сеанс.

Вы должны попытаться принудительно сбросить токен из памяти при выходе из системы, таким образом избегая FB sdk, давая вам сеанс с недопустимым токеном.

Выше всего это догадка, поэтому возьмите его с щепоткой соли.

1

Сначала проверьте доступность токена доступа от средства отладки Facebook отсюда https://developers.facebook.com/tools/debug/access_token. Этот инструмент предоставит вам некоторую информацию о маркере доступа при условии, как Time to Expire и Scopes ... и т.д.

Если маркер истек, вы должны обновить его (повторно авторизовать) с помощью графика API:

https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=app-id&client_secret=app-secret&fb_exchange_token=old_token 

Просто замените old_token в URL с истекшим маркер доступа и использовать ваш app_id и secret вместо client_id и client_secret соответственно.Возвращаемое значение - это новый токен, который вы можете использовать вместо старого.

Вы можете обновить маркер доступа в то время вы получили исключение недопустимого доступа маркер и заменить его перед входом в систему.

Смежные вопросы