一个关于旧物、记忆和 ArkTS 的故事。本文完整复盘了「物迹」这款鸿蒙原生应用从立项、设计、开发到上架华为应用市场的全过程,包含产品设计思路、技术选型、核心功能实现拆解和真实的踩坑记录。如果你想入门鸿蒙原生开发,或者也在做一款自己的 App,希望这篇复盘能给你一些参考。

一、为什么要做「物迹」

我是一个有"留物"习惯的人。电影票根、演唱会手环、大学第一张校园卡、朋友寄来的明信片、祖母留下的老怀表,这些东西占据了我书桌的整个抽屉。

痛点出现在一次搬家。我把抽屉整个打翻,只想找一张和朋友去看展的票根,翻了四十分钟,最后在一条裤子口袋里找到了它。那一刻我突然意识到三件事:

  1. 实体纪念物易损耗、易丢失。纸质会泛黄,金属会氧化,搬家会丢。
  1. 拍照存进相册并救不了记忆。相册里躺着上万张照片,混杂着截图、表情包和外卖红包,三个月后你根本说不清哪一张是"外婆给的手镯"。
  1. 现有工具没有"物品"这个维度。相册 App 按时间线组织照片,笔记 App 自由但结构全靠自己维护,它们都不是为"管理一件纪念物"设计的。

所以有了「物迹」。用华为应用市场上架时写的介绍来说:一款基于鸿蒙系统(HarmonyOS)开发的移动端纪念物品数字化管理工具,提供物品拍照建档、环视展示、分类检索、隐私保护、云端同步等核心能力,实现纪念物品与情感记忆的长期数字化留存。

简单说,就是给每件旧物建一份永远不会泛黄的数字档案。

二、产品设计:把每件物品当成一个"人"来建档

2.1 核心抽象:物品档案

「物迹」的核心数据抽象非常简单:每件物品是一份档案。一份档案包含这些信息:

字段组

内容

设计动机

基本信息

照片、名称、分类

物品"是什么"

获取信息

获取时间、获取方式(自购/获赠)、获取地点、价格

物品的"来历",回忆的锚点

组织信息

所在文件夹、收藏状态、人物关联

物品"属于哪一类、和谁有关"

安全信息

加密保护开关

隐私分层

扩展信息

关联 3D 模型

立体存档

这里有一个我坚持的设计观点:记录"来历"比记录"外观"更重要

获取方式、获取地点、价格这几个字段,看起来琐碎,实际是回忆最强的钩子。"获取地点:北京故宫纪念品商店",这一行字在十年后能瞬间把你拽回那个下午。单纯的物品照片做不到这一点。

 

2.2 信息架构:一个抽屉,五种状态

左侧抽屉导航承载了档案库的全部入口:全部物品档案、收藏物品、加密加锁物品、回忆、最近删除,下面是用户自建的文件夹分类(衣服、鞋子、电子设备、文具等)。

这个结构对应了纪念物的五种真实状态:普通存放、被偏爱(收藏)、需要保护(加密)、被想起(回忆)、被放弃(回收站)。

 

三、技术选型与整体架构

「物迹」采用鸿蒙原生技术栈开发:

  • 语言与 UI:ArkTS + ArkUI 声明式开发范式。状态驱动的 UI 更新方式让"档案卡片流"这类列表场景写起来非常直接。
  • 应用模型:Stage 模型。UIAbility 承载主界面,页面间通过参数传递实现"列表 → 详情 → 编辑"的档案流转。
  • 数据存储:关系型数据库存放档案元数据,图片原图与缩略图分离存储在应用沙箱内,数据库中只持有路径引用。
  • 多媒体能力:通过系统相册与相机能力完成物品照片的选取与拍摄;"3D 扫描"基于 AR 采集与多帧环绕拍摄,用一组 2D 图片仿真模拟出 3D 效果。
  • 账号与云同步:华为账号一键登录,登录后档案云端同步、跨设备流转;同时保留游客模式,数据仅存本机,降低首次使用门槛。

整体分层大致是:

┌─────────────────────────────┐
│  UI 层:ArkUI 组件 / 三套主题  │
├─────────────────────────────┤
│  业务层:档案管理 / 检索 / 回忆  │
├─────────────────────────────┤
│  数据层:RDB + 沙箱文件存储    │
├─────────────────────────────┤
│  系统能力:账号 / 生物识别 / 相机 / AR │
└─────────────────────────────┘

核心数据模型示意(简化版):

interface ItemArchive {
  id: string;            // 档案唯一标识
  name: string;          // 物品名称
  category: string;      // 分类
  photos: string[];      // 照片路径
  acquireDate: number;   // 获取时间
  acquireWay: string;    // 获取方式:自购 / 获赠
  acquirePlace: string;  // 获取地点
  price: number;         // 价格(选填)
  folderId: string;      // 所在文件夹
  persons: string[];     // 关联人物(回忆检索用)
  encrypted: boolean;    // 是否加密保护
  model3d?: string;      // 关联 3D 模型路径
  createdAt: number;
  updatedAt: number;
}

四、核心功能实现拆解

4.1 拍照建档:三步完成一份档案

建档流程刻意压到了三步:选照片 → 填信息 → 保存。分类用图标网格点选,获取方式是二选一的单选,价格选填。所有设计都围绕"降低记录摩擦"展开,因为建档 friction 决定了这个工具能不能长期用下去。

4.2 「回忆」:按时间、地点、人物三维检索

这是「物迹」最有差异化的功能,也是我最喜欢的一个设计。

传统管理工具回答的问题是"这件东西在哪",而「回忆」回答的是"和这段记忆有关的一切"。检索页提供四个维度:默认、时间、地点、人物

