如何显示显示的生物特征提示指纹的身份验证错误。 #Android

时间:2019-09-17 12:29:32

标签: android android-biometric-prompt in-display-fingerprint under-display-fingerprint

我正在实施Bio metric Prompt API,以授权用户使用指纹。我发现Bio-metric Prompt API根据设备传感器类型显示不同的UI。

enter image description here

生物识别API SDK调用可独立工作,以根据传感器类型显示相应的UI。

enter image description here

现在关注的是:

  1. 对于背面(在某些设备中位于设备侧面)的设备,它会显示一个对话框,该对话框也可用于显示错误。
  2. 但是在带内/下方显示感应设备的情况下,它仅显示指纹印记,万一不显示任何错误。

现在的问题是:

  1. 使用该显示提示是否有任何API功能可以显示错误。
  2. 如果没有,我们如何区分两种类型的传感器设备,从而可以显式处理错误。

3 个答案:

答案 0 :(得分:1)

在这种情况下,确实有一个API和回调可供您使用。您要查找的软件包是API级别28+的Biometrics软件包或API级别23-27的Fingerprint软件包。

我要引用的回调可以在API 28+的here和API 23-27的here中找到。

以下是一些示例代码,说明了如何初始化回调:

/**
 * Helper class for authentication callback
 */
@RequiresApi(api = Build.VERSION_CODES.M)
private class FingerprintHandler extends FingerprintManager.AuthenticationCallback {
    private FingerprintHandler(){}

    /**
     * Called when an unrecoverable error has been encountered and the operation is complete.
     * No further callbacks will be made on this object.
     * @param errMsgId An integer identifying the error message
     * @param errString A human-readable error string that can be shown in UI
     */
    @Override
    public void onAuthenticationError(int errMsgId, CharSequence errString) {
        //Authentication error. The 'errString' is meant to be displayed to the user
        //Handle logic here
    }

    /**
     * Called when a fingerprint is valid but not recognized.
     */
    @Override
    public void onAuthenticationFailed() {
        //Authentication failed (Fingerprints don't match ones on device)
        //Handle logic here
    }

    /**
     * Called when a recoverable error has been encountered during authentication. The help
     * string is provided to give the user guidance for what went wrong, such as
     * "Sensor dirty, please clean it."
     * @param helpMsgId An integer identifying the error message
     * @param helpString A human-readable string that can be shown in UI
     */
    @Override
    public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
        //Non-Fatal error (IE moved finger too quickly). The helpString can be displayed to the user to help them retry.
        //Handle logic here
    }

    /**
     * Called when a fingerprint is recognized.
     * @param result An object containing authentication-related data
     */
    @Override
    public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
        //Authentication Succeeded. They are good to go and it matches the stored one
        //Handle logic here
    }
}

如果上面的代码不足以使您感动,那么here是我的一类示例中的一些用法。

关于利用警报或显示,如果我不想阻止屏幕,则只需将回调信息与Dialog或屏幕上的文本视图结合使用。

答案 1 :(得分:1)

如果您仍然遇到此问题,最近发布的blog post阐明了API为什么以其行为方式运行。这篇文章还向您展示了如何正确使用API​​。

您只需要在AndroidX中使用生物识别库即可。

基本上,您会得到三个回调:

    使用设备可以识别的凭据对用户进行身份验证后,会调用
  1. onAuthenticationSucceeded()”。

  2. 发生不可恢复的错误时,会调用
  3. onAuthenticationError()。

  4. onAuthenticationFailed()在用户被拒绝时被调用,例如,当未注册的指纹放在传感器上时,但是与onAuthenticationError()不同,用户可以继续尝试进行身份验证。

您可以使用这些回调中的任何一个通过Toast等将消息发布给用户。

答案 2 :(得分:0)

我认为您的问题与显示器/后置传感器无关。在我使用Biometricx API进行的测试分析中,我发现当生物特征认证失败时,两种显示/后传感器类型在系统UI中均显示错误。这也取决于您要测试的设备,设备制造商可能已决定不支持Biometrics API。就我而言,当我在Samsung S5设备上进行测试时,即使该设备具有显示传感器,canAuthenticate()也会返回false。