2016-07-15 15 views
1

Ich integriere TouchID in meine App. Ich erlaube dem Benutzer, es aus Sicherheitsgründen ein- und auszuschalten. Ich möchte, dass es automatisch ausgeschaltet wird, wenn der Benutzer einen neuen Fingerabdruck hinzufügt. Laut Apple evaluatedPolicyDomainStateTouchID - Erkennen neuer Fingerabdrücke hinzugefügt - Wann ändert sich evaluatedPolicyDomainState?

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.

Allerdings bin ich das Hinzufügen einer neuen Fingerabdrücke und evaluatedPolicyDomainState bleibt gleich.

Irgendeine Idee, wie kann ich sicherstellen, evaluatedPolicyDomainState wird aktualisiert oder wenn es eine andere Möglichkeit der Überprüfung, ob ein neuer Fingerabdruck hinzugefügt wurde?

Antwort

8

Nachdem ich ein paar Stunden gekämpft hatte, fand ich endlich die Lösung.

Jedes Mal, wenn Sie einen Fingerabdruck hinzufügen oder löschen, ändert sich der Domänenstatus. Sie müssen canEvaluatePolicy für evaluatedPolicyDomainState aufrufen, um aktualisiert zu werden.

+0

Hallo Cristian, wir haben auch diese Voraussetzung in unserer App.Kannst du bitte sagen, was ich OldDomainState Variable zuweisen soll? – RXGangam

+0

Wenn Sie den Benutzer zum ersten Mal auffordern, touchID einzurichten, verwenden Sie 'context.evaluatePolicy'. Wenn dies erfolgreich ist, rufen Sie die aktuelle Richtlinie ab und speichern sie in oldDomainState. –

+0

Ich habe kSecAccessControlTouchIDCurrentSet verwendet. Jetzt funktioniert es wie erwartet. – RXGangam

0

Unten ist die Lösung, um den Datenwert von evaluatedPolicyDomainState in Zeichenfolge zu konvertieren und im Schlüsselbund zu speichern. Wenn sich die Touch-ID ändert, müssen Sie nur den Wert evaluatedPolicyDomainState vergleichen.

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

Hinweis: Ich habe diesen Code für das Gesicht Id nicht getestet haben, glaube ich, wird es für beide arbeiten.

Verwandte Themen