使用 url 方案切换应用程序时定期监听事件的最佳实践
Best practice for periodically listening for event while switching app with url scheme
我对 Swift 和 iOS 开发完全陌生,我遇到了一些设计十字路口。
我在我的应用程序中使用第三方银行登录服务,我用 url 方案打开。 url 方案打开银行应用程序,我输入我的凭据,然后银行应用程序将使用我唯一的 url 方案标识符再次打开我的应用程序,AppDelegate 将触发此事件。
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
return true
}
银行 api 公开了一个端点,我可以调用它来收集尝试登录的状态,如果成功,我将获得一些用户信息。否则我会得到适当的错误响应。
现在我正在创建一个 NSTimer 以每秒调用一次此收集,并检查其状态。效果很好,一切都很好。
self.timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "collect:", userInfo: nil, repeats: true)
我觉得这不是一个很好的解决方案,因为当应用程序切换到银行应用程序进行身份验证时,我的应用程序进入后台线程,并且不会触发 NSTimer 事件。
问题变成了,我是否最好在我的 LoginViewController 中监听 openURL 的 AppDelegate 事件,并在它发生时开始收集身份验证的状态?
这是一个可行的选择,甚至可能吗?还是 NSTimer 被认为是一个好的解决方案?
提前致谢,希望我说的有道理。
在您的情况下,最好直接在 openURL 事件中调用您的 viewcontroller 方法。不需要轮询,因为如果我理解正确的话,openURL 会给你正确的答案。
定时器轮询总是会丢失特定事件,这只是一种不必要的能量消耗。
我对 Swift 和 iOS 开发完全陌生,我遇到了一些设计十字路口。
我在我的应用程序中使用第三方银行登录服务,我用 url 方案打开。 url 方案打开银行应用程序,我输入我的凭据,然后银行应用程序将使用我唯一的 url 方案标识符再次打开我的应用程序,AppDelegate 将触发此事件。
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
return true
}
银行 api 公开了一个端点,我可以调用它来收集尝试登录的状态,如果成功,我将获得一些用户信息。否则我会得到适当的错误响应。
现在我正在创建一个 NSTimer 以每秒调用一次此收集,并检查其状态。效果很好,一切都很好。
self.timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "collect:", userInfo: nil, repeats: true)
我觉得这不是一个很好的解决方案,因为当应用程序切换到银行应用程序进行身份验证时,我的应用程序进入后台线程,并且不会触发 NSTimer 事件。
问题变成了,我是否最好在我的 LoginViewController 中监听 openURL 的 AppDelegate 事件,并在它发生时开始收集身份验证的状态?
这是一个可行的选择,甚至可能吗?还是 NSTimer 被认为是一个好的解决方案?
提前致谢,希望我说的有道理。
在您的情况下,最好直接在 openURL 事件中调用您的 viewcontroller 方法。不需要轮询,因为如果我理解正确的话,openURL 会给你正确的答案。 定时器轮询总是会丢失特定事件,这只是一种不必要的能量消耗。