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

Uniapp生物识别(SOTER)

一、功能分析

功能概述

  • 检查设备是否支持面容/指纹识别
  • 检查用户是否已录入相关生物特征
  • 显示可用的识别方式(如“指纹识别”、“面容识别”)
  • 点击后调起系统级生物识别弹窗

需要用到的Uniapp的Api

  • uni.checkIsSupportSoterAuthentication():检测支持的认证方式
  • uni.checkIsSoterEnrolledInDevice():检查是否已录入生物特征
  • uni.startSoterAuthentication():启动生物识别

二、完整代码


<template><view class="content"><view class="title-box">生物识别demo</view><view class="mode-box"><block v-for="(item,index) in authMode.mode" :key="index"><view class="mode" @click="startAuth(item)">{{item.text}}</view></block></view></view>
</template><script setup lang="ts">import { onShow } from "@dcloudio/uni-app";import { ref } from "vue";interface ModeInfo {mode : 'fingerPrint' | 'facial' | string;text : string;support : boolean;}onShow(()=>{checkAuthModeSupport();});/*** 检查设备支持的生物识别方式*/let authMode = ref({mode: [] as Array<ModeInfo>,support: false})const modeDes = {'facial': '面容识别','fingerPrint': '指纹识别'}async function checkAuthModeSupport() {let authModeRes = await uni.checkIsSupportSoterAuthentication();if(authModeRes.supportMode) {authModeRes.supportMode.forEach( async (mode) => {let creatureInfo = await uni.checkIsSoterEnrolledInDevice({checkAuthMode: mode });authMode.value.mode.push({mode,text: modeDes[mode],support: creatureInfo.isEnrolled});});}else {authMode.value.support = false;console.log('该设备不支持生物识别认证!')}}/*** 启动生物识别认证* @param modeInfo 选择的认证方式*/async function startAuth(modeInfo : ModeInfo) {let authRes = await uni.startSoterAuthentication({requestAuthModes: [modeInfo.mode] as any,challenge: '实际项目中 challenge 应为动态生成的唯一标识(如订单ID)', // 挑战因子为调用者为此次生物鉴权准备的用于签名的字符串关键识别信息,场景为请求用户对某订单进行授权确认,则可以将订单号填入此参数。authContent: `请进行${modeInfo.text}`,});if(authRes.errCode == 0) {console.log('识别成功');// TODO: 处理业务逻辑(如登录、支付确认等)}else {/* 其它错误码说明90001	本设备不支持生物认证90002	用户未授权使用该生物认证接口90003	请求使用的生物认证方式不支持90004	未传入challenge或challenge长度过长(最长512字符)90005	auth_content长度超过限制(最长42个字符)90007	内部错误90008	用户取消授权90009	识别失败90010	重试次数过多被冻结90011	用户未录入所选识别方式*/}}
</script><style scoped lang="scss">.content {padding: 20px 0;.mode-box {display: flex;align-items: center;justify-content: center;gap: 16px;.mode {opacity: 0.9;font-size: 12px;font-weight: bolder;}}.title-box {display: flex;font-size: 14px;font-weight: bolder;margin: 22px auto;justify-content: center;}}
</style>

三、运行测试

http://www.dtcms.com/a/317283.html

相关文章:

  • 什么是逻辑外键?我们要怎么实现逻辑外键?
  • 【C++详解】STL-set和map的介绍和使用样例、pair类型介绍、序列式容器和关联式容器
  • sqli-labs靶场less40-less45
  • uniapp 通用地磅称重系统手机端
  • 生成网站sitemap.xml地图教程
  • android 设置字体样式
  • QT----QAxObject在子线程中调用,发现excel指针为空
  • NCD57080CDR2G 安森美onsemi 通用驱动器, SOIC, 8针, 20V电源, 8 A输出NCD57080CDR2电流隔离式栅极驱动器
  • Excel制作尖刀图,直观展示业绩涨跌
  • 【Excel】通过Index函数向下拖动单元格并【重复引用/循环引用】数据源
  • Unity模型显示在UI上
  • mysql 8递归查询
  • AMD二季度净利润同比下降31%
  • 企业级建模平台Sparx EA的云服务实现全域架构协同
  • imx6ull-驱动开发篇11——gpio子系统
  • django permission_classes = [AllowAny] 如何限制到具体接口
  • 得物向量数据库落地实践
  • 智慧二次供水管理系统解决方案:城市供水“最后一公里”
  • 【面试场景题】电商秒杀系统的库存管理设计实战
  • Docker swarm 常用的命令集合
  • 线轨矫平机:让“钢轨”变直的幕后物理课
  • 移动端网页调试实战,跨设备兼容与触控交互问题排查全流程
  • SassSCSS:让CSS拥有超能力的预处理器
  • `<dependencyManagement>`内部的`<dependencies>`和外部的`<dependencies>`的区别:
  • Spring Boot全局异常处理与日志监控实战指南
  • 浙江大学PTA程序设计C语言基础编程练习题6-10
  • Python爬虫实战:研究Photon工具,构建企业信息收集系统
  • 【Java】HashMap的key可以为null吗?如何存储的?
  • 线性代数中矩阵的基本运算运算
  • 【图像处理基石】浅谈3D城市生成中的数据融合技术