Uniapp生物识别(SOTER)

一、功能分析

功能概述

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

需要用到的Uniapp的Api

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

二、完整代码

html 复制代码
<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>

三、运行测试

相关推荐
Amewin4 小时前
在vue3+uniapp+vite中挂载全局属性方法
javascript·vue.js·uni-app
2501_9151063213 小时前
App HTTPS 抓包 工程化排查与工具组合实战
网络协议·ios·小程序·https·uni-app·php·iphone
dcloud_jibinbin14 小时前
【uniapp】小程序体积优化,分包异步化
前端·vue.js·webpack·性能优化·微信小程序·uni-app
2501_9160088915 小时前
金融类 App 加密加固方法,多工具组合的工程化实践(金融级别/IPA 加固/无源码落地/Ipa Guard + 流水线)
android·ios·金融·小程序·uni-app·iphone·webview
2501_9159214315 小时前
Fastlane 结合 开心上架(Appuploader)命令行版本实现跨平台上传发布 iOS App 免 Mac 自动化上架实战全解析
android·macos·ios·小程序·uni-app·自动化·iphone
游戏开发爱好者817 小时前
iOS 上架要求全解析,App Store 审核标准、开发者准备事项与开心上架(Appuploader)跨平台免 Mac 实战指南
android·macos·ios·小程序·uni-app·iphone·webview
00后程序员张17 小时前
混淆 iOS 类名与变量名的实战指南,多工具组合把混淆做成工程能力(混淆 iOS 类名变量名/IPA 成品混淆Ipa/Guard CLI 实操)
android·ios·小程序·https·uni-app·iphone·webview
2501_9160074721 小时前
iOS文件管理工具深度剖析,从系统沙盒到跨平台文件操作的多工具协同实践
android·macos·ios·小程序·uni-app·cocoa·iphone
shykevin21 小时前
uni-app x开发商城系统,扩展组件uni-ui实现底部商品导航
uni-app
QuantumLeap丶1 天前
《uni-app跨平台开发完全指南》- 05 - 基础组件使用
vue.js·微信小程序·uni-app