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



我试图在我的Android应用程序中获得用户的朋友列表。要这样做,我使用:facebook-android-sdk-3.0.1

SDK自带登录/注销按钮所以我使用了它。当我点击登录时,它处理事件(调用登录屏幕请求许可),所以我没有什么可做的。在登录后,onSessionStateChange函数被调用,该函数在A_class内部扩展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应用程序的授权,我可以再次登录并获取朋友。看起来我必须刷新访问令牌之类的…谢谢你的建议。

我已经算出这个记号返回的是空字符串"

注销后是否尝试重新授权?也许令牌过期了。在我的应用程序中,我不会注销。令牌在到期之前是有效的。在这种情况下,我再次登录:)。

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

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

FB auth -> have token?-> yes ->创建会话

正如你在上面看到的,没有检查令牌是否有效的步骤,所以它总是返回一个已经关闭的会话。

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

以上只是猜测,所以请对此持保留态度。

首先从这里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

只需用过期的访问令牌替换URL中的old_token,并分别使用app_idsecret而不是client_idclient_secret。返回值是一个新的令牌,您可以使用它来代替旧的令牌。

您可以在获得无效访问令牌的异常时刷新访问令牌,并在登录前替换它

最新更新