比如在"人物"维度输入一个名字,就能查出所有与这个人相关的物品:一起看展的票根、他送的马克杯、那年在海边买的贝壳。

实现上,物品档案中有 persons 标签字段,录入时把相关人物挂到物品上,检索时做条件组合查询,历史搜索词以标签形式沉淀在搜索框下方,方便一键复查。空结果状态做了专门的插画与文案("该条件下没有物品"),避免用户误以为功能坏了。

4.3 物品级加密保护

有些物品的故事只想留给自己。加密开关打开后,物品进入独立的"加密加锁物品"入口,查看需要通过生物识别验证,且不参与全局搜索

验证能力直接复用鸿蒙系统级的人脸与指纹识别,不在应用内另设密码。系统会先尝试人脸匹配,失败时无缝降级到指纹或其他验证方式,安全与顺手两头都占。
 

这里有一个安全与便捷的权衡:加密物品如果仍出现在全局搜索里,等于把隐私暴露在搜索联想中。所以我选择让加密物品完全从公共视图隐身,代价是检索不到它,这个取舍是刻意的。

4.4 3D 扫描:多张 2D 照片合成一份立体档案

照片是平面的,而纪念物是立体的。「物迹」在内置的 3D 扫描页面里,用一组 2D 图片仿真模拟出 3D 效果:把物品放在画面中心,围绕它缓慢移动拍照,应用实时显示采集进度环,采满设定的帧数后完成采集,生成可 360° 查看的立体模型,并关联到物品档案。
 

设计上有两个考量:

  1. 帧数可选(5 / 10 / 20 / 50 / 100 帧)。帧数越多,模型细节越丰富,采集耗时也越长。小件饰品 5 帧够用,手办、文玩这类细节密集的物品可以开到 50 帧以上,用户按物品价值自行权衡。
  1. 引导前置。第一次用 3D 扫描的人往往不知道镜头该怎么动,所以把"将物品放在中心位置,围绕它缓慢移动拍照"直接写在取景画面上,配合进度环与计时反馈,让用户始终清楚自己在哪个环节。

对于手办、饰品、文玩这类"角度即信息"的物品,立体存档的价值远超几张照片。

4.5 多档案与主题系统

考虑到一台设备可能被家庭成员共用,「物迹」支持多档案管理,每个档案有独立的头像与数据空间,家人各管各的物品互不干扰。

主题上做了三套:原石·浅(清爽克制,聚焦信息层级)、玄石·深(深邃沉浸,物品如暗室聚光灯)、时光·复古(情感复古,温暖怀旧)。主题切换作用于全局资源,实现上采用主题 token 统一管理颜色与字体资源。

 

五、上架华为应用市场:流程与经验

上架流程概括为六步:

  1. 注册华为开发者账号,完成实名认证;
  1. 在 AppGallery Connect 创建应用,填写包名与应用信息;
  1. 申请发布证书与 Profile 文件,配置签名;
  1. 构建发布包(APP 格式)并上传;
  1. 填写应用介绍、截图、类目,提交隐私政策与权限声明;
  1. 提审,等待审核与反馈。

几点经验之谈:

  • 权限声明最小化。只申请真正用到的权限,每一项都要在审核材料中说明用途,这直接关系审核通过率。
  • 应用介绍认真写。应用市场的介绍文案值得反复打磨,它是转化率的第一道关口,也是审核员理解你产品的入口。
  • 截图不是摆设。功能截图与实际界面保持一致,既提升转化,也避免审核时被判"宣传与实际不符"

    六、踩坑与心得

    最后分享几条花"真金白银"换来的经验:

  • 数据模型尽早定字段。档案字段后期每次调整都意味着数据迁移,"获取方式""关联人物"这类字段如果能在一开始就想清楚,后面会省掉很多痛苦。
  • 原图与缩略图分离。列表页加载缩略图、详情页按需加载原图,这个分离做得越早,性能优化就越从容。
  • 加密与检索的边界要提前想清楚。安全特性不是后期加开关,它会影响查询链路的设计。验证直接接入鸿蒙系统级人脸/指纹生物识别,比自建密码体系更安全,用户也不必多记一套口令。
  • 先上架,再完美。独立开发最大的敌人是"把所有功能做完再发布"。MVP 上架、真实用户反馈驱动的迭代,比闭门造车健康得多。
  • 给"最近删除"留缓冲。纪念物场景下,一次误删就是一次小型灾难,回收站是必须的温柔。
  • 游客模式是转化的缓冲垫。强制登录会挡掉一批"想先看看再说"的用户。「物迹」支持游客模式直接进入,数据仅存本机,想同步时再登录华为账号,首次体验零门槛,注册流失降到了最低。
  • 3D 采集的用户引导比算法更重要。扫描效果差,多数时候是用户不会"绕圈"导致的。把操作提示写进取景画面、用进度环给即时反馈,比在后台优化算法的收益来得更直接。
  • 七、写在最后

    「物迹」现在已经可以在华为应用市场搜索「物迹」下载。

    它也许解决不了什么宏大的问题,但至少做到一件事:让每一件对你重要的物品,都有一份不怕丢失、不会泛黄、随时能被翻起的数字记忆。

    华为账号登录与云端同步已经落地:登录后档案跨设备流转,换手机也不怕丢;游客模式保住了首次体验的零门槛。3D 扫描的采集效率与模型精细度、回忆检索的维度扩展,都还有很大的想象空间,会持续打磨。

    如果你也在做鸿蒙应用,或者也在思考"独立开发一款产品"这件事,欢迎在评论区交流。独立开发这条路上,同行者越多,路越好走。


Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