我刚从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 。
答案 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)不同。 从该状态,您可以毫无问题地重新打开会话。
希望这有帮助。