App接入Android指纹识别

图片

Biometric Authentication 是一种使用面部或指纹识别进行用户认证的方式,这是保护敏感信息的方法之一。它对于需要用户每次打开应用都要进行认证的金融和医疗健康应用非常重要。

图片

1. 声明依赖项

您可以在此处检查最新的版本发布情况。

dependencies {
    implementation("androidx.biometric:biometric:1.1.0")
    ...
}

2. 选择认证类型

  • • BIOMETRIC_STRONG — Class 3 生物认证,了解更多详细信息请点击[这里] (https://developer.android.com/training/sign-in/biometric-auth#strong-vs-weak)。

  • • BIOMETRIC_WEAK — Class 2 生物认证,了解更多详细信息请点击[这里] (https://developer.android.com/training/sign-in/biometric-auth#strong-vs-weak)。

  • • DEVICE_CREDENTIAL — 用户需输入屏幕锁定的 PIN/图案/密码

对于 STRONG 和 WEAK 之间的区别,我不会详细展开,因为这将是一个过长的话题。您还可以同时选择多种类型:BIOMETRIC_STRONG 或 DEVICE_CREDENTIAL

3. 检查认证是否可用

双重检查导入项,确保您正在使用 androidx.biometric.*。

在下面的示例中,我将使用 BIOMETRIC_STRONG。某些设备可能没有生物认证功能。以下是四种可能性:

val biometricManager = BiometricManager.from(this)
when (biometricManager.canAuthenticate(BIOMETRIC_STRONG)) {
    BiometricManager.BIOMETRIC_SUCCESS -> {
        // 使用生物特征进行认证
    }

    BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE -> {
        // 缺少生物特征硬件
    }

    BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE -> {
        // 当前无法使用生物特征
    }

    BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED -> {
        // 用户未注册您的应用所支持的生物特征认证,请提示用户进行注册
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            val enrollIntent =
                Intent(Settings.ACTION_BIOMETRIC_ENROLL).apply {
                    putExtra(
                        Settings.EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED,
                        BIOMETRIC_STRONG or DEVICE_CREDENTIAL
                    )
                }
            startActivityForResult(enrollIntent, REQUEST_CODE)
        }
    }
}

4. 创建提示框

如果我们收到 BIOMETRIC_SUCCESS,我们可以使用生物认证对话框提示用户进行认证。我们需要两个东西:

  • • 名为 PromptInfo 的对话框

private fun createPromptInfo(): BiometricPrompt.PromptInfo =
    BiometricPrompt.PromptInfo.Builder()
        .setTitle("使用生物特征进行认证")
        .setAllowedAuthenticators(BIOMETRIC_STRONG)
        .setConfirmationRequired(false)
        .setNegativeButtonText("使用密码登录")
        .build()
  • • 带有回调的提示框

private fun createBiometricPrompt(): BiometricPrompt {
    val callback = object : BiometricPrompt.AuthenticationCallback() {
        override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
            super.onAuthenticationError(errorCode, errString)
            if (errorCode == BiometricPrompt.ERROR_NEGATIVE_BUTTON) {
                // 如果您在提示对话框中添加了取消按钮
            }
        }

        override fun onAuthenticationFailed() {
            super.onAuthenticationFailed()
            // 认证失败,原因未知
        }

        override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
            super.onAuthenticationSucceeded(result)
            // 认证成功!
        }
    }

    val executor = ContextCompat.getMainExecutor(this)
    return BiometricPrompt(this, executor, callback)
}

5. 显示提示框

现在我们已经准备好了,可以显示提示框了:

BiometricManager.BIOMETRIC_SUCCESS -> {
    val prompt = createBiometricPrompt()
    prompt.authenticate(createPromptInfo())
}

如果用户成功进行认证,回调中的 onAuthenticationSucceeded 将被调用。

附加功能:在模拟器上调试生物特征

如果您想在模拟器上调试生物特征,您需要添加一个锁屏和指纹。当您尝试使用生物特征解锁时,系统会提示您添加锁屏和指纹。您可以按照下面的图像中的步骤在模拟器上测试指纹功能:

图片

How to debug Fingerprints on Emulator

通过以上步骤,您可以使用 Android 生物认证管理来保护敏感信息,并使用户能够方便而安全地进行认证。这对于金融和医疗健康应用来说尤为重要。希望本博客能帮助您深入了解 Android 生物认证管理的技术实现。

参考

  • • [Android Developers - Biometric Authentication] (https://developer.android.com/training/sign-in/biometric-auth)

  • • [Android Developers - BiometricPrompt] (https://developer.android.com/reference/androidx/biometric/BiometricPrompt)

  • • [BiometricAuthenticationExample] (https://github.com/AndroBrain/BiometricAuthenticationExample)

转自:您的App接入Android指纹识别了吗?