web-dev-qa-db-fra.com

LABiometryType dans iOS11 renvoie toujours None

enter image description here

Quels que soient les paramètres configurés dans les paramètres de code d'accès et de TouchId de l'appareil, LAContext n'en renvoie toujours aucun. Il me lance juste un avertissement et non l'exception.

Cela ne fonctionne que dans XCode 9.1 Beta dans iOS11.1 beta comme suggéré :(

20
guhan0

Je viens de comprendre le problème! Vous devez appeler canEvaluatePolicy pour que biometryType soit correctement défini.

Exemple:

func isFaceIdSupported() -> Bool {
    if #available(iOS 11.0, *){
        if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) {
            return context.biometryType == LABiometryType.typeFaceID
        }
    }

    return false
}

Selon le Apple docs pour biometryType:

"Cette propriété n'est définie que lorsque canEvaluatePolicy (_: error :) réussit pour une stratégie biométrique. La valeur par défaut est aucune."

23
Ermish

Vous avez le même problème ici, corrigé avec le code suivant. Mais cela ne fonctionne qu'avec la version Xcode 9.1 Beta (et iOS 11.1 beta dans le simulateur).

if (laContext.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: nil)) {

            if #available(iOS 11.0, *) {
                if (laContext.biometryType == LABiometryType.faceID) {
                    print("FaceId support")
                } else if (laContext.biometryType == LABiometryType.touchID) {
                    print("TouchId support")
                } else {
                    print("No Biometric support")
                }
            } else {
                // Fallback on earlier versions
            }
}
4
NBoymanns

Si vous utilisez le code de @Ermish, isFaceIdSupported () renverra false s'il n'y a aucun visage inscrit sur l'appareil. Comme le montrent mes derniers tests sur iOS SDK 11.1, il suffit d'appeler la fonction laContext.canEvaluatePolicy et de ne pas se soucier du résultat, puis de vérifier le contenu de laContext.biometryType.

S'il n'y a pas de visages inscrits, canEvaluatePolicy échouera, mais l'appareil prend en charge Face ID.

3
Lee-der

Dans Xamarin.iOS, vous devez évaluer la stratégie avant:

   NSError error;
   bool success = context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out error);
   if (context.BiometryType == LABiometryType.TouchId)
   {
       //Do Something
   }
0
El0din