在 Android 中使用 androidx Biometric API 进行人脸认证

Face Authentication using androidx Biometric API in Android

我需要使用指纹和面部身份验证来集成生物识别身份验证。指纹认证工作完美,但是当我只设置面部认证时,我从 BiometricManager.from(context) 方法得到生物识别未注册响应,如下所示,

val biometricManager = BiometricManager.from(context)
    when(biometricManager.canAuthenticate()){
        BiometricManager.BIOMETRIC_SUCCESS ->{
            Log.e(TAG, "App can authenticate using biometrics.")
        }
        BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE ->{
            Log.d(TAG, "Hardware not available")
        }
        BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE ->{
            Log.d(TAG, "Biometric features are currently unavailable.")
        }
        BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED ->{
            Log.d(TAG, "The user hasn't associated any biometric credentials with their account.")
        }
        else ->{
            Log.d(TAG, "Nothing supported")
        }
    }

Android 生物识别 API 仅适用于其生物识别特征(面部、指纹、虹膜)与 Android 生物识别堆栈兼容的设备。我有一套支持面部特征的设备,其中只有少数支持Android生物识别。

我在使用它时发现的一些事实。这是基于生物识别API“实施'androidx.biometric:biometric:1.0.1'”。

  1. 三星设备不支持人脸识别,因为它没有 3D 人脸解锁功能。这个问题在三星方面是开放的,因为三星的面部解锁是由三星自己开发的,而不是来自 google OS。但它确实支持使用生物识别管理器进行指纹扫描 API。
  2. 真人脸解锁仅适用于 Pixel 4(这是基于我的测试,不确定是否支持其他设备,但我已经测试过top-notch设备是三星,包括 Note 系列和 Galaxy 系列,以及摩托罗拉系列) 我只能在 Pixel 4 中使用人脸解锁。
  3. 三星正在研发中,很快就会上市(不确定什么时候)。
  4. 目前很少有应用程序支持人脸解锁,因为大多数 Android 基本设备不是来自 google,并且制造方面不提供基于 3d 的解锁。

我已经为社区创建了参考 POC 以提供帮助。该文档没有提供有关生物识别变化检测的良好文档。这是纯 Kotlin 代码,还可以检测生物识别变化和许多功能,例如用户是否注册了 Bio,设备是否注册了 Bio,什么类型的生物识别,用户之前是否注册过。请看看这个link.

在查看了 Android 实施生物识别的所有障碍后,我选择不使用 BiometricManager.from(context) 方法来检查是否启用了生物识别身份验证,而不是检查是否 KEYGUARD_SERVICE 在提示信息

之后启用并使用
BiometricPrompt.PromptInfo.Builder().apply {
            setTitle(getString(R.string.title))
            setSubtitle(getString(R.string.sub_title))
            setConfirmationRequired(true)
            setDeviceCredentialAllowed(true)
        }.build()

通过它即使只设置了面容ID并且不支持当前回调,应用程序回退到设备PIN认证方法。

我在将它集成到我的应用程序时遇到了同样的问题当我使用

biometricManager.canAuthenticate(BIOMETRIC_STRONG)

检查设备中的生物识别是否可用 return BIOMETRIC_ERROR_NONE_ENROLLED 一旦我将身份验证模式更改为 BIOMETRIC_WEEK 它运行良好 我在三星 S9 和一些设备上进行了测试其他设备。 目前正在使用这种生物识别依赖性希望它对你有用

implementation "androidx.biometric:biometric-ktx:1.2.0-alpha03"