Facebook iOS SDK 3.1.1“closeAndClearTokenInformation”方法不起作用

Posted

技术标签:

【中文标题】Facebook iOS SDK 3.1.1“closeAndClearTokenInformation”方法不起作用【英文标题】:Facebook iOS SDK 3.1.1 "closeAndClearTokenInformation" method no working 【发布时间】:2012-10-05 11:44:15 【问题描述】:

我刚刚从 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

【问题讨论】:

您能否发布有关如何检查状态的代码?这种方法对我来说按预期工作。 按要求添加了代码...感谢您的关注。 在调用 closeAndClearTokenInformation 之后,我的 FBSession.activeSession.state 属性正确设置为“FBSessionStateClosed”,并且您的上述条件返回“未登录”。在调用 closeAndClearTokenInformation 后立即进行检查并查看它返回的内容。它正确到达//没有为我登录。 按照你的建议做了,它帮助我找到了我的逻辑缺陷。修复了它(见更新 2),它现在可以工作了。 参考另一个有效的答案,应该是选择的答案 【参考方案1】:

我知道这可能会迟到,但在 android (3.0 SDK) 上,如果您不在创建它的同一上下文中(或者如果应用程序已关闭并且会话没有),则 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

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

希望这会有所帮助。

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

即使在写完这些行之后,它也会在下次打开旧会话。 我已经使用了以上 3 行。它在 iOS8 中崩溃。 不,这 3 行在 iOS 8(至少 8.1.2)上运行良好。我遇到了完全相同的问题:在调用closeAndClearTokenInformation 后我的会话仍然打开。建议的行使其正常工作。

以上是关于Facebook iOS SDK 3.1.1“closeAndClearTokenInformation”方法不起作用的主要内容,如果未能解决你的问题,请参考以下文章

iOS – 从 facebook.com 删除应用程序后,Facebook SDK 3.1.1 访问警报不显示

Facebook iOS SDK v 3.1.1 遇到问题

iOS - Facebook SDK 3.1.1 构建失败 armv7

Facebook iOS SDK 3.1.1“closeAndClearTokenInformation”方法不起作用

Facebook IOS SDK 3.1.1 与 Xcode 4.5.2 错误

Facebook SDK 3.1.1 iOS 6 在设备设置中注销,返回应用和 HTTP 状态代码:400 错误