我正在尝试检查facebook会话是否有效,它可能会发生,因为:
我有这种方法来检查用户是否仍然登录:
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请求之前避免这样做,或者在活动开始检查会话是否有效时至少调用一次。
是否有正常的方法来检查会话是否有效?
答案 0 :(得分:4)
当您从缓存信息打开会话时(通常是自动为您完成),没有向Facebook发出服务器请求,这就是为什么Session对象本身不知道它是否仍然有效。
知道访问令牌已失效(出于任何原因)的唯一方法是发出图形请求。您可以在每次打开新会话时向/我或甚至/我/权限发出图形请求,也可以让您的应用正常运行,并在执行时here执行错误处理步骤发生错误(请注意,会话/访问令牌在任何时候都可能变得无效 - 即使在运行应用程序的过程中 - 所以无论如何都应该进行适当的错误处理。)