为什么“写 App 还得会带云”?——鸿蒙 AGC 云开发,一把梭哈从数据库到推送,再到上线!
开篇语
哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!
前言
老老实实写本地 App 的日子,已经一去不复返了:数据要同步、图片要上云、用户要登录、消息要触达、版本要上线。好消息是:AppGallery Connect(AGC)把这一坨事儿规整成了“拿来即用”的云服务栈:云数据库 Cloud DB、云存储 Cloud Storage、账号(Auth Service)、消息推送(Push Kit),外加一条龙的集成与发布流程。本文不空谈,直接给出可落地的代码与流程清单,让你从零到上架一路通关。
(文中所涉名词/SDK按 AGC 官方文档为准,我会在关键处附上出处链接供你核对 👇)
目录
- 01|认知版图:AGC 到底帮你省了什么力
- 02|云数据库 Cloud DB:对象即表,端云协同
- 03|云存储 Cloud Storage:大文件上云与签名直传
- 04|账号服务 & 消息推送:登录入场证 & 精准触达
- 05|集成与部署流水线:从“拉 SDK”到“上架审核”
- 06|端到端示例:拍照→上云→写库→推送通知
- 07|工程化心法:安全、幂等、观测、降级
- 结语 & 速记卡
01|认知版图:AGC 到底帮你省了什么力
-
一站式:从开发、测试到上架、运营与增长,AGC 提供统一门户与 SDK,减少你东拼西凑的成本。
-
核心四件套:
- Cloud DB:端云协同、对象模型、缓存/事务、订阅快照同步。
- Cloud Storage:安全地管理图片/音视频等大对象,Web/移动端 SDK 均可用。
- Auth Service:多种登录方式(手机号、邮箱、第三方、匿名、自有账号对接)。
- Push Kit:高可靠推送、主题分组、回执统计、深度链接,跨 Android/iOS/Web/HarmonyOS。
02|云数据库 Cloud DB:对象即表,端云协同
2.1 概念速览
- 对象模型驱动:定义数据对象类型(如
Todo、User),导出到工程后即可 CRUD。 - 缓存/订阅:本地缓存 +
subscribeSnapshot变更监听,弱网可用,联机自动对齐。 - 事务:
runTransaction()保证原子性与一致性。
2.2 初始化与对象类型(ArkTS/JS 示例)
// 伪近似示例:以官方“创建对象类型、打开 Cloud DB Zone”为心智模型
import { AGConnectCloudDB } from '@agconnect/cloud-db' // 依 SDK 版本导入
// 一次性初始化(App 启动)
AGConnectCloudDB.initialize(appContext) // 由 agconnect-services.json 提供配置
// 定义对象(可在 AGC 控制台导出对象类型文件并引入工程)
class Todo {
id: string; title: string; done: boolean; updatedAt: Date
}
// 打开 Zone(缓存模式,便于订阅与事务)
const cloudDB = AGConnectCloudDB.getInstance()
cloudDB.createObjectType(Todo) // 对象类型注册
const zone = await cloudDB.openCloudDBZone({
zoneName: 'app_zone', sync: 'CLOUD_CACHE'
})
// Upsert:有则更,新则插
await zone.executeUpsert(new Todo(/*...*/))
// 查询 + 监听快照
const query = AGConnectCloudDBQuery.where(Todo).equalTo('done', false)
zone.subscribeSnapshot(query, (snapshot) => {
const items = snapshot.getInsertRecords() // 变化数据
// 刷新 UI ...
})
常见坑:务必用缓存模式配合订阅/事务;对象类型与控制台定义要一致。
03|云存储 Cloud Storage:大文件上云与签名直传
3.1 使用场景
- 用户头像/相册、富媒体动态、日志/报表归档、短视频分片上传等。
- Web 端或 HarmonyOS 前端可直接用 Cloud Storage Web SDK。
3.2 Web 端上传示例
// Cloud Storage(Web/JS)最小可用示例
import agconnect from '@agconnect/api'
import '@agconnect/instance'
import '@agconnect/storage' // SDK 包名以实际为准
// 初始化(确保已引入 agconnect-services.json)
const storage = agconnect.storage()
// 选择文件并上传到路径 /users/{uid}/avatar.jpg
async function uploadAvatar(file: File, uid: string) {
const task = storage.ref(`/users/${uid}/avatar.jpg`).put(file, { contentType: file.type })
task.on('state_changed', (snap) => {
const pct = Math.floor(100 * snap.bytesTransferred / snap.totalBytes)
console.info('progress', pct, '%')
})
await task
return storage.ref(`/users/${uid}/avatar.jpg`).getDownloadURL()
}
要点:前端直传要配合 账号鉴权;大文件请使用分块/断点续传策略。
04|账号服务 & 消息推送:登录入场证 & 精准触达
4.1 账号服务(Auth)
- 支持 Web/HarmonyOS/Android/iOS 多端;可与自有账号打通(交换令牌、统一用户态)。
Web 端登录示例(思路)
import agconnect from '@agconnect/api'
import '@agconnect/auth'
const auth = agconnect.auth()
// 邮箱注册/登录(示意)
await auth.createUserWithEmail({ email, password })
const { user } = await auth.signInWithEmail({ email, password })
// user.getUid() 可作为 Cloud DB / Storage 路径与权限依据
自有账号对接时,将你服务签发的凭证与 AGC Auth 交换,形成统一登录态,细节见专题实践。
4.2 消息推送(Push Kit)
- 跨平台、高可靠、回执统计、主题/标签、深度链接直达应用内页。
Android 客户端接入(要点)
- 在 AGC 创建应用、开启 Push Kit、下载
agconnect-services.json。 - 配置 Gradle 仓库与插件、初始化 HMS/AGC。
- 获取 Token 并上报到你的业务后台,以便按用户/主题推送。
05|集成与部署流水线:从“拉 SDK”到“上架审核”
5.1 本地集成四步
- AGC 控制台创建项目/应用,开启所需服务(Cloud DB/Storage/Auth/Push)。
- 下载配置文件
agconnect-services.json(或同名变体)放入工程根或指定路径。 - 添加 Maven/NPM 依赖,初始化 SDK(App 启动时执行一次)。
- 在控制台配置 对象类型(Cloud DB)、存储桶规则(Storage)、签名与证书 等。
5.2 上线与上架(HarmonyOS/元服务)
- 准备签名证书与 Profile,构建 HAP/APP 包;
- AppGallery Connect 填写版本信息、上传包体、提审与分发;
- 需要注意目标国家/地区、合规材料与能力权限描述。
06|端到端示例:拍照→上云→写库→推送通知
目标:用户在端上拍照,图片存 Cloud Storage;元数据写 Cloud DB;后台给用户自己推送一条“上传成功”。(示例略去 UI 细节,强调串联点)
// 1) 登录(略)获得 uid
const uid = auth.getCurrentUser()?.getUid()
// 2) 选图并上传至 Cloud Storage
const url = await uploadAvatar(file, uid!) // 见前文函数
// 3) 写入 Cloud DB(对象模型:Photo { id, owner, url, createdAt })
await zone.executeUpsert(new Photo({ id: uuid(), owner: uid, url, createdAt: new Date() }))
// 4) 调用你自己的云函数 / 业务服务:根据 uid 触发 Push(主题或用户标签)
await fetch('/api/push', { method: 'POST', body: JSON.stringify({ uid, title: '上传成功', url }) })
服务端(伪):使用 Push 服务端 SDK/HTTP API,按 registration token / 主题 推送,并设置 deep link 直达“图片详情页”。(推送能力点与回执指标参考官方页)
07|工程化心法:安全、幂等、观测、降级
-
最小权限:
- Cloud DB 对象/字段级读写划分;
- Cloud Storage 路径级规则(如仅允许
/users/{uid}/**); - Push 只允许业务服务端发送,不在前端暴露密钥。
-
幂等性:写库/调用推送都带
idempotencyKey,服务端去重。 -
可观测性:
- 端:上传进度、DB 延迟、失败重试次数;
- 服:推送到达/展示回执、错误码分布、对象存储失败率。
-
离线与重试:Cloud DB 用 缓存 + 订阅快照;上传走分块 + 断点续传;推送失败退避重试。
-
版本与回滚:按模块灰度;控制台一键下线/暂停分发,客户端保留本地缓存兜底。
-
合规与上架:能力权限说明、地区合规、签名与 Profile 正确配置再提交。
结语:把“云”折叠成“顺滑体验”
当 Auth → Storage → DB → Push → 上架 串起来,用户看到的只有自然的登录、稳定的同步、即时的消息和快速迭代。这就是 AGC 的意义:把复杂工程折叠在后台,让你把时间花在产品正确性上。今天就把本文代码片段塞进你的项目,跑通第一个“拍照→上云→写库→推送”闭环吧。你会惊讶:云,没那么“玄”。
… …
文末
好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。
… …
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
版权声明:本文由作者原创,转载请注明出处,谢谢支持!
- 点赞
- 收藏
- 关注作者
评论(0)