2017-10-03 31 views
9

enter image description hereLABiometryType w iOS11 zawsze powrócić żaden

Nie ważne jakie ustawienia są konfigurowane w ustawieniach touchId hasłem i urządzenia: LAContext zawsze zwraca żadnej. To tylko rzuca mi ostrzeżenie, a nie wyjątek.

jej tylko pracy w Xcode 9.1 Beta w iOS11.1 beta jak sugeruje :(

+0

yeas zarówno w iPhone 7 Plus z systemem iOS 11 i iPad Pro o przekątnej 12,9 cala, ale z dziennikiem konsoli jako "[LAClient] initWithExistingContext -> (null), Error Domain = NSCocoaErrorDomain Code = 4099" Połączenie z servi ce o nazwie com.apple.CoreAuthentication.daemon zostało unieważnione z tego procesu. " UserInfo = {NSDebugDescription = Połączenie z usługą o nazwie com.apple.CoreAuthentication.daemon zostało unieważnione w tym procesie.} " – guhan0

+0

Możliwy duplikat [awarii TouchID na niektórych urządzeniach iPhone 5S] (https://stackoverflow.com/questions/27522482/touchid-crash-on-some-iphone-5s-devices) – the4kman

+0

canEvaluatePolicy return Prawda w iOS11 poprawnie zgodnie z oczekiwaniami i assessPolicy działa poprawnie monitując touchId od użytkownika Otrzymuję ostrzeżenie nie wyjątek NSCocoaErrorDomain – guhan0

Odpowiedz

9

prostu zorientowali się problem trzeba zadzwonić canEvaluatePolicy dla biometryType być prawidłowo ustawione

Przykład:!.

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

    return false 
} 

Jak na Apple docs dla biometryType:

„Ta właściwość ma wartość tylko wtedy, gdy canEvaluatePolicy (_: błąd :) powiedzie dla polityki biometrycznej. Wartością domyślną jest brak. "

3

Mam ten sam problem tutaj, naprawiłem to z następującego kodu. Ale to działa tylko z Xcode 9.1 Beta (11,1 i iOS . beta w symulatorze)

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

      if #available(iOS 11.0, *) { 
       if (laContext.biometryType == LABiometryType.typeFaceID) { 
        print("FaceId support") 
       } else if (laContext.biometryType == LABiometryType.typeTouchID) { 
        print("TouchId support") 
       } else { 
        print("No Biometric support") 
       } 
      } else { 
       // Fallback on earlier versions 
      } 
+0

To nie fair. Apple wypuści XCode9.1 przed uruchomieniem iPhone X. – guhan0

2

Jeśli użyjesz kodu z @Ermish, isFaceIdSupported() zwróci wartość false, jeśli w urządzeniu nie ma zarejestrowanych twarzy Jak na moje ostatnie testy pokazuje na iOS SDK 11.1, wystarczy zadzwonić funkcja laContext.canEvaluatePolicy i nie dbają o wyniku, a następnie sprawdzić zawartość laContext.biometryType.

Jeśli nie ma zapisał twarze The canEvaluatePolicy zawiedzie, ale urządzenie obsługuje twarzy ID.