Как проверить, поддерживает ли устройство аутентификацию по лицу для BiometricPrompt

В моем проекте мы добавляем эту функцию биометрической аутентификации с помощью BiometricPrompt. Биометрические данные можно включить в настройках приложения, но приложение также должно отображаться, если биометрические данные лица поддерживаются на устройстве пользователя.

Основываясь на моем исследовании, официальный способ проверить, есть ли на устройстве Android биометрические данные лица, - это следующий код:

val hasFaceBiometric = packageManager.hasSystemFeature(PackageManager.FEATURE_FACE)

Однако эта проверка кажется ненадежной, поскольку она возвращает истину только в Google Pixel 4. Я тестировал наше приложение на Samsung Galaxy S9 и S10, и они оба, похоже, поддерживают биометрические данные лица, но странно то, что приведенный выше код возвращает false.

Есть ли действительно надежный способ проверить поддержку биометрических данных лица при текущем состоянии биометрических данных лица в Android?


person Jerome Franco    schedule 04.07.2020    source источник
comment
FEATURE_FACE добавлен в API уровня 29, вы уверены, что используете API уровня 29 или выше? в устройствах Samsung, которые вы используете для тестирования?   -  person AgentP    schedule 04.07.2020
comment
Да, устройства samsung работали на android 10. Я также тестировал его на Note 9, работающем на android 9.   -  person Jerome Franco    schedule 04.07.2020


Ответы (1)


Для распознавания лиц от Samsung используется передняя камера, что не считается безопасным биометрическим. Вот что говорят документы:

Функция для getSystemAvailableFeatures и hasSystemFeature: устройство имеет биометрическое оборудование для выполнения аутентификации по лицу.

Я предполагаю, что это проверит, есть ли на устройстве безопасное распознавание лиц, которое есть в Pixel 4. Начиная с Android 10 и выше (у Pie была проблема, из-за которой в API была включена небезопасная биометрия) Samsung никогда не будет показывать BiometricPrompt для распознавания лиц. Если они обеспечат безопасное распознавание лиц в будущем устройстве, эта проверка, вероятно, вернет истину.

person Kevin van Mierlo    schedule 10.08.2020
comment
На данный момент я использую BiometricPrompt на Samsung S10 + для распознавания лиц. Однако необходимо setAllowedAuthenticators: promptInfo = new BiometricPrompt.PromptInfo.Builder().setAllowedAuthenticators(BiometricManager.Authenticators.BIOMETRIC_WEAK); С другой стороны я не нашел способа проверить, доступно ли именно распознавание лиц. - person Roman Pavlov; 01.12.2020
comment
Как я уже сказал, Samsung использует переднюю камеру для распознавания лиц и поэтому небезопасен. Вот почему вы должны специально установить его на BIOMETRIC_WEAK. Если вы используете context.getSystemService(BiometricManager::class.java)?.canAuthenticate() == BiometricManager.BIOMETRIC_SUCCESS, он также проверяет слабые аутентификаторы, которые я обнаружил на собственном горьком опыте. Начиная с Android 11 доступен тот же метод, но вы можете передавать там аутентификаторы. Однако я бы посоветовал не использовать это, так как это совсем небезопасно! Всегда используйте надежные биометрические данные, если у вас нет веских причин для этого. - person Kevin van Mierlo; 01.12.2020