我在视图控制器上实现了密码/ TouchID / FaceID,当我点击成功案例时,我希望提示停止触发,但它只是一遍又一遍地触发。
在我的VC中:
var context: LAContext!
func authenticateReturningUser() {
context = LAContext()
var error: NSError?
if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) {
let reason = "Verify that this is your device to continue."
context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: reason) { success, error in
DispatchQueue.main.sync {
guard success else {
guard let error = error else {
// show error
return
}
switch error {
case LAError.userCancel:
// do stuff
return
default: return
}
}
print("success")
}
}
}
}
如果用户成功授权,则提示应该触发一次,而不是再次触发
修改:
从AppDelegate的authenticateReturningUser
函数调用 applicationDidBecomeActive
:
self.coverVC?.completionHandler = { self.removeBackgroundVC() }
self.coverVC?.authenticateReturningUser()
答案 0 :(得分:1)
据我记忆,在显示Touch ID提示时,您的应用会变为无效状态。因此,当提示被解除时,您的应用再次变为活动状态,再次触发应用代表的applicationDidBecomeActive
。
您可以考虑引入一个标记,用于存储应用由于Touch ID / Face ID等原因而变为非活动状态,还是由于其他原因而在applicationDidBecomeActive
中使用它来决定是否应该触发身份验证。< / p>
答案 1 :(得分:0)
你在哪里打authenticateReturningUser()
?您可能想要创建一个静态布尔值authenticated
,如果为false,则允许调用authenticateReturningUser()
,如果为true,则跳过调用,并在调用该函数后设置authenticated = true
。