我想知道 Apple 是否打算使用 TouchID 功能调用这些生命周期方法。
是否有可能检查 touchID 进程是否正在调用这些方法(我想避免在应用程序委托中设置 BOOL 之类的东西,如果当前显示 touchID 输入则设置..)
br
我猜你遇到的问题是你有代码,applicationWillResignActive
这applicationDidBecomeActive
会影响请求 Touch ID 验证的视图控制器,并且它会引发一个棘手的循环。
您需要做的是将这些调用移至applicationDidEnterBackground
and applicationWillEnterForeground
,因为在调用 Touch ID 机制时不会调用它们。
为了解释这个序列,当您的应用程序启动时,会执行以下序列:
applicationDidBecomeActive
applicationWillResignActive
...在用户验证指纹(失败或成功)之前,您的应用程序将被禁用...
applicationDidBecomeActive
如果您有代码影响 Touch ID,您将创建一个无限循环,applicationDidBecomeActive
或者applicationWillResignActive
更糟糕的是,您将创建充斥着标志和特殊情况的代码。
相反,您应该在两种情况下调用 Touch ID:
当您的应用启动时(通常在didFinishLaunchingWithOptions
)
当您的应用程序applicationWillEnterForeground
被调用时。
您可以在登录脚本中创建一个静态布尔值,您可以从 AppDelegate 中检查!
static var isShowingTouchID = false
然后在你context.evaluatePolicy
调用之前,你可以将它设置为true,并在回调函数中,将它设置为false。我相信您使用该reply
参数来设置回调。
然后在你的AppDelegate
,检查这个布尔的状态。
最初我在其中使用公共变量AppDelegate
并对其进行设置,但我也有类似的感觉,因为我不想这样做。坦率地说,我也不喜欢这个解决方案,但这是我唯一能想到的。
我什至尝试viewDidDisappear
在我的登录脚本中覆盖,但我很快发现即使我在触摸 ID 提示上点击“取消”,它也没有被调用。
如果有人有更好的解决方案,我很想知道。