【问题标题】:On iOS 13 the biometric authentication alert does not show on older phones在 iOS 13 上,生物识别身份验证警报不会在旧手机上显示
【发布时间】:2020-01-31 08:56:24
【问题描述】:

在旧款 iPhone(例如 6、6s 等)上,生物特征验证对话/警报是隐藏的。如果您按下 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 的问题?

【问题讨论】:

  • 这是一个 iOS 漏洞,以后会修复。很多人都面临同样的问题。
  • iPhone 8 也有这个问题。

标签: swift ios13 biometrics


【解决方案1】:

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

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
  }

}

【讨论】:

    【解决方案2】:

    这只是在 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 版本上测试并运行良好。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-23
        • 1970-01-01
        • 2020-06-08
        • 1970-01-01
        相关资源
        最近更新 更多