【问题标题】:facebook iOS sdk custom delegate and SSO authorizationfacebook iOS sdk 自定义委托和 SSO 授权
【发布时间】:2011-02-17 22:12:03
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案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"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2011-10-01
    相关资源
    最近更新 更多