uni-app 面容、指纹识别插件(uni-face-login)
面容、指纹识别插件(uni-face-login)
介绍
人脸指纹登录授权,可以使用手机自带的人脸、指纹进行生物识别,进而判断是否机主本人,从而进行授权验证,适配安卓、iOS、鸿蒙设备
猛戳这里去插件市场看看
使用
该插件支持鸿蒙、安卓、iOS系统设备;
鸿蒙设备测试面容、指纹适配正常;
最低支持安卓5.0,因为安卓6.0开始才有的指纹,6.0以下会返回错误码,6.0或6.0以上正常,且国内厂商禁止使用人脸认证,只能调起指纹识别;
iOS最低支持11.0,设备会先进行面容识别(iOS从iphonex开始有的面容识别,之前版本支持指纹识别),认证失败两次会进行密码认证,继续失败手机会锁住,锁屏时间会累加
更多定制功能请联系微信:soushin6
vue代码调用示例
<template><view><view style="height: 50rpx;"></view><button @click="callInit()">Sdk初始化</button><view style="height: 50rpx;"></view><button @click="callNative()">人脸登录</button><view style="height: 50rpx;"></view><button @click="callSupport()">是否支持人脸、指纹认证</button><view style="height: 50rpx;"></view><button @click="callDebug()">调试日志开关配置</button></view>
</template><script>var faceLogin = uni.requireNativePlugin("CZ-FaceLogin")export default {data() {return {}},methods: {callInit(){var ret = faceLogin.createFace();uni.showModal({title:'提示',content:JSON.stringify(ret)})},callNative(){console.log("调用原始方法")faceLogin.authLogin({'fingerTitle': '123指纹识别','fingerContent': '请123使用指纹识别','loadingText':'识别。。。','passwordHint':'请输入密码,确保环境安全'},(ret) => {console.log(ret)uni.showModal({title:'提示',content:JSON.stringify(ret)})})},callSupport(){faceLogin.isSupport((ret)=>{uni.showModal({title:'提示',content:JSON.stringify(ret)})});},callDebug(){var ret = faceLogin.debug({'enableLog': true,});uni.showModal({title:'提示',content:JSON.stringify(ret)})}, }}
</script><style></style>
nvue代码调用示例
<template><div><div style="height: 50rpx;"></div><button @click="callInit">Sdk初始化</button><div style="height: 50rpx;"></div><button @click="callNative">人脸登录</button><div style="height: 50rpx;"></div><button @click="callSupport">是否支持人脸、指纹认证</button><div style="height: 50rpx;"></div><button @click="callDebug">调试日志开关配置</button></div>
</template><script>var faceLogin = uni.requireNativePlugin("CZ-FaceLogin")export default {onLoad() {uni.setNavigationBarTitle({title:"人脸认证nvue"})},methods: {callInit(){var ret = faceLogin.createFace();uni.showModal({title:'提示',content:JSON.stringify(ret)})},callNative(){faceLogin.authLogin({'fingerTitle': '指纹识别','fingerContent': '请使用指纹识别','loadingText':'识别。。。','passwordHint':'请输入密码,确保环境安全'},(ret) => {uni.showModal({title:'提示',content:JSON.stringify(ret)})})},callSupport(){faceLogin.isSupport((ret)=>{uni.showModal({title:'提示',content:JSON.stringify(ret)})});},callDebug(){var ret = faceLogin.debug({'enableLog': true,});uni.showModal({title:'提示',content:JSON.stringify(ret)})}, }}
</script>
<style>
</style>
权限申请
鸿蒙 + android
//离线打包需要在AndroidManifest.xml里面增加<uses-permission android:name="android.permission.USE_BIOMETRIC" /><uses-permission android:name="android.permission.USE_FINGERPRINT" /><uses-permission android:name="android.permission.CAMERA" /><uses-sdk tools:overrideLibrary="com.huawei.security.localauthentication"/>
iOS
//离线打包需要在info.plist里面增加NSFaceIDUsageDescription
API调用说明
| API | 描述 | 参数 | 必须 |
|---|---|---|---|
| createFace() | 初始化识别SDK,在调用其他api之前必须调用此方法,否则会返回504 | 无 | 否 |
| authLogin() | 开始识别 | fingerTitle 安卓指纹识别标题, fingerContent 安卓指纹识别描述, loadingText 鸿蒙、安卓面容识别等待框提示文本, passwordHint iOS密码认证的提示文本; callback:返回内容见下方错误码说明 | 否 |
| isSupport() | 当前设备是否支持生物识别(指纹/面容) | callback:返回code=0支持,code=1不支持 | 是 |
| debug() | 设置调试日志输出开关 | enableLog true开 false关,默认关 | 是 |
错误码
| 错误码 | 描述 |
|---|---|
| 0 | 识别成功 |
| 1 | 识别失败 |
| 2 | 设备识别错误,请结合下方附录,或查看开发文档 |
| 3 | 帮助信息,一些距离远近、识别角度等一些提示,看需处理 |
| 4 | 取消 |
| 501 | 当前系统未录入信息 |
| 502 | 当前系统不支持人脸识别,或是人脸识别权限未开 |
| 503 | 当前系统不支持生物识别 |
| 504 | 请调用createFace()初始化SDK |
附录
鸿蒙错误码
| 错误码 | 值 | 描述 | 解决方法 |
|---|---|---|---|
| FACE_ERROR_HW_UNAVAILABLE | 1 | 硬件不可用。 | 请确认设备类型和OS版本是否支持,参见支持的设备。 |
| FACE_ERROR_UNABLE_TO_PROCESS | 2 | 传感器无法处理当前图像。 | 如问题反复出现,请使用在线提单联系维护人员。 |
| FACE_ERROR_TIMEOUT | 3 | 人脸识别超时。 | 请在短时间内完成识别。 |
| FACE_ERROR_NO_SPACE | 4 | 没有足够的存储空间。人脸识别不会返回此错误码。 | - |
| FACE_ERROR_CANCELED | 5 | 硬件临时不可用,操作被取消。 | 请稍后重试。 |
| FACE_ERROR_UNABLE_TO_REMOVE | 6 | 删除人脸失败。人脸识别不会返回此错误码。 | - |
| FACE_ERROR_LOCKOUT | 7 | 人脸失败次数过多,人脸识别锁定。 | 请稍后重试。 |
| FACE_ERROR_VENDOR | 8 | 人脸与机主人脸不匹配。 | 如机主无法认证通过,建议重新录入人脸后重试。 |
| FACE_ERROR_LOCKOUT_PERMANENT | 9 | 人脸失败次数过多,弱认证锁定。 | 请使用强认证(如PIN码)解锁。 |
| FACE_ERROR_USER_CANCELED | 10 | FACE_ERROR_USER_CANCELED | - |
| FACE_ERROR_NOT_ENROLLED | 11 | 用户未录入人脸。 | 请录入人脸。 |
| FACE_ERROR_HW_NOT_PRESENT | 12 | FACE_ERROR_HW_NOT_PRESENT | 请确认设备类型和OS版本是否支持,参见支持的设备。 |
Android
面容错误码
指纹错误码
| 面容错误码 | 值 | 描述 | 解决方法 |
|---|---|---|---|
| BIOMETRIC_ERROR_HW_UNAVAILABLE | 1 | 硬件不可用。 | 请确认设备类型和OS版本是否支持。 |
| BIOMETRIC_ERROR_NONE_ENROLLED | 11 | 用户没有注册任何生物信息 | 建议录入人脸后重试。 |
| BIOMETRIC_ERROR_NO_HARDWARE | 12 | 没有生物识别硬件。 | - |
| BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED | 15 | 已发现安全漏洞,并且在安全更新解决此问题之前,传感器将不可用。 | - |
| BIOMETRIC_SUCCESS | 0 | 识别成功 | - |
| 指纹错误码 | 值 | 描述 | 解决方法 |
|---|---|---|---|
| FINGERPRINT_ACQUIRED_GOOD | 0 | 获取指纹成功 | - |
| FINGERPRINT_ACQUIRED_IMAGER_DIRTY | 3 | 怀疑或检测到传感器上有污垢,指纹图像噪音太大。 | 清洁后重试。 |
| FINGERPRINT_ACQUIRED_INSUFFICIENT | 2 | 皮肤干燥或传感器可能脏污。 | 清洁后重试。 |
| FINGERPRINT_ACQUIRED_PARTIAL | 1 | 采集到部分指纹。 | 应告知用户需要采取什么措施来解决此问题,例如“用力按压传感器”。 |
| FINGERPRINT_ACQUIRED_TOO_FAST | 5 | 采集期间移动手指,指纹图像不完整 | 将手指在传感器上停留更长时间,适合线性阵列传感器。 |
| FINGERPRINT_ACQUIRED_TOO_SLOW | 4 | 缺乏移动,导致指纹读取失败 | 请移动手指,适合需要滑动运动的线性阵列传感器。 |
| FINGERPRINT_ERROR_CANCELED | 5 | 操作被取消,当用户切换、设备被锁定或另一个待处理操作阻止或禁用它时,可能会发生这种情况 | 稍后再试 |
| FINGERPRINT_ERROR_HW_NOT_PRESENT | 12 | 设备不支持指纹传感器 | 请确认设备类型和OS版本是否支持。 |
| FINGERPRINT_ERROR_HW_UNAVAILABLE | 1 | 硬件不可用 | 请稍后再试。 |
| FINGERPRINT_ERROR_LOCKOUT | 7 | 操作被取消,因为 API 由于尝试次数过多而被锁定。此情况会在 5 次失败尝试后发生,并持续 30 秒。 | 请稍后再试。 |
| FINGERPRINT_ERROR_LOCKOUT_PERMANENT | 9 | 由于 FINGERPRINT_ERROR_LOCKOUT 发生次数过多,操作被取消。在用户使用强身份验证(PIN/图案/密码)解锁之前,指纹身份验证将被禁用 | - |
| FINGERPRINT_ERROR_NO_FINGERPRINTS | 11 | 用户没有登记任何指纹 | 请录入指纹后重试。 |
| FINGERPRINT_ERROR_NO_SPACE | 4 | 没有足够的剩余存储空间来完成该操作 | - |
| FINGERPRINT_ERROR_TIMEOUT | 3 | 等待过长导致超时 | - |
| FINGERPRINT_ERROR_UNABLE_TO_PROCESS | 2 | 无法处理当前指纹图像 | - |
| FINGERPRINT_ERROR_USER_CANCELED | 10 | 用户已取消 | - |
iOS错误码
| 错误码 | 值 | 描述 | 解决方法 |
|---|---|---|---|
| appCancel | -9 | 该应用程序取消了身份验证。 | - |
| systemCancel | -4 | 系统取消了认证。 | - |
| userCancel | -2 | 用户点击身份验证对话框中的取消按钮。 | - |
| biometryDisconnected | -13 | 该设备仅使用可拆卸附件支持生物识别,但未连接配对的附件。 | - |
| biometryNotPaired | -12 | 该设备仅使用可拆卸配件支持生物识别,但未配对任何配件。 | - |
| biometryLockout | -8 | 由于失败的尝试次数过多,生物认证已被锁定。 | - |
| biometryNotAvailable | -6 | 该设备不支持生物识别。 | 请确认设备是否支持。 |
| biometryNotEnrolled | -7 | 用户没有注册生物识别身份。 | 请注册。 |
| authenticationFailed | -1 | 用户未能提供有效的凭据。 | - |
| invalidContext | -10 | 上下文不可用。 | - |
| invalidDimensions | -14 | - | - |
| notInteractive | -1004 | 禁止显示所需的认证用户界面。 | - |
| passcodeNotSet | -5 | 设备上未设置密码。 | 请设置密码后重试。 |
| userFallback | -3 | 用户点击身份验证对话框中的回退按钮,但身份验证策略没有可用的回退按钮。 | - |
| watchNotAvailable | -11 | 尝试使用 Apple Watch 进行身份验证失败。 | 请稍后重试。 |
- 华为鸿蒙人脸认证SDK开发文档
- Android人脸认证SDK开发文档
- iOS人脸认证SDK开发文档
相关文章:
uni-app 面容、指纹识别插件(uni-face-login)
面容、指纹识别插件(uni-face-login) 介绍 人脸指纹登录授权,可以使用手机自带的人脸、指纹进行生物识别,进而判断是否机主本人,从而进行授权验证,适配安卓、iOS、鸿蒙设备 猛戳这里去插件市场看看 使用 该插件支持鸿蒙、安卓…...
专治疗懒病:GO、KEGG富集分析一体函数
之前我们写过GO、KEGG的富集分析,参见:补充更新:GO、KEGG(批量分组)分析及可视化。演示了差异基因KEGG或者GO的分析流程。其实差异基因的富集分析输入的文件只需要一组基因就可以了。所以我们发挥了专治懒病的优良传统…...
pygame第6课——贪吃蛇小游戏
今天我们开始Pygame的第六课,前几节课的内容在这里【点我】,欢迎大家前去考古: 今天我们一起来学习制作一个小游戏【贪吃蛇】,这是一个非常经典的小游戏,那么我们一起开始吧 1、游戏准备工作 import pygame, random,o…...
iptables之iptables表、链、规则 、匹配模式、扩展模块、连接追踪模块(一)
一、iptables的链 1.请求到达本机: PREROUTING --> INPUT --> Local Process (本机) 2.请求经过本机: PREROUTING --> FORWARD --> POSTROUTING 3.请求从本机发出:local Process(本机…...
Mac 卸载appium
安装了最新版的appium 2.0.1,使用中各种问题,卡顿....,最终决定回退的。记录下卸载的过程 1.打开终端应用程序 2.卸载全局安装的 Appium 运行以下命令以卸载全局安装的 Appium: npm uninstall -g appium 出现报错:Error: EACCES: permiss…...
数据结构----哈夫曼树
这里写目录标题 基本概念引子基本概念各种路径长度各种带权路径长度结点的带权路径长度树的带权路径长度哈夫曼树 哈夫曼树的构造理论基础构造思想总结 哈夫曼树的实现哈夫曼编码前缀编码哈夫曼编码的思想案例代码实现 编码与解码 基本概念 引子 哈夫曼树就是寻找构造最优二叉…...
Spring之Aop切面---日志收集(环绕处理、前置处理方式)--使用/教程/实例
Spring之Aop切面---日志收集(环绕处理、前置处理方式)--使用/教程/实例 简介系统登录日志类LoginLogEntity .java 一、环绕处理方式1、自定义注解类LoginLogAop.class2、切面处理类LogoutLogAspect.java 二、前置处理方式:1、自定义注解类Log…...
UE4/UE5 照明构建失败 “Lightmass crashed”解决“数组索引越界”
在构建全局光照时,经常会出现“Lightmass crashed”的错误,导致光照构建失败。本文将分析这一问题的原因,并给出解决建议。 UE4 版本4.26 报错如下: <None> Lightmass crashed: Assertion failed: (Index > 0) & (Index < ArrayNum) [File:d:\bu…...
并发编程系列-Semaphore
Semaphore,如今通常被翻译为"信号量",过去也曾被翻译为"信号灯",因为类似于现实生活中的红绿灯,车辆是否能通行取决于是否是绿灯。同样,在编程世界中,线程是否能执行取决于信号量是否允…...
3年 Android 开发的面试心经(后悔当初没有拿 N+1)
作者:勇闯天涯 当某人顺利通过大厂面试时,总会有人认为这是运气比较好罢了,但他们不曾得知对方之前受过多少苦和委屈,又付出了多少努力一步步去突破这些困境。正是因为他们的努力付出,在合适的时间与地点,用…...
【c语言】 -- 指针进阶
📕博主介绍:目前大一正在学习c语言,数据结构,计算机网络。 c语言学习,是为了更好的学习其他的编程语言,C语言是母体语言,是人机交互接近底层的桥梁。 本章来学习指针进阶。 让我们开启c语言学习…...
软件压力测试对软件产品起到什么作用?
一、软件压力测试是什么? 软件压力测试是一种通过模拟正常使用环境中可能出现的大量用户和大数据量的情况,来评估软件系统在压力下的稳定性和性能表现的测试方法。在软件开发过程中,经常会遇到一些性能瓶颈和稳定性问题,而软件压力测试的作…...
Stephen Wolfram:那么…ChatGPT 在做什么,为什么它有效呢?
So … What Is ChatGPT Doing, and Why Does It Work? 那么…ChatGPT在做什么,为什么它有效呢? The basic concept of ChatGPT is at some level rather simple. Start from a huge sample of human-created text from the web, books, etc. Then train…...
机器学习基础(五)
决策树 决策树是一种预测模型,它代表着对象属属性与对象值之间的一种映射关系。树中的每个节点代表一个对象,分叉路径(或者叫树枝)则代表一个属性值。 决策树常用方法: 分类树分析,是一种监督学习,用于预计结果可能为离散类型。 回归树分析,用于预计结果为实数。 CART,…...
阿里云服务器安装WordPress网站教程基于CentOS系统
阿里云百科分享使用阿里云服务器安装WordPress博客网站教程,WordPress是使用PHP语言开发的博客平台,在支持PHP和MySQL数据库的服务器上,您可以用WordPress架设自己的网站,也可以用作内容管理系统(CMS)。本教…...
【100天精通python】Day37:GUI界面编程_PyQT从入门到实战(上)
目录 专栏导读 1 PyQt6 简介: 1.1 安装 PyQt6 和相关工具: 1.2 PyQt6 基础知识: 1.2.1 Qt 的基本概念和组件: 1.2.2 创建和使用 Qt 窗口、标签、按钮等基本组件 1.2.3 布局管理器:垂直布局、水平布局、网格布局…...
数据结构—散列表的查找
7.4散列表的查找 7.4.1散列表的基本概念 基本思想:记录的存储位置域关键字之间存在对应关系 对应关系——hash函数 Loc(i) H(keyi) 如何查找: 根据散列函数 H(key) k 查找key9,则访…...
Expo项目 使用Native base UI库
装包: yarn add native-base expo install react-native-svg12.1.1 Index.js: import React from react import { View, Text } from react-native import useList from ./useList import { NativeBaseProvider, Button, Box } from native-base import styles f…...
74、75、76——tomcat项目实战
tomcat项目实战 tomcat 依赖 java运行环境,必须要有jre , 选择 jdk1.8 JvmPertest 千万不能用 kyj易捷支付 项目机器 选择 一台机器 ,安装jdk1.8的机器下载tomcat的包 上传到机器,解压tomcattomcat文件 bin文件夹: 启动文件 堆栈配置文件 catalina.sh JAVA_OPTS="-Xm…...
jmeter errstr :“unsupported field type for multipart.FileHeader“
在使用jmeter测试接口的时候,提示errstr :"unsupported field type for multipart.FileHeader"如图所示 这是因为我们 在HTTP信息头管理加content-type参数有问题 直接在HTTP请求中,勾选: use multipart/form-data for POST【中文…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
