Android 显示 指纹/人脸 身份验证对话框

这篇具有很好参考价值的文章主要介绍了Android 显示 指纹/人脸 身份验证对话框。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 前言

        为了增加用户的隐私和安全,需保护您的应用中的敏感信息或付费内容,一种方法是请求生物识别身份验证,例如使用人脸识别或指纹识别。本篇文章介绍了如何在您的应用中支持生物识别登录流程。

2. 声明应用支持的身份验证类型

如需定义您的应用支持的身份验证类型,请使用 BiometricManager.Authenticators 接口。系统支持您声明以下类型的身份验证,   根据其欺骗和冒名顶替接受率以及生物识别管道的安全性,生物识别传感器可分为3级(强)、2级(弱)、1级(便利)

2.1  BIOMETRIC_STRONG

该Flag 表示支持3种生物识别:人脸,指纹,虹膜,    强度级别为 3级

2.2  BIOMETRIC_WEAK

该Flag 表示支持3种生物识别:人脸,指纹,虹膜, 强度级别为 2级

2.3  DEVICE_CREDENTIAL

该Flag 用于保护设备的非生物识别凭证,用的是 图案, PIN码,数字密码验证, 强度级别 1级

如需开始使用身份验证器,用户需要创建 PIN 码、解锁图案或密码。如果用户尚无 PIN 码、解锁图案或密码,生物识别注册流程会引导提示用户创建一个。

如需定义您的应用接受的生物识别身份验证类型,请向 setAllowedAuthenticators() 方法传递一个身份验证类型或按位类型组合。以下代码段展示了如何使用 3 类生物识别或屏幕锁定凭据支持身份验证。

// Lets user authenticate using either a Class 3 biometric or
// their lock screen credential (PIN, pattern, or password).
promptInfo = new BiometricPrompt.PromptInfo.Builder()
                .setTitle("Biometric login for my app")
                .setSubtitle("Log in using your biometric credential")
                .setNegativeButtonText("Use account password")
                .setAllowedAuthenticators(BIOMETRIC_STRONG)
                .build();

注意1:不能在调用 BiometricPrompt.PromptInfo.Builder 实例时, 同时调用 setNegativeButtonText() 和 setAllowedAuthenticators(... or DEVICE_CREDENTIAL)

注意2: 在Android 11(API 30)之前,并不是所有认证器类型的组合都受支持。具体而言:

API 30之前不单独支持{DEVICE_REDENTIAL},在>= API30(Andorid11)的版本上,可以单独设置此属性。

API 28-29不支持{ BIOMETRIC_STRONG | DEVICE_CREENTIAL} 组合,

如果配合不正确的话,再创建对话框的时候就会报错。

2.4 检查生物识别身份验证是否可用

        也就是说,如果要出现指纹/人脸 验证的对话框的话,前提是你先录制指纹或录制人脸,如果没有录制,会提示引导用户先去录制,如下代码是检验并引导.

BiometricManager biometricManager = BiometricManager.from(this);
switch (biometricManager.canAuthenticate(BIOMETRIC_STRONG | DEVICE_CREDENTIAL)) {
    case BiometricManager.BIOMETRIC_SUCCESS:
        Log.d("MY_APP_TAG", "App can authenticate using biometrics.");
        break;
    case BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE:
        Log.e("MY_APP_TAG", "No biometric features available on this device.");
        break;
    case BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE:
        Log.e("MY_APP_TAG", "Biometric features are currently unavailable.");
        break;





    //如果是走这个分支的话,就是跳转到设置模块中去录制指纹/录制人脸
    //当然不同的Andorid版本 这里的代码不一样,需要自己去适配
    case BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED:
        // Prompts the user to create credentials that your app accepts.
        final Intent enrollIntent = new Intent(Settings.ACTION_BIOMETRIC_ENROLL);
        enrollIntent.putExtra(Settings.EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED,
                BIOMETRIC_STRONG | DEVICE_CREDENTIAL);
        startActivityForResult(enrollIntent, REQUEST_CODE);
        break;
}

