首页 > 解决方案 > 用户取消了 touchID 实现错误

问题描述

如何解决 TouchId 错误:Domain=com.apple.LocalAuthentication Code=-2 "Canceled by user."

我尝试再次添加本地上下文:

let myContext = LAContext()
let myLocalizedReasonString = "Please use your last login for Inspyrus Supplier Central."        

var authError: NSError?
if #available(iOS 8.0, macOS 10.12.1, *) {
    if myContext.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &authError) {
        myContext.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: myLocalizedReasonString) { success, evaluateError in
            DispatchQueue.main.async {
                if success {
                    self.btnLoginClicked(UIButton())
                } else {
                    print(evaluateError?.localizedDescription ?? "Failed to authenticate")
                    // Fall back to a asking for username and password.
                    // ...
                }
            }
        }
    }
}

标签: iosswiftbiometricstouch-idlocalauthentication

解决方案


您可以检查调用evaluateError返回的是否为.evaluatePolicyLAError.userCancel

像这样的东西:

if success {
    //...
}
else if let authError = evaluateError as? LAError {
    switch authError.code {
    case .userCancel:
        // Authentication was canceled by user (e.g. tapped Cancel button).
        break
    default:
        // Other error
        break
    }

    // Or
    switch authError {
    case LAError.userCancel:
        // Authentication was canceled by user (e.g. tapped Cancel button).
        break
    default:
        // Other error
        break
    }
}

推荐阅读