在我们的应用中,用户必须注册到设备生物特征仪以进行身份验证。注册文本和法律说明是根据相关生物标准的(注册以触摸ID或注册到面部ID)据我发现,生物特征类型是可以通过可覆盖来获得的,但是如果用户拒绝使用生物特征,则上下文将返回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
}
}
谢谢
我遇到了相同的相同问题,我刚刚发现,如果您根据键 lapolicydeviceownerautheration 进行评估,而不是 lapolyCilyDeviceDeviceOnterAtheration 即使用户拒绝许可后,评估也成功,您将获得正确的生物元素类型。您的代码就像
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
}
}
NOTE :在没有触摸ID和FACE ID的设备上,它仍然返回是的,因此您不知道该设备是否真的具有iOS的生物识别性HW,iOS低于11(不超过11暴露属性的生物量表)
update
对于具有iOS版本10或更低的设备,您可以使用像往常一样,LapolicyDeviceOwnerAthEntericationWithBiometrics,它的行为将正确(是否支持设备支持触摸ID),因此这只是区分运行OS版本的问题:)
让我知道它是否有效:)
最佳