3. 使用步骤

3.1 使用 Biometric 库

使用 Biometric 库向应用添加生物识别身份验证,请按照以下步骤操作:

1. 在应用模块的 build.gradle 文件中,添加 androidx.biometric 库的依赖项。

    // 增加如下库
    implementation "androidx.biometric:biometric:1.1.0"

2.  在AndroidManifest.xml增加 android.permission.USE_BIOMETRIC 权限

<permission android:name="android.permission.USE_BIOMETRIC" />

   

3.2 核心代码

        在托管生物识别登录对话框的 Activity 或 Fragment 中,使用以下代码段中所示的逻辑显示对话框, 就是创建promptInfo 这个Buider对象:

private Executor executor;
private BiometricPrompt biometricPrompt;
private BiometricPrompt.PromptInfo promptInfo;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    executor = ContextCompat.getMainExecutor(this);
    biometricPrompt = new BiometricPrompt(MainActivity.this,
            executor, new BiometricPrompt.AuthenticationCallback() {
        @Override
        public void onAuthenticationError(int errorCode,
                @NonNull CharSequence errString) {
            super.onAuthenticationError(errorCode, errString);
            Toast.makeText(getApplicationContext(),
                "Authentication error: " + errString, Toast.LENGTH_SHORT)
                .show();
        }

        @Override
        public void onAuthenticationSucceeded(
                @NonNull BiometricPrompt.AuthenticationResult result) {
            super.onAuthenticationSucceeded(result);
            Toast.makeText(getApplicationContext(),
                "Authentication succeeded!", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onAuthenticationFailed() {
            super.onAuthenticationFailed();
            Toast.makeText(getApplicationContext(), "Authentication failed",
                Toast.LENGTH_SHORT)
                .show();
        }
    });

    promptInfo = new BiometricPrompt.PromptInfo.Builder()
            .setTitle("Biometric login for my app")
            .setSubtitle("Log in using your biometric credential")
            .setNegativeButtonText("Use account password")
            .setAllowedAuthenticators(BIOMETRIC_STRONG)
            .build();

    // Prompt appears when user clicks "Log in".
    // Consider integrating with the keystore to unlock cryptographic operations,
    // if needed by your app.
    Button biometricLoginButton = findViewById(R.id.biometric_login);
    biometricLoginButton.setOnClickListener(view -> {
            biometricPrompt.authenticate(promptInfo);
    });
}

3.3 效果图

        如果你的设备没有录制指纹 或 录制人脸 ,则会有提示你去录制指纹 或 录制人脸, 这是我在一款Android.10设备上的演示效果

1. 没有录制指纹人脸,则会跳转到引导界面

biometric 库,Android Framework,安全,Android指纹校验,Android人脸校验

2. 录制了人脸,则会跳转到校验人脸对话框界面

biometric 库,Android Framework,安全,Android指纹校验,Android人脸校验

重要备注:

在android10以上 系统默认静止第三方app  设置人脸解锁 android.provider.Settings.Secure.FACE_UNLOCK_APP_ENABLED

所以验证的时候需要我们配置一下:

adb shell settings put secure face_unlock_app_enabled 1

这是在一款Android9 设备上 指纹 校验演示效果图:

biometric 库,Android Framework,安全,Android指纹校验,Android人脸校验

备注:如果你的设备既支持指纹 又支持人脸的话,优先弹出指纹的校验对话框,因为指纹的安全  级别强度高于人脸。

4. 完整Demo

     已上传CSDN :  https://download.csdn.net/download/u012514113/87428486

     有需要的可以下载参考!文章来源地址https://www.toymoban.com/news/detail-790490.html

到了这里,关于Android 显示 指纹/人脸 身份验证对话框的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Winform]在Form里显示模态对话框ModalDialog

    如何在WinForm的一个 Form里面 弹出一个模态Dialog? 程序的框架是Winform,只有一个窗口MainForm。MainForm里面是一个TabControl,每个TabPage是一个Form,每个TabPage的Form相互独立,互不干扰,TabPage间可以随时切换。由于有某些需求,TabPage需要接受用户输入,并等待输入完成,才能执行后

    2024年02月04日
    浏览(72)
  • android:提醒对话框AlertDialog

    一、前言:点击按钮出现提示 二、上代码 新建一个活动AlertDialogActivity

    2024年02月12日
    浏览(40)
  • Android开发 Dialog对话框 DatePickerDialog

    1. AlertDialog AlertDialog是弹出的提醒对话框,有提示,确认,选择等功能。 没有公开的构造方法,一般用AlertDialog.Builder来完成参数设置,最后调用create方法创建。 参数设置常用的方法:  代码: 效果图:   2. DatePickerDialog DatePickerDialog在 AlertDialog上添加了日期选择器DatePicker,

    2023年04月09日
    浏览(38)
  • Android如何自定义输入文本对话框?

      笔者研究的课题涉及到安卓软件开发,在开发过程中,发现普通的显示消息对话框一般可以调用android自带包实现,而要通过文本框输入交互,则无法轻易实现。在查阅网络资料后,实现了自定义输入文本对话框的功能,本文记录实现自定义输入文本对话框的过程。   

    2024年02月13日
    浏览(44)
  • 解决问题:Element ui组件中Dialog对话框只显示遮罩层,不显示弹框内容

    以下是Dialog 对话框的基本用法: 这个时候页面只显示了遮罩层,但是不显示弹框的内容,查阅文档后,发现有这样一条: append-to-body的默认值是false,所以需要自己在el-dialog标签中手动设置为true,  加上之后弹框内容就可以显示了。

    2024年02月06日
    浏览(57)
  • Rust UI开发(三):iced如何打开图片(对话框)并在窗口显示图片?

    注:此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库,用于为rust语言程序构建UI界面。 这是一个系列博文,本文是第三篇,前两篇的链接: 1、Rust UI开发(一):使用iced构建UI时,如何在界面显示中文字符 2、Rust UI开发(二):iced中如何为窗口添加icon图标 本篇是

    2024年02月04日
    浏览(95)
  • vue中使用el-dialog设置弹窗对话框在前端显示为居中

    废话不多直接上图

    2024年02月01日
    浏览(46)
  • 安卓android日期选择器对话框 DatePickerDialog,实现日期选择,滚动式选择日期

    基本想法是:点击一个文本框,然后弹出日期选择器对话框,选择日期按下确定键后,文本框显示所选择的日期。可以有多种显示的主题,完整代码会在最后给出。 一、设置XML文件 记得给TextView取一个id,这里我取的id是:date 二、获取文本框组件 三、设置文本框的点击事件

    2023年04月15日
    浏览(50)
  • android 12.0长按Power弹出关机对话框去掉屏幕截图和紧急呼救功能

    在12.0的系统长按关机键,会弹出关机的对话框,关机对话框里面由关机重启截图和紧急呼叫等功能,而由于开发功能需求要求去掉屏幕截图和紧急呼叫等功能,所以就要先找到关机对框的代码 然后实现功能 功能分析: 长按电源键弹出关机对话框,通过adb shell命令发现 就是

    2024年02月06日
    浏览(77)
  • Android 13.0 framework中实现默认长按电源键弹出关机对话框功能

    在13.0的系统定制化开发中,在12.0的系统之前默认的都是长按电源键弹出关机对话框,而在13以后 就改成音量+电源键弹出对话框,由于使用不方便,所以就改成默认长按弹出关机对话框功能 PhoneWindowManager是供系统进程使用,是WindowManagerService 的一部分,WindowManagerService 会利用

    2024年02月11日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包