检查 IOS 上的 Facebook Connect 会话

Posted

技术标签:

【中文标题】检查 IOS 上的 Facebook Connect 会话【英文标题】:Check Facebook Connect Session on IOS 【发布时间】:2011-01-04 17:22:20 【问题描述】:

使用新的 Facebook 库,FBSession 对象消失了。 当用户启动应用程序而不提示 safari 或 uiwebview 时,如何立即检查他的设备上是否有有效会话?

[facebook isSessionValid] 方法适用于 acccessToken,但当应用从 safari(或内联 uiwebview)返回时会设置 accessToken。

是否可以使用 cookie 检查会话?

【问题讨论】:

【参考方案1】:

登录成功后,要保存访问令牌和过期日期,如下所示:

[[NSUserDefaults standardUserDefaults] setObject:_facebook.accessToken forKey:@"AccessToken"];
[[NSUserDefaults standardUserDefaults] setObject:_facebook.expirationDate forKey:@"ExpirationDate"];
[[NSUserDefaults standardUserDefaults] synchronize];

然后,当您加载应用程序时,您要检查是否有已保存的令牌,如下所示:

_facebook = [[Facebook alloc] initWithAppId:@"[app_id]"];
_facebook.accessToken    = [[NSUserDefaults standardUserDefaults] stringForKey:@"AccessToken"];
_facebook.expirationDate = (NSDate *) [[NSUserDefaults standardUserDefaults] objectForKey:@"ExpirationDate"];
if (![_facebook isSessionValid]) 
    [_facebook authorize:_permissions delegate:self];

else 
    [_facebook requestWithGraphpath:@"me" andDelegate:self];

希望这会有所帮助!

【讨论】:

效果很好。但是在 _facebook 初始化行中存在内存泄漏(不需要保留)。 我已经通过 facebook App 登录。然后当我运行我的应用程序时,它再次要求我登录?为什么?如何检查用户是否已经登录 Facebook。【参考方案2】:

我很确定它应该自动检查用户是否登录,无论是通过 safari 还是 Facebook iPhone 应用程序。如果用户未登录,则会提示使用上述应用程序之一(如果未安装 FB 应用程序,则默认为 safari,这就是模拟器在 safari 中打开 FB 的原因)。

【讨论】:

谢谢 Danny Boy,是的,它已通过 Safari 进行检查……但我不需要通过 safari/uiwebView 等检查我是否已登录。示例:我第一次使用 safari/uiwebview 登录,我关闭了应用程序,而不是回到应用程序,我希望我的用户能够自动识别出他的名字和 Facebook 图片 当您尝试执行操作时,Facebook 对象本身将检查用户是否使用 [self isSessionValid] 登录。如果用户没有登录,它将采取适当的措施让他们登录。 查看 isSessionValid 代码,我发现它检查了 accessToken 属性及其过期时间。但此属性仅在登录操作(或 safari/uiwebview/FBapp 提示操作)之后设置。所以如果不显示至少一个 FB 对话框,我就找不到访问这些信息的方法。

以上是关于检查 IOS 上的 Facebook Connect 会话的主要内容,如果未能解决你的问题,请参考以下文章

iOS 8 上的 Facebook 登录 WebView 方向错误

Facebook IOS SDK 可选权限

带有德语变音符号的 iOS 上的 FacebookDisplayName

在 Facebook iOS SDK 中检查 Facebook 对话帖子是不是成功

检查 accesstoken 是不是过期 Facebook SDK 4.7 ios

在 ios 的 Facebook 登录中检查是不是已在此应用中注册