当前位置: 首页 > news >正文

Android 接入指纹识别

接入指纹框架:https://github.com/Tencent/soter

implementation 'com.github.Tencent.soter:soter-wrapper:2.0.9'

1.Application中初始化

class IApplication : Application() {override fun onCreate() {super.onCreate()instance = thisinitSort()}private fun initSort() {val param = InitializeParamBuilder().setScenes(100).build()SoterWrapperApi.init(this, { result ->logDebug("$result")}, param)}}

2.准备密钥

  SoterWrapperApi.prepareAuthKey({ result ->logDebug("init sort = $result")if (result.errCode == SoterErrCode.ERR_OK) {//支持指纹binding.llFingerPay.visibility = View.VISIBLE} else {binding.llFingerPay.visibility = View.GONE}}, false, true, 100, null, null)

也可以通过准备密钥结果来判断是否设备是否支持指纹

3.调起系统指纹进行验证

3.1 请求验证前获取AuthenticationParam

    private var canceller: SoterBiometricCanceller? = nullfun getAuthParam(act: AppCompatActivity?, showPassword: Boolean = true): AuthenticationParam {canceller = SoterBiometricCanceller()canceller!!.refreshCancellationSignal()val param = AuthenticationParam.AuthenticationParamBuilder().setScene(100).setContext(act).setBiometricType(ConstantsSoter.FINGERPRINT_AUTH).setSoterBiometricCanceller(canceller)//用于获取挑战因子的网络封装结构体。如果在授权之前已经通过其他模块拿到后台挑战因子,则可以改为调用setPrefilledChallenge.setPrefilledChallenge("test1").setSoterBiometricStateCallback(object : SoterBiometricStateCallback {override fun onStartAuthentication() {//开始验证}override fun onAuthenticationHelp(helpCode: Int,helpString: CharSequence?) {}override fun onAuthenticationSucceed() {//验证成功}override fun onAuthenticationFailed() {//指纹错误}override fun onAuthenticationCancelled() {//用户主动取消,可能会切换密码}override fun onAuthenticationError(errorCode: Int,errorString: CharSequence?) {//验证异常}}).build()return param}

3.2 请求验证

        SoterWrapperApi.requestAuthorizeAndSign({ result ->if (result.isSuccess) {//每个手指的指纹标识val fid = result.extData.fid//指纹验证成功} else {//指纹不匹配或其他错误showFingerError(result)}}, authParam)

多个指纹,可以使用fid进行判断对比。

最后权限:

<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
http://www.lryc.cn/news/308338.html

相关文章:

  • 如何通过代理IP安全使用Linkedln领英?
  • 嵌入式驱动学习第一周——定时器与延时函数
  • Tips杂记
  • 可以用numpy为for加速
  • cartographer ceres后端优化
  • day57 集合 List Set Map
  • 蓝桥杯:真题讲解3(C++版)附带解析
  • 继续预训练对大语言模型的影响
  • 关于空频变换的知识点
  • 纯css实现-让字符串在文字少时显示为居中对齐,而在文字多时显示为左对齐
  • 初学HTMLCSS——盒子模型
  • 吸猫毛空气净化器哪个好?推荐除猫毛好的宠物空气净化器品牌
  • 【玩转408数据结构】线性表——双链表、循环链表和静态链表(线性表的链式表示 下)
  • 分布式概念
  • vue中的ref/reactive区别及原理
  • 深度学习介绍与环境搭建
  • QT C++实践|超详细数据库的连接和增删改查操作|附源码
  • matlab:涉及复杂函数图像的交点求解
  • Unity(第二十二部)官方的反向动力学一般使用商城的IK插件,这个用的不多
  • nginx反向代理,获取客户端ip
  • 13 Codeforces Round 886 (Div. 4)G. The Morning Star(简单容斥)
  • CLion 2023:专注于C和C++编程的智能IDE mac/win版
  • 数据可视化基础与应用-02-基于powerbi实现连锁糕点店数据集的仪表盘制作
  • 前后端分离Vue+nodejs酒店公寓客房预订管理系统udr7l-java-php-django-springboot
  • VUE打包的dist文件放到后端一起发布
  • React入门之React_渲染基础用法和class实例写法
  • Git自动忽略dll文件的问题
  • sql中如何实现递归
  • GPT 的基础 - T(Transformer)
  • 微信小程序 --- 常用样式和组件