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

鸿蒙 Account Kit:静默登录(五)

静默登录适用于应用卸载重装、用户换机等场景,不需要用户点击登录/注册按钮,即可自动获取用户的身份标识UnionID/OpenID,完成用户的静默登录。

一、静默登录

在应用卸载重装、用户换机等场景,如登录的华为账号与应用重装、换机前一致,应用可通过Account Kit提供的静默登录方式即不需要用户点击登录/注册按钮,即可获取用户的身份标识UnionID/OpenID,完成用户的静默登录。

场景说明
应用卸载重装用户重新安装应用后,无需再次登录
用户换机用户更换设备后,自动登录

特点

  • 无需用户交互:不需要用户点击登录/注册按钮

  • 自动获取身份标识:获取UnionID/OpenID

  • 提升用户体验:减少用户操作步骤

二、支持版本

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

三、业务流程

阶段说明
调用登录API用户使用华为账号登录过应用,应用卸载重装或换机后再进入应用时,应用传forceLogin = false等参数调用登录API。如华为账号已登录且API调用成功,获取Authorization Code;如华为账号未登录,返回错误码1001502001
用户关联应用账号服务端通过Authorization Code获取Access Token,再获取UnionID,应用完成静默登录

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

四、开发前提

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

配置项说明
配置签名和指纹参考配置签名和指纹
配置Client ID参考配置Client ID

注意:此场景无需申请账号权限。

五、接口

接口描述
createLoginWithHuaweiIDRequest()创建账号登录请求。forceLogin参数静默登录场景设置为false
constructor(context)创建登录请求Controller
executeRequest(request)通过Promise方式执行登录操作

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

六、客户端开发

6.1 导入模块

import { authentication } from '@kit.AccountKit'; import { hilog } from '@kit.PerformanceAnalysisKit'; import { util } from '@kit.ArkTS'; import { BusinessError } from '@kit.BasicServicesKit';

6.2 错误码枚举

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 // 重复请求 }

6.3 创建登录请求并执行

// 创建登录请求,并设置参数 const loginRequest = new authentication.HuaweiIDProvider() .createLoginWithHuaweiIDRequest(); // false表示静默登录(重要) loginRequest.forceLogin = false; // 用于防跨站点请求伪造 loginRequest.state = util.generateRandomUUID(); // 执行登录请求 try { const controller = new authentication.AuthenticationController(); controller.executeRequest(loginRequest).then((response: authentication.LoginWithHuaweiIDResponse) => { const state = response.state; if (state && loginRequest.state !== state) { hilog.error(0x0000, 'testTag', `The state is different, response state: ${state}`); return; } hilog.info(0x0000, 'testTag', 'Succeeded in logging in.'); const code = response?.data?.authorizationCode; // 开发者处理code(传给服务端) }).catch((error: BusinessError) => { dealAllError(error); }); } catch (error) { dealAllError(error); }

6.4 参数

参数静默登录值说明
forceLoginfalse不强制拉起登录页面,静默获取授权
state随机UUID防跨站点请求伪造

6.5 错误处理函数

