TENGA EN CUENTA QUE:
Si su proyecto tiene minSDK 23 y solo debería admitir Autorización básica de huellas dactilares en la mayoría de los dispositivos – echa un vistazo al AndroidX biométrico .
Si aún necesita autenticación biométrica avanzada, utilice Huella digital, cara o iris en la amplia gama de dispositivos, consulte el documento a continuación.
Introducción
Qué es BiometricPrompt API
?
Se trata de una nueva API que declara que el sistema trata de una forma unificada de utilizar diferentes métodos de identificación biométrica: huella dactilar, rostro, iris, etc., así como una forma unificada de visualizar la interfaz de usuario en todos los dispositivos.
Para obtener más información, lea BiometricPrompt de referencia en el sitio para desarrolladores de Android.
Desafortunadamente, esta simplificación esconde una serie de problemas.
- En Android 9, no es posible simplemente obtener información sobre la disponibilidad de hardware biométrico y registrar datos biométricos. Android 10 proporciona BiometricManager que resuelve parcialmente este problema.
- Algunos fabricantes han eliminado / no muestran la interfaz de usuario biométrica
- Las soluciones de autenticación biométrica como Samsung Pass SDK o Meizu Fingerprint deben implementarse por separado
- No hay forma de identificar qué tipos de autenticación biométrica están disponibles en el dispositivo.
¿Cómo utilizar BiometricPromptCompat en dispositivos antiguos?
BiometricPromptCompat está diseñado para ser compatible con la mayor cantidad de dispositivos Android. Su interfaz es muy similar a la original BiometricPrompt
. SDK mínimo admitido – Android 4.1 JellyBean (API 16)
Principales características
- Interfaz de usuario unificada para todos los dispositivos: comienza con Android 4.1 y Android 11
- Contiene correcciones para dispositivos SIN la interfaz de usuario BiometricPrompt del sistema (como LG G8 o OnePlus 6T)
- Se admiten temas oscuros / claros; También puede obtener el color de fondo del cuadro de diálogo Biometrics actual
- Admite autenticación de pantalla dividida
- Amplia gama de datos biométricos compatibles
Tipos de autenticación biométrica admitidos
género | Detalles | Probado en |
---|---|---|
Desbloqueo facial (también conocido como caras de confianza) | Android 4.1 o superior | Prestige PAP3400 |
Huella digital (Samsung Pass) | Dispositivos Android 4.4+ y Samsung | Samsung Galaxy S5 |
Huella Meizu | Dispositivos Android 5+ y Meizu | Aún no probado |
Huella dactilar | Android 6+ | Xiomi POCO F1 |
Huella digital con escáner en pantalla | Android 8+ | OnePlus 6T |
FaceID 3D de Huawei | Dispositivos Android 10+ y Huawei | Huawei Mate 30 Pro (se requiere confirmación) |
Samsung FaceID | Dispositivos Android 8+ y Samsung | Samsung Galaxy S10 (se requiere confirmación) |
Samsung IrisID | Dispositivos Android 8+ y Samsung | Samsung Galaxy S10 (se requiere confirmación) |
Oppo FaceID | Dispositivos Android 9+ y Oppo | Aún no probado |
API BiometricPrompt | Android 9+ | Xiomi POCO F1 |
Configurar
Incluya la biblioteca en su aplicación:
repositories {
maven { url 'https://developer.huawei.com/repo/' }
maven { url "https://dl.bintray.com/tencent-soter/maven/" }
maven { url "https://pkgs.dev.azure.com/MicrosoftDeviceSDK/DuoSDK-Public/_packaging/Duo-SDK-Feed/maven/v1" }
}
dependencies {
implementation 'dev.skomlach:biometric:X.X.X'
}
Uso
- Al principio, debe crear el archivo BiometricPromptCompat
BiometricPromptCompat.Builder builder =
new BiometricPromptCompat.Builder(getActivity())
.setTitle("Biometric demo")
.setNegativeButton("Cancel", null);
BiometricPromptCompat biometricPromptCompat = builder.build();
Tenga en cuenta que: Métodos builder.setTitle()
es builder.setNegativeButton()
son obligatorios.
- También puede especificar la implementación deseada utilizando el siguiente constructor:
BiometricPromptCompat.Builder builder =
new BiometricPromptCompat.Builder(BiometricApi, getActivity());
BiometricApi:
BiometricApi.AUTO
– la biblioteca buscará la API más adecuada (predeterminada)
BiometricApi.LEGACY_API
– uso forzado de API biométricas heredadas como Fingerprint o FaceUnlock e interfaz de usuario personalizada
BiometricApi. BIOMETRIC_API
– uso forzado de la nueva API BiometricPrompt
BiometricPromptCompat:
void authenticate(BiometricPromptCompat.Result resultCallback)
– inicia el flujo de trabajo de autenticación biométrica
void cancelAuthenticate()
– cancelar el flujo de trabajo de autenticación biométrica activo
boolean cancelAuthenticateBecauseOnPause()
– Útil si necesita permitir la autenticación biométrica en el modo de pantalla dividida; Recomendado para llamar a este método en onResume()
y utilice el valor devuelto para evitar reiniciar la autenticación biométrica. Vuelve false
y mantenga la autenticación biométrica en la pantalla si la aplicación en modo de pantalla dividida regresa true
y cancelar la autenticación biométrica activa de lo contrario
@ColorRes int getDialogMainColor()
– devuelve el color de fondo del cuadro de diálogo
boolean hasEnrolled()
– Vuelve true
si alguna biométrica registrada
boolean isBiometricSensorPermanentlyLocked()
– Vuelve true
si biométrico está permanentemente bloqueado; Bloqueo-desbloqueo del dispositivo o reinicio solicitado por el usuario
boolean isHardwareDetected()
– Vuelve true
si hay hardware biométrico disponible
boolean isLockOut()
– Vuelve true
si biométrico está bloqueado temporalmente; Por lo general, toma 30 segundos y el sistema restablecerá este bloqueo.
boolean isNewBiometricApi()
– Vuelve true
si se utiliza la API BiometricPrompt
void openSettings(Activity)
– Intente abrir la pantalla de configuración de “Inscripción biométrica”
BiometricPromptCompat.Result
void onSucceeded()
– Usuario autenticado exitosamente
void onCanceled()
– Se canceló la autenticación biométrica
void onFailed(AuthenticationFailureReason reason)
– Se produce un error, consulte los detalles en AuthenticationFailureReason
void onUIShown()
– Interfaz de usuario biométrica en pantalla
Tengo un dispositivo que se puede desbloquear usando Huella digital / Rostro / Iris y (o) puedo usar este tipo biométrico en las aplicaciones preinstaladas. Pero no funciona en aplicaciones de terceros. ¿Puedes ayudar?
Sí, lamentablemente esto sucede con mucha frecuencia. Los fabricantes de dispositivos suelen implementar muchas funciones demandadas por el mercado antes de que la misma API aparezca en el SDK oficial de Android.
En resumen: el fabricante del dispositivo ha implementado la autenticación biométrica a través de huellas dactilares / rostro / iris, pero “olvidó” proporcionar acceso a esta implementación para desarrolladores externos. Por lo tanto, las aplicaciones preinstaladas (del sistema) desarrolladas por el fabricante del dispositivo pueden utilizar datos biométricos, mientras que las aplicaciones bancarias, los administradores de contraseñas y otras aplicaciones de terceros no pueden.
Respuesta completa: todo depende del caso específico. Encontré varias opciones que se pueden dividir en varios grupos.
- Sabemos cómo lo definió el “Administrador” y podemos agregar “administrador ficticio” en el archivo
biometric-api
módulo, por ejemplo MiuiFaceManagerImpl. Desafortunadamente, este enfoque no siempre es posible de usar.
Primero, aparece comenzando con Android 9 restricciones sobre el uso de API no públicas. Esta limitación puede ser sobrepasado, PERO …
En segundo lugar, en cualquier caso, el administrador considerado aquí utiliza permisos del sistema y, como resultado, se lanzará una SecurityException cuando se intente obtener la instancia “Administrador”.
- Sabemos cómo lo definió el “Administrador” y podemos agregar “administrador ficticio” en el archivo
biometric-api
forma, comoFaceID
encima EMUI 8.0 , EMUI 8.1 o EMUI 9.0 e incluso capaz de obtener la instancia de “administrador”. En este caso, abordaremos la situación mientras trabajamos, a primera vista, la API no funcionará correctamente en aplicaciones de terceros. - Autenticación biométrica implementada en el sistema
com.android.keyguard
paquete. Por ejemplo, Meizu usa Rostro ++ solución. Dependiendo de la implementación, existe la posibilidad de vincularnos con el servicio como lo hacemos nosotros. Desbloqueo facial
De cualquier manera, se requieren investigaciones y pruebas para cada caso, así que siéntase libre de causar problemas o contácteme directamente.
QUE HACER
- Simplifique la configuración
- Agregar otros dispositivos / fabricantes
- Compruebe cómo iniciar BiometricAuth con el BiometricType especificado
- Proyecto de limpieza y README
- Migrar a Kotlin
Contactar al autor
Telegrama: @SergeyKomlach
Gorjeo: @SergejKomlach
Licencia
Licencia de Apache 2.0
Cómprame una cerveza si quieres.
.