-2

我想使用生物识别或密码来锁定/解锁我的应用程序中的图像。生物特征 API 可以检测生物特征,但“使用密码”选项采用设备的密码/密码。我希望用户在应用内输入密码和他想要的任何密码。

4

2 回答 2

1

在您的应用程序中同时使用生物特征和密码是一种常见的模式。本质上,这个想法是在支持它的设备上使用生物识别技术,并在其他情况下使用帐户/应用程序密码,如下所示:

override fun onClick(view: View) {  // user clicks a button in your app to authenticate
   val promptInfo = createPromptInfo()
   if (BiometricManager.from(context)
               .canAuthenticate() == BiometricManager.BIOMETRIC_SUCCESS) {
       biometricPrompt.authenticate(promptInfo, cryptoObject)
   } else {
       loginWithPassword()
   }
}

此外,在创建 PromptInfo 时,你会做.setNegativeButtonText(getString(R.string.prompt_info_use_app_password)),然后在onAuthenticationError()回调中你会做

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

注意使用cryptoObject. 这是因为密码或生物特征认证本身并不会加密您的数据。因此,如果您真的希望您的数据(在这种情况下是您的照片)是私密的,您必须对它们进行加密。

然后最后在onAuthenticationSucceeded()回调中你会显示你的数据

   override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
       super.onAuthenticationSucceeded(result)
       Log.d(TAG, "Authentication was successful")
       // Proceed with viewing the private encrypted data.
       showEncryptedData(result.cryptoObject)
   }

免责声明:我为 Android/Google 工作,特别是在生物识别方面。我可以回答您的后续问题

于 2019-11-25T20:52:45.993 回答
-1

我使用了否定按钮。我将否定按钮的文本设置为“使用密码”,并在 onAuthenticationError 回调方法中处理否定按钮 onclick。

if (errorCode == BiometricPrompt.ERROR_NEGATIVE_BUTTON) {
    //show the in app password dialog
}
于 2019-11-19T17:13:44.697 回答