2016-07-15 8 views
1

私は自分のアプリにTouchIDを統合しています。私は、セキュリティ上の理由から、ユーザーにそれをオン/オフできるようにしています。ユーザーが新しい指紋を追加したときに自動的に消灯するようにしたい。アップルによると 、evaluatedPolicyDomainStateTouchID - 新しい指紋を検出しました - evaluatePolicyDomainStateはいつ変化しますか?

This property returns a value only when the canEvaluatePolicy(:error:) method succeeds for a biometric policy or the evaluatePolicy(:localizedReason:reply:) method is called and a successful Touch ID authentication is performed. Otherwise, nil is returned.

The returned data is an opaque structure. It can be used to compare with other values returned by this property to determine whether the database of authorized fingerprints has been updated. However, the nature of the change cannot be determined from this data.

しかし、私は新しい指紋を追加しているとevaluatedPolicyDomainStateは同じまま。

evaluatedPolicyDomainStateが更新されたかどうか、または新しい指紋が追加されたかどうかを確認する方法が他にありますか?

答えて

8

私はついに数時間苦労して解決策を見つけました。

let context = LAContext() 
    context.canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, error: nil) 

    if let domainState = context.evaluatedPolicyDomainState 
     where domainState == oldDomainState { 
     // Enrollment state the same 

    } else { 
     // Enrollment state changed 

    } 

指紋を追加または削除するたびに、ドメインの状態が変更されます。更新するにはevaluatedPolicyDomainStatecanEvaluatePolicyに電話する必要があります。

+0

こんにちはCristian、私たちもこのrequiremnetをアプ​​リに持っています。あなたがoldDomainState変数に割り当てるべきことを教えてください。 – RXGangam

+0

最初にtouchIDを設定するようにユーザーに要求すると、 'context.evaluatePolicy'が使用されます。成功した場合は、現在のポリシーを取得し、oldDomainStateに保存します。 –

+0

私はkSecAccessControlTouchIDCurrentSetを使用しました。今は期待どおりに働いています。 – RXGangam

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)") 
 
     } 
 
    } 
 
}

注:私は、私はそれが両方のために働くだろうと信じて、顔同上のために、このコードをテストしませんでした。

関連する問題