我一直在玩新的facebook iOS sdk。我已经让我的项目达到了有人可以成功登录的程度。但是我有两个问题:
1)点击图表api你发出以下调用:[facebookInstance requestWIthGraphPath:@“me”andDelegate:self]。是否有可能特定除自我以外的代表?目前所有响应都转到(void)请求:(FBRequest *)请求didLOad:(id)结果。但是,由于我的应用程序可能会在不同时间向facebook api发出请求,并且每个发出的请求都需要发生不同的事情,我如何指定响应应该在我的应用程序中点击哪个回调函数?这可能吗?
2)用户登录后,如何检查他们的授权/登录状态,以便我们可以在登录时禁用登录按钮?考虑用户第一次打开应用程序并登录的示例。然后关闭应用程序,几分钟后打开。我宁愿不在第二次向用户显示登录按钮,而是开始提取信息以显示,例如他们的姓名。
答案 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
}