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

华为HarmonyOS 让应用快速拥有账号能力 -- 2 获取用户头像昵称

场景介绍

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

业务流程

流程说明:

  1. 应用传对应scope调用授权API请求获取用户头像昵称。
  2. 如用户已给应用授权,则开发者能直接获取用户头像昵称、UnionID、OpenID。
  3. 如用户未授权,则授权请求会拉起授权页面,在用户确认授权后,开发者能获取到用户头像昵称、UnionID、OpenID。
  4. 获取到头像信息,开发者可以下载该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权限。

开发步骤

客户端开发

  1. 导入authentication模块及相关公共模块。
     
    1. import { authentication } from '@kit.AccountKit';
    2. import { hilog } from '@kit.PerformanceAnalysisKit';
    3. import { util } from '@kit.ArkTS';
    4. import { BusinessError } from '@kit.BasicServicesKit';
  2. 创建授权请求并设置参数。
     
    1. // 创建授权请求,并设置参数
    2. const authRequest = new authentication.HuaweiIDProvider().createAuthorizationWithHuaweiIDRequest();
    3. // 获取头像昵称需要传如下scope
    4. authRequest.scopes = ['profile'];
    5. // 若开发者需要进行服务端开发,则需传如下permission获取authorizationCode
    6. authRequest.permissions = ['serviceauthcode'];
    7. // 用户是否需要登录授权,该值为true且用户未登录或未授权时,会拉起用户登录或授权页面
    8. authRequest.forceAuthorization = true;
    9. // 用于防跨站点请求伪造
    10. authRequest.state = util.generateRandomUUID();
  3. 调用AuthenticationController对象的executeRequest方法执行授权请求,并处理授权结果,从授权结果中解析出头像昵称、UnionID、OpenID和Authorization Code。
     
    1. // 执行授权请求
    2. try {
    3. const controller = new authentication.AuthenticationController(getContext(this));
    4. controller.executeRequest(authRequest).then((data) => {
    5. const authorizationWithHuaweiIDResponse = data as authentication.AuthorizationWithHuaweiIDResponse;
    6. const state = authorizationWithHuaweiIDResponse.state;
    7. if (state != undefined && authRequest.state != state) {
    8. hilog.error(0x0000, 'testTag', `Failed to authorize. The state is different, response state: ${state}`);
    9. return;
    10. }
    11. hilog.info(0x0000, 'testTag', 'Succeeded in authentication.');
    12. const authorizationWithHuaweiIDCredential = authorizationWithHuaweiIDResponse.data!;
    13. const avatarUri = authorizationWithHuaweiIDCredential.avatarUri;
    14. const nickName = authorizationWithHuaweiIDCredential.nickName;
    15. const unionID = authorizationWithHuaweiIDCredential.unionID;
    16. const openID = authorizationWithHuaweiIDCredential.openID;
    17. const authorizationCode = authorizationWithHuaweiIDCredential.authorizationCode;
    18. // 开发者处理avatarUri, nickName, unionID,openID,authorizationCode
    19. }).catch((err: BusinessError) => {
    20. this.dealAllError(err);
    21. });
    22. } catch (error) {
    23. this.dealAllError(error);
    24. }
    25. // 错误处理
    26. dealAllError(error: BusinessError): void {
    27. hilog.error(0x0000, 'testTag', `Failed to auth. Code: ${error.code}, message: ${error.message}`);
    28. }

服务端开发(可选)

开发者根据业务需要选择是否进行服务端开发。

  1. 应用服务器使用Client ID、Client Secret、Authorization Code调用获取用户级凭证的接口向华为账号服务器请求获取Access Token、Refresh Token。
  2. 使用Access Token调用获取用户信息接口获取用户信息,从用户信息中获取用户头像昵称。

    Access Token过期处理

    由于Access Token的有效期仅为60分钟,当Access Token失效或者即将失效时(可通过REST API错误码判断),可以使用Refresh Token(有效期180天)通过刷新凭证向华为账号服务器请求获取新的Access Token。

    说明

    1. 当Access Token失效时,若您不使用Refresh Token向账号服务器请求获取新的Access Token,账号的授权信息将会失效,导致使用Access Token的功能都会失败。
    2. 当Access Token非正常失效(如修改密码、退出账号、删除设备)时,业务可重新登录授权获取Authorization Code,向账号服务器请求获取新的Access Token。

    Refresh Token过期处理

    由于Refresh Token的有效期为180天,当Refresh Token失效后(可通过REST API错误码判断),应用服务器端需要通知客户端,重新调用授权接口,请求用户重新授权。

