Аутентификация по лицу с использованием биометрического API AndroidX в Android

Мне нужно интегрировать биометрическую аутентификацию с использованием аутентификации по отпечатку пальца и лицу. Аутентификация по отпечатку пальца работает отлично, но когда я устанавливаю только аутентификацию по лицу, я получаю ответ «Биометрические данные не зарегистрирован» от метода BiometricManager.from (context) следующим образом:

val biometricManager = BiometricManager.from(context)
    when(biometricManager.canAuthenticate()){
        BiometricManager.BIOMETRIC_SUCCESS ->{
            Log.e(TAG, "App can authenticate using biometrics.")
        }
        BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE ->{
            Log.d(TAG, "Hardware not available")
        }
        BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE ->{
            Log.d(TAG, "Biometric features are currently unavailable.")
        }
        BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED ->{
            Log.d(TAG, "The user hasn't associated any biometric credentials with their account.")
        }
        else ->{
            Log.d(TAG, "Nothing supported")
        }
    }

person Vijay Patole    schedule 28.08.2020    source источник
comment
На каком устройстве и какой версии Android вы тестируете? И используете ли вы биометрическую библиотеку AndroidX или функции, встроенные в Android?   -  person Michael    schedule 28.08.2020
comment
Я использую androidx.biometric: biometric: 1.0.1 для реализации и тестирования на One plus 6t с ОС Android 10.   -  person Vijay Patole    schedule 28.08.2020
comment
Эта проблема также присутствует на моем Galaxy S8, который я использую для тестирования, поэтому это может не зависеть от производителя.   -  person D. McDermott    schedule 28.08.2020
comment
Также тестировал на LG G6, получил тот же результат. Не уверен, что это зависит от производителя.   -  person Vijay Patole    schedule 28.08.2020
comment
лицо зарегистрировано на устройстве?   -  person Rinat Diushenov    schedule 02.09.2020
comment
Да, я тоже пробовал установить только Face   -  person Vijay Patole    schedule 02.09.2020


Ответы (4)


Биометрические API Android будут работать только на устройствах, биометрические функции которых (лицо, отпечаток пальца, радужная оболочка глаза) совместимы с биометрическим стеком Android. У меня есть набор устройств с поддержкой функции Face, среди них лишь немногие поддерживают Android Biometrics.

person Shanker    schedule 03.09.2020

Я сталкиваюсь с той же проблемой при интеграции в свое приложение. Когда я использую

biometricManager.canAuthenticate(BIOMETRIC_STRONG)

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

implementation "androidx.biometric:biometric-ktx:1.2.0-alpha03"
person Abdul Wahab    schedule 15.07.2021

Посмотрев на все препятствия, связанные с реализацией биометрических данных для Android, я решил не использовать метод BiometricManager.from (context), чтобы проверить, включена ли биометрическая аутентификация, вместо того, чтобы проверять, включен ли KEYGUARD_SERVICE и используется после подсказки

BiometricPrompt.PromptInfo.Builder().apply {
            setTitle(getString(R.string.title))
            setSubtitle(getString(R.string.sub_title))
            setConfirmationRequired(true)
            setDeviceCredentialAllowed(true)
        }.build()

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

person Vijay Patole    schedule 07.09.2020
comment
Сработало ли это, когда в устройстве не зарегистрированы биометрические данные (лицо и отпечатки пальцев)? - person Shanker; 07.09.2020
comment
Да, работает, нужно добавить проверку keyguardManager.isKeyguardSecure - person Vijay Patole; 07.09.2020
comment
Что отображается в системной подсказке, когда вы вызываете Authenticate () и на устройстве не зарегистрированы биометрические данные и включен KEYGUARD_SERVICE. На каком устройстве вы это тестировали? Предлагаю вам протестировать на нескольких устройствах - person Shanker; 07.09.2020
comment
да, если биометрические данные не зарегистрированы на устройстве, но включен KEYGUARD_SERVICE, приложение запрашивает блокировку PIN / графического ключа для аутентификации. Я тестировал то же самое на Oneplus 6, LG, Samsung J7, у которых нет биометрического оборудования, а также на устройстве Redmi. - person Vijay Patole; 07.09.2020
comment
@VijayPatole Не могли бы вы поделиться своим кодом? Я застрял в какой-то момент. - person Maulik Dodia; 19.01.2021

