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

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

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

3 ответа

Решение

Я только что понял проблему! Вы должны позвонить 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".

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

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

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

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

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

   NSError error;
   bool success = context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out error);
   if (context.BiometryType == LABiometryType.TouchId)
   {
       //Do Something
   }
Другие вопросы по тегам