检查 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 方向错误
带有德语变音符号的 iOS 上的 FacebookDisplayName
在 Facebook iOS SDK 中检查 Facebook 对话帖子是不是成功