如何检查API级别28+支持哪些生物识别?

时间:2019-10-30 08:12:51

标签: android biometrics android-biometric

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

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

有没有办法知道支持哪些生物识别技术-指纹,面部,虹膜?也许某些设备可以支持多个设备。

5 个答案:

答案 0 :(得分:4)

只有具有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);

答案 1 :(得分:2)

BiometricManager API的设计似乎使得调用应用程序必须与所使用的身份验证方法无关。这样一来,只要用户成功,用户的身份验证方式就不会有所不同(随之而来的是在卖方https://source.android.com/security/biometric上进行强身份验证的要求)。

结果是不好的事情:您不能拥有与身份验证方法匹配的标题,因此您应该提出诸如“ 请授权操作”之类的通用名称。好消息是,已经根据支持的身份验证方法显示了对话框提示(例如,对于指纹身份验证,UI会在匹配的图标上显示文本“触摸指纹传感器”)。这是由平台完成的,不能由调用应用程序控制。

部分解决方案:您可以使用(现已弃用)API https://developer.android.com/reference/android/hardware/fingerprint/FingerprintManager

专门检查指纹认证的可用性

答案 2 :(得分:1)

似乎无法找出在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中使用“使用面部登​​录”。如果仅支持指纹功能,则可以使用“使用指纹登录”等。

如果它支持多种生物识别方法,则必须使用一些通用文本,例如“生物识别登录”。

答案 3 :(得分:1)

The official recommendation是您使用AndroidX Biometric Library。它带有一个标准的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和BiometricPrompt(使用API​​级别28及以上)。
  • 开发人员不再需要创建自己的身份验证UI。该库提供了一个标准且熟悉的用户界面,该界面与用户的生物特征认证形式(例如指纹或面部认证)相匹配。
  • 开发人员可以通过一个方法调用来检查设备是否支持生物特征认证。

答案 4 :(得分:0)

使用PackageManager可以检查支持哪些生物识别。 Here是一篇有关如何处理显示用户可理解的字符串的文章。