Биометрическая проверка подлинности по идентификатору лица не работает на некоторых устройствах

#android #kotlin #android-biometric-prompt #android-biometric

#Android #kotlin #android-биометрическая-подсказка #android-биометрический

Вопрос:

Я внедрил биометрическую аутентификацию, но она отлично работает на моем устройстве Samsung (Android 10), но не работает на одном устройстве plush и MI.

На устройствах Mi (Android 10) и one plush (Android 10) отображается только запрос отпечатка пальца, но не отображается опция аутентификации по лицу

Я установил свой идентификатор лица в настройках обоих устройств, но он не работает. работает только на устройстве Samsung.

Я использовал приведенный ниже код

     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")
                    .setConfirmationRequired(true).
                    setNegativeButtonText("login")
                    .build()
    
          
            val biometricLoginButton =
                    findViewById<TextView>(R.id.tvClick)
            biometricLoginButton.setOnClickListener {
                

biometricPrompt.authenticate(promptInfo)
        }
 

Ответ №1:

Похоже, FaceID распознается как слабый тип аутентификаторов для Android 11. Если набор разрешенных аутентификаторов, как показано ниже, начинает работать:

 new BiometricPrompt.PromptInfo.Builder()
                        .setTitle(getString(R.string.mcm_fingerprint_promt_message, appName))
                        .setAllowedAuthenticators(BIOMETRIC_STRONG | DEVICE_CREDENTIAL | BIOMETRIC_WEAK)
                        .build();
 

Комментарии:

1. Метод setAllowedAuthenticators (….) недоступен

2. @ArunPK доступно в androidx.биометрический: биометрический: 1.1.0