Еще рано спрашивать, но я планирую добавить функцию специально для FaceID, поэтому перед этим мне нужно проверить, поддерживает ли устройство FaceID или нет? Нужно предложение и помощь. Заранее спасибо.
Как определить, поддерживает ли устройство FaceID или нет?
comment
Вы удосужились прочитать документацию Apple? developer.apple.com/documentation/localauthentication/
- person Ashley Mills   schedule 25.09.2017
comment
Я гуглил и искал в Stackoverflow, но не нашел правильного ответа, поэтому после этого прочитал документацию Apple и опубликовал ответ, я надеюсь, что это поможет другим, кто приходит сюда (stackoverflow), найти быстрое решение, когда у них мало времени :). stackoverflow.com/a/46402895/671060
- person Aleem   schedule 02.11.2017
Ответы (4)
Я обнаружил, что вам нужно вызвать canEvaluatePolicy, прежде чем вы правильно получите тип биометрии. Если вы этого не сделаете, вы всегда получите 0 для необработанного значения.
Что-то вроде этого в Swift 3, протестировано и работает в Xcode 9.0 и бета-версии 9.0.1.
class func canAuthenticateByFaceID () -> Bool {
//if iOS 11 doesn't exist then FaceID doesn't either
if #available(iOS 11.0, *) {
let context = LAContext.init()
var error: NSError?
if context.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error) {
//As of 11.2 typeFaceID is now just faceID
if (context.biometryType == LABiometryType.typeFaceID) {
return true
}
}
}
return false
}
Конечно, вы могли бы написать это просто для того, чтобы увидеть, является ли он биометрическим, и вернуть тип вместе с логическим значением, но этого должно быть более чем достаточно для большинства.
person
Stuart P.
schedule
31.10.2017
Мы обнаружили, что этот код работает, если в телефоне есть идентификатор лица, и он зарегистрирован и в порядке. Однако, если идентификатор лица не зарегистрирован или если он блокируется из-за распознавания слишком большого количества неправильных лиц, эта функция возвращает false (что приводит к тому, что наш код, по крайней мере, идет по пути неверного Touch ID). Кто-нибудь знает способ определить, поддерживает ли устройство Face ID независимо от того, зарегистрировано оно или заблокировано?
- person Orion Edwards; 09.02.2018
Это всегда возвращает false на симуляторе iPhone X
- person Bogdan Razvan; 13.06.2018
На самом деле не всегда: только когда он не зачислен. В строке меню симулятора для iPhone X выберите «Оборудование» > «Идентификатор лица» > «Зарегистрировано».
- person Manu Mateos; 21.06.2018
Версия Objective-C
- (BOOL) isFaceIdSupported{
if (@available(iOS 11.0, *)) {
LAContext *context = [[LAContext alloc] init];
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:nil]){
return ( context.biometryType == LABiometryTypeFaceID);
}
}
return NO;
}
person
Hai Hw
schedule
05.12.2017
Спасибо, Эшли Миллс, я создал функцию для обнаружения FaceID в устройстве.
- (BOOL)canAuthenticateByFaceID {
LAContext *context = [[LAContext alloc] init];
if context.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error) {
if (context.biometryType == LABiometryTypeFaceID && @available(iOS 11.0, *)) {
return YES;
} else {
return NO;
}
}
}
Надеюсь, это поможет другим. Удачного кодирования!!
Наконец-то я написал собственную библиотеку для определения FaceID здесь
person
Aleem
schedule
25.09.2017
Привет, Алим, есть ли у вас какие-либо ссылки на то, как использовать идентификатор лица для аутентификации пользователя из нашего приложения. Я проверил онлайн, но не смог найти ни одного.
- person Sid; 28.09.2017
В Swift я получаю 0 на любом устройстве в Симуляторе для: context.biometryType.rawValue (iPhoneX, iPhone8). Разве это не должно возвращать 2 и 1 (typeFaceID, typeTouchID)
- person mica; 08.10.2017
mica Я обнаружил, что проблема заключалась в том, что политика не оценивалась в первую очередь, более подробно опубликованная в ответе выше в обычный день Swift!
- person Stuart P.; 01.11.2017
Неверный код. Давайте посмотрим комментарий к свойству: Это свойство устанавливается только в том случае, если canEvaluatePolicy завершается успешно для биометрической политики.
- person myaug; 10.11.2017
canEvaluatePolicy
не распространяется на то, ЕСТЬ ли устройство Face ID или нет! может еще не поставил!
- person Mo Farhand; 25.09.2018
Версия, совместимая со Swift 4.
var isFaceIDSupported: Bool {
if #available(iOS 11.0, *) {
let localAuthenticationContext = LAContext()
if localAuthenticationContext.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) {
return localAuthenticationContext.biometryType == .faceID
}
}
return false
}
person
rockdaswift
schedule
14.05.2018
canEvaluatePolicy
не распространяется на то, ЕСТЬ ли устройство Face ID или нет! может еще не поставил!
- person Mo Farhand; 25.09.2018