25

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

是否有可能检查 touchID 进程是否正在调用这些方法(我想避免在应用程序委托中设置 BOOL 之类的东西,如果当前显示 touchID 输入则设置..)

br

4

2 回答 2

52

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

您需要做的是将这些调用移至applicationDidEnterBackgroundand applicationWillEnterForeground,因为在调用 Touch ID 机制时不会调用它们。

为了解释这个序列,当您的应用程序启动时,会执行以下序列:

  1. applicationDidBecomeActive
  2. ..您的应用程序所做的其他事情
  3. 您的应用调用 Touch ID,它会触发:
  4. applicationWillResignActive

...在用户验证指纹(失败或成功)之前,您的应用程序将被禁用...

  1. applicationDidBecomeActive

如果您有代码影响 Touch ID,您将创建一个无限循环,applicationDidBecomeActive或者applicationWillResignActive更糟糕的是,您将创建充斥着标志和特殊情况的代码。

相反,您应该在两种情况下调用 Touch ID:

  • 当您的应用启动时(通常在didFinishLaunchingWithOptions

  • 当您的应用程序applicationWillEnterForeground被调用时。

于 2014-12-18T23:23:06.703 回答
4

您可以在登录脚本中创建一个静态布尔值,您可以从 AppDelegate 中检查!

static var isShowingTouchID = false

然后在你context.evaluatePolicy调用之前,你可以将它设置为true,并在回调函数中,将它设置为false。我相信您使用该reply参数来设置回调。

然后在你的AppDelegate,检查这个布尔的状态。

最初我在其中使用公共变量AppDelegate并对其进行设置,但我也有类似的感觉,因为我不想这样做。坦率地说,我也不喜欢这个解决方案,但这是我唯一能想到的。

我什至尝试viewDidDisappear在我的登录脚本中覆盖,但我很快发现即使我在触摸 ID 提示上点击“取消”,它也没有被调用。

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

于 2017-07-25T23:27:58.710 回答