首页 文章

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

提问于
浏览
1

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

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

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

1 回答

  • 3

    1)指定除self之外的委托应该没有任何问题,只要您作为委托提供的对象符合FBRequestDelegate协议 . 或者,您可以询问在委托方法中获得的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
    }
    

相关问题