使用统一接口兼容库 BiometricPromptCompat 简化你的 Android 生物识别解锁支持

2023-05-16

不知不觉,指纹识别解锁已经完成普及很久,当年 Google 在 Android 6.0 版本(SDK 23)方才加入统一的接口,如今已有很多应用程序适配支持了。 FingerprintManager 确实提供了非常便捷的接口供开发者,但没有统一的界面,需要应用程序各自实现自己的 UI,结果出来的效果五花八门、体验一般。

现在 Android P 为开发者们换来了更加简单的 BiometricPrompt,由系统来提供统一的界面,也为更多的生物识别传感器解锁支持提供可能(字面意思上的理解,现在使用 Biometric 一词取代了 Fingerprint),未来系统允许第三方应用面容特征解锁时,开发者亦无需再额外编写代码接入。

介绍 BiometricPromptCompat

源码地址: https://github.com/fython/BiometricPromptCompat

BiometricPromptCompat 是为兼容低版本 Android 而设计的,它的界面十分接近于原版 BiometricPrompt 以保证在不同的 Android 上有一致的效果。

当然在 Android P 或者更新的版本我们还会用原来的 BiometricPrompt 接口,尽管不能保证不同设备上的界面一致,因为系统厂商们会以他们的风格重新设计。(但没有关系,我认为系统厂商有权利统一自己的系统风格,而且不同的生物识别解锁也需要不同的界面)

我们需要意识到在 Android 6.0~8.1 版本中只有指纹传感器会被支持,很抱歉我暂时没有计划去适配成千上万系统中不相容的接口们。

基本需求

  • Platform SDK for Android P (android-28)
  • Android Studio 3.1+

举个例子

我们推荐在使用这个库前先了解 FingerprintManager 或 BiometricPrompt 的使用,所有你想知道的都可以在那找到。

首先引入依赖到你的应用 Module 中(build.gradle):

dependencies {
     implementation 'moe.feng.support.biometricprompt:library:1.0.0'
}

接下来通过 BiometricPromptCompat.isHardwareDetected(Context) 来得知硬件是否支持(会包括 Android 版本检查)。

经过确认后,才可开始构建对话框并开始认证:

final BiometricPromptCompat biometricPrompt = new BiometricPromptCompat.Builder(context)
        .setTitle("标题")
        .setSubtitle("副标题")
        .setDescription("描述:吧啦吧啦吧啦吧啦吧啦……")
        .setNegativeButton("使用密码", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(
                    context,
                    "你请求了密码解锁。",
                    Toast.LENGTH_LONG).show();
            }
        })
        .build();

biometricPrompt.authenticate(cancellationSignal, myCallback);

相关链接

FingerprintManager 参考

BiometricPrompt 参考

Android P Preview 改动介绍中的生物识别解锁部分说明

效果展示

Android 8.1

Android-O.png

Android P Preview

Android-P.png

还有……

支付宝、微信为何不使用统一接口?

众所周知,支付宝和微信的指纹支付功能欲为 Android 所用还需系统中置入他们的私有库并获得他们的认证方可使用,两家中国互联网巨头不约而同道如此做法是为了安全,甚有相关原理分析文章发表(微信 SOTER)。假设 Google 真的在过去留下了坑,随时时间推移他们也会发现问题存在并解决,而国内这些方案为何又不被采纳入 AOSP 中。

从某厂热门手游的 “高帧率模式支持” 一词被炒热来看,这些不兼容的接口支持,或为一种软件厂商给予硬件厂商的营销手段,与此同时自己也在高权限空间占有一席之地,当中的利益关系不容小觑。

结果或好或坏,为了小部分破解获得 root 权限又不注重软件安全的用户的数据、财产安全而牺牲了所有使用非国产系统或手机的用户体验,实在划不来。国内直接使用 Android 原生接口的软件数不胜数,单是美团、招商银行就有相当大的用户量了,我们也应该放心地去使用统一接口。

怎样同时使用用户设定的 PIN、图案锁定作为解锁方式

早在 Android 5.0 KeyguardManager 就提供了 createConfirmDeviceCredentialIntent 方法可以创建一个打开系统设置认证界面的 Intent,它的解锁方式会与锁屏保持一致,使用 startActivityForResult 去获取结果,当结果为 RESULT_OK 时则通过解锁。

