facebook iOS sdk 自定义委托和 SSO 授权
Posted
技术标签:
【中文标题】facebook iOS sdk 自定义委托和 SSO 授权【英文标题】:facebook iOS sdk custom delegate and SSO authorization 【发布时间】:2011-02-17 22:12:03 【问题描述】:我一直在玩弄新的 facebook ios sdk。我的项目已经到了有人可以成功登录的地步。但是我有两个问题:
1) 要点击图形 api,请发出以下调用:[facebookInstance requestWIthGraphpath:@"me" andDelegate:self]。是否可以指定除自己以外的代表?目前所有响应都转到 (void)request: (FBRequest *) 请求 didLOad:(id) 结果。但是由于我的应用程序可能会在不同时间向 facebook api 发出请求,并且对于发出的每个请求都需要发生不同的事情,我如何指定响应应该在我的应用程序中触发的回调函数?这可能吗?
2) 用户登录后,如何检查他们的授权/登录状态,以便如果他们已经登录,我可以禁用登录按钮?考虑一个用户第一次打开应用程序并登录的例子。然后关闭应用程序,几分钟后打开。我宁愿第二次不向用户显示登录按钮,而是开始提取信息以显示他们的姓名等信息。
【问题讨论】:
【参考方案1】:1) 指定 self 以外的委托应该没有任何问题,只要您作为委托提供的对象符合 FBRequestDelegate 协议即可。或者,您可以询问您在委托方法中获得的 FBRequest 对象,以确定刚刚加载的请求是什么以及适当的响应是什么。
2) 为了使用户保持登录状态,您需要在用户登录时保存 Facebook 对象的 accessToken(NSString)和 expireDate(NSDate)属性。然后,当您登录时用户,尝试恢复这些值。 一些可能有帮助的代码 sn-ps:
- (void)fbDidLogin
NSString *tokenString = [[self facebook] accessToken];
NSDate * expirationDate = [[self facebook] expirationDate];
[[NSUserDefaults standardUserDefaults] setObject: tokenString forKey:@"FacebookToken"];
[[NSUserDefaults standardUserDefaults] setObject: expirationDate forKey:@"FacebookExpirationDate"];
[[NSUserDefaults standardUserDefaults] synchronize];
并且,当您需要登录用户时:
NSString *tokenString = [[NSUserDefaults standardUserDefaults] objectForKey:@"FacebookToken"];
NSDate *expDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"FacebookExpirationDate"];
if (tokenString != nil && expDate != nil)
[facebook setAccessToken:tokenString];
[facebook setExpirationDate:expDate];
if ([facebook isSessionValid])
//Your session is valid, do whatever you want.
else
//Your session is invalid
//(either the session is past the expiration date or there is no saved data for the login)
//you need to ask the user to log in
【讨论】:
非常感谢您与我们分享您的代码!能否请您稍微润色一下,有几个错误(尝试编译它,您会很容易找到它们)?这将帮助想要试用您的代码的人。 我刚刚将行编辑为 if (tokenString != nil && expDate != nil) 是否还有另一个错误我遗漏了? 你忘记了冒号:forKey@"FacebookExpirationDate"以上是关于facebook iOS sdk 自定义委托和 SSO 授权的主要内容,如果未能解决你的问题,请参考以下文章
对于使用 Facebook iOS SDK 的混合 SSO 场景,为我们自己的自定义用户记录生成密码/密钥的最佳方式是啥?