【问题标题】:Touch ID: Biometry is locked out. Code=-8Touch ID:生物识别被锁定。代码=-8
【发布时间】:2016-10-24 07:16:38
【问题描述】:

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

这会导致应用跳过这一步,并认为此设备不支持 touch id。

这是我得到的错误:

Error Domain=com.apple.LocalAuthentication Code=-8 "生物识别被锁定 出。" UserInfo={NSLocalizedDescription=生物特征被锁定。}

【问题讨论】:

  • 您有问题吗?在多次失败的 touch id 尝试后,您需要用户输入他们的密码 stackoverflow.com/questions/29728762/…
  • Mutawe:你找到问题的答案了吗?似乎问题与 iOS 10 有关(对我来说它在 iOS 9 上正常工作)
  • tgebarowski:对我来说,一旦生物识别被锁定,我会要求用户输入他的个人资料密码,因为登录取决于网络服务用户身份验证
  • 穆塔维:明白。所以你没有找到任何方法来解锁生物识别?
  • 什么都没有,很遗憾!

标签: ios objective-c touch-id lacontext


【解决方案1】:

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

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

iOS 10 阻止访问 TouchID,可以通过在 iOS 解锁屏幕上提供密码、访问 TouchID iOS 设置并在此处提供密码来解锁,或者从应用程序内手动触发密码屏幕。您可以使用以下 sn-p 打开密码屏幕。

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

当然你可以先看看这个政策是否可以评估。

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

【讨论】:

  • 如你所说,在 iOS 10 上 TouchID 也可以通过“在应用程序内手动触发密码屏幕”来解锁。但是如何呢?我知道在 iOS 10 之前,你可以再次评估策略,系统将出现密码输入界面,然后激活 TouchID。但是当您在 iOS 10 上执行此操作时,您将永远收到错误代码 -8。任何帮助将不胜感激。:)
  • Neal.Martin,很抱歉这么晚才回复。当您收到此错误时,您必须使用 LAPolicy.DeviceOwnerAuthentication 重新评估策略。执行此操作时,您将显示密码屏幕。当用户输入他的 PIN 时,生物识别将被解锁。在 iOS 10 之前,不需要此步骤。
  • 是的!我自己做的。在使用 DeviceOwnerAuthentication 评估策略后,我得到了成功代码。然后我回到之前的技巧,形成一个检查循环。就是这样!非常感谢你是个好人。 :)
【解决方案2】:

您可以通过使用密码对用户进行身份验证来解锁生物识别。只需将此函数粘贴到您的项目中并在使用 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
}

【讨论】:

  • 嘿@prasad 我在哪里可以找到有关 -8 错误代码的更多信息?
猜你喜欢
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多