Hola, soy Miguel y hoy les traigo otro nuevo tutorial.
Índice
Autenticación segura pero simple con la API biométrica de Android
La autenticación biométrica es una extensión de la autenticación de huellas dactilares. Una API biométrica es mucho más avanzada y sencilla de integrar en comparación con su predecesora.
En este artículo, aprenderá cómo integrar la API biométrica y cómo usarla. Siga leyendo para conocerlo.
Introducción
En los últimos años, el enfoque del equipo de Android se ha centrado principalmente en mejorar la seguridad y la privacidad. El bloqueo de patrón / pin
ha existido durante años en Android y, como mejora, la autenticación de huellas digitales se introdujo hace un par de años.
La autenticación biométrica es más segura y más fácil de usar, lo que resulta útil en muchas situaciones, como la autorización de pagos, el inicio de sesión seguro y simple, la autenticación al acceder a datos confidenciales y más.
Además de eso, la API biométrica también proporciona una forma de autenticarse con una contraseña o pin de dispositivo sin ningún trabajo adicional para los desarrolladores.
Consultar disponibilidad
Como dije, el sistema de seguridad de Android comenzó con bloqueos de contraseña y PIN, por lo que algunos de los dispositivos no tendrán la capacidad de una huella digital o desbloqueo facial.
Antes de habilitar este tipo de autenticación para el usuario, es una buena práctica verificar si el dispositivo es compatible con la autenticación biométrica.
Para verificar la disponibilidad primero, necesitamos obtener la instancia de la BiometricManager
clase del sistema , como se muestra a continuación:
val biometricManager = BiometricManager.from(this)
BiometricManager
instancia, necesitamos acceder a la canAuthenticate()
función pública, lo que resulta en un número entero.CanAuthenticate()
tiene cuatro resultados posibles:
-
BIOMETRIC_SUCCESS
: El dispositivo puede funcionar con autenticación biométrica. -
BIOMETRIC_ERROR_NO_HARDWARE
: No hay funciones biométricas disponibles en este dispositivo. -
BIOMETRIC_ERROR_HW_UNAVAILABLE
: Las funciones biométricas no están disponibles actualmente en el dispositivo. -
BIOMETRIC_ERROR_NONE_ENROLLED
: El usuario aún no ha asociado ninguna credencial biométrica en el dispositivo.
when
para hacer frente a diferentes casos de uso. Echar un vistazo:private fun verfiyingBioMetricExistence() { when (biometricManager.canAuthenticate()) { BiometricManager.BIOMETRIC_SUCCESS -> "App can authenticate using biometrics.".print() BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE -> "No biometric features available on this device.".print() BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE -> "Biometric features are currently unavailable.".print() BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED -> "The user hasn't associated any biometric credentials with their account.".print() } }
comprobar la disponibilidad biométrica.
Integración
La integración de la biblioteca biométrica es sencilla. Necesitamos agregar la siguiente línea debajo de la etiqueta de dependencias en build.gradle
el nivel de la aplicación. Echar un vistazo:
dependencies { implementation 'androidx.biometric:biometric:1.0.1' }
Trabajar con biblioteca biométrica
Esta es la mejor parte. Primero, necesitamos crear una instancia de un Executor
, Como se muestra abajo:
val executor = ContextCompat.getMainExecutor(this)
GetMainExecutor
devuelve un Executor
que ejecuta tareas en cola en el hilo principal asociado con este contexto. Este es el hilo utilizado para enviar llamadas a los componentes de la aplicación (actividades, servicios, etc.).
Executor
se utiliza para crear un puente entre los servicios biométricos y los componentes de su aplicación.A continuación, necesitamos crear una instancia de BiometricPrompt
, como se muestra a continuación, para solicitar al usuario la autenticación. Tiene tres argumentos.
- Una instancia del componente de Android (actividad / fragmento)
- Un
Executor
, que creamos arriba - Una expresión lambda con tres devoluciones de llamada, conocida como
Biometric.AuthenticationCallback
.
BiometricPrompt = BiometricPrompt(this, executor, object : BiometricPrompt.AuthenticationCallback() { override fun onAuthenticationError(errorCode: Int, errString: CharSequence) { super.onAuthenticationError(errorCode, errString) Toast.makeText(applicationContext, "Authentication error: $errString", Toast.LENGTH_SHORT) .show() } override fun onAuthenticationSucceeded( result: BiometricPrompt.AuthenticationResult) { super.onAuthenticationSucceeded(result) Toast.makeText(applicationContext, "Authentication succeeded!", Toast.LENGTH_SHORT) .show() } override fun onAuthenticationFailed() { super.onAuthenticationFailed() Toast.makeText(applicationContext, "Authentication failed", Toast.LENGTH_SHORT) .show() } })
Aviso biométrico con devoluciones de llamada.
Es hora de publicar la información necesaria en el mensaje a través deL constructor PromptInfo
, como se muestra a continuación:
promptInfo = BiometricPrompt.PromptInfo.Builder() .setTitle("Biometric login for my app") .setSubtitle("Log in using your biometric credential") .build()
Publicar información en datos biométricos para mostrar en la interfaz de usuario.
Todo lo que queda es mostrar el diálogo biométrico usando authenticate
sobre la instancia BiometricPrompt
pasando promptInfo
como parámetro.
biometricPrompt.authenticate(promptInfo)
Eso es todo; el resto del trabajo estará a cargo de la API biométrica y proporcionará el resultado adecuado a través de devoluciones de llamada.
Para entenderlo un poco más claramente, consulte el siguiente código, donde se juntan todas las piezas:
private lateinit var executor: Executor private lateinit var biometricPrompt: BiometricPrompt private lateinit var promptInfo: BiometricPrompt.PromptInfo private fun showBiomertricDialog(){ executor = ContextCompat.getMainExecutor(this) biometricPrompt = BiometricPrompt(this, executor, object : BiometricPrompt.AuthenticationCallback() { override fun onAuthenticationError(errorCode: Int, errString: CharSequence) { super.onAuthenticationError(errorCode, errString) Toast.makeText(applicationContext, "Authentication error: $errString", Toast.LENGTH_SHORT) .show() } override fun onAuthenticationSucceeded( result: BiometricPrompt.AuthenticationResult) { super.onAuthenticationSucceeded(result) Toast.makeText(applicationContext, "Authentication succeeded!", Toast.LENGTH_SHORT) .show() } override fun onAuthenticationFailed() { super.onAuthenticationFailed() Toast.makeText(applicationContext, "Authentication failed", Toast.LENGTH_SHORT) .show() } }) promptInfo = BiometricPrompt.PromptInfo.Builder() .setTitle("Biometric login for my app") .setSubtitle("Log in using your biometric credential") .build() biometricPrompt.authenticate(promptInfo) }
Habilitar la opción de contraseña
Habrá ocasiones en las que la opción de huella digital o la detección de rostros puedan tener problemas. Por ejemplo, cuando no hay suficiente luz para la detección de rostros, es posible que no funcione como debería.
Para habilitar eso, la biblioteca biométrica proporciona una función setDeviceCredentialAllowed
en la instancia BiometricPrompt.PromptInfo
pasándola como parámetro true
. Echar un vistazo:
promptInfo = BiometricPrompt.PromptInfo.Builder() .setTitle("Biometric login for my app") .setSubtitle("Log in using your biometric credential") // Allows device pin .setDeviceCredentialAllowed(true) .build()
Espero que te sea de utilidad. Gracias por leer este tutorial.
Añadir comentario