在6、6s等较旧的iPhone上。生物识别身份验证对话框/警报被隐藏。如果您按下iPhone上的“主页”按钮以通过指纹进行身份验证,它仍然可以使用,但是对话框/警报被隐藏了,这会使用户感到困惑。
这在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问题?
答案 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开始重现此问题。