function dealAllError(error: BusinessError): void { hilog.error(0x0000, 'testTag', `Failed to login. Code: ${error.code}, message: ${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 { // 应用登录失败,请尝试使用其他方式登录 } }

七、服务端开发

7.1 获取Access Token

应用服务端使用Client ID、Client Secret、Authorization Code调用获取用户级凭证接口向华为账号服务器请求获取Access Token、Refresh Token。

7.2 获取UnionID

使用Access Token调用解析凭证接口获取用户的UnionID。

7.3 用户关联

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

  • 已关联:完成用户登录

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

7.4 业务流程

应用启动(重装/换机后) ↓ 创建LoginWithHuaweiIDRequest ↓ 设置forceLogin=false ↓ 调用executeRequest执行静默登录 ↓ 如华为账号已登录 → 获取Authorization Code 如华为账号未登录 → 返回错误码1001502001 ↓ 服务端用Authorization Code换取Access Token ↓ 用Access Token获取UnionID ↓ 根据UnionID关联用户,完成静默登录

7.5 注意事项

  1. forceLogin必须为false:静默登录的关键参数

  2. 华为账号未登录处理:返回错误码1001502001,需引导用户登录

  3. Token管理:注意Access Token和Refresh Token的有效期

八、Token过期处理

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

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

Access Token非正常失效场景

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

Refresh Token过期处理

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

九、四种登录方式对比

对比项静默登录自定义按钮登录华为账号登录按钮华为账号一键登录
用户操作无需点击点击自定义按钮点击标准按钮点击标准按钮
forceLoginfalsetrue--
获取信息UnionIDUnionIDUnionID手机号+UnionID
开发者类型企业+个人企业+个人企业+个人仅企业
适用场景重装/换机自动登录UI定制需求快速集成需要手机号

静默登录通过forceLogin=false参数调用华为账号登录API,在应用卸载重装或换机场景下无需用户点击即可获取Authorization Code,服务端再用Code换取UnionID完成自动登录,适用于企业开发者和个人开发者。

http://www.jsqmd.com/news/710119/

相关文章:

  • 终极隐私保护!Windows本地实时语音转文字工具全攻略
  • 第三十五天(4.27)
  • NoFences:免费开源桌面分区工具,彻底告别Windows桌面混乱
  • 如何快速掌握麻将AI助手:终极实战指南提升雀魂技巧
  • “人工智能+工业”:JBoltAI智能图检赋能鲁威制造新升级
  • 深度解析专业心理咨询数据集:20,000条中文对话语料实战指南
  • Windows Cleaner:专治C盘爆红及各种不服的终极系统优化方案
  • 抖音视频下载终极指南:免费高清无水印批量下载工具完整教程
  • 2026年物料流动探测仪选型评估:基于技术原理与厂商能力的研究 - 品牌推荐大师1
  • Agent-R1框架:LLM智能体的强化学习训练新范式
  • 终极雀魂AI助手:5分钟快速上手指南
  • 咱这“铁疙瘩”咋干活?——老李师傅唠唠物料搬运机器人
  • WGLOG日志审计系统更新:新增数据库与API日志采集,修复多项Bug提升性能
  • AI核心知识144—大语言模型之 红队(简洁且通俗易懂版)
  • 画面匹配大师 视频片段查原片软件 极致感受 速橙软件-相同视频片段匹配系统
  • 2026年苏州留学机构推荐哪家:五家优选品牌深度解析 - 科技焦点
  • 2026年3月熔断器厂商推荐,后备熔断器/XRNP/XRNC/全范围熔断器/光伏熔断器/风电熔断器,熔断器实力厂家哪家好 - 品牌推荐师
  • WASM容器无法热更新?Docker 24.2新特性“WASM Module Hot Swap”实测失效真相(附内核级patch修复方案)
  • “人工智能+”政策下,企业AI转型的机遇与JBoltAI助力
  • STM32+ESP8266项目复盘:我的温室监控系统踩了哪些坑?
  • 电子健康记录:医疗数据的标准化与隐私保护
  • 我们是做科研的,不是来学 PS、AI 的
  • 让你的Windows任务栏焕然一新:TranslucentTB透明化美化全攻略
  • 蓝桥杯EDA备赛避坑指南:从我的模拟题1失败PCB到高分布局走线心得
  • NMN买大瓶还是小瓶更划算?2026年从单粒成本到保质期,NMN购买策略全面解析 - 资讯焦点
  • 抖音批量下载神器:5分钟搞定100个视频的高效方案
  • EASY-HWID-SPOOFER:Windows内核级硬件信息伪装工具深度解析
  • 如何5分钟搞定魔兽争霸3性能优化:WarcraftHelper终极完整指南
  • Elasticsearch安全认证深度解析:Search Guard与X-Pack Security全方位对比
  • 强化学习搜索模型的安全漏洞与防御策略