Android Arsenal – Huella digital

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.

  1. 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”.

  1. Sabemos cómo lo definió el “Administrador” y podemos agregar “administrador ficticio” en el archivo biometric-api forma, como FaceID 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.
  2. 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.

.

Compruebe también

El arsenal de Android: historias de usuarios

Puedes leerlo en portugués (https://github.com/welbert6/MaterialStoryView/edit/master/ReadmePT.md) Capturas de pantalla Introducción MaterialStoryView es una biblioteca de Android …

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *