Agregue autenticación de huellas digitales a su aplicación, usando BiometricPrompt

Autor: Lewis Jackson
Fecha De Creación: 13 Mayo 2021
Fecha De Actualización: 1 Mes De Julio 2024
Anonim
Agregue autenticación de huellas digitales a su aplicación, usando BiometricPrompt - Aplicaciones
Agregue autenticación de huellas digitales a su aplicación, usando BiometricPrompt - Aplicaciones

Contenido


Usemos la API BiometricPrompt para crear una aplicación que permita al usuario confirmar su identidad con una huella digital.

Abra Android Studio y cree un nuevo proyecto, utilizando la plantilla "Actividad vacía". Cuando se le solicite, configure el SDK mínimo de su proyecto en 28 o superior, ya que esto evitará que su aplicación se instale en algo anterior a Android Pie.

Si desea hacer que su aplicación sea accesible para una gama más amplia de dispositivos Android, entonces debe verificar en qué versión de Android está instalada actualmente su aplicación y luego manejar la autenticación biométrica de manera diferente, dependiendo del nivel de API del dispositivo.

Agregar la biblioteca biométrica

Para comenzar, abra su archivo build.gradle a nivel de módulo y agregue la última versión de la biblioteca Biometric como dependencia del proyecto:


dependencias {implementación androidx.biometric: biometric: 1.0.0-alpha03

Agregue el permiso USE_BIOMETRIC

La API BiometricPrompt le permite acceder a todos los diferentes métodos de autenticación biométrica que admite el dispositivo, a través de un solo permiso.

Abra el Manifiesto de su proyecto y agregue el permiso "USE_BIOMETRIC":

Crea el diseño de tu aplicación

A continuación, creemos el diseño de nuestra aplicación. Voy a agregar un solo botón que, cuando lo toques, abrirá el cuadro de diálogo de autenticación de huellas digitales:

Abra el archivo strings.xml de su proyecto y agregue el recurso de cadena "auth":


BiometricPromptSample Autenticar con huella digital

Autenticando la identidad del usuario

Ahora, veamos cómo autenticaría la identidad del usuario, utilizando BiometricPrompt.

Crear una instancia de solicitud biométrica

La clase BiometricPrompt incluye una clase Builder () complementaria, que puede usar para crear una instancia de BiometricPrompt e iniciar la autenticación:

final BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder ()

Al crear su instancia de BiometricPrompt, deberá definir el texto que debe aparecer en el cuadro de diálogo de autenticación y personalizar el "botón negativo", que es el botón que permite al usuario cancelar la autenticación.

Para configurar el diálogo de autenticación, deberá proporcionar lo siguiente:

  • setTitle. El título de la solicitud de autenticación de huella digital. (Necesario)
  • setSubtitle. El subtítulo de la solicitud de autenticación de huella digital. (Opcional)
  • setDescription. Una descripción adicional que se mostrará en su diálogo de autenticación. (Opcional)
  • setNegativeButton (texto, ejecutor, oyente). Esta es la etiqueta del botón negativo, por ejemplo, "Cancelar" o "Salir". Al configurar el botón negativo, también deberá proporcionar una instancia de Ejecutor y un OnClickListener para que el usuario pueda cerrar el diálogo de autenticación.

Al momento de escribir, no era posible personalizar el ícono o el error que se usa en el diálogo de autenticación.

Finalmente, deberá llamar a build (). Esto nos da lo siguiente:

final BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder () .setTitle ("El texto del título va aquí") .setSubtitle ("El subtítulo va aquí") .setDescription ("Esta es la descripción") .setNegativeButtonText ("Cancelar") .construir();

Manejar las devoluciones de llamada de autenticación

A la instancia de BiometricPrompt se le asigna un conjunto de métodos de devolución de llamada de autenticación que notificarán a su aplicación sobre los resultados del proceso de autenticación.

Deberá ajustar todas estas devoluciones de llamada en una instancia de clase BiometricPrompt.AuthenticationCallback:

biometricPrompt final myBiometricPrompt = new BiometricPrompt (activity, newExecutor, new BiometricPrompt.AuthenticationCallback () {

El siguiente paso es implementar algunos o todos los siguientes métodos de devolución de llamada:

1. onAuthenticationSucceeded ()

Se llama a este método cuando la huella digital coincide con una de las huellas digitales registradas en el dispositivo. En este escenario, se pasa un objeto AuthenticationResult a la devolución de llamada onAuthenticationSucceeded y su aplicación realizará una tarea en respuesta a esta autenticación exitosa.

Para ayudar a simplificar las cosas, nuestra aplicación responderá imprimiendo a Logcat de Android Studio:

@Override public void onAuthenticationSucceeded (@NonNull BiometricPrompt.AuthenticationResult result) {super.onAuthenticationSucceeded (resultado); Log.d (TAG, "Huella digital reconocida con éxito"); }

2. onAuthenticationFailed ()

Este método se activa cuando el escaneo se completa con éxito, pero la huella digital no coincide con ninguna de las impresiones registradas en el dispositivo. Nuevamente, nuestra aplicación responderá a este evento de autenticación, imprimiendo un a Logcat:

@Override public void onAuthenticationFailed () {super.onAuthenticationFailed (); Log.d (TAG, "Huella digital no reconocida"); }

3. onAuthenticationError

Esta devolución de llamada se activa cada vez que se produce un error irrecuperable y la autenticación no se puede completar con éxito. Por ejemplo, quizás el sensor táctil del dispositivo esté cubierto de suciedad o grasa, el usuario no haya registrado ninguna huella digital en este dispositivo o no haya suficiente memoria disponible para realizar un escaneo biométrico completo.

Aquí está el código que usaré en mi aplicación:

@Override public void onAuthenticationError (int errorCode, @NonNull CharSequence errString) {super.onAuthenticationError (errorCode, errString); if (errorCode == BiometricPrompt.ERROR_NEGATIVE_BUTTON) {} else {Log.d (TAG, "Se produjo un error irrecuperable"); }}

4. onAuthenticationHelp

El método onAuthenticationHelp se llama cada vez que se produce un error no fatal e incluye un código de ayuda y otro que proporciona más información sobre el error.

Para ayudar a mantener nuestro código sencillo, no utilizaré onAuthenticationHelp en nuestra aplicación, pero una implementación se vería así:

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

Finalmente, necesitamos llamar al método authenticate () de la instancia de BiometricPrompt:

myBiometricPrompt.authenticate (promptInfo);

Implementando la autenticación biométrica de Android Pie

Una vez que haya completado todos los pasos anteriores, su MainActivity debería verse así:

importar androidx.appcompat.app.AppCompatActivity; importar androidx.biometric.BiometricPrompt; importar android.os.Bundle; import java.util.concurrent.Executor; import java.util.concurrent.Executors; importar androidx.fragment.app.FragmentActivity; importar android.util.Log; importar android.view.View; importar androidx.annotation.NonNull; MainActivity de clase pública extiende AppCompatActivity {etiqueta de cadena final estática privada = MainActivity.class.getName (); @Override protected void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); // Crear un grupo de subprocesos con un solo subproceso // Executor newExecutor = Executors.newSingleThreadExecutor (); FragmentActivity activity = this; // Comience a escuchar los eventos de autenticación // final BiometricPrompt myBiometricPrompt = new BiometricPrompt (activity, newExecutor, new BiometricPrompt.AuthenticationCallback () {@Override // onAuthenticationError se llama cuando se produce un error fatal // vacío público enAuthenticationError (int errorCode, @Nonullull Code, @Nonullull Code, @NonullCode, @NonullCode CharSequence errString) {super.onAuthenticationError (errorCode, errString); if (errorCode == BiometricPrompt.ERROR_NEGATIVE_BUTTON) {} else {// Imprima a Logcat // Log.d (TAG, "Se produjo un error irrecuperable");}} // onAuthenticationSucceeded se llama cuando una huella dactilar coincide con éxito // @Override public void onAuthenticationSucceeded (@NonNull BiometricPrompt.AuthenticationResult result) {super.onAuthenticationSucceeded (result); // Imprima un archivo a Logcat // Log.d (TAG, "Fingerprint reconocido con éxito ");} // onAuthenticationFailed se llama cuando la huella digital no coincide // @Override public void onAuthenticationFailed () {super.onAuthenticationFailed (); // Imprimir un registro cat // Log.d (TAG, "Huella digital no reconocida"); }}); // Cree la instancia de BiometricPrompt // final BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder () // Agregue texto al diálogo // .setTitle ("El texto del título va aquí") .setSubtitle ("El subtítulo va aquí" ) .setDescription ("Esta es la descripción") .setNegativeButtonText ("Cancelar") // Construir el diálogo // .build (); // Asigne un onClickListener al botón "Autenticación" de la aplicación // findViewById (R.id.launchAuthentication) .setOnClickListener (new View.OnClickListener () {@Override public void onClick (View v) {myBiometricPrompt.authenticate (promptInfo);} }); }}

Probar tu proyecto

Ahora que ha creado su proyecto, es hora de ponerlo a prueba y ver si realmente agrega autenticación de huellas digitales a su aplicación.

Para ejecutar este proyecto, necesitará un teléfono inteligente o tableta física que ejecute Android Pie o un dispositivo virtual Android (AVD) que use la vista previa de Android P o superior.

También deberá registrar al menos una huella digital en su dispositivo. Si está utilizando un dispositivo Android físico, entonces:

  • Asegure su pantalla de bloqueo con un PIN, contraseña o patrón, si aún no lo ha hecho (navegando a "Configuración> Pantalla de bloqueo y seguridad> Tipo de bloqueo de pantalla> Patrón / PIN / Contraseña" y luego siguiendo las instrucciones en pantalla).
  • Inicie la aplicación "Configuración" de su dispositivo.
  • Seleccione "Pantalla de bloqueo y seguridad".
  • Seleccione "Escáner de huellas digitales".
  • Siga las instrucciones para registrar una o más huellas digitales.

Los dispositivos virtuales Android no tienen un sensor táctil físico, por lo que deberá simular un evento táctil:

  • Inicie su AVD, si aún no lo ha hecho.
  • Junto al AVD, verá una tira de botones. Busque el botón "Más" de tres puntos (donde se encuentra el cursor en la siguiente captura de pantalla) y haga clic. Esto inicia la ventana "Controles extendidos".
  • En la ventana Controles extendidos, seleccione "Huella digital". Esto abre un conjunto de controles, donde puede emular varios eventos táctiles.
  • Abra el menú desplegable y elija la huella digital que desea registrar en este dispositivo; Estoy usando "Dedo 1".
  • Ahora, cambiemos nuestra atención al dispositivo emulado. Inicie la aplicación "Configuración" de AVD y seleccione "Seguridad y ubicación".
  • Si aún no ha configurado un PIN, contraseña o patrón, seleccione "Bloqueo de pantalla" y siga las instrucciones en pantalla para asegurar su pantalla de bloqueo, luego navegue de regreso a la pantalla principal "Configuración> Seguridad y ubicación".
  • Seleccione "Huella digital", seguido de "Agregar huella digital".
  • Ahora se le pedirá que presione su dedo sobre el sensor táctil. En su lugar, siga haciendo clic en "Toque el sensor" hasta que vea una "huella digital agregada".

  • Haga clic en "Listo".
  • Si desea registrar huellas digitales adicionales, enjuague y repita los pasos anteriores.

Una vez que haya registrado al menos una huella digital, estará listo para poner su aplicación a prueba. Voy a probar cómo nuestra aplicación maneja tres escenarios diferentes:

  • El usuario intenta autenticarse utilizando una huella digital registrada.
  • El usuario intenta autenticarse con una huella digital que no está registrada en este dispositivo.
  • El usuario intenta autenticarse utilizando huellas digitales no registradas, varias veces y en rápida sucesión.

Intentemos autenticarnos usando la huella digital que acabamos de registrar en nuestro dispositivo:

  • Asegúrate de estar viendo el monitor Logcat de Android Studio, ya que aquí es donde aparecerán las diversas aplicaciones de tu aplicación.

  • Instale su aplicación en el dispositivo de prueba.
  • Toque el botón "Autenticar con huella digital" de su aplicación. Aparecerá el cuadro de diálogo de autenticación de huellas digitales.
  • Si está utilizando un dispositivo físico, presione y mantenga presionada la punta del dedo contra el sensor táctil del dispositivo. Si está utilizando un AVD, use el botón "Toque el sensor" para simular un evento táctil.
  • Verifique el monitor Logcat. Si la autenticación fue exitosa, entonces debería ver lo siguiente: "Huella digital reconocida con éxito"

A continuación, veamos qué sucede si intentamos autenticarnos con una huella digital que no está registrada en este dispositivo:

  • Toque el botón "Autenticar con huella digital" de la aplicación nuevamente.
  • Si está utilizando un AVD, utilice la ventana "Controles extendidos" para seleccionar una huella digital que no es registrado en este dispositivo; Estoy usando el "Dedo 2". Haga clic en el botón "Toque el sensor".
  • Si usa un teléfono inteligente o tableta Android física, presione y mantenga presionada la punta del dedo contra el sensor táctil del dispositivo; ¡asegúrese de usar un dedo que no esté registrado en este dispositivo!
  • Verifique el Logcat de Android Studio, ahora debería mostrar una "Huella digital no reconocida".

Como ya se mencionó, la API BiometricPrompt maneja automáticamente los intentos excesivos de autenticación fallida. Para probar esta funcionalidad:

  • Toque el botón "Autenticar con huella digital" de su aplicación.
  • Intente autenticarse varias veces en rápida sucesión, utilizando una huella digital no registrada.
  • Después de algunos intentos, el cuadro de diálogo debería cerrarse automáticamente. Verifique Logcat de Android Studio y debería ver lo siguiente: "Se produjo un error irrecuperable".

Puede descargar la aplicación completa desde GitHub.

Terminando

En este artículo, exploramos la nueva API BiometricPrompt de Android Pie, que le permite agregar fácilmente la autenticación de huellas digitales a su aplicación. ¿Crees que BiometricPrompt es una mejora en los métodos de autenticación de huellas digitales anteriores de Android? ¡Háganos saber en los comentarios a continuación!

¿Etá entuiamado con Pokémon: el detective Pikachu aterrizando en tu teatro local? i no, Niantic etá lito para entuiamarte al introducir alguna nueva caracterítica de cruce en ...

Entonce, ¿ha decidido que te gutaría aprender a dearrollar aplicacione de Android? ¡Excelente! Deafortunadamente, la intencione olo pueden llevarte tan lejo. Aprender a codificar puede ...

Publicaciones Fascinantes