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

HarmonyOS应用开发( Beta5.0)HOS-用户认证服务:面部识别

介绍

User Authentication Kit(用户认证服务)提供了基于用户在设备本地注册的人脸和指纹来认证用户身份的能力

用户向应用/系统服务请求访问某些个人数据或执行某些敏感操作时,应用/系统服务将调用系统用户身份认证控件对用户身份进行认证,认证通过后,才响应用户对于数据或敏感操作的执行请求。

用户身份认证可用于各种鉴权场景,如应用内账号登录、支付认证等。

#HarmonyOS NEXT体验官#梅科尔工作室HOS-用户认证服务:面部识别-鸿蒙开发者社区

效果预览

#HarmonyOS NEXT体验官#梅科尔工作室HOS-用户认证服务:面部识别-鸿蒙开发者社区

开发准备

1.在开发具备用户身份认证的应用前,需要先申请权限ohos.permission.ACCESS_BIOMETRIC,应用才能使用生物特征识别能力(如人脸、指纹)进行身份认证。

该权限授权方式为system_grant(系统授权),开发者只需要在module.json5配置文件的requestPermissions标签中声明权限,即可获取系统授权。

#HarmonyOS NEXT体验官#梅科尔工作室HOS-用户认证服务:面部识别-鸿蒙开发者社区


2.设备管理器中的虚拟机不支持指纹和人脸识别,验证开发效果需要烧录到真机(本试验效果预览用的是华为mate60)上进行测试

3.由于目前HarmonyOS系统不支持第三方录入指纹和人脸,需要在烧录的真机的手机设置里面自行录入指纹和人脸

#HarmonyOS NEXT体验官#梅科尔工作室HOS-用户认证服务:面部识别-鸿蒙开发者社区

实现思路

@ohos.userIAM.userAuthIcon (嵌入式用户身份认证控件)

主要功能:a.提供嵌入式的人脸、指纹认证控件图标,可被应用集成。
b.支持自定义图标的颜色和大小,但图标样式不可变更。

首先导入指纹、人脸认证控件模块;

接着通过AuthParam定义挑战值、认证类型列表、认证信任等级等用户认证参数;

定义之后在UserAuthIcon进行调用,同时可以在UserAuthIcon里的authParam调用用户认证参数, widgetParam定义用户认证的标题,iconHeight定义人脸/指纹控件图标的大小, iconColor定义人脸/指纹控件图标的颜色,onIconClick定义用户点击icon回调接口,onAuthResult用户认证结果信息回调接口。 需要权限: ohos.permission.ACCESS_BIOMETRIC

    import { userAuth, UserAuthIcon } from '@kit.UserAuthenticationKit';//导入模块@Entry@Componentstruct Index {authParamzhiwen: userAuth.AuthParam = {challenge: new Uint8Array([49, 49, 49, 49, 49, 49]),//挑战值。最大长度为32字节,可传Uint8Array([])。authType: [userAuth.UserAuthType.FACE, userAuth.UserAuthType.PIN],//认证类型列表:人脸认证和口令认证authTrustLevel: userAuth.AuthTrustLevel.ATL3//认证信任等级。};widgetParam: userAuth.WidgetParam = {title: '请进行身份认证'};build() {Row({space:20}){Column({space:15}){UserAuthIcon({authParam: this.authParamzhiwen,//前面配置的widgetParam: this.widgetParam,iconHeight: 70,//图标高度,可自定义iconColor: Color.Blue,//图标颜色,可自定义onIconClick: () => {console.info('The user clicked the icon.');},  // 需要调用UserAuthInstance的start()接口,启动认证后,才能通过onResult获取到认证结果。onAuthResult: (result: userAuth.UserAuthResult) => {console.info('Get user auth result, result = ' + JSON.stringify(result));}})}}}}

#HarmonyOS NEXT体验官#梅科尔工作室HOS-用户认证服务:面部识别-鸿蒙开发者社区

发起认证

1.申请权限:ohos.permission.ACCESS_BIOMETRIC。

2.指定用户认证相关参数AuthParam(包括挑战值、认证类型UserAuthType列表和认证等级AuthTrustLevel)、配置认证控件界面WidgetParam,调用getUserAuthInstance获取认证对象。

3.调用UserAuthInstance.on接口订阅认证结果。

4.调用UserAuthInstance.start接口发起认证,通过IAuthCallback回调返回认证结果UserAuthResult。

