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 SDK iOS 的自定义分享、登录按钮

Facebook iOS SDK - 发布自定义故事

对于使用 Facebook iOS SDK 的混合 SSO 场景,为我们自己的自定义用户记录生成密码/密钥的最佳方式是啥?

iOS Facebook SDK - 最佳实践?

如何在 iOS 版 Facebook SDK 中定义“GeoPoint”属性

Facebook api ios-sdk,代表不工作,没有调用 fbDidLogin