Как проверить, какие биометрические данные поддерживаются на уровне API 28+?

Я хочу проверить, какие биометрические данные поддерживаются на устройствах Android с уровнем API 28+, чтобы иметь возможность показывать пользователям соответствующий текст. Например. «Вход по отпечатку пальца», «Вход с помощью лица», «Вход с помощью Iris», «Включить вход по отпечатку пальца», «Включить вход по лицу» и т. Д.

Для определения если можно использовать биометрию. Для версий старше 28 BiometricManager использует FingerprintManagerCompat внутри, поэтому я знаю, что если результат BIOMETRIC_SUCCESS, устройство использует отпечаток пальца.

Есть ли способ узнать, какие биометрические параметры поддерживаются - отпечаток пальца, лицо, радужная оболочка глаза? Возможно, некоторые устройства могут поддерживать более одного.


person Mario Kutlev    schedule 30.10.2019    source источник


Ответы (5)


Только устройства с API29 предоставляют больше биометрических параметров, чем отпечаток пальца.

Проверяя android.hardware.biometrics.BiometricManager.hasBiometrics() (API29), вы можете понять, как проверить, какие биометрические данные доступны:

final PackageManager pm = context.getPackageManager();
        return pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)
                || pm.hasSystemFeature(PackageManager.FEATURE_IRIS)
                || pm.hasSystemFeature(PackageManager.FEATURE_FACE);
person rmgoncalo    schedule 31.10.2019

Кажется, что невозможно узнать, какой биометрический метод используется на Android (в отличие от iOS). Но можно обнаружить поддерживаемые биометрические методы на Android 10:

PackageManager pm = context.getPackageManager();
boolean hasFingerprint = pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT);
boolean hasFace = pm.hasSystemFeature(PackageManager.FEATURE_FACE);
boolean hasIris = pm.hasSystemFeature(PackageManager.FEATURE_IRIS);

Поэтому, если телефон поддерживает только функцию лица, вы можете использовать «Войти с помощью лица» в графическом интерфейсе. Если он поддерживает только функцию отпечатка пальца, вы можете использовать «Вход по отпечатку пальца» и т. Д.

Если он поддерживает несколько биометрических методов, вам придется использовать общий текст, например «Биометрический вход».

person petrsyn    schedule 10.11.2019

Кажется, что BiometricManager API спроектирован таким образом, что вызывающее приложение не должно зависеть от используемого метода аутентификации. Так что не имеет значения, как пользователь аутентифицируется, если он успешен (наряду с этим идут требования строгой аутентификации на стороне поставщика https://source.android.com/security/biometric).

В результате плохая вещь: у вас не может быть заголовка, соответствующего методу аутентификации, поэтому вы должны придумать что-то общее вроде «Пожалуйста, авторизуйте операцию». Хорошая новость заключается в том, что диалоговое окно уже отображается в соответствии с поддерживаемым методом аутентификации (например, для аутентификации по отпечатку пальца пользовательский интерфейс представляет текст «Прикоснитесь к датчику отпечатка пальца» рядом с соответствующим значком). Это делается платформой и не может контролироваться вызывающим приложением.

Частичное решение: вы можете специально проверить доступность аутентификации по отпечатку пальца с помощью (теперь устаревшего) API https://developer.android.com/reference/android/hardware/fingerprint/FingerprintManager

person user3118604    schedule 31.10.2019

Официальная рекомендация - использовать Биометрическая библиотека AndroidX. Он поставляется со стандартным пользовательским интерфейсом, который обрабатывает форм-факторы за вас. По сути, он определяет, имеет ли устройство форм-фактор аутентификации по отпечатку пальца или по лицу, и обрабатывает его: как разработчику вам не нужно создавать пользовательский интерфейс биометрической аутентификации. Чтобы проверить, поддерживает ли устройство биометрию, выполните

override fun onClick(view: View) {  // user clicks to authenticate
   val promptInfo = createPromptInfo()
   if (BiometricManager.from(context)
               .canAuthenticate() == BiometricManager.BIOMETRIC_SUCCESS) {
       biometricPrompt.authenticate(promptInfo, cryptoObject)
   } else {
       loginWithAppAccountPassword()
   }
}

Причины, по которым вам следует использовать библиотеку биометрической поддержки:

  • Разработчикам больше не нужно предвидеть разные уровни API в своем коде, потому что библиотека обрабатывает все сопоставления API под капотом. Например, библиотека поддержки без проблем использует FingerprintManager на уровнях API с 23 по 27 и BiometricPrompt на уровне API 28 и выше.
  • Разработчикам больше не нужно создавать собственный пользовательский интерфейс аутентификации. Библиотека предоставляет стандартный и знакомый пользовательский интерфейс, который соответствует форм-фактору биометрической аутентификации пользователя, например аутентификации по отпечатку пальца или по лицу.
  • Разработчики могут проверить, поддерживает ли устройство биометрическую аутентификацию, с помощью одного вызова метода.
person Isai Damier    schedule 25.11.2019

Использование PackageManager позволяет проверить, какие биометрические параметры поддерживаются. Здесь представлена ​​статья, в которой предлагается, как имеют дело с показом строк, понятных для пользователя.

person Mario Kutlev    schedule 06.01.2020