【问题标题】:Android Facebook SDK Invalid access token after authorizationAndroid Facebook SDK授权后访问令牌无效
【发布时间】:2013-05-31 12:52:27
【问题描述】:

我正在尝试在我的 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 中,它返回 Invalid access token exception,导致会话无法打开。

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

我发现令牌返回的是空字符串“”。

【问题讨论】:

    标签: java android facebook facebook-fql


    【解决方案1】:

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

    【讨论】:

    • 好吧,令牌没有过期......但它在第二次尝试时返回为“”(空字符串)......你能解释一下如何重新授权。我没有这样做。
    • 这是一个很好的示例/项目,它解释了 facebook 的大部分功能,包括令牌的处理;)。看看这个:Hackbook - [github.com/facebook/facebook-android-sdk/tree/master/samples/…
    【解决方案2】:

    我无法说出您的确切问题的修复方法,但我记得在令牌存在但无效的 FB 中遇到类似问题。

    如果我没记错的话,基本上sdk中会发生什么

    FB auth -> 有令牌吗? -> 是 -> 使用令牌创建会话

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

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

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

    【讨论】:

      【解决方案3】:

      首先从此处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。返回值是一个新令牌,您可以使用它来代替旧令牌。

      您可以在遇到无效访问令牌异常时刷新访问令牌并在登录前替换它。

      【讨论】:

        猜你喜欢
        • 2013-12-04
        • 1970-01-01
        • 2012-08-29
        • 1970-01-01
        • 2022-10-03
        • 1970-01-01
        • 2012-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多