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

news2025/2/5 19:57:12

场景介绍

如应用需要完善用户头像昵称信息,可使用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错误码判断),应用服务器端需要通知客户端,重新调用授权接口,请求用户重新授权。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2252209.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hadoop生态圈框架部署 伪集群版(一)- Linux操作系统安装及配置

文章目录 前言一、下载CentOS镜像1. 下载 二、创建虚拟机hadoop三、CentOS安装与配置1. 安装CentOS2. 配置虚拟网络及虚拟网卡2.1 配置虚拟网络2.2 配置虚拟网卡 3. 安装 SSH 远程连接工具 FinalShell3.1 简介3.2 下载和安装3.2.1 下载3.2.2 安装 3.3 查看动态ip地址3.4 使用Fi…

StarRocks存算分离在得物的降本增效实践

一、背景 OLAP引擎在得物的客服、风控、供应链、投放、运营、ab实验等大量业务场景发挥重要作用&#xff0c;在报表、日志、实时数仓等应用场景都有广泛的应用。 得物引入和使用OLAP引擎的过程中&#xff0c;每个业务都基于自己的需求选择当时最适合自己的引擎。现在得物内部同…

L15.【LeetCode笔记】相同的树

目录 1.题目 代码模板 2.分析 通过合理的if判断分类讨论两个根节点 1.首先,p和q都为NULL的情况最好排除 2.排除了两个都为NULL的情况,剩下的情况:1.其中一个为NULL;2.两个都不为NULL 写法1 写法2 3.只剩下最后一种情况:p和q都不为NULL 3.代码 提交结果 1.题目 https…

TCP协议(一)

TCP协议&#xff08;一&#xff09; 一、TCP协议1、介绍2、主要特点 二、TCP协议段格式1、示意图2、介绍 三、确认应答机制1、基本流程2、作用3、示意图4、序列号示意图 四、超时重传机制1、介绍2、重传超时时间3、往返时间4、平滑往返时间5、系统实现6、数据丢失重传示意图7、…

单链表---链表分割

将小于x的结点放在前面&#xff0c;大于等于x的结点放在后面&#xff0c;不改变结点相对位置&#xff0c;输出更改后的链表首结点。 typedef struct ListNode {ListNode* next;int val; }ListNode; 思路&#xff1a;我们可以新创建两个链表指针&#xff0c;将小于x的结点全部…

Android V reboot重启后电量从0直接跳到100%

问题背景 设备每次重启之后statusBar的电量百分比一开始是0,然后过了2s左右的样子电量才恢复为100% 解决方案 看拿到的串口日志来看,重启之后 healthd 拿到的电量值都是100%,而且这一块的电量也没有变化,重启前后电量都是100%: 自己尝试复现,在Android 15上测试重启,…

【技巧】Mac上如何显示键盘和鼠标操作

在制作视频教程时&#xff0c;将键盘和鼠标的操作在屏幕上显示出来&#xff0c;会帮助观众更容易地理解。 推荐Mac上两款开源的小软件。 1. KeyCastr 这款工具从2009年至今一直在更新中。 https://github.com/keycastr/keycastr 安装的话&#xff0c;可以从Github上下载最…

C 语言学习的经典书籍有哪些?

学习C语言的理由 C语言是一种程席设计语言&#xff0c;它是由美国AT&T公司贝尔实验室的Dennis Ritchie于1972年发明的。C语言之所以流行&#xff0c;是因为它简单易用。学习C语言的几个理由如下&#xff1a; (1)C、C#和Java使用一种被称为面向对象程序设计(0bject-Orient…

leetcode 52. N 皇后 II 困难

n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回 n 皇后问题 不同的解决方案的数量。 示例 1&#xff1a; 输入&#xff1a;n 4 输出&#xff1a;2 解释&#xff1a;如上图所示&#…

谷歌浏览器中搜索引擎的设置与管理

谷歌浏览器作为全球最受欢迎的网络浏览器之一&#xff0c;以其高速、稳定和丰富的功能深受用户喜爱。对于许多用户来说&#xff0c;自定义和管理搜索引擎是提升浏览体验的重要一环。本文将详细介绍如何在谷歌浏览器中设置和管理搜索引擎&#xff0c;包括如何修改默认搜索引擎、…

