1

有人可以告诉我这是否是为应用程序实现用户会话的正确方法:

如果我有一个 iOS 应用程序,我只想为已登录的用户提供某些功能,而为尚未登录的用户提供某些其他类型的功能(例如读取与写入功能),那么以下架构是否有意义。 ..

1)我想创建全局 BOOL 变量,例如loggedIn,我可以在任何时候检查应用程序用户想要执行“仅认证用户”列表下的功能之一。我想知道在哪里存储这个 BOOL。NSUserDefaults 是存储全局布尔值的最佳实践吗?

2)我正在尝试实现 Facebook iOS SDK,所以当我从带有 FB 的 SSO 返回并且 FB 用户已经验证了我的应用程序时,我可以使用它来设置我的全局 BOOL 登录,然后在整个应用程序中使用吗?

先感谢您。

笔记 -

这都是客户端,在应用程序中本机。没有 webviews 发生,注册表将查询服务器以返回用户是否有效。

4

2 回答 2

3

对于现有的 SDK,Matt 的回答是正确的。我正在添加一些关于 3.0 修订版的想法(现在处于测试阶段 - 很快就会转移到生产分支。)

Derek,您描述的场景很常见,我们希望在 SDK 中处理这种情况超级简单。在 3.0 中我们引入FBSession了处理会话。单个实例FBSession处理单个用户从登录到注销。

大多数应用程序只有一个用户——从来没有,所以我们还添加了一个名为 的静态方法activeSession,以及用于打开活动会话的静态辅助方法。(注意:活动会话不是单例,因为在应用程序执行的不同时间,FBSession可能有不同的实例是活动会话。)

具有与您一样简单的身份验证需求的应用程序通常可以在您想要支持您可选择使用 Facebook 登录的条件的任何地方执行以下操作:

if (FBSession.activeSession.isOpen) {
    // perform an operation using the open FBSession.activeSession object
}

SDK 中的 BooleanOG 示例应用程序显示了这种模式的一个示例,其中应用程序中的一个操作也会导致一个开放图帖子,但前提是当前存在与 Facebook 的活动会话。这是示例中相关代码行的链接: BOGFirstViewController.m

希望这可以帮助!

于 2012-07-19T14:16:54.787 回答
2

您可以使用全局的 BOOL,但是您必须做更多的工作。

相反,您可以使用isSessionValidFacebook iOS SDK 提供的方法来检查用户的会话是否有效。

为此,您只需在需要执行此检查的任何类中执行以下操作:

YOURAPPDELEGATE *delegate = (YOURAPPDELEGATE*)[[UIApplication sharedApplication] delegate]; 

if ([appDelegate.facebook isSessionValid]) {  //Session is valid, facebook is the name of the instance of Facebook that is set in your app delegate, providing that's where you do the login handling, as per the tutorial on Facebook's developer site 
    DO STUFF
}
else { //Session is NOT valid
    DO OTHER STUFF
}
于 2012-07-19T03:03:22.350 回答