如果TouchID失败,请转发到系统密码验证

sar*_*nar 5 cocoa-touch ios touch-id swift localauthentication

我想使用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)
    }
Run Code Online (Sandbox Code Playgroud)

如果输入它移动到我的应用程序的密码,如何显示此屏幕.如何实现这一点帮助我.谢谢你.

Pau*_*w11 10

如果使用策略,.deviceOwnerAuthentication 则会立即显示"输入密码"选项.

如果您.deviceOwnerAuthenticationWithBiometrics按原样使用,则只有在第一次不成功的生物识别身份验证尝试后才会显示"输入密码"选项.

无论用户如何进行身份验证,都将调用完成闭包.


Kru*_*nal 9

LAPolicy策略枚举值替换deviceOwnerAuthenticationWithBiometricsdeviceOwnerAuthentication

注意:如果用户已启用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)!)
    }
}
Run Code Online (Sandbox Code Playgroud)