如何在 Android 中实现生物识别 API?
How can I implement Biometric API in Android?
我想对我的应用程序中的 lock/unlock 图片使用生物识别或密码。 Biometric API 可以检测生物特征,但 "use password" 选项采用设备的 pin/password。我希望用户在应用程序内输入密码以及他想要的任何密码。
我使用了否定按钮。我将否定按钮的文本设置为"Use Password",并在onAuthenticationError回调方法中处理了否定按钮onclick。
if (errorCode == BiometricPrompt.ERROR_NEGATIVE_BUTTON) {
//show the in app password dialog
}
在您的应用中同时使用生物识别和密码是一种常见的模式。本质上,这个想法是在支持它的设备上使用生物识别,否则使用 Account/app 密码,如下所示:
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 工作,特别是在生物识别方面。我可以回答您的后续问题
我想对我的应用程序中的 lock/unlock 图片使用生物识别或密码。 Biometric API 可以检测生物特征,但 "use password" 选项采用设备的 pin/password。我希望用户在应用程序内输入密码以及他想要的任何密码。
我使用了否定按钮。我将否定按钮的文本设置为"Use Password",并在onAuthenticationError回调方法中处理了否定按钮onclick。
if (errorCode == BiometricPrompt.ERROR_NEGATIVE_BUTTON) {
//show the in app password dialog
}
在您的应用中同时使用生物识别和密码是一种常见的模式。本质上,这个想法是在支持它的设备上使用生物识别,否则使用 Account/app 密码,如下所示:
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 工作,特别是在生物识别方面。我可以回答您的后续问题