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