我正在尝试在我的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应用程序的授权,我就可以再次登录并获取朋友。看起来我必须刷新访问令牌或其他东西......谢谢你的任何建议。
我已经知道令牌正在返回空字符串“”。
答案 0 :(得分:0)
注销后是否尝试重新授权?也许令牌过期了。在我的应用程序中,我没有注销。令牌有效,直到它过期。所以在那种情况下我再次登录:)。
答案 1 :(得分:0)
我不能说你的确切问题是什么修复,但我记得在FB中存在类似的问题,但令牌存在但是无效。
基本上在sdk中发生的事情,如果我没记错的话,就是这个
FB auth - >有令牌吗? - >是的 - >使用令牌
创建会话正如您在上面所看到的,没有步骤来检查令牌是否有效,因此它总是返回已关闭的会话。
您应该尝试在注销时强行从内存中刷新令牌,从而避免FB sdk为您提供带有无效令牌的会话。
以上只是一个猜测,所以请一点点盐。
答案 2 :(得分:0)
首先从此处https://developers.facebook.com/tools/debug/access_token检查来自Facebook调试工具的访问令牌的可用性。此工具将为您提供有关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
,然后分别使用app_id
和secret
代替client_id
和client_secret
。返回值是您可以使用的新令牌,而不是旧令牌。
您可以在获得无效访问令牌例外时刷新访问令牌,并在登录前将其替换。