LABiometryType в iOS11 всегда возвращает None

введите описание изображения здесь

Независимо от того, какие параметры настроены в настройках кода доступа и touchId устройства, LAContext всегда возвращает none. Это просто предупреждение, а не исключение.

Он работает только в бета-версии XCode 9.1 в бета-версии iOS11.1, как было предложено :(


person guhan0    schedule 03.10.2017    source источник
comment
да, как в iPhone 7 Plus под управлением iOS 11, так и в iPad Pro 12,9 дюйма, но с журналом консоли как [LAClient] initWithExistingContext -> (null), Error Domain = NSCocoaErrorDomain Code = 4099 Соединение со службой с именем com.apple.CoreAuthentication.daemon было недействительным от этого процесса. UserInfo={NSDebugDescription=Соединение со службой com.apple.CoreAuthentication.daemon было отменено этим процессом.}   -  person guhan0    schedule 03.10.2017
comment
Возможный дубликат сбоя TouchID на некоторых устройствах iPhone 5S   -  person Tamás Sengel    schedule 03.10.2017
comment
canEvaluatePolicy возвращает True в iOS11 правильно, как и ожидалось, и AssessmentPolicy работает хорошо, запрашивая touchId от пользователя. Я получаю предупреждение, а не исключение NSCocoaErrorDomain   -  person guhan0    schedule 03.10.2017


Ответы (4)


Я только что понял проблему! Вы должны вызвать canEvaluatePolicy для правильной установки biometryType.

Пример:

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

    return false
}

Согласно документам Apple для biometryType:

«Это свойство устанавливается только в том случае, если canEvaluatePolicy(_:error:) завершается успешно для биометрической политики. Значение по умолчанию — none».

person ermish    schedule 23.10.2017

Если вы используете код из @Ermish, isFaceIdSupported() вернет false, если на устройстве нет зарегистрированных лиц. Согласно моим последним тестам iOS SDK 11.1, просто вызовите функцию laContext.canEvaluatePolicy и не заботьтесь о результате, а затем проверьте содержимое laContext.biometryType.

Если нет зарегистрированных лиц, canEvaluatePolicy завершится ошибкой, но устройство поддерживает Face ID.

person Lee-der    schedule 27.11.2017
comment
Да, важно то, что вам нужно установить .biometryType в экземпляре laContext с .canEvaluatePolicy(parameters). Я совершил ошибку, каждый раз используя новый экземпляр LAContext(). - person Rickard Elimää; 19.10.2018

Получил ту же проблему здесь, исправил ее с помощью следующего кода. Но это работает только с бета-версией Xcode 9.1 (и бета-версией iOS 11.1 в симуляторе).

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
            }
}
person NBoymanns    schedule 05.10.2017
comment
Это нечестно. Надеемся, что Apple выпустит XCode9.1 до запуска iPhone X. - person guhan0; 06.10.2017

В Xamarin. iOS вам необходимо оценить политику до:

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