华为HarmonyOS 让应用快速拥有账号能力 - 获取用户手机号

场景介绍

当应用对获取的手机号时效性要求不高时,可使用Account Kit提供的手机号授权与快速验证能力,向用户发起手机号授权申请,经用户同意授权后,获取到手机号并为用户提供相应服务。以下只针对Account kit提供的手机号授权与快速验证能力进行介绍,快速验证手机号功能还可使用场景化控件快速验证手机号Button进行实现。

说明

对用户选择的华为账号绑定的手机号或者新增的手机号进行验证,不保证是实时的验证仅首次需要用户授权

业务流程

流程说明:

  1. 应用通过传对应scope和permission调用授权API,如果已授权则直接返回临时登录凭证Authorization Code、UnionID、OpenID,如果没有授权则拉起授权页,在用户授权后,返回Authorization Code、UnionID、OpenID。
  2. 将Authorization Code传给应用服务器,使用Client ID、Client Secret、Authorization Code从华为服务器中获取Access Token,再使用Access Token请求获取用户信息。
  3. 从用户信息中获取到手机号、UnionID、OpenID。

接口说明

获取快速验证手机号关键接口如下表所示,具体API说明详见API参考。

接口名

描述

createAuthorizationWithHuaweiIDRequest(): AuthorizationWithHuaweiIDRequest

获取授权接口,通过AuthorizationWithHuaweiIDRequest传入返回手机号的scope:phone及返回Authorization Code的permission:serviceauthcode,即可获取到Authorization Code、UnionID、OpenID。

constructor(context?: common.Context)

创建授权请求Controller。

executeRequest(request: AuthenticationRequest): Promise<AuthenticationResponse>

通过Promise方式执行授权操作。

注意

上述接口需在页面或自定义组件生命周期内调用。

开发前提

1、在进行代码开发前,请先确认您已完成开发准备工作。

2、应用获取手机号前,需要完成phone(获取您的手机号)的scope权限申请,详情参见配置scope权限,scope权限申请审批未完成或未通过,将报错1001502014 应用未申请scopes或permissions权限。

细分场景

对应scope

权限名称

权限描述

权限是否需要申请

快速验证手机号

phone

phone

获取您的手机号

3、设备需要登录华为账号,若未登录则拉起登录页面。

开发步骤

客户端开发

  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,传参数之前需要先申请对应scope权限,才能返回对应数据
    4. authRequest.scopes = ['phone'];
    5. // 获取code需传如下permission
    6. authRequest.permissions = ['serviceauthcode'];
    7. // 用户是否需要登录授权,该值为true且用户未登录或未授权时,会拉起用户登录或授权页面
    8. authRequest.forceAuthorization = true;
    9. // 用于防跨站点请求伪造
    10. authRequest.state = util.generateRandomUUID();
  3. 调用AuthenticationController对象的executeRequest方法执行授权请求,并处理授权结果,从授权结果中解析出Authorization Code、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 code = authorizationWithHuaweiIDCredential.authorizationCode;
    14. const unionID = authorizationWithHuaweiIDCredential.unionID;
    15. const openID = authorizationWithHuaweiIDCredential.openID;
    16. // 开发者处理code、unionID、openID
    17. }).catch((err: BusinessError) => {
    18. this.dealAllError(err);
    19. });
    20. } catch (error) {
    21. this.dealAllError(error);
    22. }

     
      
    1. // 错误处理
    2. dealAllError(error: BusinessError): void {
    3. hilog.error(0x0000, 'testTag', 'Failed to auth, errorCode=%{public}d, errorMsg=%{public}s', error.code,
    4. error.message);
    5. }

服务端开发

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

    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错误码判断),应用服务器端需要通知客户端,重新调用授权接口,请求用户重新授权。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

React 的学习记录一:与 Vue 的相同点和区别

目录 一、学习目标 二、学习内容1️⃣——React的特点 1.组件化设计 2.单向数据流 3.声明式 UI 4.虚拟 DOM 5.Hooks 6.JSX 7.React Native 三、React与vue的比较总结 四、总结 一、学习目标 时间&#xff1a;两周 内容&#xff1a; React的特点React的入门React的…

