是否可以在LAContext.evaluatePolicy
通话后以编程方式取消TouchID警报对话框?如果是的话:怎么样?
并非每个Apple发布的API都会将其放入developer.apple.com(或Xcode的文档查看器)中的文档中.API差异列出公共API,因此您在头文件中看到的任何内容(请参阅LocalAuthentication/LAContext.h
参考资料)和从这些标头生成的Swift接口.标题中的任何内容都是公共API,因此您可以随意调用它.
有时(但不总是)未记录的API有很好的标题注释解释如何使用它们...谢天谢地LAContext.invalidate()
是其中之一:
/// Invalidates the context. /// /// @discussion The context is invalidated automatically when it is (auto)released. This method /// allows invalidating it manually while it is still in scope. /// /// Invalidation terminates any existing policy evaluation and the respective call will /// fail with LAErrorAppCancel. After the context has been invalidated, it can not be /// used for policy evaluation and an attempt to do so will fail with LAErrorInvalidContext. /// /// Invalidating a context that has been already invalidated has no effect. @available(iOS 9.0, *) public func invalidate()
实际上,看起来invalidate()
在触摸ID警报可见时进行呼叫应该将其解除.(我没有试过自己.)
iOS 11更新:请注意,在具有Face ID而非Touch ID的设备上,调用时出现的类似警报/ HUD的UI LAContext.evaluatePolicy
不需要或允许交互,并在成功验证后自行解除.从理论上讲,invalidate
呼叫仍然会将其解除(或者如果Face ID无法识别用户,则会显示后续,实际交互式警报).
但是,假设在所有可能的设备和身份验证方法上,您总是有足够的时间LAContext
在请求后取消身份验证,这可能并不明智.