初始 FBSession 检查始终失败

Posted

技术标签:

【中文标题】初始 FBSession 检查始终失败【英文标题】:Initial FBSession check consistently fails 【发布时间】:2012-09-25 20:39:25 【问题描述】:

我有一个用户可以选择登录 FB 的应用程序。我的代码主要基于 FB 的教程,并且在大多数情况下,应用程序和 FB 集成按预期工作。我遇到的问题是该应用程序不记得从启动到启动用户选择将应用程序连接到 FB。我检查了 AppDelegate.m 以检查缓存的 FBSession:

   if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded) 
        // Yes, so just open the session (this won't display any UX).
        NSLog(@"The state is IS 'State created token loaded'");
        [self openSessionWithAllowLoginUI:NO];
     else 
        // No, display the login page.
        NSLog(@"The state is NOT 'State created token loaded'");
        [self openSessionWithAllowLoginUI:YES];
    

每次我启动应用程序时,控制台中都会显示“状态不是'已加载状态创建的令牌'”行。这让我觉得我没有做正确的事情以使 FB 登录从启动到启动持续存在。

我真的可以在这里使用一些建议。需要做些什么来确保“FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded”在应用启动时为真?

【问题讨论】:

令牌是否在应用终止前存储?看看用户默认的FBAccessTokenInformationKey 这可能是解决我问题的关键。我不知道必须存储令牌...是否有 FB tute 涵盖 FB SDK 的这一方面? 我不知道。您不需要明确存储它们,但是当您在调试时反复重启应用程序时,这些东西可能会漏掉。如果您在启动时登录[[NSUserDefaults standardUserDefaults] valueForKey:@"FBAccessTokenInformationKey"],它会说明什么? 它说:(空)。我有点预料到,因为我不确定在哪里获取令牌存储在那里,也不知道在启动应用程序以重新打开 FB 会话时如何使用该 userDefault 值。我将在 developer.fb 上研究 FBSession 参考资料一段时间,但请务必发布您可能拥有的任何对我有帮助的信息。谢谢! 你想明白了吗?我有同样的问题,userDefault 返回(null)。您最终是否手动缓存了令牌?如果是这样,在哪里以及如何?谢谢! 【参考方案1】:

如果您在应用启动时拥有此代码,请注意:

FBSession.activeSession

可能尚未设置。您想要检查缓存令牌的操作类似于:

if (![self openSessionWithAllowLoginUI:NO]) 
    [self openSessionWithAllowLoginUI:YES];

如果有缓存的令牌,第一次调用“NO”将同步返回 true 值。如果没有缓存的令牌,则返回 no。此时您可以强制登录 UX。

【讨论】:

这是一个很好的提示。我认为我的问题是我不知道如何缓存令牌。关于如何做到这一点的任何提示? (leo 建议 FBAccessTokenInformationKey 可能会起作用)。 我的印象是SDK默认将token缓存到NSUserDefaults,但是看看developers.facebook.com/docs/reference/ios/3.0/class/…和developers.facebook.com/docs/sdk-reference/iossdk/3.0/class/… 正如 cbowns 所说,最新的 SDK 会为您完成缓存,因此您不必担心。 感谢大家的帮助!

以上是关于初始 FBSession 检查始终失败的主要内容,如果未能解决你的问题,请参考以下文章

IPv6 的 getaddrinfo 始终失败,错误代码为 11268096

ibm小型机操作系统初始化失败

控件初始化失败,请检查浏览器安全设置推荐的浏览器打不开

我该如何解决这个错误? Gtk-WARNING **: GModule ...初始化检查失败:GLib 版本太旧(微不匹配)

使用未解析的标识符 FBSession

一次登录成功后,FBSession 返回 FBSessionStateClosedLoginFailed