我正在开发在开头使用人脸/触摸ID的应用程序。我通过将此函数添加到MainViewController()中来实现此目的:
let context = LAContext()
if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: nil) {
context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "Verifying") { (success, err) in
if success {
DispatchQueue.main.async {
self.loginSuccessfull()
self.button.removeFromSuperview()
}
} else {
if let err = err {
print(err)
}
}
}
}
[在ViewDidLoad中和通过按钮都被调用,如this video中所示。
如您所见,当我尝试关闭我的应用程序时,它的行为非常奇怪,我确信这是由FaceID引起的。
是否有解决此问题的建议?
崩溃日志:
Error Domain=com.apple.LocalAuthentication Code=-4 "Caller moved to background." UserInfo={NSLocalizedDescription=Caller moved to background.}
我相信我已经通过延迟评估找到了解决问题的方法。
[我注意到,当我在评估之前在UI中有某种延迟(例如:动画在显示面部ID警报之前将徽标向上移动时,崩溃将完全停止。
所以我像这样延迟了另一个测试:
override func viewDidAppear(_ animated: Bool) {
let context = LAContext()
if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "Biometric test") { success, error in
DispatchQueue.main.async {
if success {
doSome()
} else {
if let error = error { print(error) }
}
}
}
}
}
}
通过该实现,我的崩溃次数为零。
**:我还尝试了从0.1到2.0秒的不同延迟时间,所有延迟时间都对我有用。