Если TouchID не удается, перешли к системной аутентификации пароля
Я хочу использовать TouchID для проверки подлинности моего приложения, проверка подлинности прошла успешно. Если TouchID не совпадает, открывается предупреждение "Попытаться снова", и в этом предупреждении указывается параметр "Ввести пароль". Если пользователь выбирает это, должна отображаться системная идентификация пароля, но как я могу это сделать?
Здесь поделитесь моим кодом:
func touchIDAuthentication() {
let context = LAContext() //1
var error:NSError?
guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else {
showAlertViewIfNoBiometricSensorHasBeenDetected()
return
}
if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &errorPointer) {
context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason, reply: { (success, error) in
if success {
DispatchQueue.main.async {
print("Authentication was successful")
}
}else {
DispatchQueue.main.async {
self.displayErrorMessage(error: error as! LAError )
print("Authentication was error")
}
}
})
}else {
self.showAlertWith(title: "Error", message: (errorPointer?.localizedDescription)!)
}
}
func displayErrorMessage(error:LAError) {
var message = ""
switch error.code {
case LAError.authenticationFailed:
message = "Authentication Failed."
break
case LAError.userCancel:
message = "User Cancelled."
break
case LAError.userFallback:
message = "Fallback authentication mechanism selected."
break
case LAError.touchIDNotEnrolled:
message = "Touch ID is not enrolled."
case LAError.passcodeNotSet:
message = "Passcode is not set on the device."
break
case LAError.systemCancel:
message = "System Cancelled."
break
default:
message = error.localizedDescription
}
self.showAlertWith(title: "Authentication Failed", message: message)
}
Как показать этот экран, если ввести пароль, он переместится в мое приложение. Как добиться этого, помогите мне. Спасибо заранее.
2 ответа
Замещать LAPolicy
значение enum политики deviceOwnerAuthenticationWithBiometrics
с deviceOwnerAuthentication
Примечание: если у пользователя включено
biometric
(идентификатор лица или сенсорный идентификатор), затем устройство сначала запросит биометрическую аутентификацию, а если пользователь выберет резервную аутентификацию, то толькоdeviceOwnerAuthentication
покажет экран с паролем.
Попробуйте это и увидите:
func touchIDAuthentication() {
let context = LAContext()
var error:NSError?
// edit line - deviceOwnerAuthentication
guard context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) else {
//showAlertViewIfNoBiometricSensorHasBeenDetected()
return
}
// edit line - deviceOwnerAuthentication
if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &errorPointer) {
// edit line - deviceOwnerAuthentication
context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: reason, reply: { (success, error) in
if success {
DispatchQueue.main.async {
print("Authentication was successful")
}
}else {
DispatchQueue.main.async {
//self.displayErrorMessage(error: error as! LAError )
print("Authentication was error")
}
}
})
}else {
// self.showAlertWith(title: "Error", message: (errorPointer?.localizedDescription)!)
}
}
Если вы используете политику .deviceOwnerAuthentication
тогда опция "Введите пароль" отображается сразу.
Если вы используете .deviceOwnerAuthenticationWithBiometrics
, как и вы, то опция "Введите пароль" отображается только после первой неудачной попытки биометрической аутентификации.
Независимо от того, как пользователь аутентифицируется, будет вызвано ваше завершение.