facebook iOS sdk自定义委托和SSO授权

时间:2011-02-17 22:12:04

标签: iphone facebook sdk authorization single-sign-on

我一直在玩新的facebook iOS sdk。我已经让我的项目达到了有人可以成功登录的程度。但是我有两个问题:

1)点击图表api你发出以下调用:[facebookInstance requestWIthGraphPath:@“me”andDelegate:self]。是否有可能特定除自我以外的代表?目前所有响应都转到(void)请求:(FBRequest *)请求didLOad:(id)结果。但是,由于我的应用程序可能会在不同时间向facebook api发出请求,并且每个发出的请求都需要发生不同的事情,我如何指定响应应该在我的应用程序中点击哪个回调函数?这可能吗?

2)用户登录后,如何检查他们的授权/登录状态,以便我们可以在登录时禁用登录按钮?考虑用户第一次打开应用程序并登录的示例。然后关闭应用程序,几分钟后打开。我宁愿不在第二次向用户显示登录按钮,而是开始提取信息以显示,例如他们的姓名。

1 个答案:

答案 0 :(得分:3)

1)只要作为委托提供的对象符合FBRequestDelegate协议,指定除self之外的委托应该没有任何问题。或者,您可以查询委托方法中获得的FBRequest对象,以确定刚刚加载的请求以及适当的响应。

2)为了使用户保持登录状态,您需要在用户登录时保存Facebook对象的accessToken(NSString)和expirationDate(NSDate)属性。然后,当您要登录时用户,尝试恢复这些值。 一些可能有用的代码片段:

- (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
}