首页 > 解决方案 > Android Biometrics - 选择哪种方法(回退到密码)?

问题描述

我有一个具有 PIN/锁定屏幕的应用程序。为了打开应用程序,用户需要输入他的 PIN 码(他之前在应用程序中设置过)。

我想添加生物识别选项 -> 而不是输入 PIN 只需放置您的指纹。但是,您仍然应该可以选择使用 PIN 作为后备。与 Revolut、LastPass 或许多其他银行应用程序完全相同。很简单,对吧?

我查看了新的生物识别 API,它不支持回退到自定义 pin/密码(仅回退到锁定屏幕)。我可以以某种方式手动添加(当用户取消对话框时),但这会产生糟糕的用户体验(从 Google 样式对话框切换到应用程序样式屏幕)。此外,谷歌对话框有一个透明的背景(可能会泄露敏感信息),所以我需要把它放在一个单独的空白活动中(同样糟糕的体验)。我想知道银行应用程序如何计划迁移到那里?

我应该用旧方法(FingerprintManager)吗?回退到设备锁定是否足够安全?如果有人知道您的手机 PIN,他就可以访问您的所有应用程序。

标签: androidandroid-fingerprint-apiandroid-biometric-prompt

解决方案


你看过这篇博文吗?还是那个?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
   }
}

此外,当您的用户单击 UI 中的登录按钮时,您的 onClick 可能如下所示:

override fun onClick(view: View) {
   val promptInfo = createPromptInfo()
   if (BiometricManager.from(context)
               .canAuthenticate() == BiometricManager.BIOMETRIC_SUCCESS) {
       biometricPrompt.authenticate(promptInfo, cryptoObject)
   } else {
       loginWithAppAccountCredentials()
   }
}

推荐阅读