Биометрия Android — какой подход выбрать (откат к паролю)?

У меня есть приложение с PIN-кодом/блокировкой экрана. Чтобы открыть приложение, пользователю необходимо ввести свой PIN-код (который он установил ранее в приложении).

Я хочу добавить биометрическую опцию -> вместо ввода PIN-кода просто поместите свой отпечаток пальца. Однако у вас должна быть возможность использовать PIN-код в качестве запасного варианта. Точно так же, как Revolut, LastPass или множество других банковских приложений. Довольно просто, правда?

Я просмотрел новый биометрический API, и он не поддерживает откат к пользовательскому PIN-коду/паролю (только откат к экрану блокировки). Я мог бы как-то добавить это вручную (когда пользователь отменяет диалог), но это создает плохой UX (переключение с диалогового окна стиля Google на экран стиля приложения). Кроме того, диалоговое окно Google имеет прозрачный фон (который может раскрывать конфиденциальную информацию), поэтому мне нужно было бы поместить его в отдельное пустое действие (опять же плохой опыт). Интересно, как банковские приложения планируют перейти на это?

Должен ли я делать это по-старому (FingerprintManager)? Достаточно ли безопасен возврат к блокировке устройства? Если кто-то знает PIN-код вашего телефона, он может получить доступ ко всем вашим приложениям.


person rafakob    schedule 08.01.2020    source источник
comment
Я думаю, что то, как реализован WhatsApp, хорошо. Однако у вас все еще должна быть возможность использовать PIN-код в качестве запасного варианта. - это полностью зависит от приложения, которое вы создаете. Как вы знаете, в Whatsapp нет резервного варианта, который, я думаю, является проблемой безопасности. Они, должно быть, внедрили его особым образом, а не с помощью биометрического API Google. Экран заполнен, что является плюсом для вас, поскольку вы не хотите раскрывать конфиденциальную информацию в фоновом режиме.   -  person Aman Verma    schedule 09.01.2020
comment
Я мог бы как-то добавить это вручную (когда пользователь закрывает диалоговое окно), но это создает плохой UX (переключение с диалогового окна в стиле Google на экран в стиле приложения). Мне это кажется желательным. Если бы пользовательский интерфейс выглядел как обычный экран блокировки устройства, пользователь мог бы подумать, что он должен ввести PIN-код разблокировки устройства вместо PIN-кода приложения.   -  person Michael    schedule 09.01.2020
comment
@rafakob Я мог бы как-то добавить это вручную (когда пользователь отменяет диалоговое окно), но это создает плохой UX (переключение с диалогового окна в стиле Google на экран в стиле приложения). Я хочу сделать то же самое, но меня беспокоит , проверяя errorCode == ERROR_NEGATIVE_BUTTON в onAuthenticationError, нужно ли мне создавать свой собственный DialogPopUp, который будет иметь тексты для редактирования электронной почты/имени пользователя и пароля?   -  person Maulik Dodia    schedule 19.01.2021


Ответы (1)


Вы просматривали эту запись в блоге? или этот? Библиотека биометрии AndroidX предоставляет метод под названием setNegativeButtonText(), который позволяет использовать учетные данные учетной записи/приложения, если пользователь не хочет использовать биометрические данные.

И затем в обратном вызове вы бы сделали

override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
   super.onAuthenticationError(errorCode, errString)
   Log.d(TAG, "$errorCode :: $errString")
   if(errorCode == BiometricPrompt.ERROR_NEGATIVE_BUTTON) {
       loginWithAppAccountCredentials() // Because negative button says use application/account password
   }
}

Также, когда ваш пользователь нажимает кнопку входа в ваш пользовательский интерфейс, ваш onClick может выглядеть так:

override fun onClick(view: View) {
   val promptInfo = createPromptInfo()
   if (BiometricManager.from(context)
               .canAuthenticate() == BiometricManager.BIOMETRIC_SUCCESS) {
       biometricPrompt.authenticate(promptInfo, cryptoObject)
   } else {
       loginWithAppAccountCredentials()
   }
}
person Isai Damier    schedule 09.01.2020
comment
Что вы подразумеваете под Because negative button says use application/account password? Должен ли пользователь входить в систему с учетными данными приложения? Или пользователь должен войти в систему с помощью PIN-кода/пароля/шаблона своего устройства? Нужно ли мне создавать свой собственный DialogPopUp при обработке обратного вызова BiometricPrompt.ERROR_NEGATIVE_BUTTON? - person Maulik Dodia; 19.01.2021