华为HarmonyOS 让应用快速拥有账号能力 -- 2 获取用户头像昵称
场景介绍
如应用需要完善用户头像昵称信息,可使用Account Kit提供的头像昵称授权能力,用户允许应用获取头像昵称后,可快速完成个人信息填写。以下只针对Account kit提供的头像昵称授权能力进行介绍,若要获取头像还可通过场景化控件选择头像Button进行获取。

业务流程

流程说明:
- 应用传对应scope调用授权API请求获取用户头像昵称。
- 如用户已给应用授权,则开发者能直接获取用户头像昵称、UnionID、OpenID。
- 如用户未授权,则授权请求会拉起授权页面,在用户确认授权后,开发者能获取到用户头像昵称、UnionID、OpenID。
- 获取到头像信息,开发者可以下载该url使用该头像。
接口说明
获取头像昵称关键接口如下表所示,具体API说明详见API参考。
| 接口名 | 描述 |
|---|---|
| createAuthorizationWithHuaweiIDRequest(): AuthorizationWithHuaweiIDRequest | 获取授权接口,通过AuthorizationWithHuaweiIDRequest传入头像昵称的scope:profile及Authorization Code的permission:serviceauthcode,即可在授权结果中获取到用户头像昵称、UnionID、OpenID和Authorization Code。 |
| constructor(context?: common.Context) | 创建授权请求Controller。 |
| executeRequest(request: AuthenticationRequest): Promise<AuthenticationResponse> | 通过Promise方式执行授权操作。 头像昵称,可从AuthenticationResponse的子类AuthorizationWithHuaweiIDResponse中解析,具体解析方法请参考客户端开发的示例代码。 |
注意
1.上述接口需在页面或自定义组件生命周期内调用。
2.未设置昵称默认返回华为账号绑定的匿名手机号/邮箱。
开发前提
在进行代码开发前,请先确认您已完成配置Client ID工作。该场景无需申请scope权限。
开发步骤
客户端开发
- 导入authentication模块及相关公共模块。
- import { authentication } from '@kit.AccountKit';
- import { hilog } from '@kit.PerformanceAnalysisKit';
- import { util } from '@kit.ArkTS';
- import { BusinessError } from '@kit.BasicServicesKit';
- 创建授权请求并设置参数。
- // 创建授权请求,并设置参数
- const authRequest = new authentication.HuaweiIDProvider().createAuthorizationWithHuaweiIDRequest();
- // 获取头像昵称需要传如下scope
- authRequest.scopes = ['profile'];
- // 若开发者需要进行服务端开发,则需传如下permission获取authorizationCode
- authRequest.permissions = ['serviceauthcode'];
- // 用户是否需要登录授权,该值为true且用户未登录或未授权时,会拉起用户登录或授权页面
- authRequest.forceAuthorization = true;
- // 用于防跨站点请求伪造
- authRequest.state = util.generateRandomUUID();
- 调用AuthenticationController对象的executeRequest方法执行授权请求,并处理授权结果,从授权结果中解析出头像昵称、UnionID、OpenID和Authorization Code。
- // 执行授权请求
- try {
- const controller = new authentication.AuthenticationController(getContext(this));
- controller.executeRequest(authRequest).then((data) => {
- const authorizationWithHuaweiIDResponse = data as authentication.AuthorizationWithHuaweiIDResponse;
- const state = authorizationWithHuaweiIDResponse.state;
- if (state != undefined && authRequest.state != state) {
- hilog.error(0x0000, 'testTag', `Failed to authorize. The state is different, response state: ${state}`);
- return;
- }
- hilog.info(0x0000, 'testTag', 'Succeeded in authentication.');
- const authorizationWithHuaweiIDCredential = authorizationWithHuaweiIDResponse.data!;
- const avatarUri = authorizationWithHuaweiIDCredential.avatarUri;
- const nickName = authorizationWithHuaweiIDCredential.nickName;
- const unionID = authorizationWithHuaweiIDCredential.unionID;
- const openID = authorizationWithHuaweiIDCredential.openID;
- const authorizationCode = authorizationWithHuaweiIDCredential.authorizationCode;
- // 开发者处理avatarUri, nickName, unionID,openID,authorizationCode
- }).catch((err: BusinessError) => {
- this.dealAllError(err);
- });
- } catch (error) {
- this.dealAllError(error);
- }
- // 错误处理
- dealAllError(error: BusinessError): void {
- hilog.error(0x0000, 'testTag', `Failed to auth. Code: ${error.code}, message: ${error.message}`);
- }
服务端开发(可选)
开发者根据业务需要选择是否进行服务端开发。
- 应用服务器使用Client ID、Client Secret、Authorization Code调用获取用户级凭证的接口向华为账号服务器请求获取Access Token、Refresh Token。
- 使用Access Token调用获取用户信息接口获取用户信息,从用户信息中获取用户头像昵称。
Access Token过期处理
由于Access Token的有效期仅为60分钟,当Access Token失效或者即将失效时(可通过REST API错误码判断),可以使用Refresh Token(有效期180天)通过刷新凭证向华为账号服务器请求获取新的Access Token。说明
- 当Access Token失效时,若您不使用Refresh Token向账号服务器请求获取新的Access Token,账号的授权信息将会失效,导致使用Access Token的功能都会失败。
- 当Access Token非正常失效(如修改密码、退出账号、删除设备)时,业务可重新登录授权获取Authorization Code,向账号服务器请求获取新的Access Token。
Refresh Token过期处理
由于Refresh Token的有效期为180天,当Refresh Token失效后(可通过REST API错误码判断),应用服务器端需要通知客户端,重新调用授权接口,请求用户重新授权。
相关文章:
华为HarmonyOS 让应用快速拥有账号能力 -- 2 获取用户头像昵称
场景介绍 如应用需要完善用户头像昵称信息,可使用Account Kit提供的头像昵称授权能力,用户允许应用获取头像昵称后,可快速完成个人信息填写。以下只针对Account kit提供的头像昵称授权能力进行介绍,若要获取头像还可通过场景化控…...
oracle表迁移至postgre
第一步: 导出表结构 进入脚本 第二步: 删除spool相关和prompt相关(不需要表空间的情况下) 类似以下语句 第三步: 修改数据类型 VARCHAR2 --> VARCHAR VARCHAR2(200 CHAR) --> VARCHAR(200) NUMBER(10,2) --> numeric(10,2…...
【PlantUML系列】类图(一)
目录 一、类 二、接口 三、抽象类 四、泛型类 五、类之间的关系 六、添加注释 七、包图 八、皮肤参数 一、类 使用class关键字定义类,类名后跟大括号,声明类的属性和方法。 属性:格式为{visibility} attributeName : AttributeType…...
Unity AssetBundles(AB包)
目录 前言 AB包是什么 AB包有什么作用 1.相对Resources下的资源AB包更好管理资源 2.减小包体大小 3.热更新 官方提供的打包工具:Asset Bundle Browser AB包资源加载 AB包资源管理模块代码 前言 在现代游戏开发中,资源管理是一项至关重要的任务。随着游戏内容…...
腾讯面试:如何解决哈希冲突?
我们面试时经常被问到HashMap是怎么解决哈希冲突的,很多同学对其含糊其词、一知半解。因此小编对相关知识进行了总结,希望帮助读者加深对其理解。 哈希表就是通过散列函数将键映射到定值,简单来说就是一个键对应一个值。 而通过散列函数映射…...
【动手学运动规划】 4.5 A*算法
我宁愿永远做我自己,也不愿成为别人,即使那个人比你更快乐。 —《成为简奥斯汀》 🏰代码及环境配置:请参考 环境配置和代码运行! 4.5.1 概述 Dijkstra算法是基于广度优先搜索策略来遍历空间内的所有节点,最终计算出…...
Spring Boot 3.4.0 发布:功能概览与示例
Spring Boot 3.4.0 带来了许多增强功能,使现代应用开发更加高效、便捷和强大。以下是最新功能的完整概述,以及一些帮助您快速入门的代码示例。 1. 应用程序版本管理 Spring Boot 引入了 spring.application.version 属性,方便开发者设置和访…...
【48】Android通过libjpeg-turbo库实现图片压缩
(1)公司为节约图片占用服务器存储资源成本,需要对Android手机客户端所传递到云存储服务器中的图片进行压缩,在不影响图片失真程度的情况下,最大限度的压缩图片以节省图片所占用的存储空间。 (2)…...
Linux输入设备应用编程
本章学习输入设备的应用编程,首先要知道什么是输入设备?输入设备其实就是能够产生输入事件的设备就称为输入设备,常见的输入设备包括鼠标、键盘、触摸屏、按钮等等,它们都能够产生输入事件,产生输入数据给计算机系统。…...
【Vulkan入门】03-创建Device
目录 先叨叨git信息关键代码VulkanEnv::CreateDevice() 编译并运行程序题外话 先叨叨 在上篇已经选择了一个合适的PhysicalDevice。 本篇要为这个PhysicalDevice创将一个Device。Device可以理解为APP与PhysicalDevice之间的代理。 所有APP与PhysicalDevice之间交互的资源都通过…...
【jvm】C2编译器
目录 1. 说明2. 编译流程3. 使用与配置4. 性能优化与监控5. 局限性 1. 说明 1.JVM(Java虚拟机)C2编译器是Java编译过程中的重要环节,专门用于将Java字节码编译成高效的本地机器代码,以提升Java程序的执行效率。2.特点:…...
使用 Acme.sh 自动生成和续签免费 SSL 证书(含通配符支持)
Acme.sh 是一个开源的脚本,能够从 ZeroSSL、Let’s Encrypt 等证书颁发机构(CA)获取免费的 HTTPS 证书。该脚本特别简单易用,并且支持多种验证方式。下面将详细介绍使用 Acme.sh 生成、安装和更新证书的各个步骤。 Github地址 使用…...
Android 图形系统之四:Choreographer
Choreographer 是 Android 系统中负责帧同步的核心组件,它协调输入事件、动画和绘制任务,以确保界面以固定频率(通常是每 16ms,一帧)流畅渲染。通过管理 VSYNC 信号和调度任务,Choreographer 是实现流畅 UI…...
CAP定理和BASE理论
CAP定理 CAP定理,也称为布鲁尔定理(Brewer’s Theorem),是分布式系统设计中的一个基本原理。它指出在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容…...
笔记软件:我来、思源笔记、Obsidian、OneNote
最近wolai的会员到期了,促使我更新了一下笔记软件。 首先,wolai作为一个笔记软件,我觉得有很多做得不错的方面(否则我也不会为它付费2年了),各种功能集成得很全(公式识别这个功能我写论文的时候…...
试探互联网如何工作?
Reading: How_does_the_Internet_workhow-does-internet-work Watching:How the Internet Works in 5 Minutes Outline: 互联网通过全球互联的计算机和服务器网络工作,通过标准化协议进行通信。数据被分解成数据包,并使用互联…...
【c++笔试强训】(第三十篇)
目录 爱丽丝的⼈偶(贪⼼构造) 题目解析 讲解算法原理 编写代码 集合(排序) 题目解析 讲解算法原理 编写代码 爱丽丝的⼈偶(贪⼼构造) 题目解析 1.题目链接:登录—专业IT笔试面试备考平…...
微信小程序购物车全选反选功能以及合计
微信小程序基于Vant Weapp的购物车功能实现 1、单选 使用微信小程序原生表单组件checkbox和checkbox-group 注意:checkbox原生不支持bind:change事件,checkbox-group支持 <checkbox-group bindchange"handleCheck"><checkbox val…...
vue-qr在线生成二维码组件(vue2版本)
在对于二维码生成中有许多组件,下面介绍关于自定义比较高的vue-qr组件,能自定义设置背景颜色、背景图片、背景Gif图、实点和空白区的颜色、中心Logo的图片和边距。 依赖下载 注意: 直接npm下载最新版 有些项目可能运行会抱错 这时候你可以降…...
大语言模型技术相关知识-笔记整理
系列文章目录 这个系列攒了很久。主要是前段之间面试大语言模型方面的实习(被拷打太多次了),然后每天根据面试官的问题进行扩展和补充的这个笔记。内容来源主要来自视频、个人理解以及官方文档中的记录。方便后面的回顾。 文章目录 系列文章…...
马年市场快报分析:欧美组合式一氧化碳及可燃气体报警器指南
马年市场快报分析:欧美组合式一氧化碳及可燃气体报警器指南根据您提供的快报内容,我将从专业角度逐步分析欧美组合式一氧化碳(CO)及可燃气体报警器的关键信息,包括安全标准、风险因素、探测器区别、安装建议以及相关产…...
从模电理论到商用落地,应届生必做的无线充项目,H 桥 / LC 谐振 + QI 协议全栈详解
很多初学嵌入式的同学、正在准备秋招的电子信息类应届生,都会遇到两个核心困境:一是模电学了 H 桥、LC 谐振,只会背公式做题,根本不知道怎么在真实产品里落地;二是学完单片机只会点灯,写的都是流水账代码&a…...
Phi-4-mini-reasoning实战教程:批量处理CSV数学题库生成标准答案
Phi-4-mini-reasoning实战教程:批量处理CSV数学题库生成标准答案 1. 引言 数学老师们经常面临一个共同挑战:批改大量数学作业和试卷需要花费大量时间。传统方法需要逐题检查,效率低下且容易出错。今天,我们将介绍如何利用Phi-4-…...
WeClaw_42_Agent工具注册全链路:从BaseTool到意图识别的标准化接入
WeClaw_42_Agent工具注册全链路:从BaseTool到意图识别的标准化接入作者: WeClaw 开发团队 日期: 2026-03-29 版本: v1.0 标签: Agent 工具、BaseTool、意图识别、渐进式暴露、延迟注入📖 摘要 本文系统讲解 WeClaw Agent 工具注册的完整链路。当需要将一…...
探索Univer:构建企业级文档协作系统的全栈框架
探索Univer:构建企业级文档协作系统的全栈框架 【免费下载链接】univer Build AI-native spreadsheets. Univer is a full-stack framework for creating and editing spreadsheets on both web and server. With Univer Platform, Univer Spreadsheets is driven d…...
VisionPro —— CogImageFileTool图像文件管理实战解析
1. CogImageFileTool核心功能解析 第一次接触CogImageFileTool时,我完全被它强大的图像管理能力震撼到了。这个工具就像工业视觉领域的"智能文件管家",专门处理图像文件的读写和存储问题。想象一下,你每天要处理上千张生产线上的产…...
GitHub新手避坑指南:从SSH Key到Personal Token,搞定本地项目上传(含大文件失败解决方案)
GitHub新手避坑指南:从SSH Key到Personal Token,搞定本地项目上传(含大文件失败解决方案) 第一次用GitHub上传项目就像玩扫雷游戏——表面风平浪静,实际暗藏玄机。上周帮实习生小李排查上传失败问题时,发现…...
koanf自定义Provider开发:扩展你的配置源终极指南
koanf自定义Provider开发:扩展你的配置源终极指南 【免费下载链接】koanf Simple, extremely lightweight, extensible, configuration management library for Go. Supports JSON, TOML, YAML, env, command line, file, S3 etc. Alternative to viper. 项目地址…...
WPF进阶:Canvas动态图形绘制与交互实现
1. Canvas动态图形绘制基础 WPF中的Canvas就像一块无限延伸的画布,我们可以在这块画布上自由地绘制各种图形元素。与静态绘制不同,动态绘制的魅力在于图形能够根据用户操作实时变化。我刚开始接触Canvas时,最让我兴奋的就是看到鼠标移动时能实…...
TextInput Effects部署与测试:确保跨平台兼容性的完整流程
TextInput Effects部署与测试:确保跨平台兼容性的完整流程 【免费下载链接】react-native-textinput-effects Text inputs with custom label and icon animations for iOS and android. Built with react native and inspired by Codrops. 项目地址: https://git…...
