详细说明@Owen Hartnett 的答案,因为此文本不适合评论;这就是我看到 Facebook 的 SDK 工作的方式。如果你构建一个使用 Facebook iOS SDK 作为唯一登录机制的应用程序,那么它的工作方式是这样的:
在我的应用程序委托的didFinishLaunchingWithOptions
方法中,我首先在NSUserDefaults
. 如果没有找到,我需要得到一个,因此我的应用程序委托立即启动一个模式登录流程,该流程以有效的访问令牌结束,然后保存以NSUserDefaults
供下次打开应用程序时使用。
如果我的 . 文件中确实已经有访问令牌didFinishLaunchingWithOptions
,那么我假设快乐路径并使用我在应用程序打开时在文件中找到的访问令牌异步打开“登录用户会话”。如果我存档的用于打开会话的访问令牌是合法的,则不会显示 UX。如果我存档的访问令牌是非法访问令牌(例如,服务器说它太旧了),那么我的应用程序委托中的打开会话方法在发现这一点后,将显示正确的模式登录流程。
由于这个 openSession 方法是异步执行的,您可能想知道需要登录用户的根视图控制器在此期间将如何运行。
答案是它应该写成好像它确实有一个登录用户。它应该假设。如果它运行的代码由于没有有效的访问令牌而无法运行或成功完成执行,那么该代码应该触发登录 UI ,如果它尚未出现(即此时在应用程序打开时检查访问令牌,已经向用户呈现了模态登录 UI)。
最后,这是 Facebook SDK 登录流程的翻译版本。例如,如果您只使用他们的 SDK,您将永远不会NSUserDefaults
像我建议的那样与之交互。我已将他们的流程转换为登录远程 API 的“自定义实现”。