HarmonyOS 实战教程(八):个人中心与华为云服务集成 —— 以「柚兔自测量表」为例
一、个人中心页面概览个人中心MineView提供用户信息展示、登录/登出、功能入口历史记录、反馈建议、关于我们和版本信息展示。Componentexportstruct MineView{StateprivateisLoggedIn:booleanfalse;StateprivateuserName:string点我登录;Stateprivateavatar:Resource|string$r(app.media.ic_head);StateversionName:stringV1.0.1;privatepageContext:PageContextAppStorage.get(pageContext)asPageContext;asyncaboutToAppear():Promisevoid{this.updateLoginState()this.versionNameawaitgetAppVersion()}build(){Column(){this.buildTopBar();Column(){this.buildUserInfo();this.buildSecondRow();Blank().layoutWeight(1)this.buildVersionInfo();}.width(100%)}.width(100%).height(100%).backgroundColor($r(app.color.color_background))}}二、华为一键登录集成2.1 BackupManagerService 初始化MeCharts 使用backup_air三方库集成华为云服务包括一键登录和数据备份exportdefaultclassBackupManagerService{privatestaticinstance:BackupManagerService;privateisInitialized:booleanfalse;privateisLoggedIn:booleanfalse;publicstaticgetInstance():BackupManagerService{if(!BackupManagerService.instance){BackupManagerService.instancenewBackupManagerService();}returnBackupManagerService.instance;}publicasyncinitializeBackupManager():Promisevoid{try{constbackupManagerBackupManager.getInstance();letstore(awaitDbUtil.getInstance(getContext().getApplicationContext())).store;if(!store){thrownewError(未初始化数据库);}backupManager.init({onCompleteBackup:(){console.log(自定义回调- 备份完成);},onCompleteRestore:(){console.log(自定义回调- 恢复完成);},updateDbVersion:(cloudDbVersion){console.log(自定义回调- 更新数据库版本 云端数据库版本cloudDbVersion);},cloudDir:testUser,cloudDbName:Partner.db,storeConfig:DbUtil.STORE_CONFIG,backupDirs:[newBackupDir(testDir,testCloud.zip)],cloudStorageType:sdk,bucketName:partner-xhmds,productId:461323198430551180,client_id:1788670196915914048,client_secret:***,oauth_client_id:6917585955626292994,oauth_client_secret:***,},store);this.isInitializedtrue;this.isLoggedIntrue;}catch(error){this.isInitializedfalse;this.isLoggedInfalse;}}}初始化参数说明参数说明onCompleteBackup备份完成回调onCompleteRestore恢复完成回调updateDbVersion云端数据库版本变更回调cloudDir云存储用户目录cloudDbName云端数据库名称cloudStorageTypesdk需登录http不需登录bucketName存储桶名称productIdAGC 项目 ID2.2 登录流程login(){constbackupManagerBackupManager.getInstance();if(!BackupManagerService.getInstance().isBackupManagerInitialized()){promptAction.showToast({message:等待初始化完成});return;}this.isLoggedInUserInfoManager.isLoggedIn();if(this.isLoggedIn){return// 已登录不重复登录}try{backupManager.login();setTimeout((){this.updateLoginState();if(this.isLoggedIn){// 登录成功}else{promptAction.showToast({message:登录失败});}},1000);}catch(error){promptAction.showToast({message:登录失败});}}backupManager.login()调用华为一键登录服务无需用户输入账号密码即可完成认证。2.3 登录状态管理privateupdateLoginState(){this.isLoggedInUserInfoManager.isLoggedIn();if(this.isLoggedIn){constuserInfoDataUserInfoManager.getUserInfo();this.userInfo${userInfoData?.nickName||未设置};this.avataruserInfoData?.avatarUri||$r(app.media.ic_head)}else{this.userInfo未登录;this.avatar$r(app.media.ic_head)}}2.4 登出功能BuilderbuildRightContent(){Image($r(app.media.ic_logout)).width(24).height(24).onClick((){UserInfoManager.clearUserInfo()this.updateLoginState()}).visibility(this.isLoggedIn?Visibility.Visible:Visibility.None)}登出按钮只在已登录状态显示点击后清除用户信息并刷新 UI。三、用户信息展示3.1 用户头像与昵称BuilderbuildUserInfo(){Column(){Image(this.avatar).width(60).height(60).borderRadius(40)Row(){Text(this.userInfo).fontSize(16).fontWeight(FontWeight.Bold).fontColor(this.isLoggedIn?#333333:#999999)}.margin({top:10})}.width(100%).padding(20).margin({top:30}).onClick((){if(!this.isLoggedIn){this.login()}})}未登录时显示默认头像和灰色文字未登录点击触发登录已登录时显示用户头像和昵称。四、功能卡片入口4.1 通用卡片组件BuilderbuildCard(icon:Resource,title:string,onClick:()void){Column(){Image(icon).width(40).height(40)Text(title).fontSize(14).margin({top:8})}.width(100).height(100).justifyContent(FlexAlign.Center).backgroundColor($r(app.color.color_card)).borderRadius(12).shadow({radius:8,color:#1a000000,offsetX:0,offsetY:2}).onClick(onClick)}4.2 功能入口布局BuilderbuildSecondRow(){Row(){this.buildCard($r(app.media.ic_record),历史记录,(){this.pageContext.openPage({routerName:RecordPage,},true);});this.buildCard($r(app.media.ic_feedback),反馈建议,(){this.pageContext.openPage({param:{title:反馈建议,url:https://ncn1rpfvd5vb.feishu.cn/share/base/form/shrcn0YEc3umGFsTAcZimonouTC,}asResultParams,routerName:WebPage,},true);});this.buildCard($r(app.media.ic_praise),关于我们,(){this.pageContext.openPage({routerName:AboutPage,},true);});}.width(100%).justifyContent(FlexAlign.SpaceEvenly).margin({top:20}).padding({left:20,right:20})}三个功能入口采用SpaceEvenly均匀排列视觉上简洁对称。五、版本信息获取5.1 动态获取应用版本asyncfunctiongetAppVersion():Promisestring{try{constbundleInfoawaitbundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT);returnbundleInfo.versionName}catch(err){console.error(getBundleInfoForSelf failed:,JSON.stringify(err));return1.0.1}}bundleManager.getBundleInfoForSelf()可获取当前应用的包信息包括版本名、版本号等。无需声明额外权限。5.2 版本信息展示BuilderbuildVersionInfo(){Text(当前版本${this.versionName}).fontSize(12).fontColor(#999999).width(100%).textAlign(TextAlign.Center).margin({top:60,bottom:20})}六、关于页面6.1 AboutPage 实现Componentstruct AboutPage{privatepageContext:PageContextAppStorage.get(pageContext)asPageContext;build(){NavDestination(){Column({space:10}){this.buildTopBar()Column({space:10}){Image($r(app.media.app_icon)).width(60).height(60).margin({top:20})Text(柚兔自测量表).fontSize(18).margin({top:10,bottom:40})SettingItem({name:用户协议}).onClick((){this.pageContext.openPage({param:{title:用户协议,url:UrlConstants.URL_USER}asResultParams,routerName:WebPage,},true);}).width(100%)SettingItem({name:隐私政策}).onClick((){this.pageContext.openPage({param:{title:隐私政策,url:UrlConstants.URL_PRIVACY}asResultParams,routerName:WebPage,},true);}).width(100%)this.buildRow(作者微信,gy09312)Blank().layoutWeight(1)Text(如果您想添加某些功能或者有什么意见建议都可以通过以上途径联系到我感谢您的反馈).fontSize(12).fontColor($r(app.color.color_text)).padding(15)Text(鲁ICP备2024092126号-6A).fontSize(12).fontColor($r(app.color.color_text)).padding(15)}.width(100%).layoutWeight(1)}}}}6.2 SettingItem 通用设置项组件Componentexportstruct SettingItem{Propname:stringPropcontent?:stringbuild(){Row({space:7}){Text(this.name).fontWeight(FontWeight.Medium)Blank().layoutWeight(1)if(this.content){Text(this.content).fontSize(12)}Image($r(app.media.ic_enter)).width(14)}.width(100%).justifyContent(FlexAlign.SpaceBetween).padding({left:12,right:12})}}SettingItem是一个简洁的设置项组件左侧名称、右侧可选内容箭头支持Prop数据传递。七、Web 页面容器用户协议、隐私政策和反馈建议都通过WebPage加载网页内容Componentstruct WebPage{controller:webview.WebviewControllernewwebview.WebviewController();Stateurl:stringStatetitle:stringStateisLoading:booleantruebuild(){NavDestination(){Column(){TopBar({title:this.title,onBack:(){this.pageContext.popPage(true)}})Stack(){Web({src:this.url,controller:this.controller}).layoutWeight(1).onPageEnd((){this.isLoadingfalse})LoadingProgress().width(40).height(40).visibility(this.isLoading?Visibility.Visible:Visibility.None)}.layoutWeight(1)}}.onReady((ctx:NavDestinationContext){constparamsctx.pathInfo.paramasResultParams;this.urlparams.urlasstringthis.titleparams.titleasstring})}}关键点webview.WebviewController控制 Web 组件onPageEnd回调在页面加载完成后触发关闭 loadingStack叠加 Web 和 LoadingProgress实现加载指示器效果八、emitter 事件驱动的跨页面通信AI 咨询页面检测到未登录时通过emitter通知主页切换到我的Tab// ConsultView 中发送事件if(!UserInfoManager.isLoggedIn()){ToastUtil.showToast(请先登录...)leteventData:emitter.EventData{data:{content:content}};emitter.emit(CommonConstants.EVENT_ID,eventData);}// Index 中监听事件aboutToAppear():void{letcallback:Callbackemitter.EventData(eventData:emitter.EventData){this.tabController.changeIndex(2)// 切换到我的Tab};emitter.on(CommonConstants.EVENT_ID,callback);}aboutToDisappear():void{emitter.off(CommonConstants.EVENT_ID);// 移除监听}emitter是 HarmonyOS 提供的进程内事件通知机制适合跨组件/跨页面的松耦合通信。九、小结本篇讲解了个人中心的完整实现包括华为一键登录集成、用户状态管理、功能入口布局和 Web 容器页面。通过backup_air三方库MeCharts 轻松集成了华为云服务的登录与备份能力。下一篇将深入响应式布局与断点系统。

相关新闻

昇腾AI软件栈CANN架构设计与AIGC优化实践

昇腾AI软件栈CANN架构设计与AIGC优化实践

1. 昇腾AI软件栈的工程密码解析1.1 CANN仓库架构设计精要华为昇腾AI处理器配套的CANN(Compute Architecture for Neural Networks)软件栈采用分层模块化设计,其源码仓库的组织结构直接反映了这种工程哲学。核心目录结构中,runtime…

2026/7/27 0:46:34阅读更多 →
HarmonyOS应用《玄象》开发实战:命盘排布 Canvas:四柱干支 + 六十甲子纳音表的同步绘制

HarmonyOS应用《玄象》开发实战:命盘排布 Canvas:四柱干支 + 六十甲子纳音表的同步绘制

阅读时长:约 18 分钟 | 难度:★★★★☆ | 篇章:第 6 篇 命理八字模块 对应源码:entry/src/main/ets/pages/mingli/MingliAnalysisPage.ets 前言 命盘排布是八字命理分析的可视化核心。玄象项目通过 Canvas 绘制四柱干支 六…

2026/7/27 0:44:33阅读更多 →
HarmonyOS应用《玄象》开发实战:HomePage 顶部标题栏的 Row + Blank 三段式布局

HarmonyOS应用《玄象》开发实战:HomePage 顶部标题栏的 Row + Blank 三段式布局

阅读时长:约 19 分钟 | 难度:★★★★☆ | 篇章:第 3 篇 首页与功能导航 对应源码:entry/src/main/ets/pages/HomePage.ets 前言 首页顶部标题栏是用户进入应用后最先看到的功能性区域。玄象项目首页采用 Row Blank 三段式…

2026/7/27 0:44:33阅读更多 →
城市多模态大模型:智能视觉治理的技术架构与应用

城市多模态大模型:智能视觉治理的技术架构与应用

1. 项目背景与核心价值这个千万级预算的城市视图多模态大模型项目,本质上是要构建一个能"看懂"城市各类视觉数据的智能中枢。想象一下,每天城市里产生的交通监控、卫星影像、无人机航拍等海量视觉数据,传统方式需要不同部门各自处理…

2026/7/27 2:06:47阅读更多 →
7天精通VRC手势管理器:从原理到实战打造高表现力虚拟形象

7天精通VRC手势管理器:从原理到实战打造高表现力虚拟形象

1. 项目概述:为什么你需要掌握VRC Gesture Manager?如果你在虚拟社交平台(如VRChat)里,看到别人的虚拟形象(Avatar)能做出各种细腻、复杂的表情和手势,比如精准地比出“OK”手势、随…

2026/7/27 2:06:47阅读更多 →
UE4SS终极指南:无需源码的游戏修改与脚本开发平台

UE4SS终极指南:无需源码的游戏修改与脚本开发平台

UE4SS终极指南:无需源码的游戏修改与脚本开发平台 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS …

2026/7/27 2:06:47阅读更多 →
ComfyUI IPAdapter完全指南:3步掌握图像风格迁移核心技术

ComfyUI IPAdapter完全指南:3步掌握图像风格迁移核心技术

ComfyUI IPAdapter完全指南:3步掌握图像风格迁移核心技术 【免费下载链接】ComfyUI_IPAdapter_plus 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_IPAdapter_plus 你是否曾经想要将一张照片的风格完美迁移到另一张图像上,却苦于复杂的参…

2026/7/27 2:06:47阅读更多 →
3分钟学会:用WorkshopDL免费下载Steam创意工坊模组的终极指南

3分钟学会:用WorkshopDL免费下载Steam创意工坊模组的终极指南

3分钟学会:用WorkshopDL免费下载Steam创意工坊模组的终极指南 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG、Epic Games或其他平台购买了游戏&#x…

2026/7/27 2:06:47阅读更多 →
7 月 AI 基础设施复盘:我们到底在平台上加了哪些能力

7 月 AI 基础设施复盘:我们到底在平台上加了哪些能力

7 月 AI 基础设施复盘:我们到底在平台上加了哪些能力 一、从"能跑"到"能扛":AI 平台能力建设的核心矛盾 一个月时间,AI 基础设施团队到底做了什么?如果只看工时统计,无非是几十个 PR、上百次部署…

2026/7/27 2:04:47阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/27 1:14:34阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/27 1:14:52阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/27 1:14:56阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:24阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:24阅读更多 →
2007-2023年各市区县生态文明建设示范区DID

2007-2023年各市区县生态文明建设示范区DID

数据简介 自改革开放以来,我国依赖高投入、高资源消耗和高污染等传统发展模式实现了经济短期内的快速增长, 然而这也导致了严重的生态环境危机。因此,国家有力于推动企业高质量经济发展,协同生态保护的方针,从而从201…

2026/7/27 0:00:24阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/25 23:03:25阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/26 19:05:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/26 19:05:21阅读更多 →