Facebook iOS SDK 3.1.1“closeAndClearTokenInformation”方法无效

时间:2012-10-15 13:30:41

标签: ios facebook authentication sdk logout

我刚从Facebook iOS SDK 3.0.X升级到3.1.1,并重写了一些代码......

根据退出工作流程的Facebook文档(https://developers.facebook.com/docs/tutorials/ios-sdk-tutorial/authenticate/#step3),我正在调用 closeAndClearTokenInformation FBSession.activeSession 对象的方法。

这似乎对Facebook会话状态没有影响,因为在通话结束后立即检查它仍会返回开放会话。

就目前而言,一旦我的应用程序使用Facebook登录,它就不会注销。

[更新1]

根据要求,这是我用来检查会话状态的代码:

if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded && FBSession.activeSession.isOpen)
 //logged in
else
 //not logged in

[更新2]

改变了我的逻辑......将原始代码改为:

if (FBSession.activeSession.isOpen)
 //logged in
else
 //not logged in

因为 FBSession.activeSession.state 返回 FBSessionStateOpen ,而不是 FBSessionStateCreatedTokenLoaded

2 个答案:

答案 0 :(得分:22)

也许这会有所帮助。 https://developers.facebook.com/bugs/497294866962479?browse=search_507cb8ebc4f025673237228

我将所有这些方法一起调用,以确保它真正注销。疯狂的错误。

[FBSession.activeSession closeAndClearTokenInformation];
[FBSession.activeSession close];
[FBSession setActiveSession:nil];

答案 1 :(得分:6)

我知道这可能会迟到但是在Android(3.0 SDK)上,如果您不在创建它的同一个Context中(或者如果应用程序已关闭且会话没有',则Session.getActiveSession()可能会返回null)以某种方式恢复)。它发生了,它由SDK处理,所以你真的没有多少。

在这些情况下,调用closeAndClearTokenInformation()并没有太大作用(如果您查看源代码,您将理解为什么)。我的解决方案就是这些方面(在Java中):

Session session = Session.getActiveSession();
if (session != null) {
   Session.getActiveSession().closeAndClearTokenInformation();
   Session.getActiveSession().close();
   Session.setActiveSession(null);
} else {
   // construct a new session (there are different ways to do this, this is how I do it because I need to pass the FACEBOOK_API_KEY programmatically).
   session = new Session.Builder(MyApp.getInstance()).setApplicationId(Constants.FACEBOOK_API_KEY).build();
   if (session != null) {//to be safe
     //beware with the case of Session vs sesssion.
     Session.setActiveSession(session); 
     session.closeAndClearTokenInformation();
     session.close();
     Session.setActiveSession(null);
   }
}

这实际上使我的会话成为:

{Session state:CREATED, token:{AccessToken token: permissions:[]}, appId:xxxxx}

请记住,创建的与Closed(或Open)不同。 从该状态,您可以毫无问题地重新打开会话。

希望这有帮助。