当认证成功时返回认证通过类型(UserAuthType)和令牌信息(AuthToken)。

        import { BusinessError } from '@kit.BasicServicesKit';import { userAuth } from '@kit.UserAuthenticationKit';// 设置认证参数const authParam: userAuth.AuthParam = {challenge: new Uint8Array([49, 49, 49, 49, 49, 49]),authType: [userAuth.UserAuthType.PIN, userAuth.UserAuthType.FACE],authTrustLevel: userAuth.AuthTrustLevel.ATL3,};// 配置认证界面const widgetParam: userAuth.WidgetParam = {title: '请进行身份认证',};try {// 获取认证对象let userAuthInstance = userAuth.getUserAuthInstance(authParam, widgetParam);console.info('get userAuth instance success');// 订阅认证结果userAuthInstance.on('result', {onResult(result) {console.info(`userAuthInstance callback result: ${JSON.stringify(result)}`);// 可在认证结束或其他业务需要场景,取消订阅认证结果userAuthInstance.off('result');}});console.info('auth on success');userAuthInstance.start();console.info('auth start success');} catch (error) {const err: BusinessError = error as BusinessError;console.error(`auth catch error. Code is ${err?.code}, message is ${err?.message}`);}

认证过程中取消认证

1.申请权限:ohos.permission.ACCESS_BIOMETRIC。

2.指定用户认证相关参数AuthParam(包括挑战值、认证类型UserAuthType列表和认证等级AuthTrustLevel),获取认证对象UserAuthInstance,并调用UserAuthInstance.start发起认证。

