Android Facebook SDK授权后无效的访问令牌

时间:2013-05-31 12:52:27

标签: java android facebook facebook-fql

我正在尝试在我的Android应用中获取朋友的用户列表。为此,我正在使用: facebook-android-sdk-3.0.1

SDK附带了自己的登录/退出按钮,因此我使用了它。当我点击登录它处理事件(调用登录屏幕要求许可)所以我无事可做。登录后立即调用 onSessionStateChange 函数,该函数位于 A_class extends Fragment

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.
        }
    }

我已按照教程进行操作。我能够:登录>问基本权限>获取好友列表(使用FQL)>注销

首次成功登录和验证后,如果我从应用程序退出/退出,我将无法再次登录。在SDK的 finishAuthorization 中,它会返回无效的访问令牌异常,这会导致会话无法打开。

如果我在浏览器上登录我的Facebook帐户并取消对我帐户上的Facebook应用程序的授权,我就可以再次登录并获取朋友。看起来我必须刷新访问令牌或其他东西......谢谢你的任何建议。

我已经知道令牌正在返回空字符串“”。

3 个答案:

答案 0 :(得分:0)

注销后是否尝试重新授权?也许令牌过期了。在我的应用程序中,我没有注销。令牌有效,直到它过期。所以在那种情况下我再次登录:)。

答案 1 :(得分:0)

我不能说你的确切问题是什么修复,但我记得在FB中存在类似的问题,但令牌存在但是无效。

基本上在sdk中发生的事情,如果我没记错的话,就是这个

FB auth - >有令牌吗? - >是的 - >使用令牌

创建会话

正如您在上面所看到的,没有步骤来检查令牌是否有效,因此它总是返回已关闭的会话。

您应该尝试在注销时强行从内存中刷新令牌,从而避免FB sdk为您提供带有无效令牌的会话。

以上只是一个猜测,所以请一点点盐。

答案 2 :(得分:0)

首先从此处https://developers.facebook.com/tools/debug/access_token检查来自Facebook调试工具的访问令牌的可用性。此工具将为您提供有关Time to ExpireScopes等提供的访问令牌的一些信息

如果令牌过期,您必须使用图形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,然后分别使用app_idsecret代替client_idclient_secret。返回值是您可以使用的新令牌,而不是旧令牌。

您可以在获得无效访问令牌例外时刷新访问令牌,并在登录前将其替换。