web-dev-qa-db-fra.com

Vérifiez si les appareils ont activé la biométrie avec l'invite biométrique androidx

Dans Android BiometricPrompt Prompt a remplacé le obsolète FingerprintManager . FingerPrintManager a deux fonctions hasEnrolledFingerprints() et isHardwareDetected() pour vérifier si l'appareil prend en charge les empreintes digitales et si l'utilisateur a inscrit une authentification par empreinte digitale.

Avec le nouveau BiometricPrompt, il semble qu'il n'y ait aucune fonction pour vérifier cela sans essayer de demander le BiometricPrompt. Il y a un BiometricPrompt.AuthenticationCallback.onAuthenticationError( qui est appelé avec un code d'erreur indiquant si l'appareil prend en charge la biométrie et si l'utilisateur dispose d'une authentification biométrique inscrite.

Je ne peux donc obtenir ces informations que si j'essaie de m'authentifier auprès de l'utilisateur. Existe-t-il un moyen de vérifier sans essayer de demander l'authentification pour vérifier si l'appareil prend en charge la biométrie et si l'utilisateur les a inscrits?

6
Stephan

FingerPrintManager ne contient que les données relatives à l'authentification par empreinte digitale, donc il a hasEnrolledFringers(). Mais BiometricPrompt est utilisé pour le déverrouillage du visage, l'impression plus fine, l'iris. C'est comme une classe de manager ordinaire. Google a ajouté canAuthenticate qui prend en charge de Android Q. Mais vous pouvez le vérifier pour une API inférieure en utilisant

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
       val hasBiometricFeature :Boolean = context.packageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)

Quoi qu'il en soit, Google l'a également ajouté aux composants androidx androidx.biometric:biometric

implementation 'androidx.biometric:biometric:1.0.0-alpha04'

utilise la permission

<uses-permission Android:name="Android.permission.USE_BIOMETRIC" />

sur `AuthenticationCallback '

public void onAuthenticationError(int errorCode, CharSequence errString) {}

vous pouvez vérifier les codes d'erreur avec ceux

/**
 * The user does not have any biometrics enrolled.
 */
int BIOMETRIC_ERROR_NO_BIOMETRICS = 11;
2
Manoj Perumarath

Si vous utilisez compileSdkVersion 29 et buildToolsVersion "29.0.1". Vous pouvez utiliser une méthode de vérification native.

J'ai écrit cette fonction pour Kotlin:

 fun checkForBiometrics() : Boolean {
    Log.d(TAG, "checkForBiometrics started")
    var canAuthenticate = true
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (Build.VERSION.SDK_INT < 29) {
            val keyguardManager : KeyguardManager = applicationContext.getSystemService(KEYGUARD_SERVICE) as KeyguardManager
            val packageManager : PackageManager   = applicationContext.packageManager
            if(!packageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
                Log.w(TAG, "checkForBiometrics, Fingerprint Sensor not supported")
                canAuthenticate = false
            }
            if (!keyguardManager.isKeyguardSecure) {
                Log.w(TAG, "checkForBiometrics, Lock screen security not enabled in Settings")
                canAuthenticate = false
            }
        } else {
            val biometricManager : BiometricManager = this.getSystemService(BiometricManager::class.Java)
            if(biometricManager.canAuthenticate() != BiometricManager.BIOMETRIC_SUCCESS){
                Log.w(TAG, "checkForBiometrics, biometrics not supported")
                canAuthenticate = false
            }
        }
    }else{
        canAuthenticate = false
    }
    Log.d(TAG, "checkForBiometrics ended, canAuthenticate=$canAuthenticate ")
    return canAuthenticate
}

De plus, vous devez implémenter sur votre fichier gradle d'application comme dépendance:

implementation 'androidx.biometric:biometric:1.0.0-alpha04'

et utilisez également les outils de construction les plus récents:

compileSdkVersion 29
buildToolsVersion "29.0.1"
2
markomoreno

Cela a été ajouté récemment à l'androx en beta01 ou beta02, j'oublie lequel

0
nAndroid

Utilisez BiometricManager il a une méthode

canAuthenticate()

il revient

BIOMETRIC_ERROR_NONE_ENROLLED if the user does not have any enrolled
BIOMETRIC_ERROR_HW_UNAVAILABLE if none are currently supported/enabled
BIOMETRIC_SUCCESS if a biometric can currently be used (enrolled and available)
BIOMETRIC_ERROR_NO_HARDWARE

Consultez la documentation officielle https://developer.Android.com/reference/Android/hardware/biometrics/BiometricManager.html

0
shb