在我们的应用中,用户必须注册到设备生物特征才能使用它进行身份验证。
注册文本和法律注释根据相关生物特征(注册为触摸ID或注册为面部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
}
}
谢谢
最佳答案
我有一个相同的问题,我刚刚发现,即使您拒绝了用户的许可后,如果您根据键 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
}
}
注意:在没有触摸ID和面部ID的设备上,它仍返回YES,因此您将不知道该设备是否具有低于11的iOS的生物统计学硬件(不公开biometriyType属性)
更新
对于iOS版本10或更低版本的设备,您可以使用
LAPolicyDeviceOwnerAuthenticationWithBiometrics像往常一样,它将正常运行(设备是否支持触摸ID均返回true),因此只需区分正在运行的OS版本即可:)
让我知道它是否有效:)
最好