使用epoll监测定时器是否到达指定时间,并执行回调函数

总览&#xff1a;Linux提供了定时器&#xff0c;暴露出来了文件描述符&#xff0c;所以我们使用epoll帮助我们监测&#xff0c;时间到达后&#xff0c;epoll_wait返回&#xff0c;于是我们根据fd&#xff0c;找到对应的回调函数&#xff0c;然后执行。从而达到定时执行函数的目…

鸿蒙征文|鸿蒙技术分享:使用到的开发框架和技术概览

目录 每日一句正能量前言正文1. 开发环境搭建关键技术&#xff1a;2. 用户界面开发关键技术&#xff1a;3. 应用逻辑开发关键技术&#xff1a;4. 应用测试关键技术&#xff1a;5. 应用签名和打包关键技术&#xff1a;6. 上架流程关键技术&#xff1a;7. 后续维护和更新关键技术…

【MIT-OS6.S081笔记0.5】xv6 gdb调试环境搭建

补充一下xv6 gdb调试环境的搭建&#xff0c;我这里装的是最新的15.2的gdb的版本。我下载的是下面的第二个xz后缀的文件&#xff1a; 配置最详细的步骤可以参考下面的文章&#xff1a; [MIT 6.S081] Lab 0: 实验配置, 调试及测试 这里记录一下踩过的一些报错&#xff1a; 文…

Python和Java后端开发技术对比

在当今互联网技术飞速发展的时代&#xff0c;后端开发扮演着至关重要的角色。Python和Java作为两大主流的后端开发语言&#xff0c;各自具备独特的优势和应用场景。让我们深入了解这两种技术的特点和选择建议。 Java后端开发一直是企业级应用的首选方案。它以强大的类型系统、…

1.2.3 逻辑代数与运算

逻辑代数与运算 基本的逻辑运算常用逻辑公式 基本的逻辑运算 基本逻辑运算非常简单&#xff0c;只包含与、或、非、异或这4种。 这里主要留意对基本逻辑运算的不同叫法&#xff0c;符号表示。逻辑表达式、真值表概念。 与&#xff1a;A和B都为真时&#xff0c;结果才为真或…

解析生成对抗网络(GAN):原理与应用

目录 一、引言 二、生成对抗网络原理 &#xff08;一&#xff09;基本架构 &#xff08;二&#xff09;训练过程 三、生成对抗网络的应用 &#xff08;一&#xff09;图像生成 无条件图像生成&#xff1a; &#xff08;二&#xff09;数据增强 &#xff08;三&#xff…

零售餐饮收银台源码

收银系统早已成为门店经营的必备软件工具&#xff0c;因为各个连锁品牌有自己的经营模式&#xff0c;自然对收银系统需求各有不同&#xff0c;需要有相应的功能模块来实现其商业模式。 1. 适用行业 收银系统源码适用于零售、餐饮等行业门店&#xff0c;如商超便利店、水果生鲜…

我的第一个创作纪念日 —— 梦开始的地方

前言 时光荏苒&#xff0c;转眼间&#xff0c;我已经在CSDN这片技术沃土上耕耘了365天 今天&#xff0c;我迎来了自己在CSDN的第1个创作纪念日&#xff0c;这个特殊的日子不仅是对我过去努力的肯定&#xff0c;更是对未来持续创作的激励 机缘 回想起初次接触CSDN&#xff0c;那…

mac终端自定义命令打开vscode

1.打开终端配置文件 open -e ~/.bash_profile终端安装了zsh&#xff0c;那么配置文件是.zshrc&#xff08;打开zsh配置&#xff0c;这里举&#x1f330;使用zsh&#xff09; sudo open -e ~/.zshrc 2.在zshrc配置文件中添加新的脚本&#xff08;这里的code就是快捷命令可以进…

计算帧率、每秒过多少次

