TouchID调用applicationWillResignActive和applicationDidBecomeActive
我想知道这是否是苹果打算使用TouchIDfunction调用这些生命周期方法。
有没有可能检查touchID进程是否正在调用这些方法(我想避免像在应用程序代理中的BOOL这样的事情,如果当前显示的是touchIDinput,则设置BOOL)
BR
我猜你遇到的问题是,你有代码在applicationWillResignActive
和applicationDidBecomeActive
,影响请求触摸IDvalidation的视图控制器,它引发了一个棘手的循环。
你需要做的是将这些调用移动到applicationDidEnterBackground
和applicationWillEnterForeground
,因为当Touch ID机制被调用时它们不会被调用。
为了解释顺序,当你的应用程序启动以下顺序执行:
-
applicationDidBecomeActive
- ..其他东西你的应用程序
- 您的应用程序调用触摸ID,触发:
-
applicationWillResignActive
…您的应用程序被禁用,直到用户validation指纹(失败或成功)…
-
applicationDidBecomeActive
如果你在applicationDidBecomeActive
有代码,或者applicationWillResignActive
会影响到Touch ID,那么你将会创build一个无限循环或者更糟糕的是,你将会创build一个充满标志和特殊情况的代码。
相反,您应该在两种情况下调用Touch ID:
-
当你的应用程序启动(通常在
didFinishLaunchingWithOptions
) -
当你的应用程序的
applicationWillEnterForeground
被调用。
您可以在您的login脚本中创build一个静态布尔,您可以从您的AppDelegate中检查!
static var isShowingTouchID = false
然后在context.evaluatePolicy
调用之前,可以将其设置为true,并在callback函数中将其设置为false。 我相信你使用reply
参数来设置callback。
然后在你的AppDelegate
,检查这个布尔的状态。
最初我在AppDelegate
中使用了一个公共variables,并设置了这个variables,但我觉得同样的,我不想这样做。 坦率地说,我也不喜欢这个解决scheme,但是这是我唯一能find的。
我甚至尝试在我的login脚本中重写viewDidDisappear
,但是我很快发现,即使在触摸ID提示符上点击“取消”,也不会调用它。
如果有人有更好的解决scheme,我很想知道。