3

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

SDK带有它自己的登录/注销按钮,所以我使用了它。当我单击登录时,它会处理事件(调用登录屏幕要求许可)所以我无事可做。登录后立即调用 A_class 中的onSessionStateChange函数扩展片段

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 应用程序的授权,我可以再次登录并获取朋友。看来我必须刷新访问令牌或其他东西...谢谢您的任何建议。

我已经弄清楚令牌正在返回空字符串“”。

4

3 回答 3

0

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

于 2013-05-31T13:14:48.327 回答
0

我不能说对您的确切问题的修复是什么,但我记得在令牌存在但无效的情况下与 FB 有类似的问题。

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

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

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

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

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

于 2013-05-31T13:44:25.347 回答
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在 URL 中替换为过期的访问令牌,并分别使用您的app_idandsecret而不是client_idand client_secret。返回值是一个新令牌,您可以使用它来代替旧令牌。

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

于 2013-06-02T15:02:12.450 回答