我不希望我的应用在启动后立即要求登录。相反,我想提示用户登录“按需”。基础。因此,例如,如果用户与需要登录的应用程序的一部分进行交互,则只会出现登录提示。
我有几个问题:
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子类,我的所有视图控制器都将其子类化,并提供访问受保护功能的功能,并在需要时显示登录控制器。
您如何看待这些方法?还有什么更有意义吗?我很想听听你关于“懒惰”的经历。登录。
答案 0 :(得分:0)
我已经通过以下方式实现了这种延迟日志记录方法(没有问题):
用户喜欢它!
祝你好运!答案 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有一个loginDelegate,负责处理特定于应用程序的登录UI。在这种情况下,LoginManager单例是这个loginDelegate。
一般流程是:
LoginManager和LoginViewController之间有一些来回,但这样可以在不需要了解登录流程的情况下使用NetworkManager。此外,NetworkManager可以在另一个应用程序中重用,因为它对特定于应用程序的登录视觉效果一无所知(因此需要代理人)。
委员会通常不会与单身人士一起使用,但我认为在这种情况下这是正常的,因为应该只有一个登录委托(理论上应该有一个流程用于登录应用程序)。
这是第一种方法,可能会随着时间的推移而改进。也许使用通知来通知用户登录的其他应用程序可能是一个很好的下一步。