3

我正在尝试检查 facebook 会话是否有效,这可能是因为:

  1. 会话已过期。
  2. 用户已注销。
  3. 用户已删除我的 Facebook 应用程序。
  4. 用户不再存在。

我有这种方法来检查用户是否仍然登录:

public boolean isLoggedIn() {
    Session session = Session.getActiveSession();
    if (session != null && session.isOpened()) {
        return true;
    } else {
        return false;
    }
}

但即使用户从他的 Facebook 帐户中删除了我的应用程序,它也会返回 true。

当我调用任何 facebook 请求时,我会从 facebook 收到以下响应:

08-14 12:20:40.671: I/facebookActivity(2322): Result: {Response:  responseCode: 400, graphObject: null, error: {HttpStatus: 400, errorCode: 190, errorType: OAuthException, errorMessage: Error validating access token: User 343343434 has not authorized application 45345345.}, isFromCache:false}

之后,我向 facebook 提出的每个请求都会得到不同的响应:

08-14 12:21:09.707: I/facebookActivity(2322): Result: {Response:  responseCode: 200, graphObject: null, error: {HttpStatus: -1, errorCode: -1, errorType: null, errorMessage: null}, isFromCache:false}

我可以检查 JSON 是否有错误并尝试创建一个新的 Facebook 会话,但我想避免在发出任何 Facebook 请求之前这样做,或者在活动开始检查会话是否有效时至少调用一次。

是否有正常的方法来检查会话是否有效?

4

1 回答 1

4

当您从缓存信息打开会话时(通常为您自动完成),没有向 Facebook 发出服务器请求,这就是为什么 Session 对象本身不知道它是否仍然有效的原因。

知道访问令牌已失效(出于任何原因)的唯一方法是发出图形请求。您可以在每次打开新会话时发出图形请求(对 /me 甚至 /me/permissions),或者您可以让您的应用程序正常运行,并在发生错误时执行此处列出的错误处理步骤(注意会话/访问令牌可能随时变为无效 - 即使在运行您的应用程序的过程中 - 所以无论如何您都应该进行适当的错误处理)。

于 2013-08-14T16:18:32.547 回答