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

鸿蒙 使用“华为账号登录”按钮登录(二)

一、场景

应用可以使用Account Kit提供的华为账号登录按钮,获取华为账号用户身份标识UnionIDOpenID,通过UnionID、OpenID完成用户登录;或者与应用账号完成绑定,绑定后用于登录或者验证。

按钮样式

包含三种样式:

样式说明
文本仅显示文字
标志仅显示华为账号标志
文本+标志同时显示文字和标志

二、支持的设备

设备类型支持版本
Phone支持
Tablet支持
PC/2in1支持
TV5.1.1(19)版本开始支持

三、用户体验设计

账号登录按钮的用户体验和UX设计需符合【华为账号登录】按钮规范,不符合规范的UX设计可能会对应用上架和用户体验带来影响

四、业务流程

4.1 流程说明

阶段序号说明
调用登录按钮展示登录页1-3应用拉起登录页并展示“华为账号登录”按钮,用户点击按钮,请求华为账号授权信息
用户点击登录4-6华为账号未登录时拉起登录页;已登录时直接返回Authorization Code
用户关联应用账号7-16服务端通过Authorization Code获取Access Token,再获取用户信息,绑定UnionID完成登录

4.2 安全性

通过Authorization Code凭证获取用户信息可以有效避免黑客通过数据遍历、身份伪造、重放攻击等手段导致的安全风险。

五、开发前提

在进行代码开发前,请确保已完成:

  1. 配置签名和指纹(参考配置签名和指纹)

  2. 配置Client ID(参考配置Client ID)

说明:此场景无需申请账号权限。

六、客户端开发

6.1 导入模块

import { LoginWithHuaweiIDButton, loginComponentManager } from '@kit.AccountKit'; import { BusinessError } from '@kit.BasicServicesKit'; import { hilog } from '@kit.PerformanceAnalysisKit';

6.2 核心接口

接口描述
LoginWithHuaweiIDButton华为账号Button登录组件,支持Icon类型、纯文本、Icon+文本混合按钮
onClickLoginWithHuaweiIDButton注册登录事件结果回调,使用callback异步回调
setAgreementStatus设置协议状态。如需用户同意协议才能登录,请先设置NOT_ACCEPTED,同意后设置ACCEPTED

6.3 错误码枚举

export enum ErrorCode { ERROR_CODE_LOGIN_OUT = 1001502001, // 账号未登录 ERROR_CODE_NETWORK_ERROR = 1001502005, // 网络错误 ERROR_CODE_INTERNAL_ERROR = 1001502009, // 内部错误 ERROR_CODE_USER_CANCEL = 1001502012, // 用户取消授权 ERROR_CODE_SYSTEM_SERVICE = 12300001, // 系统服务异常 ERROR_CODE_REQUEST_REFUSE = 1001500002, // 重复请求 ERROR_CODE_AGREEMENT_STATUS_NOT_ACCEPTED = 1005300001 // 用户未同意协议 }

6.4 代码示例

@Entry @Component struct PreviewLoginButtonPage { // 构造LoginWithHuaweiIDButton组件的控制器 controller: loginComponentManager.LoginWithHuaweiIDButtonController = new loginComponentManager.LoginWithHuaweiIDButtonController() .onClickLoginWithHuaweiIDButton((error: BusinessError, response: loginComponentManager.HuaweiIDCredential) => { if (error) { this.dealAllError(error); return; } if (response) { hilog.info(0x0000, 'testTag', 'Succeeded in getting response.'); const authCode = response.authorizationCode; // 开发者处理authCode(传给服务端) } }); // 错误处理 dealAllError(error: BusinessError): void { hilog.error(0x0000, 'testTag', `Failed to login, errorCode is ${error.code}, errorMessage is ${error.message}`); if (error.code === ErrorCode.ERROR_CODE_LOGIN_OUT) { // 用户未登录华为账号,请登录华为账号并重试 } else if (error.code === ErrorCode.ERROR_CODE_NETWORK_ERROR) { // 网络异常,请检查当前网络状态并重试 } else if (error.code === ErrorCode.ERROR_CODE_INTERNAL_ERROR) { // 登录失败,请尝试使用其他方式登录 } else if (error.code === ErrorCode.ERROR_CODE_USER_CANCEL) { // 用户取消授权 } else if (error.code === ErrorCode.ERROR_CODE_SYSTEM_SERVICE) { // 系统服务异常,请稍后重试 } else if (error.code === ErrorCode.ERROR_CODE_REQUEST_REFUSE) { // 重复请求,应用无需处理 } else if (error.code === ErrorCode.ERROR_CODE_AGREEMENT_STATUS_NOT_ACCEPTED) { // 用户未同意协议 } else { // 应用登录失败,请尝试使用其他方式登录 } } build() { Column() { Column() { LoginWithHuaweiIDButton({ params: { style: loginComponentManager.Style.BUTTON_RED, // 按钮样式 extraStyle: { buttonStyle: new loginComponentManager.ButtonStyle().loadingStyle({ show: true }) }, borderRadius: 24, // 边框圆角半径 loginType: loginComponentManager.LoginType.ID, // 登录类型 supportDarkMode: true // 支持深浅色模式切换 }, controller: this.controller }) } .height(40) } .width('100%') .justifyContent(FlexAlign.Center) .margin({ left: 16, right: 16 }) } }

七、服务端开发

7.1 获取Access Token和UnionID

步骤接口说明
1获取用户级凭证接口使用Client ID、Client Secret、Authorization Code获取Access Token、Refresh Token
2解析凭证接口使用Access Token获取用户的UnionID

7.2 关联用户体系

应用通过查询获取的UnionID判断该用户是否已关联:

