11

这是我试图在我的 iPhone 应用程序中编写的逻辑流程:

在此处输入图像描述

我想我了解实现这一点的技术细节(使用 AFNetworking,使用 Devise 作为身份验证连接到 Rails API)。登录成功后,auth_token 将存储在钥匙串中。我想不通的是最好的方法来设置我的应用程序以像上面那样运行。

我当然希望体验对用户有好处,所以在它检查令牌并尝试登录时,它可能会显示某种“加载”屏幕。

我将如何实现这一目标?我不知道我应该在 AppDelegate 中将哪个视图控制器设置为 rootviewcontroller,或者在用户登录后我应该如何设置它。我在 Facebook 应用程序中尝试过这个,当我打开它时,我看到一个空白的导航控制器看来,然后我的个人资料视图已加载。他们在幕后做什么,这是最好的方法吗?

我没有使用故事板。

4

3 回答 3

9

我已经实现了一个类似的,RootViewController 是一个导航控制器中的“SplashViewController”,显示一个漂亮的徽标、活动指示器并为用户提供有关身份验证状态的信息。它包含用于检查那里存储的令牌和身份验证实现的逻辑。如果认证成功,ShowUserController 通过推送到 navigationController 堆栈来显示。

如果身份验证失败,则会以模态方式显示 LoginViewController。SplashViewController 实现了 LoginViewController 的委托,它只是将用户名和密码传递给 SplashViewController。成功登录后,LoginViewController 被关闭,用户被定向到 ShowUserController。

于 2013-03-12T02:10:52.077 回答
4

使用 root 控制器启动您的应用程序,作为用户在成功登录后将看到的控制器,然后将登录视图/控制器分层放在顶部,并使用模态调用。如果身份验证成功,您的用户将已经在他们想要的位置,否则您在顶部以模态方式调用登录层。一旦他们通过身份验证,您将不再需要登录视图。

于 2013-03-12T02:59:42.010 回答
2

详细说明@Owen Hartnett 的答案,因为此文本不适合评论;这就是我看到 Facebook 的 SDK 工作的方式。如果你构建一个使用 Facebook iOS SDK 作为唯一登录机制的应用程序,那么它的工作方式是这样的:

在我的应用程序委托的didFinishLaunchingWithOptions方法中,我首先在NSUserDefaults. 如果没有找到,我需要得到一个,因此我的应用程序委托立即启动一个模式登录流程,该流程以有效的访问令牌结束,然后保存以NSUserDefaults供下次打开应用程序时使用。

如果我的 . 文件中确实已经有访问令牌didFinishLaunchingWithOptions,那么我假设快乐路径并使用我在应用程序打开时在文件中找到的访问令牌异步打开“登录用户会话”。如果我存档的用于打开会话的访问令牌是合法的,则不会显示 UX。如果我存档的访问令牌是非法访问令牌(例如,服务器说它太旧了),那么我的应用程序委托中的打开会话方法在发现这一点后,将显示正确的模式登录流程。

由于这个 openSession 方法是异步执行的,您可能想知道需要登录用户的根视图控制器在此期间将如何运行。

答案是它应该写成好像它确实有一个登录用户。它应该假设。如果它运行的代码由于没有有效的访问令牌而无法运行或成功完成执行,那么该代码应该触发登录 UI ,如果它尚未出现(即此时在应用程序打开时检查访问令牌,已经向用户呈现了模态登录 UI)。

最后,这是 Facebook SDK 登录流程的翻译版本。例如,如果您只使用他们的 SDK,您将永远不会NSUserDefaults像我建议的那样与之交互。我已将他们的流程转换为登录远程 API 的“自定义实现”。

于 2014-02-25T18:26:42.353 回答