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
}
Другие вопросы по тегам