  • 已关联:完成用户登录

  • 未关联:创建新用户,绑定UnionID,完成用户登录

八、Token过期处理

8.1 Access Token过期处理

项目说明
有效期60分钟
处理方式使用Refresh Token(有效期180天)通过刷新用户级凭证接口获取新的Access Token

重要:当Access Token失效时,若应用不使用Refresh Token获取新的Access Token,账号的授权信息将会失效,导致使用Access Token的功能都会失败。

8.2 Access Token非正常失效场景

当Access Token非正常失效(如修改密码、退出账号、删除设备)时,应用可重新登录授权获取Authorization Code,向华为账号服务器请求获取新的Access Token。

8.3 Refresh Token过期处理

项目说明
有效期180天
处理方式失效后,应用服务端需要通知客户端,重新调用授权接口,请求用户重新授权

九、其他

要点说明
核心组件LoginWithHuaweiIDButton
获取信息Authorization Code → Access Token → UnionID
有效期Access Token 60分钟,Refresh Token 180天
设备支持Phone、Tablet、PC/2in1、TV(19+)
错误处理需根据错误码引导用户

业务流程

用户点击登录按钮 ↓ 获取Authorization Code ↓ 服务端用Authorization Code换取Access Token ↓ 用Access Token获取UnionID ↓ 根据UnionID关联/创建用户 ↓ 完成登录
http://www.jsqmd.com/news/692093/

相关文章:

  • 别再当‘CV工程师’了!Pyecharts 2.0.3生成HTML白屏,90%是因为这个JS文件没下对
  • 2026年南京焦虑症心理咨询医院选择参考 - 品牌排行榜
  • 用Matlab分析电网谐波:从FFT频谱到THD计算,一份给电气工程师的实战指南
  • Legacy-iOS-Kit终极指南:如何为旧款iPhone和iPad设备降级并提升性能
  • CUDA 13.2新特性解析:Tile模型扩展与Python生态增强
  • 蓝桥杯单片机省赛CT107D开发板实战:从零到完整代码的避坑指南(IAP15F2K61S2)
  • 在 ABAP Cloud 里为什么 sy-datum 会报警,以及该如何把它改成真正合规的写法
  • tcp/udp/quic详细比较和总结
  • TrollInstallerX完整教程:iOS 14.0-16.6.1设备3分钟安装TrollStore
  • 2026年宁波比较好的学日语学校怎么选 - 品牌排行榜
  • 苏州GEO哪家靠谱?实测解析优质服务商 - 品牌排行榜
  • DLSS Swapper终极指南:3分钟掌握游戏性能优化神器
  • Zotero PDF Translate:让外文文献阅读不再困难的高效翻译插件
  • DLSS Swapper:你的游戏画质自由切换器,让显卡性能突破官方限制![特殊字符]
  • 2026年4招高效去AI痕迹:AIGC率98%的论文稳过不翻车! - 降AI实验室
  • SAP-FICO-高频TCODE实战速查:从主数据到月结的精准导航
  • 保姆级教程:用STM32的CAN控制器,手把手实现一个简易的汽车数据收发节点
  • 我的母亲 -- 抖音某民工
  • 天猫购物卡回收,这样操作才划算! - 团团收购物卡回收
  • STM32 HAL库实战:手把手教你用模拟I2C驱动MCP4728 DAC(含多地址配置与电压输出)
  • 告别会员费!用Docker小雅+阿里云盘打造家庭影院,实测VidHub/Reex哪个更好用?
  • 盒马鲜生购物卡怎么回收最划算?实用技巧来了! - 团团收购物卡回收
  • 谷歌浏览器 chrome 离线完整安装包
  • 别再只会删lock文件了!npm ERR! code ERESOLVE的5种根治方案与版本冲突排查实战
  • 论文AI率58%降到6%实操指南:这3款工具高效降AI痕
  • 诊断协议开发避坑指南:Autosar Dcm中OpStatus与DID读取的那些坑
  • 云微专业推客系统,自动结算佣金不扯皮
  • 用OpenCV去图片水印
  • 别再只用PictureBox了!C# Winform GDI+绘图实战:手把手教你打造自定义图表控件(.NET Framework 4.8)
  • 别再死记硬背了!用Python脚本模拟XCP协议CTO/DTO报文交互(附代码)