为什么“写 App 还得会带云”?——鸿蒙 AGC 云开发,一把梭哈从数据库到推送,再到上线!

举报
喵手 发表于 2025/10/31 17:17:21 2025/10/31
【摘要】 开篇语哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,...

开篇语

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区: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,减少你东拼西凑的成本。

  • 核心四件套

    1. Cloud DB:端云协同、对象模型、缓存/事务、订阅快照同步。
    2. Cloud Storage:安全地管理图片/音视频等大对象,Web/移动端 SDK 均可用。
    3. Auth Service:多种登录方式(手机号、邮箱、第三方、匿名、自有账号对接)。
    4. Push Kit:高可靠推送、主题分组、回执统计、深度链接,跨 Android/iOS/Web/HarmonyOS。

02|云数据库 Cloud DB:对象即表,端云协同

2.1 概念速览

  • 对象模型驱动:定义数据对象类型(如 TodoUser),导出到工程后即可 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 客户端接入(要点)

  1. 在 AGC 创建应用、开启 Push Kit、下载 agconnect-services.json
  2. 配置 Gradle 仓库与插件、初始化 HMS/AGC。
  3. 获取 Token 并上报到你的业务后台,以便按用户/主题推送

05|集成与部署流水线:从“拉 SDK”到“上架审核”

5.1 本地集成四步

  1. AGC 控制台创建项目/应用,开启所需服务(Cloud DB/Storage/Auth/Push)。
  2. 下载配置文件 agconnect-services.json(或同名变体)放入工程根或指定路径。
  3. 添加 Maven/NPM 依赖,初始化 SDK(App 启动时执行一次)。
  4. 在控制台配置 对象类型(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 !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。


版权声明:本文由作者原创,转载请注明出处,谢谢支持!

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。