Независимо от того, какие настройки настроены в настройках пароля устройства и touchId, LAContext всегда возвращает их. Это просто бросает мне предупреждение, а не исключение.
Он работает только в бета-версии XCode 9.1 в бета-версии iOS11.1: (
Независимо от того, какие настройки настроены в настройках пароля устройства и touchId, LAContext всегда возвращает их. Это просто бросает мне предупреждение, а не исключение.
Он работает только в бета-версии XCode 9.1 в бета-версии iOS11.1: (
Я только что понял проблему! Вы должны называть canEvaluatePolicy
для biometryType
для правильной установки.
Пример:
func isFaceIdSupported() -> Bool {
if #available(iOS 11.0, *){
if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) {
return context.biometryType == LABiometryType.typeFaceID
}
}
return false
}
В соответствии с Apple docs для biometryType:
"Это свойство задается только тогда, когда canEvaluatePolicy (_: ошибка:) преуспевает для биометрической политики. Значение по умолчанию равно none."
Получил ту же проблему здесь, исправил ее с помощью следующего кода. Но он работает только с 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
}
}
Если вы используете код из @Ermish, isFaceIdSupported() вернет false, если на устройстве нет зарегистрированных лиц. Согласно моим последним результатам тестов на IOS SDK 11.1, просто вызовите функцию laContext.canEvaluatePolicy и не заботьтесь о результатах, затем проверьте содержимое laContext.biometryType.
Если нет зарегистрированных лиц, canEvaluatePolicy завершится с ошибкой, но устройство поддерживает Face ID.
В Xamarin.iOS вам необходимо оценить политику до:
NSError error;
bool success = context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out error);
if (context.BiometryType == LABiometryType.TouchId)
{
//Do Something
}