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

Iphone facebook iOS sdk自定义委托和SSO授权,iphone,facebook,sdk,authorization,single-sign-on,Iphone,Facebook,Sdk,Authorization,Single Sign On,我一直在玩新的facebook iOS sdk。我已经让我的项目到了有人可以成功登录的地步。不过,我有两个问题: 1) 要点击图形api,需要发出以下调用:[facebookInstance requestWIthGraphPath:@“me”和Delegate:self]。是否有可能指定一名非self的代表?当前,所有响应都转到(void)请求:(FBRequest*)请求didLOad:(id)结果。但是,由于我的应用程序可能会在不同的时间向facebook api发出请求,并且每个发出的请

我一直在玩新的facebook iOS sdk。我已经让我的项目到了有人可以成功登录的地步。不过,我有两个问题:

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

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

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
}

非常感谢您与我们分享您的代码!你能稍微润色一下吗?有几个错误(试着编译一下,你会很容易找到它们)?这将帮助想要尝试您的代码的人。我刚刚编辑了一行,以确定是否(tokenString!=nil&&expDate!=nil)还缺少另一个错误?您忘记了:forKey@“FacebookExpirationDate”中的冒号