TouchID调用applicationWillResignActive和applicationDidBecomeActive

时间:2014-09-25 09:51:33

标签: ios ios8 touch-id

我想知道Apple是否打算使用TouchID功能调用这些生命周期方法。

是否有可能检查touchID进程是否正在调用这些方法(我想避免在app delegate中设置BOOL,如果当前显示的是touchID输入,则设置为。)

BR

2 个答案:

答案 0 :(得分:41)

我猜你遇到的问题是,applicationWillResignActiveapplicationDidBecomeActive中的代码会影响请求触摸ID验证的视图控制器,并且会引发棘手的循环。

您需要做的是将这些来电转移到applicationDidEnterBackgroundapplicationWillEnterForeground,因为在调用Touch ID机制时不会调用这些来电。

要解释序列,当您的应用程序启动时,执行以下序列:

  1. applicationDidBecomeActive
  2. ..您应用的其他内容
  3. 您的应用会调用Touch ID,该ID会触发:
  4. applicationWillResignActive
  5.   

    ...您的应用被禁用,直到用户验证指纹(失败或   成功)...

    1. applicationDidBecomeActive
    2. 如果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提示上点击“取消”,它也没有被调用。

如果有人有更好的解决方案,我很想知道。