相关文章:

华为HarmonyOS 让应用快速拥有账号能力 -- 2 获取用户头像昵称

场景介绍 如应用需要完善用户头像昵称信息&#xff0c;可使用Account Kit提供的头像昵称授权能力&#xff0c;用户允许应用获取头像昵称后&#xff0c;可快速完成个人信息填写。以下只针对Account kit提供的头像昵称授权能力进行介绍&#xff0c;若要获取头像还可通过场景化控…...

oracle表迁移至postgre

第一步: 导出表结构 进入脚本 第二步: 删除spool相关和prompt相关(不需要表空间的情况下) 类似以下语句 第三步: 修改数据类型 VARCHAR2 --> VARCHAR VARCHAR2(200 CHAR) --> VARCHAR(200) NUMBER(10,2) --> numeric(10,2…...

【PlantUML系列】类图(一)

目录 一、类 二、接口 三、抽象类 四、泛型类 五、类之间的关系 六、添加注释 七、包图 八、皮肤参数 一、类 使用class关键字定义类&#xff0c;类名后跟大括号&#xff0c;声明类的属性和方法。 属性&#xff1a;格式为{visibility} attributeName : AttributeType…...

Unity AssetBundles(AB包)

目录 前言 AB包是什么 AB包有什么作用 1.相对Resources下的资源AB包更好管理资源 2.减小包体大小 3.热更新 官方提供的打包工具:Asset Bundle Browser AB包资源加载 AB包资源管理模块代码 前言 在现代游戏开发中&#xff0c;资源管理是一项至关重要的任务。随着游戏内容…...

腾讯面试:如何解决哈希冲突?

我们面试时经常被问到HashMap是怎么解决哈希冲突的&#xff0c;很多同学对其含糊其词、一知半解。因此小编对相关知识进行了总结&#xff0c;希望帮助读者加深对其理解。 哈希表就是通过散列函数将键映射到定值&#xff0c;简单来说就是一个键对应一个值。 而通过散列函数映射…...

【动手学运动规划】 4.5 A*算法

我宁愿永远做我自己&#xff0c;也不愿成为别人&#xff0c;即使那个人比你更快乐。 —《成为简奥斯汀》 &#x1f3f0;代码及环境配置&#xff1a;请参考 环境配置和代码运行! 4.5.1 概述 Dijkstra算法是基于广度优先搜索策略来遍历空间内的所有节点&#xff0c;最终计算出…...

Spring Boot 3.4.0 发布:功能概览与示例

Spring Boot 3.4.0 带来了许多增强功能&#xff0c;使现代应用开发更加高效、便捷和强大。以下是最新功能的完整概述&#xff0c;以及一些帮助您快速入门的代码示例。 1. 应用程序版本管理 Spring Boot 引入了 spring.application.version 属性&#xff0c;方便开发者设置和访…...

【48】Android通过libjpeg-turbo库实现图片压缩

&#xff08;1&#xff09;公司为节约图片占用服务器存储资源成本&#xff0c;需要对Android手机客户端所传递到云存储服务器中的图片进行压缩&#xff0c;在不影响图片失真程度的情况下&#xff0c;最大限度的压缩图片以节省图片所占用的存储空间。 &#xff08;2&#xff09;…...

Linux输入设备应用编程

本章学习输入设备的应用编程&#xff0c;首先要知道什么是输入设备&#xff1f;输入设备其实就是能够产生输入事件的设备就称为输入设备&#xff0c;常见的输入设备包括鼠标、键盘、触摸屏、按钮等等&#xff0c;它们都能够产生输入事件&#xff0c;产生输入数据给计算机系统。…...

【Vulkan入门】03-创建Device

目录 先叨叨git信息关键代码VulkanEnv::CreateDevice() 编译并运行程序题外话 先叨叨 在上篇已经选择了一个合适的PhysicalDevice。 本篇要为这个PhysicalDevice创将一个Device。Device可以理解为APP与PhysicalDevice之间的代理。 所有APP与PhysicalDevice之间交互的资源都通过…...

【jvm】C2编译器

目录 1. 说明2. 编译流程3. 使用与配置4. 性能优化与监控5. 局限性 1. 说明 1.JVM&#xff08;Java虚拟机&#xff09;C2编译器是Java编译过程中的重要环节&#xff0c;专门用于将Java字节码编译成高效的本地机器代码&#xff0c;以提升Java程序的执行效率。2.特点&#xff1a…...

使用 Acme.sh 自动生成和续签免费 SSL 证书(含通配符支持)

Acme.sh 是一个开源的脚本&#xff0c;能够从 ZeroSSL、Let’s Encrypt 等证书颁发机构&#xff08;CA&#xff09;获取免费的 HTTPS 证书。该脚本特别简单易用&#xff0c;并且支持多种验证方式。下面将详细介绍使用 Acme.sh 生成、安装和更新证书的各个步骤。 Github地址 使用…...

Android 图形系统之四:Choreographer

Choreographer 是 Android 系统中负责帧同步的核心组件&#xff0c;它协调输入事件、动画和绘制任务&#xff0c;以确保界面以固定频率&#xff08;通常是每 16ms&#xff0c;一帧&#xff09;流畅渲染。通过管理 VSYNC 信号和调度任务&#xff0c;Choreographer 是实现流畅 UI…...

CAP定理和BASE理论

CAP定理 CAP定理&#xff0c;也称为布鲁尔定理&#xff08;Brewer’s Theorem&#xff09;&#xff0c;是分布式系统设计中的一个基本原理。它指出在分布式系统中&#xff0c;一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和分区容…...

笔记软件:我来、思源笔记、Obsidian、OneNote

最近wolai的会员到期了&#xff0c;促使我更新了一下笔记软件。 首先&#xff0c;wolai作为一个笔记软件&#xff0c;我觉得有很多做得不错的方面&#xff08;否则我也不会为它付费2年了&#xff09;&#xff0c;各种功能集成得很全&#xff08;公式识别这个功能我写论文的时候…...

试探互联网如何工作?

Reading&#xff1a; How_does_the_Internet_workhow-does-internet-work Watching&#xff1a;How the Internet Works in 5 Minutes Outline: 互联网通过全球互联的计算机和服务器网络工作&#xff0c;通过标准化协议进行通信。数据被分解成数据包&#xff0c;并使用互联…...

【c++笔试强训】(第三十篇)

目录 爱丽丝的⼈偶&#xff08;贪⼼构造&#xff09; 题目解析 讲解算法原理 编写代码 集合&#xff08;排序&#xff09; 题目解析 讲解算法原理 编写代码 爱丽丝的⼈偶&#xff08;贪⼼构造&#xff09; 题目解析 1.题目链接&#xff1a;登录—专业IT笔试面试备考平…...

微信小程序购物车全选反选功能以及合计

微信小程序基于Vant Weapp的购物车功能实现 1、单选 使用微信小程序原生表单组件checkbox和checkbox-group 注意&#xff1a;checkbox原生不支持bind:change事件&#xff0c;checkbox-group支持 <checkbox-group bindchange"handleCheck"><checkbox val…...

vue-qr在线生成二维码组件(vue2版本)

在对于二维码生成中有许多组件&#xff0c;下面介绍关于自定义比较高的vue-qr组件&#xff0c;能自定义设置背景颜色、背景图片、背景Gif图、实点和空白区的颜色、中心Logo的图片和边距。 依赖下载 注意&#xff1a; 直接npm下载最新版 有些项目可能运行会抱错 这时候你可以降…...

大语言模型技术相关知识-笔记整理

系列文章目录 这个系列攒了很久。主要是前段之间面试大语言模型方面的实习&#xff08;被拷打太多次了&#xff09;&#xff0c;然后每天根据面试官的问题进行扩展和补充的这个笔记。内容来源主要来自视频、个人理解以及官方文档中的记录。方便后面的回顾。 文章目录 系列文章…...

剪映专业版教程:制作直接选择排序算法原理演示视频

前言 今天教大家用剪映制作直接选择排序算法的原理演示视频。直接选择排序的原理是&#xff1a;在同一个数组中&#xff0c;先挑一个最小的&#xff0c;跟第一位交换&#xff1b;待排序下标往后移到第二位&#xff0c;从这里开始往后找一个最小的&#xff0c;跟第二位交换&…...

告别低速串口:用STM32的FSMC总线驱动FPGA,实现高速数据交换的完整流程(基于STM32F407)

STM32与FPGA的高速数据通道&#xff1a;基于FSMC总线的实战设计指南 在嵌入式系统开发中&#xff0c;数据吞吐量常常成为制约系统性能的关键瓶颈。当STM32微控制器需要与FPGA进行大数据量交互时——无论是实时图像处理、高速数据采集还是复杂算法加速——传统的串行通信接口如…...

如何永久激活IDM?2024终极免费激活与试用重置完全指南

如何永久激活IDM&#xff1f;2024终极免费激活与试用重置完全指南 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script IDM Activation Script是一款专为Internet Dow…...

每天节省20分钟:淘宝淘金币自动化脚本的终极效率革命

每天节省20分钟&#xff1a;淘宝淘金币自动化脚本的终极效率革命 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本&#xff0c;包含蚂蚁森林收取能量&#xff0c;芭芭农场全任务&#xff0c;解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/taojinbi 你是否…...

从零实现一个电商图片下载器:技术方案与核心代码

引言如果你想自己开发一款电商图片下载工具&#xff0c;本文提供完整的技术方案和核心代码参考。一、技术选型组件推荐方案备选方案浏览器内核CEFElectron下载库libcurlrequests界面框架QtElectron跨平台CEF QtElectron二、核心代码实现2.1 浏览器初始化cppCefRefPtr<CefBr…...

手把手教你配置STC15F2K60S2的PCA引脚映射,灵活切换P1/P3/P2口输出PWM信号

STC15F2K60S2单片机PCA模块实战&#xff1a;三端口PWM信号自由切换指南 当你在蓝桥杯CT107D开发板上调试电机控制时&#xff0c;是否遇到过P1口被数码管占用却需要输出PWM的困境&#xff1f;STC15F2K60S2的PCA模块引脚重映射功能正是解决这类硬件冲突的利器。本文将带你深入掌…...

从图灵完备到意图完备:人工智能的本体论跃迁

什么是真正的智能&#xff1f;是能够执行任意计算任务&#xff0c;还是能够在世界中“存在”&#xff0c;感知、欲望、思考和行动&#xff1f;是能够给出所有正确答案&#xff0c;还是能够提出一个有意义的问题&#xff1f;是能够优化任何给定的目标&#xff0c;还是能够为自己…...

深度解析TranslucentTB运行时依赖问题的创新解决方案

深度解析TranslucentTB运行时依赖问题的创新解决方案 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB TranslucentTB是一款广受欢迎的Wind…...

ThingsBoard共享属性实战:从MQTT订阅到规则链触发的完整数据流解析

ThingsBoard共享属性实战&#xff1a;从MQTT订阅到规则链触发的完整数据流解析 在物联网平台开发中&#xff0c;数据流的清晰理解和精确控制是构建可靠系统的关键。ThingsBoard作为一款开源的物联网平台&#xff0c;其共享属性机制和规则链引擎为开发者提供了强大的数据流转能力…...

如何快速下载Steam创意工坊壁纸:Wallpaper Engine下载器完全指南

如何快速下载Steam创意工坊壁纸&#xff1a;Wallpaper Engine下载器完全指南 【免费下载链接】Wallpaper_Engine 一个便捷的创意工坊下载器 项目地址: https://gitcode.com/gh_mirrors/wa/Wallpaper_Engine 你是否曾在Steam创意工坊中发现心仪的动态壁纸&#xff0c;却因…...