Добавьте аутентификацию по отпечатку пальца в свое приложение, используя BiometricPrompt

Автор: Lewis Jackson
Дата создания: 13 Май 2021
Дата обновления: 1 Июль 2024
Anonim
Authenticate me. If you can...
Видео: Authenticate me. If you can...

Содержание


Давайте использовать API-интерфейс BiometricPrompt для создания приложения, которое позволит пользователю подтвердить свою личность с помощью отпечатка пальца.

Откройте Android Studio и создайте новый проект, используя шаблон «Пустое действие». При появлении запроса установите минимальный SDK вашего проекта на 28 или выше, так как это предотвратит установку приложения на что-либо более раннее, чем Android Pie.

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

Добавить биометрическую библиотеку

Для начала откройте файл build.gradle уровня модуля и добавьте последнюю версию биометрической библиотеки в качестве зависимости проекта:

Зависимости {реализация androidx.biometric: biometric: 1.0.0-alpha03

Добавьте разрешение USE_BIOMETRIC

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


Откройте манифест вашего проекта и добавьте разрешение «USE_BIOMETRIC»:

Создайте макет вашего приложения

Далее, давайте создадим макет нашего приложения. Я собираюсь добавить одну кнопку, которая при нажатии запускает диалог аутентификации по отпечатку пальца:

Откройте файл strings.xml вашего проекта и добавьте строковый ресурс «auth»:

BiometricPromptSample Аутентификация с помощью отпечатка пальца

Аутентификация личности пользователя

Теперь давайте посмотрим, как вы аутентифицируете личность пользователя, используя BiometricPrompt.


Создать экземпляр биометрической подсказки

Класс BiometricPrompt включает в себя сопутствующий класс Builder (), который можно использовать для создания экземпляра BiometricPrompt и запуска аутентификации:

final BiometricPrompt.PromptInfo promptInfo = новый BiometricPrompt.PromptInfo.Builder ()

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

Чтобы настроить диалог аутентификации, вам необходимо предоставить следующее:

  • SETTITLE. Название запроса аутентификации по отпечатку пальца. (Необходимые)
  • setSubtitle. Подзаголовок запроса аутентификации по отпечатку пальца. (Необязательный)
  • setDescription. Дополнительное описание, которое будет отображаться в вашем диалоге аутентификации. (Необязательный)
  • setNegativeButton (текст, исполнитель, слушатель). Это метка отрицательной кнопки, например, «Отмена» или «Выход». При настройке отрицательной кнопки вам также потребуется предоставить экземпляр Executor и OnClickListener, чтобы пользователь мог закрыть диалоговое окно аутентификации.

На момент написания не было возможности настроить значок или ошибку, которая использовалась в диалоге аутентификации.

Наконец, вам нужно вызвать build (). Это дает нам следующее:

final BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder () .setTitle («Текст заголовка идет сюда») .setSubtitle («Здесь идет субтитр») .setDescription («Это описание») .setNegativeButtonText («Отмена») .build ();

Обрабатывать обратные вызовы аутентификации

Экземпляру BiometricPrompt назначается набор методов обратного вызова для проверки подлинности, которые уведомят ваше приложение о результатах процесса проверки подлинности.

Вам нужно обернуть все эти обратные вызовы в экземпляр класса BiometricPrompt.AuthenticationCallback:

final BiometricPrompt myBiometricPrompt = new BiometricPrompt (активность, новый исполнитель, новый BiometricPrompt.AuthenticationCallback () {

Следующим шагом является реализация некоторых или всех следующих методов обратного вызова:

1. onAuthenticationSucceeded ()

Этот метод вызывается, когда отпечаток пальца успешно сопоставлен с одним из отпечатков пальцев, зарегистрированных на устройстве. В этом сценарии объект AuthenticationResult передается обратному вызову onAuthenticationSucceeded, и ваше приложение затем выполнит задачу в ответ на эту успешную аутентификацию.

Чтобы упростить задачу, наше приложение ответит, напечатав в Log Studio Android Studio:

@Override public void onAuthenticationSucceeded (@NonNull BiometricPrompt.AuthenticationResult result) {super.onAuthenticationSucceeded (result); Log.d (TAG, «Отпечаток пальца успешно распознан»); }

2. onAuthenticationFailed ()

Этот метод запускается, когда сканирование успешно завершено, но отпечаток пальца не соответствует ни одному из отпечатков, зарегистрированных на устройстве. Опять же, наше приложение ответит на это событие аутентификации, напечатав в Logcat:

@Override public void onAuthenticationFailed () {super.onAuthenticationFailed (); Log.d (TAG, «Отпечаток пальца не распознан»); }

3. onAuthenticationError

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

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

@Override public void onAuthenticationError (int errorCode, @NonNull CharSequence errString) {super.onAuthenticationError (errorCode, errString); if (errorCode == BiometricPrompt.ERROR_NEGATIVE_BUTTON) {} else {Log.d (TAG, "Произошла неисправимая ошибка"); }}

4. onAuthenticationHelp

Метод onAuthenticationHelp вызывается всякий раз, когда возникает нефатальная ошибка, и включает в себя код справки и a, которые предоставляют дополнительную информацию об ошибке.

Чтобы сделать наш код простым, я не буду использовать onAuthenticationHelp в нашем приложении, но реализация будет выглядеть примерно так:

@Override public void onAuthenticationHelp (int helpCode, CharSequence helpString) {super.onAuthenticationHelp (helpCode, helpString); biometricCallback.onAuthenticationHelp (helpCode, helpString); }

Наконец, нам нужно вызвать метод authenticate () экземпляра BiometricPrompt:

myBiometricPrompt.authenticate (promptInfo);

Реализация биометрической аутентификации Android Pie

После того, как вы выполнили все вышеперечисленные шаги, ваша MainActivity должна выглядеть примерно так:

import androidx.appcompat.app.AppCompatActivity; импорт androidx.biometric.BiometricPrompt; импорт android.os.Bundle; import java.util.concurrent.Executor; импорт java.util.concurrent.Executors; import androidx.fragment.app.FragmentActivity; импорт android.util.Log; импорт android.view.View; импорт androidx.annotation.NonNull; открытый класс MainActivity extends AppCompatActivity {закрытая статическая конечная строка String TAG = MainActivity.class.getName (); @Override protected void onCreate (Bundle saveInstanceState) {super.onCreate (сохраненныйInstanceState); setContentView (R.layout.activity_main); // Создать пул потоков с одним потоком // Executor newExecutor = Executors.newSingleThreadExecutor (); FragmentActivity активность = это; // Начать прослушивание событий аутентификации // final BiometricPrompt myBiometricPrompt = new BiometricPrompt (activity, newExecutor, new BiometricPrompt.AuthenticationCallback () {@Override // onAuthenticationError вызывается при возникновении фатальной ошибки // public void onAuthenticationError (int errorCode, @NonNull) CharSequence errString) {super.onAuthenticationError (errorCode, errString); if (errorCode == BiometricPrompt.ERROR_NEGATIVE_BUTTON) {} else {// Печатать a в Logcat // Log.d (TAG, «Произошла неисправимая ошибка»);}} // onAuthenticationSucceeded вызывается, когда отпечаток успешно сопоставлен распознано успешно ");} // onAuthenticationFailed вызывается, когда отпечаток не совпадает // @Override public void onAuthenticationFailed () {super.onAuthenticationFailed (); // Распечатать a в журнал cat // Log.d (TAG, «Отпечаток пальца не распознан»); }}); // Создаем экземпляр BiometricPrompt // final BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder () // Добавляем некоторый текст в диалог // .setTitle («Титульный текст идет сюда») .setSubtitle («Субтитры идут здесь» ) .setDescription ("Это описание") .setNegativeButtonText ("Отмена") // Создание диалога // .build (); // Назначаем onClickListener кнопке приложения «Аутентификация» // findViewById (R.id.launchAuthentication) .setOnClickListener (new View.OnClickListener () {@Override public void onClick (View v) {myBiometricPrompt.authenticate (promptInfo);) }); }}

Тестирование вашего проекта

Теперь, когда вы создали свой проект, пришло время проверить его и посмотреть, действительно ли он добавляет аутентификацию по отпечатку пальца в ваше приложение!

Для запуска этого проекта вам понадобится либо физический смартфон, либо планшет с Android Pie или виртуальное устройство Android (AVD) с предварительным просмотром Android P или выше.

Вам также необходимо зарегистрировать хотя бы один отпечаток на вашем устройстве. Если вы используете физическое устройство Android, то:

  • Защитите свой экран блокировки с помощью PIN-кода, пароля или шаблона, если вы этого еще не сделали (перейдя в «Настройки> Экран блокировки и безопасность> Тип блокировки экрана> Шаблон / PIN-код / ​​Пароль» и затем следуя инструкциям на экране).
  • Запустите приложение «Настройки» на вашем устройстве.
  • Выберите «Блокировка экрана и безопасность».
  • Выберите «Сканер отпечатков пальцев».
  • Следуйте инструкциям, чтобы зарегистрировать один или несколько отпечатков пальцев.

Виртуальные устройства Android не имеют физического датчика касания, поэтому вам нужно смоделировать событие касания:

  • Запустите AVD, если вы еще этого не сделали.
  • Наряду с AVD, вы увидите полосу кнопок. Найдите трехточечную кнопку «Дополнительно» (там, где курсор расположен на следующем снимке экрана) и нажмите ее. Откроется окно «Расширенные элементы управления».
  • В окне «Расширенные элементы управления» выберите «Отпечаток пальца». Откроется набор элементов управления, где вы можете эмулировать различные сенсорные события.
  • Откройте выпадающее меню и выберите отпечаток, который вы хотите зарегистрировать на этом устройстве; Я использую «Палец 1».
  • Теперь давайте переключим наше внимание на эмулируемое устройство. Запустите приложение AVD «Настройки» и выберите «Безопасность и местоположение».
  • Если вы еще не установили ПИН-код, пароль или шаблон, выберите «Блокировка экрана» и следуйте инструкциям на экране для защиты экрана блокировки, а затем вернитесь к главному экрану «Настройки> Безопасность и местоположение».
  • Выберите «Отпечаток пальца», а затем «Добавить отпечаток».
  • Теперь вам будет предложено нажать пальцем на сенсорный датчик. Вместо этого продолжайте нажимать «Прикоснитесь к датчику», пока не увидите «Отпечаток пальца добавлен».

  • Нажмите «Готово».
  • Если вы хотите зарегистрировать дополнительные отпечатки пальцев, промойте и повторите описанные выше шаги.

После того, как вы зарегистрировали хотя бы один отпечаток пальца, вы готовы проверить приложение. Я собираюсь проверить, как наше приложение обрабатывает три различных сценария:

  • Пользователь пытается аутентифицироваться с использованием зарегистрированного отпечатка пальца.
  • Пользователь пытается аутентифицироваться, используя отпечаток пальца, который не зарегистрирован на этом устройстве.
  • Пользователь пытается выполнить аутентификацию с использованием незарегистрированных отпечатков пальцев, несколько раз и в быстрой последовательности.

Давайте попробуем аутентифицироваться, используя отпечаток, который мы только что зарегистрировали на нашем устройстве:

  • Убедитесь, что вы просматриваете Logcat Monitor в Android Studio, так как именно здесь будут появляться различные приложения.

  • Установите ваше приложение на тестовом устройстве.
  • Нажмите кнопку «Аутентификация с помощью отпечатка пальца» вашего приложения. Откроется диалоговое окно аутентификации по отпечатку пальца.
  • Если вы используете физическое устройство, нажмите и удерживайте палец на сенсорном датчике устройства. Если вы используете AVD, используйте кнопку «Прикоснитесь к сенсору», чтобы смоделировать сенсорное событие.
  • Проверьте монитор Logcat. Если аутентификация прошла успешно, вы должны увидеть следующее: «Отпечаток пальца распознан успешно»

Далее, давайте посмотрим, что произойдет, если мы попытаемся пройти аутентификацию с использованием отпечатка пальца, который не зарегистрирован на этом устройстве:

  • Снова нажмите кнопку «Аутентификация с помощью отпечатка пальца» в приложении.
  • Если вы используете AVD, в окне «Расширенные элементы управления» выберите отпечаток, который не зарегистрирован на этом устройстве; Я использую «Палец 2». Нажмите кнопку «Прикоснитесь к сенсору».
  • Если вы используете физический смартфон или планшет на базе Android, нажмите и удерживайте палец на сенсорном датчике устройства - убедитесь, что вы используете палец, который не зарегистрирован на этом устройстве!
  • Проверьте Logcat в Android Studio, теперь он должен отображать «Отпечаток пальца не распознан».

Как уже упоминалось, API-интерфейс BiometricPrompt автоматически обрабатывает чрезмерные неудачные попытки аутентификации. Чтобы проверить эту функциональность:

  • Нажмите кнопку «Аутентификация с помощью отпечатка пальца» вашего приложения.
  • Попытка аутентификации несколько раз в быстрой последовательности с использованием незарегистрированного отпечатка пальца.
  • После нескольких попыток диалоговое окно должно закрыться автоматически. Проверьте Logcat в Android Studio, и вы должны увидеть следующее: «Произошла неисправимая ошибка».

Вы можете скачать полное приложение с GitHub.

Завершение

В этой статье мы рассмотрели новый API-интерфейс BiometricPrompt для Android Pie, который позволяет легко добавлять аутентификацию по отпечатку пальца в ваше приложение. Как вы думаете, BiometricPrompt является усовершенствованием предыдущих методов аутентификации по отпечаткам пальцев в Android? Дайте нам знать в комментариях ниже!

Давайте уберем это с дороги. По сути, вы не должны покупать Mate 30 Pro, не в его нынешнем виде. Это превосходное устройство, но неопределенность Google не позволяет рекомендовать его обычному пользов...

Такое ощущение, что мы слышали о серии Huawei Mate 30 целую вечность, но Huawei наконец-то сделала это официально, выпустив устройства сегодня в Мюнхене. Чего же ожидать от новых телефонов?...

Рекомендуем вам