3.通过使用已经成功发起认证的UserAuthInstance对象调用UserAuthInstance.cancel接口取消本次认证。

        import { BusinessError } from  '@kit.BasicServicesKit';import { userAuth } from '@kit.UserAuthenticationKit';const authParam: userAuth.AuthParam = {challenge: new Uint8Array([49, 49, 49, 49, 49, 49]),authType: [userAuth.UserAuthType.PIN, userAuth.UserAuthType.FACE],authTrustLevel: userAuth.AuthTrustLevel.ATL3,};const widgetParam: userAuth.WidgetParam = {title: '请进行身份认证',};try {// 获取认证对象let userAuthInstance = userAuth.getUserAuthInstance(authParam, widgetParam);console.log('get userAuth instance success');// 开始认证userAuthInstance.start();console.log('auth start success');// 取消认证userAuthInstance.cancel();console.log('auth cancel success');} catch (error) {const err: BusinessError = error as BusinessError;console.error(`auth catch error. Code is ${err?.code}, message is ${err?.message}`);}

指纹识别开发整体代码

        import userIAM from '@ohos.userIAM.userAuth'import promptAction from '@ohos.promptAction'@Entry@Componentstruct FingerLoginPage {@State isOn:boolean = falsebuild() {Column() {Row(){Text(`指纹登录-${this.isOn?'开启':'未开启'}`)Toggle({ type: ToggleType.Switch, isOn: this.isOn }).selectedColor('#007DFF').switchPointColor('#FFFFFF').onChange((isOn: boolean) => {let that = thisthis.isOn = isOnif(isOn){if(canIUse('SystemCapability.UserIAM.UserAuth.Core')){console.error('设备支持指纹')/*** 获取认证对象*/let challenge = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);let authType = userIAM.userAuth.UserAuthType.FACE;let authTrustLevel = userIAM.AuthTrustLevel.ATL1;let authParam: userIAM.AuthParam = {challenge: challenge,authType: [authType],authTrustLevel: authTrustLevel,};let widgetParam:userIAM.WidgetParam = {title:'请验证指纹'}let auth:userIAM.UserAuthInstancetry {auth = userIAM.getUserAuthInstance(authParam,widgetParam)console.error("获取认证对象成功");/*** 订阅认证结果*/try {auth.on('result',{onResult(result){console.error('订阅认证结果result = ' + JSON.stringify(result));let resultNum:number = result.resultif(resultNum === 12500000){// 认证成功console.error("指纹认证成功");that.isOn = true}else if(resultNum === 12500001){// 认证失败console.error("指纹认证失败");that.isOn = false}else if(resultNum === 12500003){// 认证取消console.error("指纹认证取消");that.isOn = false}else if(resultNum === 12500010){// 用户未录入指纹console.error("用户未录入指纹");that.isOn = false}else{that.isOn = falseconsole.error('认证错误')}// 取消订阅认证结果try {auth.off("result");console.error("取消订阅认证结果成功");} catch (error) {that.isOn = falseconsole.error("取消订阅认证结果失败, error = " + error);}}});console.error("订阅认证结果成功");/*** 开始认证*/try {auth.start();console.error("开始认证");} catch (error) {console.error("开始认证失败:" + error);that.isOn = false}} catch (error) {that.isOn = falseconsole.error("订阅认证结果失败 " + error);}} catch (error) {that.isOn = falsepromptAction.showToast({message: '获取认证对象失败',duration: 1500});console.error("获取认证对象失败--" + error);}}else{that.isOn = falsepromptAction.showToast({message: '设备不支持指纹识别。。。',duration: 1500});}}})}.width('100%').height(50).margin({top:100}).justifyContent(FlexAlign.SpaceBetween)}.width('100%').height('100%').padding(10)}}

总结

经过一番努力,你现在已经是面部识别界的“武林高手”了!你不仅学会了如何让应用认出你的“盛世美颜”,还知道了如何优雅地处理那些想“蒙混过关”的脸庞。

想象一下,下次当你的朋友们惊讶地看着你的应用通过面部识别解锁时,你就可以自豪地说:“看,这就是我的‘刷脸’技术!”(别忘了提醒他们,这可不是普通的刷脸,而是高科技版的哦!)

好了,各位未来的“面部认证大师”,是时候展现你们真正的技术了!拿起你的键盘,开始你的表演吧!

最后

小编在之前的鸿蒙系统扫盲中,有很多朋友给我留言,不同的角度的问了一些问题,我明显感觉到一点,那就是许多人参与鸿蒙开发,但是又不知道从哪里下手,因为体系杂乱无章,教授的人也多,无从选择。有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)文档用来跟着学习是非常有必要的。 

为了确保高效学习,建议规划清晰的学习路线,涵盖以下关键阶段:

希望这一份鸿蒙学习文档能够给大家带来帮助~

GitCode - 全球开发者的开源社区,开源代码托管平台


 鸿蒙(HarmonyOS NEXT)最新学习路线

该路线图包含基础技能、就业必备技能、多媒体技术、六大电商APP、进阶高级技能、实战就业级设备开发,不仅补充了华为官网未涉及的解决方案

路线图适合人群:

IT开发人员:想要拓展职业边界
零基础小白:鸿蒙爱好者,希望从0到1学习,增加一项技能。
技术提升/进阶跳槽:发展瓶颈期,提升职场竞争力,快速掌握鸿蒙技术

2.视频教程+学习PDF文档

(鸿蒙语法ArkTS、TypeScript、ArkUI教程……)

 纯血版鸿蒙全套学习文档(面试、文档、全套视频等)

                   

鸿蒙APP开发必备

​​

总结

参与鸿蒙开发,你要先认清适合你的方向,如果是想从事鸿蒙应用开发方向的话,可以参考本文的学习路径,简单来说就是:为了确保高效学习,建议规划清晰的学习路线

相关文章:

HarmonyOS应用开发( Beta5.0)HOS-用户认证服务:面部识别

介绍 User Authentication Kit(用户认证服务)提供了基于用户在设备本地注册的人脸和指纹来认证用户身份的能力。 用户向应用/系统服务请求访问某些个人数据或执行某些敏感操作时,应用/系统服务将调用系统用户身份认证控件对用户身份进行认证…...

解决Docker镜像不可下载

使用国内可信的镜像中心 可信国内镜像网址:https://hub.atomgit.com/ 点击镜像仓库 搜索想要的镜像 按如图所示,即可查看对应的版本 点击复制,即可下载使用 缺点: 可用的镜像相比于docker官方量少 并且,获取的镜像名字…...

考研报名确认上传身份证户口本学历证明照片如何压缩裁剪

随着考研季节的到来,数以万计的考生开始准备报名所需的各种材料。在这一过程中,证件照片的上传无疑是一个关键环节。正确的照片格式和尺寸不仅能确保报名流程的顺利进行,还能避免因材料不合格而造成的不必要麻烦。本文将详细介绍如何在考研报…...

DolphinScheduler应用实战笔记

DolphinScheduler应用实战笔记 一、前言二、DS执行SQL或存储过程二、DS调用DataX同步数据三、DS调用HTTP接口四、DS依赖(DEPENDENT)节点五、DS SPARK 节点六、DS Flink 节点七、DS Flink 节点八、DS SQL 节点九、DS Java程序十、DS Python节点 一、前言 DolphinScheduler&…...

IThenticate查重为何成为英语期刊论文投稿首选工具

发表一篇英语论文,我发现很多人在准备向期刊投稿之前,都会选择使用IThenticate查重系统对论文进行相似性检测。是什么魔力,让这个查重工具让投稿者如此偏爱使用它查重呢? 一、什么是IThenticate查重系统? 在了解它被…...

C++ 在项目中使用Git

目录 一:配置邮箱和姓名 二:生成SSH Key 三:git 工作区和状态 四:git log 常用法 五:git diff 常用法 六:git 分支操作 七:git 回溯分支 八:git rebase -i 压缩历史提交…...

Python(TensorFlow和PyTorch)及C++注意力网络导图

🎯要点 谱图神经网络计算注意力分数对比图神经网络、卷积网络和图注意力网络药物靶标建模学习和预测相互作用腹侧和背侧皮质下结构手写字体字符序列文本识别组织病理学图像分析长短期记忆财务模式预测相关性生物医学图像特征学习和迭代纠正 Python注意力机制 对…...

选择firewalld还是iptables

firewalld与iptables介绍 firewalld和iptables都是Linux系统中用于管理防火墙规则的重要工具,但它们在功能、使用方式和适用场景上存在显著差异。 动态性: firewalld可以动态修改单条规则,并且能够动态管理规则集。这意味着在更新规则时不会…...

C到C++入门基础知识

一:命名空间:namespace (一):命名空间的定义 注:命名空间只能定义在全局,不能定义在函数内部。 (1)类似于C语言的结构体,C语言的命名空间定义为&#xff1…...

Aigtek功率放大器的主要参数有什么

功率放大器是一种电子设备,通常用于放大输入信号的功率。为了评估和描述功率放大器的性能,有一些主要参数需要了解。下面将介绍一些常见的功率放大器参数。 增益:功率放大器的增益是指输出功率与输入功率之间的比值。它表示了信号经过放大器后…...

运维工程师概述及职责

运维工程师 运维运维工程师(Operations Engineer 或 System Administrator)是负责确保计算机系统、服务器、网络、存储设备等基础设施稳定运行的专业人员。 运维工程师在IT行业中扮演着至关重要的角色,是连接开发团队和业务团队的桥梁&#…...

Android系统dumpsys命令详解

文章目录 1. dumpsys 的工作原理2. 基本使用方法执行 dumpsys限制 dumpsys 的输出 3. 常见的 dumpsys 服务1. Activity Manager (activity)2. Battery Service (battery)3. Window Manager (window)4. Package Manager (package)5. Power Manager (power)6. Media DRM (media.d…...

[Unity Demo]从零开始制作空洞骑士Hollow Knight第二集:通过InControl插件实现绑定玩家输入以及制作小骑士移动空闲动画

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、通过InControl插件实现绑定玩家输入二、制作小骑士移动和空闲动画 1.制作动画2.玩家移动和翻转图像3.状态机思想实现动画切换总结 前言 好久没来CSDN看看&…...

基于鸿蒙API10的RTSP播放器(七:亮度调节功能测试)

目标: 当我的手指在设备左方进行上下移动的时候,可以进行屏幕亮度的调节,在调节的同时,有实时的调节进度条显示 步骤: 界面逻辑:使用Stack() 组件,完成音量图标和进度条的组合显示&#xff0c…...

基于SpringBoot+Vue的校内跑腿业务管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…...

嵌入式鸿蒙系统开发语言与开发方法分析

大家好,今天主要给大家分享一下,HarmonyOS系统的主力开发语言ArkTS语言开发方法,它是基于TypeScript(简称TS)语言扩展而来。 第一:ArkTS语言基本特性 目的:声明式UI,让开发者以更简洁,更自然的方式开发高性能应用。 声明式 UI基本特性: 基本UI描述:ArkTS定义了各种装饰…...

SpringBoot开发——整合Spring Data MongoDB

文章目录 一、MongoDB简介1、MongoDB是什么2、MongoDB 基本概念(1)文档(2)集合(3)数据库3、MongoDB的系统数据库4、MongoDB数据模型二、SpringBoot整合Spring Data MongoDB1、创建项目,添加Spring Data MongoDB依赖2、创建实体类Student3、创建StudentRepository接口4、创建…...

camouflaged object detection中的decoder最核心的作用

在 camouflaged object detection(COD)任务中,decoder 的确有一个核心作用是进行 上采样 以恢复图像的分辨率,但这并不是它唯一或最核心的作用。我们可以从更广泛的视角来看 decoder 的作用。 1. 上采样(Upsampling&a…...

Java volatile

Volatile 作用:保证变量的可见性,有序性(禁止指令重排序)。不保证原子性。 如何保证可见性的? 场景:每个 线程 下都有一块 工作内存。要使用变量需要从 主内存 中把 变量 读取出来,使用完成后写…...

一条sql是如何执行的详解

一条sql是如何执行的详解 1. SQL 解析(Parsing) 2. 查询重写(Query Rewrite) 3. 查询规划(Query Planning) 4. 查询执行(Query Execution) 5. 结果返回 示例:查询执…...

“先天项目经理圣体”丨超适合做项目经理的4种人

总有人在问,什么样的人适合做项目经理,当项目经理需要什么样的特质? 你别说,还真有那么一些人是“先天项目经理圣体”,天生就是吃项目经理这碗饭的。 沟通达人丨靠“嘴”走天下 我们知道项目经理大部分的时间都在进行…...

如何从object中抽取某几个值,然后转换成数组

可以使用Object.entries(), Array.prototype.filter()和Array.prototype.map()或者解构赋值的方式从对象中抽取某些值并转换为数组 示例 1:使用 Object.entries(), filter() 和 map() const obj {a: 1,b: 2,c: 3,d: 4 };const keysToExtract [a, c];const extr…...

数据结构(14)——哈希表(1)

欢迎来到博主的专栏:数据结构 博主ID:代码小豪 文章目录 哈希表的思想映射方法(哈希函数)除留余数法 哈希表insert闭散列负载因子扩容find和erase 哈希表的思想 在以往的线性表中,查找速度取决于线性表是否有序&#…...

K近邻算法_分类鸢尾花数据集

import numpy as np import pandas as pd from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score1.数据预处理 iris load_iris() df pd.DataFrame(datairis.data, columnsiris.featur…...

nacos和eureka的区别详解

Nacos 和 Eureka 都是服务发现和注册中心的解决方案,但它们在功能、设计和使用场景上有所不同。以下是它们的详细区别: 1. 基本概念 Eureka:是由 Netflix 开发的服务发现工具。它主要用于 Java 微服务架构中的服务注册与发现。Eureka 通过 R…...

AI大模型包含哪些些技术?

Prompt Prompt提示是模型接收以生成响应或完成任务的初始文本输入。 我们给AI一组Prompt输入,用于指导模型生成响应以执行任务。这个输入可以是一个问题、一段描述、一组关键词,或任何其他形式的文本,用于引导模型产生特定内容的响应。 Tra…...

分布式技术概览

文章目录 分布式技术1. 分布式数据库(Distributed Databases)2. 分布式文件系统(Distributed File Systems)3. 分布式哈希表(Distributed Hash Tables, DHTs)4. 分布式缓存(Distributed Caching…...

动手学习RAG: moka-ai/m3e 模型微调deepspeed与对比学习

动手学习RAG: 向量模型动手学习RAG: moka-ai/m3e 模型微调deepspeed与对比学习动手学习RAG:迟交互模型colbert微调实践 bge-m3 1. 环境准备 pip install transformers pip install open-retrievals注意安装时是pip install open-retrievals,但调用时只…...

Nacos rce-0day漏洞复现(nacos 2.3.2)

Nacos rce-0day漏洞复现(nacos 2.3.2) NACOS是 一个开源的服务发现、配置管理和服务治理平台,属于阿里巴巴的一款开源产品。影像版本:nacos2.3.2或2.4.0版本指纹:fofa:app“NACOS” 从 Github 官方介绍文档可以看出国…...

yjs04——matplotlib的使用(多个坐标图)

1.多个坐标图与一个图的折线对比 1.引入包;字体(同) import matplotlib.pyplot as plt import random plt.rcParams[font.family] [SimHei] plt.rcParams[axes.unicode_minus] False 2.创建幕布 2.1建立图层幕布 一个图:plt.fig…...