用户拒绝使用生物特征时的生物特征类型
Posted
技术标签:
【中文标题】用户拒绝使用生物特征时的生物特征类型【英文标题】:Biometry Type when user denied biometry usage 【发布时间】:2017-11-23 10:52:38 【问题描述】:在我们的应用中,用户必须注册设备生物特征才能使用它进行身份验证。 注册文字和法律说明根据相关生物特征(注册到touch ID或注册到face ID) 据我发现,生物特征类型可通过 LAContext 获得,但如果用户拒绝使用生物特征,则上下文返回 biometryType=.none
除了询问屏幕尺寸并与 iphone X 进行比较(坏代码)之外,还有什么想法吗?
static fileprivate var biometryType: DSLocalAuthenticationBiometryType
let context = LAContext()
var error: NSError?
let _ = context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error)
if #available(ios 11.0, *)
return context.biometryType == .typeFaceID ? .typeFaceID : .none
else
return .none
谢谢
【问题讨论】:
【参考方案1】:我遇到了同样的问题,我刚刚发现,如果您根据密钥 LAPolicyDeviceOwnerAuthentication 而不是 LAPolicyDeviceOwnerAuthenticationWithBiometrics 进行评估,即使在用户拒绝之后许可,评估成功并且您获得正确的 biometryType。你的代码就像
static fileprivate var biometryType: DSLocalAuthenticationBiometryType
let context = LAContext()
var error: NSError?
let _ = context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error)
if #available(iOS 11.0, *)
return context.biometryType == .typeFaceID ? .typeFaceID : .none
else
return .none
注意:在没有 touch id 和 face id 的设备上,它仍然返回 YES,所以你不会知道设备是否真的有生物识别硬件,iOS 低于 11(不公开属性 biometriyType)
更新
对于 iOS 10 或更低版本的设备,您可以使用 LAPolicyDeviceOwnerAuthenticationWithBiometrics 和往常一样,它会正常运行(返回设备是否支持触摸 Id),因此只需区分正在运行的操作系统版本 :)
让我知道它是否有效:)
最好的
【讨论】:
@Juan iOS 10 可能只知道支持(或不支持)触摸 ID,我说的是来自方法 canEvaluatePolicy 的结果,该方法返回 true 是否设备上有物理指纹传感器.为了确定这一点,在 iOS 10 上,您可以使用策略 LAPolicyDeviceOwnerAuthenticationWithBiometrics。不能考虑在 iPhone X 上运行 iOS 10 的场景,因为它已经随 iOS 11 一起提供,因此没有必要在 iOS10 上使用 biometryType,因为只有当你有指纹传感器时它才会返回 true :)我已经编辑了我的答案,为 iOS 10 案例指定了这个 我不完全确定,但此代码可能会在 11.0.0 上崩溃,我正在使用的应用程序出现问题,但比较的是 .faceID,而不是 .typeFaceID,前者不是直到 11.0.1 才可用,后者不清楚,而且我没有带有 11.0 的设备或模拟器可供检查。以上是关于用户拒绝使用生物特征时的生物特征类型的主要内容,如果未能解决你的问题,请参考以下文章