1、c #include <iostream> #include <opencv2/opencv.hpp> #include <string> #include <thread> #include <atomic>using namespace std;const int NUM_THREADS 1; // 线程数量std::atomic<int> frameCounts[NUM_THREADS]; // 每个线程…

【在Linux世界中追寻伟大的One Piece】读者写者问题与读写锁

目录 1 -> 读者写者问题 1.1 -> 什么是读者写者问题 1.2 -> 读者写者与生产消费者的区别 1.3 -> 如何理解读者写者问题 2 -> 读写锁 2.1 -> 读写锁接口 3 -> 读者优先(Reader-Preference) 4 -> 写者优先(Writer-Preference) 1 -> 读者写者…

PS的功能学习(修复、画笔)

混合器画笔工具 就像&#xff0c;电子毛笔 关键功能有两个&#xff0c;自带一个混合器色板 清理画笔是全清&#xff0c;换一支新的毛笔&#xff0c;执行完之后在判断是否载入画笔 载入画笔就是把前景色上的颜色进行叠加处理&#xff0c;重新混入当前的混合色 &#xff08;…

centos 7 离线安装postgis插件

前一段时间记录了下如何在centos7中离线安装postgresql&#xff0c;因为工作需要&#xff0c;我不仅要安装postgresql&#xff0c;还需要安装postgis插件&#xff0c;这篇文章记录下postgis插件的安装过程。 1. 安装前的参考 如下的链接都是官网上的链接&#xff0c;对你安装p…

Vue 90 ,Element 13 ,Vue + Element UI 中 el-switch 使用小细节解析,避免入坑(获取后端的数据类型自动转变)

目录 前言 在开发过程中&#xff0c;我们经常遇到一些看似简单的问题&#xff0c;但有时正是这些细节问题让我们头疼不已。今天&#xff0c;我就来和大家分享一个我在开发过程中遇到的 el-switch 使用的小坑&#xff0c;希望大家在使用时能够避免。 一. 问题背景 二. 问题分…

同时使用Tmini和GS2两个雷达

24.12.02 要求&#xff1a;同时使用两个雷达。 问题在于:两个雷达都是ydlidar&#xff0c;使用同一个包。 因此同时启动GS2.launch和Tmini.launch会调用同一个功能节点&#xff0c;使用同一个cpp文件。 方法&#xff1a;新建一个cpp节点。 但同时保持在同一个坐标系&#xff0…

高等数学函数的性质

牛顿二项公式 ( x y ) n ∑ k 0 n C n k ⋅ x n − k y k (xy)^n\stackrel{n}{\sum\limits_{k0}}C^k_n\sdot x^{n-k}y^k (xy)nk0∑​n​Cnk​⋅xn−kyk. 映射 f : X → Y f:X\rightarrow Y f:X→Y&#xff0c; f f f 为 X X X 到 Y Y Y 的映射。 f f f 是一个对应关系&am…

【MySQL】深度学习数据库开发技术:mysql事务穿透式解析

前言&#xff1a;本节内容开始讲解事务。 博主计划用三节来讲解事务。 本篇为第一节&#xff0c; 主要解释什么是事务&#xff0c; 事务有什么用。 以及事物的基本操作和异常退出回滚情况。 下面不多说&#xff0c;友友们&#xff0c; 开始学习吧&#xff01; ps&#xff1a;本…

Swift解题 | 求平面上同一条直线的最多点数

文章目录 前言摘要问题描述解题思路Swift 实现代码代码分析示例测试与结果时间复杂度空间复杂度总结关于我们 前言 本题由于没有合适答案为以往遗留问题&#xff0c;最近有时间将以往遗留问题一一完善。 149. 直线上最多的点数 不积跬步&#xff0c;无以至千里&#xff1b;不积…

使用Ansible自动化部署Zabbix6监控

1、获取Ansible离线部署包 链接&#xff1a;https://pan.baidu.com/s/1EjI02Ni8m9J4eJeBcJ-ZUQ?pwdzabx 提取码&#xff1a;zabx 2、安装Ansible wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo yum -y install ansible3、修改hosts文件…