掌上单片机实验室 — RT - Thread+ROS2 浅尝(26)

前面化解了Micro_ROS通讯问题&#xff0c;并在 RT-Thread Studio 环境下&#xff0c;使用Micro_ROS软件包中的例程&#xff0c;实现了STM32F411CE核心板和ROS2主机的通讯。之后还尝试修改例程 micro_ros_sub_twist.c &#xff0c;实现了接收 turtle_teleop_key 所发出的 turtle…

什么是Batch Normalization?

一、概念 Batch Normalization是在2015年提出的数据归一化方法&#xff0c;主要用在深度神经网络中激活层之前。它的主要作用是加快模型训练时的收敛速度&#xff0c;使模型训练过程更加稳定&#xff0c;避免梯度爆炸或消失&#xff0c;并起到一定的正则化作用&#xff0c;有时…

【Linux】文件操作的艺术——从基础到精通

&#x1f3ac; 个人主页&#xff1a;谁在夜里看海. &#x1f4d6; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长&#xff0c;行则将至 目录 &#x1f4da;前言&#xff1a;一切皆文件 &#x1f4da;一、C语言的文件接口 &#x1f4d6;1.文件打…

谷歌流量怎么提升?

用好内容满足用户需求&#xff0c;谷歌流量的提升并非一蹴而就&#xff0c;尤其是行业差异会导致流量效果的巨大差距。无论你做哪个行业&#xff0c;谷歌流量的核心始终是内容&#xff0c;用户需要的是解决问题的信息。相比于花费精力追求热门词&#xff0c;注重内容的深度和实…

运输层3——TCP协议(重点!!!)

目录 一、TCP协议的特点 二、TCP连接 三、TCP的可靠传输&#xff08;重点&#xff01;&#xff01;&#xff01;&#xff09; 1、停止等待协议 &#xff08;1&#xff09;无差错情况 &#xff08;2&#xff09;出现差错 &#xff08;3&#xff09;确认分组丢失 和 确认分…

LeetCode题练习与总结:排列硬币--441

一、题目描述 你总共有 n 枚硬币&#xff0c;并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯&#xff0c;其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。 给你一个数字 n &#xff0c;计算并返回可形成 完整阶梯行 的总行数。 示例 1&#xff1a; 输…

数据查找文件夹里Excel、Word文件

我经常需要处理大量的Excel文件&#xff0c;为了解决查找数据时的困扰&#xff0c;我编写了一个小工具。这个工具可以搜索文件夹下的所有Excel文件&#xff0c;只需输入你想查找的字符串&#xff0c;它就会告诉你该字符串出现在哪个Excel文件的哪个表格中。 下载地址&#xff…

每天下午16:20达梦数据库干什么?

家里有达梦的朋友注意了&#xff0c;如果您用的是试用版&#xff0c;那么通常1年后数据库就不允许使用了&#xff0c;这是因为缺少正式许可&#xff0c;通常保存在 $DM_HOME/bin/dm.key 文件中 这个1年的时间从软件发布日期算&#xff0c;例如&#xff1a;从官方网站下载的 dm…

rtc-pcf8563 0-0051: low voltage detected, date/time is not reliable

解决方法&#xff1a; 1、先测量pcf8563电源电压&#xff0c;是否满足要求。 2、pcf8563首次操作。第一次读取pcf8563的时间&#xff0c;未初始化&#xff0c;非法&#xff0c;芯片门槛电压检测配置不合理。使用hwclock命令写入一次&#xff0c;即可解决。 hwclock -f /dev/…

SpringBoot 整合 Avro 与 Kafka

优质博文&#xff1a;IT-BLOG-CN 【需求】&#xff1a;生产者发送数据至 kafka 序列化使用 Avro&#xff0c;消费者通过 Avro 进行反序列化&#xff0c;并将数据通过 MyBatisPlus 存入数据库。 一、环境介绍 【1】Apache Avro 1.8&#xff1b;【2】Spring Kafka 1.2&#xf…