检查facebook会话是否有效

时间:2013-08-14 09:28:56

标签: android facebook facebook-graph-api facebook-android-sdk

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

  1. 会话已过期。
  2. 用户已退出。
  3. 用户已删除我的Facebook应用程序。
  4. 用户不再存在。
  5. 我有这种方法来检查用户是否仍然登录:

    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请求之前避免这样做,或者在活动开始检查会话是否有效时至少调用一次。

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

1 个答案:

答案 0 :(得分:4)

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

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