【发布时间】:2014-11-20 01:08:12
【问题描述】:
我想知道 Apple 是否打算使用 TouchID 功能调用这些生命周期方法。
是否有可能检查 touchID 进程是否正在调用这些方法(我想避免在应用程序委托中设置 BOOL 之类的东西,如果当前显示 touchID 输入则设置......)
br
【问题讨论】:
-
您找到答案了吗?我也想知道。
我想知道 Apple 是否打算使用 TouchID 功能调用这些生命周期方法。
是否有可能检查 touchID 进程是否正在调用这些方法(我想避免在应用程序委托中设置 BOOL 之类的东西,如果当前显示 touchID 输入则设置......)
br
【问题讨论】:
我猜您遇到的问题是applicationWillResignActive 和applicationDidBecomeActive 中的代码会影响请求 Touch ID 验证的视图控制器,并且会引发一个棘手的循环。
您需要做的是将这些调用移至applicationDidEnterBackground 和applicationWillEnterForeground,因为在调用 Touch ID 机制时它们不会被调用。
为了解释顺序,当您的应用启动时,会执行以下顺序:
applicationDidBecomeActiveapplicationWillResignActive...在用户验证指纹(失败或 成功)...
applicationDidBecomeActive如果您在applicationDidBecomeActive - 或- applicationWillResignActive 中有影响 Touch ID 的代码,您将创建一个无限循环或更糟的是,您将创建充斥着标志和特殊情况的代码。
您应该在两种情况下调用 Touch ID:
您的应用启动时(通常在didFinishLaunchingWithOptions)
当您应用的applicationWillEnterForeground 被调用时。
【讨论】:
您可以在您的登录脚本中创建一个静态布尔值,您可以从您的 AppDelegate 中进行检查!
static var isShowingTouchID = false
那么在你调用context.evaluatePolicy之前,你可以将其设置为true,并在回调函数中,将其设置为false。我相信你使用reply 参数来设置回调。
然后在你的AppDelegate中,检查这个布尔值的状态。
最初我在AppDelegate 中使用公共变量并设置它,但我也有类似的感觉,我不想这样做。坦率地说,我也不喜欢这个解决方案,但这是我唯一能想到的解决方案。
我什至尝试在我的登录脚本中覆盖 viewDidDisappear,但我很快发现即使在触摸 ID 提示上点击“取消”时它也没有被调用。
如果有人有更好的解决方案,我很想知道。
【讨论】:
reply 回调之前调用。我发现有 1-2 秒的延迟。