Touch ID: биометрия заблокирована. Код =-8
Я использую Touch ID, чтобы идентифицировать пользователей iPhone в моем приложении, когда это используется canEvaluatePolicy: LAPolicyDeviceOwnerAuthenticationWithBiometrics
оценить, имеет ли пользователь право использовать Touch id, но после многих неудачных попыток, даже если пользователь имеет право использовать Touch id, возвращается FALSE
,
И это заставит приложение пропустить этот шаг и подумает, что сенсорный идентификатор не поддерживается в этом устройстве.
Вот ошибка, которую я получаю:
Ошибка Domain=com.apple.LocalAuthentication Code=-8 "Биометрия заблокирована". UserInfo={NSLocalizedDescription= Биометрия заблокирована.}
2 ответа
Хорошо, я думаю, что нашел ответ. Надеюсь, это поможет вам. Когда вы получаете
Error Domain=com.apple.LocalAuthentication Code=-8 "Biometry is locked out." UserInfo={NSLocalizedDescription=Biometry is locked out.}
iOS 10 блокирует доступ к TouchID, его можно разблокировать, введя пароль на экране разблокировки iOS, получив доступ к настройкам iOS TouchID и указав там пароль, или вручную вызвав экран пароля из приложения. Вы можете открыть экран пароля с помощью следующего фрагмента.
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
}