LABiometryType в iOS11 всегда возвращает None
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
}