2017-11-08 3 views
4

Entschuldigung, Nichtverfügbarkeit von iPhone-X.Ist das richtig, FaceID zu überprüfen?

Nach dem Start der iPhone-X, jeder will ihre Anwendung sollte mit iOS11 und mit touchID kompatibel sein, aber das Problem ist, es ist zu teuer für einen Entwickler Touch-ID zu testen.

Ich habe kein iPhone, um meinen Code zu überprüfen, aber kann ich das gleiche im iOS-Simulator überprüfen?

let context = LAContext() 
if (context.biometryType == .typeFaceID) { 
     // Face ID 
} 
if (context.biometryType == .typeTouchID) { 
    // Touch ID 
} else { 
    // Stone Age 
} 
+0

See [hier] (https: // Stackoverflow .com/questions/47159066/kann-wir-test-gesicht-id-in-simulator/47160418 # 47 160418) – Kerberos

+0

Vielen Dank für Ihre Hilfe, danke @ kerberos –

Antwort

7

Sie können es auch ohne Gerät testen. Verwenden Sie die Face-ID des Simulators, um Ihren Code zu validieren, und er wird sich auch im iPhone-X ähnlich verhalten.

Der Simulator erkennt ein Gesicht nicht, ermöglicht Ihnen jedoch die Simulation passender und nicht übereinstimmender Gesichter, wenn Sie die Option Enrolled von Face ID aktiviert haben.

In Ihrem View-Controller folgenden Code und versuchen, mit FaceID

import LocalAuthentication 

class ViewController: UIViewController { 


    override func viewDidLoad() { 
     super.viewDidLoad() 
     localAuthentication() 
    } 



    func localAuthentication() -> Void { 

     let laContext = LAContext() 
     var error: NSError? 
     let biometricsPolicy = LAPolicy.deviceOwnerAuthenticationWithBiometrics 

     if (laContext.canEvaluatePolicy(biometricsPolicy, error: &error)) { 

      if let laError = error { 
       print("laError - \(laError)") 
       return 
      } 

      var localizedReason = "Unlock device" 
      if #available(iOS 11.0, *) { 
       if (laContext.biometryType == LABiometryType.faceID) { 
        localizedReason = "Unlock using Face ID" 
        print("FaceId support") 
       } else if (laContext.biometryType == LABiometryType.touchID) { 
        localizedReason = "Unlock using Touch ID" 
        print("TouchId support") 
       } else { 
        print("No Biometric support") 
       } 
      } else { 
       // Fallback on earlier versions 
      } 


      laContext.evaluatePolicy(biometricsPolicy, localizedReason: localizedReason, reply: { (isSuccess, error) in 

       DispatchQueue.main.async(execute: { 

        if let laError = error { 
         print("laError - \(laError)") 
        } else { 
         if isSuccess { 
          print("sucess") 
         } else { 
          print("failure") 
         } 
        } 

       }) 
      }) 
     } 


    } 
} 


FaceID Authentifizierung werden Sie zum ersten Mal aufgefordert, FaceID Erkennung für Ihre Anwendung zu ermöglichen.

enter image description here


Jetzt Face ID Einschreibung ermöglichen und führen Sie Ihre Anwendung Face ID Simulation Testing zu testen.

Hier ist das Simulationsergebnis für übereinstimmende und nicht passende Flächen.

Ergebnis zum Abgleichen Gesicht:

enter image description here


Ergebnis für nicht passendes Gesicht:

enter image description here

+3

Gute Antwort. Ein Schlüssel-Bit, das in diesem Code leicht verloren geht - die 'biometryType'-Eigenschaft hat nichts mit der * Implementierung von * Face-ID-Unterstützung zu tun. Bei der Überprüfung der Registrierung und der Authentifizierung handelt es sich um die gleichen "canEvaluatePolicy" - und "evaluatePolicy" -Rufe, die Sie für die Touch ID verwenden. Verwenden Sie 'biometryType' nicht als Teil Ihrer Authentifizierungslogik, sondern um den Benutzern mitzuteilen, welche Art von Authentifizierung verwendet wird. (Denken Sie an all die Bank-Apps, die Ihnen nach dem ersten Login ein "Benutze Touch ID" -Kontrollkästchen geben - sie müssen stattdessen "Face ID" sagen.) – rickster

+0

@rickster Sie sind herzlich eingeladen, diese Antwort zu bearbeiten und zu verbessern. Bitte teilen Sie Ihre Eingaben, indem Sie diese Antwort bearbeiten. – Krunal

Verwandte Themen