TouchID调用applicationWillResignActive和applicationDidBecomeActive

我想知道这是否是苹果打算使用TouchIDfunction调用这些生命周期方法。

有没有可能检查touchID进程是否正在调用这些方法(我想避免像在应用程序代理中的BOOL这样的事情,如果当前显示的是touchIDinput,则设置BOOL)

BR

我猜你遇到的问题是,你有代码在applicationWillResignActiveapplicationDidBecomeActive ,影响请求触摸IDvalidation的视图控制器,它引发了一个棘手的循环。

你需要做的是将这些调用移动到applicationDidEnterBackgroundapplicationWillEnterForeground ,因为当Touch ID机制被调用时它们不会被调用。

为了解释顺序,当你的应用程序启动以下顺序执行:

  1. applicationDidBecomeActive
  2. ..其他东西你的应用程序
  3. 您的应用程序调用触摸ID,触发:
  4. applicationWillResignActive

…您的应用程序被禁用,直到用户validation指纹(失败或成功)…

  1. 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,我很想知道。