的文档BiometricPrompt.PromptInfo
's setDeviceCredentialAllowed
方法指出:
[...] 开发人员应在启用此功能之前首先检查 KeyguardManager.isDeviceSecure()。如果设备不安全,BiometricPrompt.ERROR_NO_DEVICE_CREDENTIAL 将在 BiometricPrompt.AuthenticationCallback.onAuthenticationError(int, CharSequence) 中返回。
https://developer.android.com/reference/androidx/biometric/BiometricPrompt.PromptInfo.Builder.html#setDeviceCredentialAllowed(boolean) https://developer.android.com/reference/androidx/biometric/BiometricPrompt.PromptInfo.Builder.html#setDeviceCredentialAllowed(boolean)
然而,为了首先启用生物识别身份验证,您必须设置设备 PIN 或密码。当我们已经有了这个检查(仅在 API 23+ 上可用)时,这不是多余的吗?BiometricManager.canAuthenticate
?
这是一个很好的问题!提供逐步的响应可能很重要。首先,让我们将特定设备上发生的情况与应用程序中发生的情况分开。然后我们将解决更具体的问题。
Device
运行 API 23+ 的设备可能有也可能没有设置设备登录凭据。设备所有者无需设置设备 PIN、图案、密码或生物识别模板。这是一个选择。
App
无论设备登录凭据是否已设置,用户都应该能够安装您的应用程序。因此,您的应用程序的编写方式必须能够处理尚未设置登录凭据的用例。
回答您更具体的问题
推荐意见 https://medium.com/androiddevelopers/migrating-from-fingerprintmanager-to-biometricprompt-4bc5f570dccd是你传入一个CryptoObject
to authenticate()
实施生物识别 API 时。如果您遵循该建议,那么是的,您会检查canAuthenticate()
打电话之前authenticate(promptInfo, cryptoObject)
。造成这种情况的原因有很多,您可以通过阅读上面提到的博客文章来了解这些原因。
因为你的问题具体是关于setDeviceCredentialAllowed(true)
,重要的是要记住什么canAuthenticate()
做。它检查三件事:设备上是否有可用的生物识别硬件、用户是否注册了模板,或者用户是否启用了生物识别身份验证。
因此,您不能使用canAuthenticate()
就你而言,因为它完全与生物识别技术有关,而setDeviceCredentialAllowed(true)
接受设备 PIN、图案或密码。
请注意,虽然建议您使用CryptoObject
, setDeviceCredentialAllowed()
不兼容CryptoObject
也不与setNegativeButtonText()
.
附:您也可能会从阅读中受益这篇博文 https://android-developers.googleblog.com/2019/10/one-biometric-api-over-all-android.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)