我正在编写一个应用程序功能来使用生物指纹身份验证 API 对用户进行身份验证。它与BiometricPrompt API 的组合按预期工作。
一般来说,它会显示自己的 UI 对话框,因此可以在 Android 设备上统一。(指纹管理器API 的改进)
在一种设备测试场景中,我遇到了显示屏内(在屏幕上,例如 Oneplus 6T 设备)指纹支持,而不是后部生物识别硬件选项。
当我在其上运行应用程序时,它会在调用biometricPrompt.authenticate(..)
而不是对话框时显示显示指纹身份验证选项。没关系,由 BiometricPrompt 的内部 API 管理。
但它给开发人员管理带来了一些不一致。
- 当它提供内置身份验证对话框时,所有回退错误都会显示在对话框本身中。
- 但是在显示身份验证的情况下,我没有找到一种方法可以自行显示错误消息。而且我必须处理这种后备并以自定义方式显示。
现在的问题是
- 有没有办法通过显示身份验证视图组件来管理/显示消息。
- 如何识别设备是否支持设备内生物识别身份验证。
编辑:我正在使用的代码参考:
import android.content.Context
import androidx.biometric.BiometricPrompt
import androidx.fragment.app.FragmentActivity
import java.lang.Exception
import java.util.concurrent.Executors
import javax.crypto.Cipher
class BiometricAuthenticationManager(private val context: Context) :
BiometricPrompt.AuthenticationCallback() {
private var biometricPrompt: BiometricPrompt? = null
override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
super.onAuthenticationError(errorCode, errString)
biometricPrompt?.cancelAuthentication()
}
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
super.onAuthenticationSucceeded(result)
}
override fun onAuthenticationFailed() {
super.onAuthenticationFailed()
}
fun init(cipher: Cipher, promptInfo: BiometricPrompt.PromptInfo) {
if (context is FragmentActivity) {
val executor = Executors.newSingleThreadExecutor()
biometricPrompt = BiometricPrompt(context, executor, this)
biometricPrompt?.authenticate(promptInfo, BiometricPrompt.CryptoObject(cipher))
} else {
throw Exception(
"Check for FragmentActivity context.")
}
}
}
有关外观的进一步参考,请查找以下附件。
我尝试检查锁定屏幕的相同场景,我猜它使用了使用 FingerPrintManager 类和显示消息的自定义实现。