我将TouchID集成到我的应用中。我出于安全原因允许用户打开和关闭它。我想让它在用户添加新指纹时自动关闭。
据Apple称,evaluatedPolicyDomainState
仅当canEvaluatePolicy(:error :)方法成功用于生物识别策略或调用evaluatePolicy(:localizedReason:reply :)方法且成功的Touch ID身份验证时,此属性才返回值执行。否则,返回nil。
返回的数据是不透明的结构。它可用于与此属性返回的其他值进行比较,以确定授权指纹的数据库是否已更新。但是,无法根据此数据确定变更的性质。
但是,我添加了新指纹,evaluatedPolicyDomainState
保持不变。
有关如何确保更新evaluatedPolicyDomainState
或是否有其他方法可以检查是否添加了新指纹的任何想法?
答案 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测试此代码,我相信它对两者都有用。