Некоторые факты я обнаружил, когда работал с ним. Это основано на реализации биометрического API androidx.biometric: biometric: 1.0.1.

  1. Устройство Samsung не поддерживает распознавание лиц, так как у него нет 3D-разблокировки лица ссылка здесь. Проблема остается открытой со стороны Samsung, поскольку у Samsung была разблокировка по лицу, разработанная самим Samsung, а не из ОС Google. Но он поддерживает сканирование отпечатков пальцев с помощью API биометрического менеджера.
  2. Настоящая разблокировка лица будет работать только с Pixel 4 (это основано на моем тестировании, не уверен, что поддерживает другие устройства, но я тестировал первоклассное устройство - Samsung, включая серию Note и серию Galaxy, а также серию Motorola) Я могу использовать только лицо разблокировать в Pixel 4.
  3. Samsung работает над этим и скоро будет доступен (не уверен, когда).
  4. На данный момент очень немногие приложения поддерживают разблокировку по лицу, поскольку большинство базовых устройств Android не от Google, а разблокировка на основе 3D недоступна на производственной стороне.

Я создал справочный POC, чтобы сообщество могло помочь. В документации нет хорошей документации по обнаружению биометрических изменений. Это чистый код kotlin, который также обнаруживает биометрические изменения и многие функции, такие как пользователь, зарегистрированный в Bio, регистрируется ли устройство в Bio, какой тип биометрических данных, является ли пользователь ранее зарегистрированным. Просмотрите эту ссылку.

person K P    schedule 05.09.2020
comment
Надеюсь, вы не прошли проверку на устройстве Samsung S10, Samsung S10 совместим с биометрическим стеком Android. Утверждение, что IRIS не обрабатывает Biometrics, неверно. Если устройство имеет функцию IRIS, совместимую с биометрическим стеком Android, оно будет работать. В моем репозитории устройств у меня есть устройства Samsung S10, MI и Pixel 4, совместимые с Android Biometrics. - person Shanker; 05.09.2020
comment
Просмотрите документ Android Biometric CDD source.android.com/compatibility/ - person Shanker; 05.09.2020
comment
Пожалуйста, прочтите мой ответ, я упоминаю распознавание лиц. Все устройства совместимы с биометрическими данными. Если внимательно поработать, в S10 есть три разных версии. Я работаю с s10e и до сих пор не поддерживаю его, причина в том, что патч не выпущен самим Samsung и он находится в списке ожидания. Я отредактировал свой ответ, связанный с IRIS, а IRIS не является чисто биометрическим. - person K P; 05.09.2020
comment
Вы можете объяснить мне, почему IRIS не является чисто биометрическим? Я имел в виду ваше заявление. Устройство Samsung не поддерживает распознавание лиц, так как у него нет 3D-разблокировки по лицу. Я также пытаюсь понять, какова зависимость Face Authentication от 3D Face Unlock. - person Shanker; 05.09.2020
comment
Лицо, IRIS и отпечаток пальца являются частью биометрии. Вы можете обратиться к source.android.com/compatibility /. Вопрос касается аутентификации по лицу с помощью Android Biometrics. Дактилоскопические датчики устройства могут быть совместимы с Android Biometrics, но это не означает, что его датчики лица также будут поддерживать Andrid Biometrics. - person Shanker; 05.09.2020
comment
Да, все три биометрические. Устройство Samsung не поддерживает разблокировку по лицу даже с биометрическим менеджером. Можете ли вы подтвердить поддержку разблокировки лица s10 с помощью реализации API биометрического менеджера? Пожалуйста, дайте мне ссылку для вашего кода. - person K P; 05.09.2020
comment
Здесь нет ничего общего с кодом. Да, я подтверждаю, что устройство Samsung S10 поддерживает реализацию Android Biometrics. Возможно, у вас старая версия устройства Samsung S10, которая не поддерживает Android Biometrics. - person Shanker; 05.09.2020
comment
Прошу разблокировку по лицу, а не биометрическую поддержку. - person K P; 05.09.2020
comment
Да чувак, Face unlock поддерживается. Можете мне доверять, я лично это проверял. Я твердо уверен, что stackoverflow - это платформа, помогающая друг другу, и я просто пытаюсь вам объяснить. - person Shanker; 05.09.2020
comment
Просмотрите этот стек stackoverflow.com/questions/55634812/ - person K P; 05.09.2020
comment
Я прошел через это, это более старый пост. Подождите до понедельника, я постараюсь поделиться с вами видео, чтобы оно развеяло ваши сомнения. - person Shanker; 05.09.2020
comment
Найдите изображение в ibb.co/F8LTBpp, которое показывает аутентификацию по лицу и отпечатку пальца в запросе биометрической системы. Примечание. Увеличьте изображение еще больше, чтобы увидеть значок отпечатка пальца. - person Shanker; 08.09.2020
comment
@Shanker: на каком устройстве вы запускаете код и поддерживает ли оно все устройства, имеющие аутентификацию по лицу и отпечатку пальца? ... Что в случае, если для аутентификации установлено только Face? - person Vijay Patole; 16.09.2020