3

我想检查 API 级别 28+ 的 Android 设备支持哪些生物识别,以便能够向用户显示相关文本。例如“指纹登录”、“人脸登录”、“虹膜登录”、“启用指纹登录”、“启用人脸登录”等。

我正在使用BiometricManager.canAuthenticate()来确定是否可以使用生物识别技术。对于早于 28 的版本在内部BiometricManager使用FingerprintManagerCompat,所以我知道如果结果是BIOMETRIC_SUCCESS设备使用指纹。

有没有办法知道支持哪些生物特征——指纹、面部、虹膜?也许有些设备可以支持多个。

4

5 回答 5

9

只有具有 API29 的设备才能提供比指纹更多的生物识别选项。

通过检查android.hardware.biometrics.BiometricManager.hasBiometrics()(API29),您可以了解如何检查可用的生物特征:

final PackageManager pm = context.getPackageManager();
        return pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)
                || pm.hasSystemFeature(PackageManager.FEATURE_IRIS)
                || pm.hasSystemFeature(PackageManager.FEATURE_FACE);
于 2019-10-31T12:56:12.263 回答
6

似乎无法找出 Android 上使用的实际生物识别方法(与 iOS 不同)。但可以在 Android 10 上检测支持的生物识别方法:

PackageManager pm = context.getPackageManager();
boolean hasFingerprint = pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT);
boolean hasFace = pm.hasSystemFeature(PackageManager.FEATURE_FACE);
boolean hasIris = pm.hasSystemFeature(PackageManager.FEATURE_IRIS);

因此,如果手机仅支持面部功能,您可以在 GUI 中使用“面部登录”。如果它只支持指纹功能,您可以使用“指纹登录”等。

如果它支持多种生物识别方法,您将不得不使用一些通用文本,例如“生物识别登录”。

于 2019-11-10T21:55:33.947 回答
4

API的BiometricManager设计似乎使得调用应用程序必须与所使用的身份验证方法无关。因此,只要用户成功,用户的身份验证方式就没有什么区别(随之而来的是对供应商端https://source.android.com/security/biometric的强身份验证的要求)。

结果,不好的事情是:你不能有一个与身份验证方法匹配的标题,所以你应该想出一些通用的东西,比如“请授权操作”。好消息是对话框提示已经按照支持的身份验证方法呈现(例如,对于指纹身份验证,UI 会沿着匹配的图标呈现文本“触摸指纹传感器”)。这是由平台完成的,不能由调用应用程序控制。

部分解决方案:您可以使用(现已弃用)API https://developer.android.com/reference/android/hardware/fingerprint/FingerprintManager具体检查指纹认证的可用性

于 2019-10-31T10:28:33.193 回答
1

官方建议您使用AndroidX Biometric Library。它带有一个标准的 UI,可以为您处理外形尺寸。本质上,它会检测设备是否具有指纹或面部身份验证外形并进行处理:作为开发人员,您不需要创建生物识别身份验证 UI。要检查设备是否完全支持生物识别,你会做

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

您应该使用生物识别支持库的原因:

  • 开发人员不再需要在他们的代码中预测不同的 API 级别,因为该库在后台处理所有 API 匹配。例如,支持库无缝使用 API 级别 23 到 27 上的 FingerprintManager 和 API 级别 28 及更高级别的 BiometricPrompt。
  • 开发人员不再需要创建自己的身份验证 UI。该库提供了一个标准且熟悉的 UI,该 UI 与用户的生物特征身份验证外形相匹配,例如指纹或面部身份验证。
  • 开发人员可以通过单个方法调用检查设备是否支持生物特征认证。
于 2019-11-25T21:04:56.353 回答
0

使用PackageManager允许检查支持哪些生物特征。是一篇文章,提出了如何处理显示用户可以理解的字符串。

于 2020-01-06T15:47:04.620 回答