如何处理懒人登录?

时间:2013-04-11 20:33:57

标签: ios login modal-dialog

我不希望我的应用在启动后立即要求登录。相反,我想提示用户登录“按需”。基础。因此,例如,如果用户与需要登录的应用程序的一部分进行交互,则只会出现登录提示。

我有几个问题:

1)有没有人做过这种“懒惰”的事情。之前登录,如果有,您的经验是什么?管理难的尴尬吗?这对用户来说是一种令人困惑的体验吗?

2)实现这个目标的最佳方法是什么?

我有一个LoginViewController,提示用户登录。我希望在当时可见的视图控制器视图的基础上以模态方式显示此视图控制器。

我也希望各种其他视图控制器对LoginViewController一无所知,以尽量减少耦合。

理想情况下,我有一些LoginManager单例,它可以管理与登录有关的任何内容。

然后,例如,如果某个随机视图控制器MyCoolViewController需要某个功能的用户身份验证,例如按下按钮,它可以调用:

- (void)buttonPressed:(id)sender {
    // If the user isn't logged in, show the login modal view on top of this VC
    if (![[LoginManager sharedManager] requireLoginWithViewController:self]) {
        return;
    }

    // Code that is protected by login
}

但是我需要一种方法来了解登录是否成功。这可以通过委托或回调来解决,但暗示视图控制器每个都知道一些我想要避免的LoginController。

另一种方法是创建UIViewController的ProtectedViewController子类,我的所有视图控制器都将其子类化,并提供访问受保护功能的功能,并在需要时显示登录控制器。

您如何看待这些方法?还有什么更有意义吗?我很想听听你关于“懒惰”的经历。登录。

3 个答案:

答案 0 :(得分:0)

我已经通过以下方式实现了这种延迟日志记录方法(没有问题):

  1. 使用注销,登录(用户名/密码)创建设置视图,它可以是常规登录页面,也可以是UIWebView。
  2. 应用程序将数据发送到服务器进行身份验证(在JSON消息中)。
  3. 登录登录:我将登录数据存储在钥匙串中(使用单件模式,请参阅this Apple sample codethis tutorial
  4. 如果用户想要使用应用程序的敏感部分,我请求存储用户名的密码,并且能够注销并使用不同的帐户登录。该应用程序将键入的密码与存储的密码(离线模式)进行比较,或将其发送到服务器(在线连接)。但它可以根据需要以不同的方式实现。
  5. 用户喜欢它!

    祝你好运!

答案 1 :(得分:0)

您的问题已经涵盖了大部分答案。也就是说,你应该去单身登录管理器。我实现了这样的登录:

- (void)buttonPressed:(id)sender {
    // If the user isn't logged in, show the login modal view on top of this VC
    if ([[LoginManager sharedManager] requiresLogin]) {

        [[LoginManager sharedManager] loginWithViewController:self completion:^{
            [self buttonPressed:sender];
        }];

        return;
    }

    // Code that is protected by login
}

通过这种方式,您的登录管理仍然是匿名的,并且您的登录管理员可以异步地恢复其停止的操作,以便用户登录。

答案 2 :(得分:0)

我最终选择了一个实现,它隐藏了网络管理员用户的登录详细信息,同时仍然对登录实现细节保持不可知。

我用3个课程实现了这个目标:

  • NetworkManager(Web服务的单一界面)
  • LoginManager(单一登录协调员)
  • LoginViewController(vc显示登录界面,如登录按钮)

NetworkManager有一个loginDelegate,负责处理特定于应用程序的登录UI。在这种情况下,LoginManager单例是这个loginDelegate。

一般流程是:

  1. 应用程序通过NetworkManager
  2. 从服务器请求数据
  3. 如果请求身份验证失败,NetworkManager会告诉其loginDelegate它现在应该处理某种登录流程。
  4. 然后,LoginManager以模态方式在窗口的rootViewController上显示一个LoginViewController。
  5. 按下登录按钮后,LoginViewController会告诉LoginManager它想要登录。
  6. LoginManager依次使用NetworkManager执行实际的服务器登录。
  7. 登录完成后,将通过回调块通知LoginManager。如果成功,则解除LoginViewController。
  8. LoginManager和LoginViewController之间有一些来回,但这样可以在不需要了解登录流程的情况下使用NetworkManager。此外,NetworkManager可以在另一个应用程序中重用,因为它对特定于应用程序的登录视觉效果一无所知(因此需要代理人)。

    委员会通常不会与单身人士一起使用,但我认为在这种情况下这是正常的,因为应该只有一个登录委托(理论上应该有一个流程用于登录应用程序)。

    这是第一种方法,可能会随着时间的推移而改进。也许使用通知来通知用户登录的其他应用程序可能是一个很好的下一步。