在iOS 13上,生物识别身份验证警报不会在旧手机上显示

时间:2019-10-02 04:55:03

标签: swift ios13 biometrics

在6、6s等较旧的iPhone上。生物识别身份验证对话框/警报被隐藏。如果您按下iPhone上的“主页”按钮以通过指纹进行身份验证,它仍然可以使用,但是对话框/警报被隐藏了,这会使用户感到困惑。

各种来源(1)(2)将此报告为iOS 13错误。

这在iOS 12上正常运行,问题在iOS 13上开始。

我的生物特征认证代码如下所示,并在视图控制器的viewDidAppear方法中触发:

    let localAuthContext = LAContext()
    var error: NSError?
    if localAuthContext.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error) {
        localAuthContext.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: "SIGNIN.TITLE.Login".localized) { [weak self] (success, error) in
            if success {
                // success
            } else {
                // failure
            }
        }
    } else {
        // can't evaluate policy
    }

那么,我需要在iOS 13的代码中进行更改吗?还是Apple问题?

3 个答案:

答案 0 :(得分:2)

似乎在处理中存在问题。 我已通过从主队列显示它来解决此问题,因此它肯定会在延迟后显示,但不会隐藏。

DispatchQueue.main.async {

  if localAuthContext.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error) {
    localAuthContext.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: "SIGNIN.TITLE.Login".localized) { [weak self] (success, error) in
        if success {
            // success
        } else {
            // failure
        }
    }
  } else {
     // can't evaluate policy
  }

}

答案 1 :(得分:0)

它仅在iOS 13及更高版本上发生。解决方案试图像这样两次调用评价函数:

let systemVersion = UIDevice.current.systemVersion
// Trick here: Try to do an pre-evaluate
if systemVersion.compare("13.0", options: .numeric) != .orderedAscending {
    context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "Authenticate to open the app", reply: { (_, _) in
         //Ignore callback here
     })
}

context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "Authenticate to open the app", reply: { (success, error) in
    // Handle callback here
})

到目前为止,已针对所有iOS 13.x.x版本进行了测试并正常运行。

答案 2 :(得分:0)

这似乎是较旧的iOS 13版本上的Apple问题。我无法从iOS 13.1.2开始重现此问题。