这是一个依赖系统设置界面的 API 用的人比较少,不确定各个国产系统上的行为表现是否稳定,使用前建议先调查可用性(尤其是 MIUI)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用统一接口兼容库 BiometricPromptCompat 简化你的 Android 生物识别解锁支持 的相关文章

  • spring框架

    关于spring的说法错误的是 xff08 D xff09 A spring是一个轻量级Java EE的框架集合 B spring的 依赖注入 模式的实现 C 使用spring可以实现声明事务 D spring提供了AOP方式的日志系统 解
  • NSAttributedString用法简介,控制文字颜色,背景色等属性

    NSAttributedString用来管理字符串以及和字符串相关的属性 下面的代码是根据字符范围设置label的text的颜色 UIFont font 61 UIFont systemFontOfSize 14 0 行间距和字体 NSDi
  • AVStream AVCodecContext AVCodec

    AVStream 表示成一个流媒体 xff0c 每个AVStream对应一个AVCodecContext xff0c 存储该音视频流使用解码器的相关数据 xff0c 每个AVCodecContext中对应一个AVCodec 包含该音视频的解
  • 2022 年 GIS 就业状况

    2022 年 GIS 就业状况 我们生活在数字时代 xff0c 通过进行在线研究选择我们的道路 xff0c 比如选择假期 选择大学或追求职业 如果您正在考虑进入 GIS 领域或在 GIS 领域进一步发展 xff0c 那么这份报告一定会有所帮
  • 在Keyguard锁屏上面可弹出Toast消息的方法

    通过调用toast的getWindowParams方法获取toast的WindowParams xff0c 再设置允许在锁屏之上显示的window flag FLAG SHOW WHEN LOCKED 参考代码如下 Toast mToast
  • vsftpd的参数说明和虚拟用户配置

    vsftpd配置文件详解 1 默认配置 xff1a 1 gt 允许匿名用户和本地用户登陆 anonymous enable 61 YES local enable 61 YES 2 gt 匿名用户使用的登陆名为ftp或anonymous x
  • gradle 插件版本、gradle版本 和buildToolsVersion之间的对应关系

    一 主要概念 1 Gradle是什么 xff1f Gradle其实就是一个构建项目的工具 xff0c 即把一堆堆的目录 文件按照一定的规则关联起来 xff0c 形成一个项目的自动化构建工具 Gradle版本 如 xff1a gradle 5
  • 学神的“诞生”-2014清华大学本科生特等奖学金答辩观后感

    清华的特奖与交大的竢实扬华 偶然间在学堂在线上留意到有这样的一场现场答辩 xff0c 很想知道最高学府的最高荣誉花落谁家 xff0c 得此殊荣的又是些怎样的 学神 xff0c 几点感受记录之 1 经历 gt gt 证书 清华的学生更注重大学
  • nexus3.14.0版本linux环境安装、启动、搭建私库

    本文介绍的是nexus3 14 0版本在linux环境下安装 启动 搭建私库 nexus3以上的版本太新了 xff0c 网上很少介绍安装细节的 据了解和2 X版本有所不同了 1 前提 linux机器上需先安装好jdk xff0c 并且配置好
  • CentOS7安装MariaDB以及编码注意事项

    1 安装并启动MariaDB span class hljs preprocessor 先更新一下 span yum upgrade span class hljs preprocessor 安装 span yum y install ma
  • c++多线程 (生产者消费者问题)

    针对多线程中常见的生产者消费者问题 xff0c 封装了一个类 xff0c 和测试代码 xff0c 方便日后直接套用 具体来说就是多线程使用时候经常遇到的 一个线程取数据 xff0c 一个处理数据 xff0c 一个保存或传递数据 的情况 简单
  • 看技术书籍坚持不下来的,看这里,记录增量学习法

    今天 xff0c 在阅读 软技能 代码之外的生存指南 这本书的过程中 xff0c 学习到了番茄工作法 定额工作法 xff0c 受此启发 xff0c 突然脑海里冒出了一个方法论 xff0c 这是我独创的一个学习方法论 xff0c 我把它称作
  • Android native内存泄露排查总结

    Android开发通常涉及java层 native xff08 c c 43 43 xff09 下的开发 xff1b 内存的泄露也可以分为dalvik和native两种 xff1b java层的通常叫好分析 xff0c 可以借助heapdu
  • 分享一个手游脚本源码

    目的 给大家接触手游模拟脚本的一个样板 xff0c 支持多分辨率适配 脚本功能为批量送体力给好友 xff0c 功能简单 源码 lua span class token comment 版本 span span class token com
  • crackme例子2

    样本 jadx clacSnFuntion jni函数 xff0c ida分析 关键位置函数一片红色 xff0c 可能有动态加解密 如果不分析具体解密算法 xff0c 可内存dump解密后整个so frida如下 xff1a span cl
  • 8本游戏开发书籍推荐

    很多刚刚接触游戏开发的朋友经常问我 xff1a 如何开始学习游戏开发 xff1f 我从事游戏开发行业很多年了 xff0c 坦率地讲 xff0c 开发游戏充满挑战性 xff0c 需要开发人员具备大量的技能与积极的创新精神 希望这篇小文能帮助朋
  • win10编译scrcpy详解

    环境配置 安装MSYS2 安装后打开msys终端 xff0c 运行如下命令 span class token comment runtime dependencies span pacman S mingw w64 x86 64 SDL2
  • windows编译安卓源码记录

    环境 Windows10 43 vmware17 43 ubuntu22 ubuntu环境设置 装完ubuntu系统后拖拽复制文件进去验证vmtools功能情况 xff0c 如果vmtools异常很麻烦 xff0c 试了n多方法 xff0c
  • adb执行多条连续cmd命令

    你可以试一下下面的方法 xff1a 64 echo off echo su gt temp txt echo 其它命令 gt gt temp txt adb shell lt temp txt del temp txt 普通情况 xff0c
  • java代码混淆

    什么是代码混淆 Java 是一种跨平台的 解释型语言 xff0c Java 源代码编译成中间 字节码 存储于 class 文件中 由于跨平台的需要 xff0c Java 字节码中包括了很多源代码信息 xff0c 如变量名 方法名 xff0c

随机推荐