FaceID / TouchID成功案例不断提示进一步进行身份验证

时间:2018-01-25 19:25:21

标签: ios swift uikit localauthentication

我在视图控制器上实现了密码/ 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()

2 个答案:

答案 0 :(得分:1)

据我记忆,在显示Touch ID提示时,您的应用会变为无效状态。因此,当提示被解除时,您的应用再次变为活动状态,再次触发应用代表的applicationDidBecomeActive

您可以考虑引入一个标记,用于存储应用由于Touch ID / Face ID等原因而变为非活动状态,还是由于其他原因而在applicationDidBecomeActive中使用它来决定是否应该触发身份验证。< / p>

答案 1 :(得分:0)

你在哪里打authenticateReturningUser()?您可能想要创建一个静态布尔值authenticated,如果为false,则允许调用authenticateReturningUser(),如果为true,则跳过调用,并在调用该函数后设置authenticated = true