Биометрические подсказки исчезают или отклоняются через некоторое время

Я использую новый BiometricPrompt в своем приложении для Android из приведенного ниже литературного

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

Я могу успешно показать BiometicPrompt, когда действие загружено.

Моя проблема заключается в том, что если я сохраняю идеальную подсказку в течение 30-60 секунд, или если я переключаю приложение на фон, или если я блокирую и разблокирую экран, когда подсказка отображается, когда приложение снова появляется, BiometricPrompt закрывается / не отображается. Я не могу определить, связана ли проблема с моим исполнителем, пожалуйста, помогите. Ниже мой код

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    Executor executor = Executors.newFixedThreadPool(2);

    final BiometricPrompt biometricPrompt = new BiometricPrompt(this,
            executor, new BiometricPrompt.AuthenticationCallback() {
        @Override
        public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) {
            super.onAuthenticationError(errorCode, errString);
        }

        @Override
        public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {
            super.onAuthenticationSucceeded(result);
            navigateHome();
        }

        @Override
        public void onAuthenticationFailed() {
            super.onAuthenticationFailed();
        }
    });

    final BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder()
            .setTitle("Authenticate")
            .setSubtitle("Unlock with your fingerprint")
            .setNegativeButtonText("Cancel")
            .build();

    biometricPrompt.authenticate(promptInfo);

}

Обновления от 13.02.2019

Я обновился до

implementation 'androidx.biometric:biometric:1.0.1'

и изменил исполнителя, как показано ниже

Executor executor = ContextCompat.getMainExecutor(this);

Большинство проблем теперь решено, за исключением устройства Oneplus с не отображаемым сканером отпечатков пальцев (модели 6T и выше). При предоставлении неправильного сканирования пальца (при первом же сканировании) подсказка вызывает onAuthenticationFailed () вместо onAuthenticationError (..)


person Naveen Prince P    schedule 23.10.2019    source источник


Ответы (3)


Это в соответствии с дизайном. Приложения не должны ждать биометрической аутентификации бесконечно. Длительность тайм-аута может различаться для разных устройств.

Когда истечет время ожидания, я ожидаю, что вы получите вызов onAuthenticationError с кодом ошибки BiometricConstants.BIOMETRIC_ERROR_TIMEOUT.

Я понятия не имею, почему Google отказался от показа этой константы через BiometricManager. Однако любой вызов onAuthenticationError следует рассматривать как неисправимую ошибку и как завершение аутентификации.

person Michael    schedule 23.10.2019
comment
другая проблема, с которой я столкнулся, заключается в том, что в Oneplus, если отпечаток пальца не соответствует onAuthenticationError, вызывается и запрос отклоняется. WOHH - person Naveen Prince P; 11.12.2019

Как упоминалось в ответах, существует намеренное поведение биометрических подсказок, чтобы не повторять подсказки один раз в фоновом режиме.

Однако есть обходной путь, в вашей деятельности используйте WindowFocusChanged

@Override
    public void onWindowFocusChanged(boolean hasFocus){
        if(hasFocus){
            biometricPromptFunction();
        }
    }

Обычно, когда приложение возвращается с переднего плана, основное внимание уделяется текущему действию, и оно запускает биометрическую подсказку. Имейте в виду, что он будет продолжать запрашивать, даже если он будет отменен или отклонен. Чтобы избежать этого, вам необходимо сохранить счетчик, который увеличивается при изменении windowFocus и сбросе функции onResume.

person Hrishikesh Thakkar    schedule 13.02.2020
comment
NIce Workrounds. Позволь мне попробовать это - person Naveen Prince P; 13.02.2020

Когда стек задач переключается (пользователь переходит в другое приложение или на домашний экран), или когда устройство переходит в режим блокировки клавиатуры / выключения экрана, BiometricPrompt уходит. Это преднамеренное поведение, при котором аутентификация не восстанавливается, поскольку пользователь может возобновить работу приложения и уже забыл контекст.

person Isai Damier    schedule 05.11.2019