我使用Touch id来识别我的应用程序中的iPhone用户,当我使用canEvaluatePolicy: LAPolicyDeviceOwnerAuthenticationWithBiometrics
来评估用户是否有资格使用Touch id时,但是经过多次失败的尝试,即使用户有资格使用Touch id,它返回FALSE
。
这会导致应用跳过这一步并认为touch id在这个设备中不被支持
下面是我得到的错误:
= com.apple误差域。LocalAuthentication Code=-8 " biometric被锁定"。UserInfo={NSLocalizedDescription= biometric is locked out}
好了,我想我找到答案了。希望能对你有所帮助。当你得到
Error Domain=com.apple.LocalAuthentication Code=-8 "Biometry is locked out." UserInfo={NSLocalizedDescription=Biometry is locked out.}
iOS 10阻止访问TouchID,它可以通过在iOS解锁屏幕上提供密码来解锁,访问TouchID iOS设置并提供密码,或者从应用程序内手动触发密码屏幕。你可以使用以下代码片段打开密码屏幕。
let context = LAContext()
context.evaluatePolicy(LAPolicy.DeviceOwnerAuthentication,
localizedReason: reason,
reply: { (success, error) in
})
当然你可以先检查一下这个策略是否可以评估。
所以最终,当用户成功输入密码时,生物识别将被解锁。在iOS 10之前,这是由操作系统自动完成的。
您可以通过使用密码验证用户身份来解锁生物识别。只需将此函数粘贴到您的项目中,并在使用Touch ID验证用户之前调用此函数。
如果它返回true,运行Touch ID认证,如果由于生物识别锁定而失败,它将要求用户输入iPhone密码解锁生物识别。这将在应用程序内发生。
func isBiometryReady() -> Bool
{
let context : LAContext = LAContext();
var error : NSError?
context.localizedFallbackTitle = ""
context.localizedCancelTitle = "Enter Using Passcode"
if (context.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error))
{
return true
}
if error?.code == -8
{
let reason:String = "TouchID has been locked out due to few fail attemp. Enter iPhone passcode to enable TouchID.";
context.evaluatePolicy(LAPolicy.deviceOwnerAuthentication,
localizedReason: reason,
reply: { (success, error) in
return false
})
return true
}
return false
}