【问题标题】:TouchID calls applicationWillResignActive and applicationDidBecomeActiveTouchID 调用 applicationWillResignActive 和 applicationDidBecomeActive
【发布时间】:2014-11-20 01:08:12
【问题描述】:

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

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

br

【问题讨论】:

  • 您找到答案了吗?我也想知道。

标签: ios ios8 touch-id


【解决方案1】:

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

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

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

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

...在用户验证指纹(失败或 成功)...

  1. applicationDidBecomeActive

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

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

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

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

【讨论】:

  • 您如何建议在 applicationWillEnterForeground 中实施 Touch ID 检查?也就是说,当返回您的应用程序时,它会提示用户并且在他们验证指纹之前不允许他们使用任何东西。
【解决方案2】:

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

static var isShowingTouchID = false

那么在你调用context.evaluatePolicy之前,你可以将其设置为true,并在回调函数中,将其设置为false。我相信你使用reply 参数来设置回调。

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

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

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

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

【讨论】:

  • 这是一个很好的解决方案。请注意,didBecomeActiveNotification 并不总是在 reply 回调之前调用。我发现有 1-2 秒的延迟。
猜你喜欢
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多