iOS8 Touch ID 失败时如何回退到密码验证?

How to fallback to password authentication when Touch ID fails on iOS 8?

我正在尝试在我的应用程序上实施 Touch ID 身份验证,如果失败(或不可用),我想回退到密码。

这是我的代码:

 LAContext *ctx = [[LAContext alloc] init];
 [ctx evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"Authenticate to access." reply:^(BOOL success, NSError *error) {
        if(success){
            [...]
        }else if(error.code != LAErrorUserFallback){
            [...] //error handler
        }
    }];

当我使用 Touch ID 进行身份验证时,会调用成功。当我在 3 次触摸后无法进行身份验证时,将调用错误处理程序。到这里没问题。但是当我点击输入密码时,它应该显示输入密码屏幕,但没有任何反应。如何显示输入密码屏幕?

您应该首先通过调用 LAContext's [canEvaluatePolicy:error:] 方法检查 TouchID 是否可用,如果 TouchID 不可用,该方法将 return NO

并且 LAErrorUserFallback 适用于 您的 应用程序自己的密码(身份验证)方案,而不是设备。 .

你应该使用 LAPolicyDeviceOwnerAuthentication 而不是 LAPolicyDeviceOwnerAuthenticationWithBiometrics LAContext`s Method

evaluatePolicy: localizedReason:kReasonTitle: reply

canEvaluatePolicy: error:

LAPolicyDeviceOwnerAuthentication:

如果 Touch ID 可用、已注册且未锁定,则首先要求用户输入,否则要求他们输入设备密码这将显示输入密码屏幕

使用 LAPolicyDeviceOwnerAuthentication 而不是 LAPolicyDeviceOwnerAuthenticationWithBiometrics

它将首先提示输入 Touch ID(如果可用)并为设备注册。如果您错误地使用 Touch ID 3 次,则会显示 "Enter passcode" 按钮。点击该按钮后,将显示设备密码屏幕。