登录iOS应用程序的结构

时间:2012-07-19 02:56:49

标签: objective-c ios facebook-ios-sdk

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

如果我有一个iOS应用程序,我想仅为已登录的用户提供某些功能,并为没有的用户提供某些其他类型的功能(比如读取与写入功能),那么请执行以下体系结构有道理......

1)我想创建全局BOOL变量,例如loggedIn,我可以检查应用程序用户想要执行“Authenticated-User-Only”列表下的某个功能。我想知道在哪里存放这个BOOL。 NSUserDefaults是存储全局布尔值的最佳实践吗?

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

提前谢谢。

注意 -

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

2 个答案:

答案 0 :(得分:3)

Matt对现有SDK的回答是正确的。我正在添加关于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

希望这有帮助!

答案 1 :(得分:2)

你可以使用全局的BOOL,但是你需要做更多的工作。

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

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

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
}
相关问题