【问题标题】:Check Facebook Connect Session on IOS检查 IOS 上的 Facebook Connect 会话
【发布时间】:2011-01-04 17:22:20
【问题描述】:

使用新的 Facebook 库,FBSession 对象消失了。 当用户启动应用程序而不提示 safari 或 uiwebview 时,如何立即检查他的设备上是否有有效会话?

[facebook isSessionValid] 方法适用于 acccessToken,但当应用从 safari(或内联 uiwebview)返回时会设置 accessToken。

是否可以使用 cookie 检查会话?

【问题讨论】:

    标签: cocoa-touch ios facebook


    【解决方案1】:

    登录成功后,要保存访问令牌和过期日期,如下所示:

    [[NSUserDefaults standardUserDefaults] setObject:_facebook.accessToken forKey:@"AccessToken"];
    [[NSUserDefaults standardUserDefaults] setObject:_facebook.expirationDate forKey:@"ExpirationDate"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    

    然后,当您加载应用程序时,您要检查是否有已保存的令牌,如下所示:

    _facebook = [[Facebook alloc] initWithAppId:@"[app_id]"];
    _facebook.accessToken    = [[NSUserDefaults standardUserDefaults] stringForKey:@"AccessToken"];
    _facebook.expirationDate = (NSDate *) [[NSUserDefaults standardUserDefaults] objectForKey:@"ExpirationDate"];
    if (![_facebook isSessionValid]) {
        [_facebook authorize:_permissions delegate:self];
    }
    else {
        [_facebook requestWithGraphPath:@"me" andDelegate:self];
    }
    

    希望这会有所帮助!

    【讨论】:

    • 效果很好。但是在 _facebook 初始化行中存在内存泄漏(不需要保留)。
    • 我已经通过 facebook App 登录。然后当我运行我的应用程序时,它再次要求我登录?为什么?如何检查用户是否已经登录 Facebook。
    【解决方案2】:

    我很确定它应该自动检查用户是否登录,无论是通过 safari 还是 Facebook iPhone 应用程序。如果用户未登录,则会提示使用上述应用程序之一(如果未安装 FB 应用程序,则默认为 safari,这就是模拟器在 safari 中打开 FB 的原因)。

    【讨论】:

    • 谢谢 Danny Boy,是的,它已通过 Safari 进行检查……但我不需要通过 safari/uiwebView 等检查我是否已登录。示例:我第一次使用 safari/uiwebview 登录,我关闭了应用程序,而不是回到应用程序,我希望我的用户能够自动识别出他的名字和 Facebook 图片
    • 当您尝试执行操作时,Facebook 对象本身将检查用户是否使用 [self isSessionValid] 登录。如果用户没有登录,它将采取适当的措施让他们登录。
    • 查看 isSessionValid 代码,我发现它检查了 accessToken 属性及其过期时间。但此属性仅在登录操作(或 safari/uiwebview/FBapp 提示操作)之后设置。所以如果不显示至少一个 FB 对话框,我就找不到访问这些信息的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多