TouchID - 检测添加的新指纹 - evaluatePolicyDomainState何时更改?

时间:2016-07-15 13:34:38

标签: ios swift touch-id

我将TouchID集成到我的应用中。我出于安全原因允许用户打开和关闭它。我想让它在用户添加新指纹时自动关闭。 据Apple称,evaluatedPolicyDomainState

  

仅当canEvaluatePolicy(:error :)方法成功用于生物识别策略或调用evaluatePolicy(:localizedReason:reply :)方法且成功的Touch ID身份验证时,此属性才返回值执行。否则,返回nil。

     

返回的数据是不透明的结构。它可用于与此属性返回的其他值进行比较,以确定授权指纹的数据库是否已更新。但是,无法根据此数据确定变更的性质。

但是,我添加了新指纹,evaluatedPolicyDomainState保持不变。

有关如何确保更新evaluatedPolicyDomainState或是否有其他方法可以检查是否添加了新指纹的任何想法?

2 个答案:

答案 0 :(得分:12)

所以经过几个小时的挣扎,我终于找到了解决方案。

ALTER TABLE phones ADD CONSTRAINT chk_person CHECK (persons.allowed  > 0)

每次添加或删除指纹时,域状态都会发生变化。您需要致电 let context = LAContext() context.canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, error: nil) if let domainState = context.evaluatedPolicyDomainState where domainState == oldDomainState { // Enrollment state the same } else { // Enrollment state changed } canEvaluatePolicy进行更新。

答案 1 :(得分:0)

以下是将 evaluatePolicyDomainState 的数据值转换为字符串并将其存储在钥匙串中的解决方案。如果Touch ID有任何更改,那么您只需要比较 evaluatePolicyDomainState 的值。

if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) {
    if let domainState = context.evaluatedPolicyDomainState {
        let bData = domainState.base64EncodedData()
        if let decodedString = String(data: bData, encoding: .utf8) {
            print("Decoded Value: \(decodedString)")
        }
    }
}

注意:我没有为Face ID测试此代码,我相信它对两者都有用。