我想知道苹果是否有意让TouchID功能调用这些生命周期方法。是否有可能检查TouchID进程是否正在调用这些方法(我希望避免在AppDelegate中设置一个BOOL值,以判断当前是否显示TouchID输入)。
applicationWillResignActive
和 applicationDidBecomeActive
中,这些代码会影响请求 Touch ID 验证的视图控制器,并且会引发一个棘手的循环。applicationDidEnterBackground
和 applicationWillEnterForeground
中,因为当调用 Touch ID 机制时,它们不会被调用。applicationDidBecomeActive
applicationWillResignActive
...直到用户验证指纹(成功或失败)之前,您的应用程序将被禁用...
applicationDidBecomeActive
applicationDidBecomeActive
或者 applicationWillResignActive
中有影响 Touch ID 的代码,你将创建一个无限循环,或者更糟糕的是,你会创建一个充满标志和特殊情况的代码。当你的应用程序启动时(通常在 didFinishLaunchingWithOptions
中)
当你的应用程序的 applicationWillEnterForeground
被调用时。
你可以在登录脚本中创建一个静态布尔变量,然后可以从你的AppDelegate中检查它!
static var isShowingTouchID = false
在你的context.evaluatePolicy
调用之前,你可以将其设置为true,并在回调函数中将其设置为false。我相信你使用reply
参数来设置此回调。
然后在你的AppDelegate
中,检查这个布尔值的状态。
最初我在AppDelegate
中使用一个公共变量并将其设置,但我觉得这样做也不好。老实说,我也不喜欢这个解决方案,但这是我能想出的唯一一个。
我甚至尝试在我的登录脚本中覆盖viewDidDisappear
,但很快发现,即使我点击了指纹识别提示上的“取消”按钮,它也没有被调用。
如果有更好的解决方案,我会很乐意知道。
reply
回调之前被调用。我曾经看到过 1-2 秒的延迟。 - Elijah