6

我在我的应用程序中使用 Touch id 来识别 iPhone 用户,何时canEvaluatePolicy: LAPolicyDeviceOwnerAuthenticationWithBiometrics用于评估用户是否有资格使用 Touch id,但在多次尝试失败后,即使用户有资格使用 touch id,它也会返回FALSE

这将导致应用程序跳过此步骤并认为此设备不支持触摸 ID。

这是我得到的错误:

错误 Domain=com.apple.LocalAuthentication Code=-8 “生物识别被锁定。” UserInfo={NSLocalizedDescription=生物特征被锁定。}

4

2 回答 2

12

好的,我想我找到了答案。希望它会帮助你。当你拿到时

Error Domain=com.apple.LocalAuthentication Code=-8 "Biometry is locked out." UserInfo={NSLocalizedDescription=Biometry is locked out.}

iOS 10 阻止了对 TouchID 的访问,可以通过在 iOS 解锁屏幕上提供密码、访问 TouchID iOS 设置并在那里提供密码来解锁它,或者从应用程序内手动触发密码屏幕。您可以使用以下代码段打开密码屏幕。

let context = LAContext()
context.evaluatePolicy(LAPolicy.DeviceOwnerAuthentication,
                           localizedReason: reason,
                           reply: { (success, error) in
})

当然,您可以先检查是否可以评估此​​策略。

所以最终,当用户成功输入密码时,生物识别将被解锁。在 iOS 10 之前,这是由操作系统自动完成的。

于 2016-11-24T11:23:06.327 回答
0

您可以通过使用密码对用户进行身份验证来解锁生物特征。只需将此函数粘贴到您的项目中并在使用 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
}
于 2018-07-09T10:31:33.437 回答