编注
本文是少数派 1024 程序员节征文活动的入围文章,如果你也想分享与鸿蒙开发有关的真实故事与深度体验,或是想让更多人看到你的开发作品,不妨码上投稿,与鸿蒙一起进击!
你也可以点击这里查看本次征文活动的其它投稿。
我喜欢古诗词,在我看来,一款理想中的古诗词应用应该是贴近生活的。
「沽酒家」就是这样一款应用:
在这里,当你浏览推荐诗词动态时,如果遇到欣赏的作品,你可以点赞收藏。某一天,当你和这首诗词产生共鸣时,你可以用一句话、一个故事或一张图片来记录下此刻的感悟与感动。
你还可以为诗人创作头像,基于诗人生平、诗人作品以及你个人经历进行创作,优秀的创作有就会被选做诗人头像。
诗词就是用来连接古今、连接人与生活和连接人与人的桥梁。我希望能通过「沽酒家」,让更多的人发现诗词之美,发现生活之美。
大学毕业后的一个晚上,我和朋友在街上闲逛,对未来充满迷茫。就在那时,一个念头突然蹦了出来:我以后一定要开发一款诗词应用。
后来我发现,市面上已经有许多优秀的诗词应用了,比如「西窗烛」和「古文岛」等。它们都非常出色,但我还是想回应自己当初那个念头。因为每当我迷茫或遇到挫折时,正是那个念头支撑着我坚持下来——或许这就是目标的力量。
从上一家公司离职后,我觉得是时候去实现它了。起初,我使用 uni-app 开发了微信小程序版本和网页版,但很快发现微信小程序对个人开发者在服务类目和用户生成内容(UGC)方面存在诸多限制,导致部分功能在开发后无法通过审核。因此,我决定转向使用 Flutter 开发 APP, 并先后上架 App Store 和应用宝。在此期间,我还创建了一个每日推送一首古诗词的公众号和 Chrome浏览器插件。
开发完成后,由于没有推广,几乎无人下载和使用,自然更不会考虑开发鸿蒙版本了。
直到有一天,我刷到了鸿蒙的「碰一碰」功能,脑海里立即浮现那四个字:“一拍即合”。
鸿蒙的「碰一碰」功能,让用户只需轻轻一碰,即可实现文件的即时分享、照片的互传以及游戏的便捷组队等。而「沽酒家」也十分注重分享功能,利用「碰一碰」功能可以实现诗词的快速分享。不仅如此,我更期待有一天,能够借助鸿蒙万物互联的能力,实现“诗天下”的愿望。
怀着那份激动的心情,我开始了解鸿蒙开发,发现了鸿蒙应用开发者激励计划 2025,我感觉这是一个很好的开发鸿蒙应用的契机,便报了名。报名成功后鸿蒙生态服务团队也安排了市场运营和技术老师,提供 APP 开发相关问题解答和协助上架与跟进审核,虽然最终不一定能获得激励奖励,但确实帮助我解决了开发中和上架中的问题。
我的学习路径是先阅读开发文档,了解项目结构和配置,主要了解服务框架(Stage 模型)、方舟数据管理、基于 Typescript 扩展的方舟编程语言(ArkTs)和方舟UI框架(状态管理、路由、组件等)。
看完文档后再看看最佳实践,里面有许多开发技巧。还有行业实践与常用问题,可以参考应用所在特定行业的关键场景示例和行业常见问题。比如在「拍摄美化行业实践」中有比较多的图片处理示例,我在这里就找到了“如何将图片压缩到指定大小以下”的示例,解决用户上传笔记图片尺寸太大的问题。
当然也有许多问题,光靠文档是无法解决的,这时可以在「社区问答」寻求帮助。
下面列举一些我开发中常用的文档:
我的开发流程是先查看 HMOS 世界示例代码,了解真实项目的项目结构、分层架构、组件封装和通用服务等。
再根据我的项目中可能涉及的功能,在官方示例中寻找是否有对应的解决方案,比如:
整个项目开发下来,开发过程都挺顺利的。特别是在熟悉声明式 UI 和 Typescript 的情况下上手比较快,对 Web 开发者友好。而且鸿蒙系统自身封装了大量系统调用和基础服务,不需要像其他开发系统那样依赖大量的第三方插件。
最开始构思「沽酒家」时,我就想把首页做成微信朋友圈和微博那样,当我打开「沽酒家」,可以看到诗人发表了诗词动态,仿佛诗人就活着我的生活中。实际上是系统推荐了一首诗词,我想,当一个人想把一首诗词分享给别人和诗人创作这诗词后想分享给别人的心情应该是一样的吧。
一开始打算写个脚本随机时间发布随机诗词,但这样发布出来的诗词可能有错误或者根本不值得推荐,这就失去了推荐的意义。我现在的解决方案是写了个定时任务,服务器每天向我推送五首诗词,我从这五首诗词中挑选出我认为最值得推荐的那首,发布到应用首页,同时也会将这首诗发布到微信公众号。由于现在没有什么用户,一天发布一首诗词我感觉够用了。后续会增加其他发布渠道以提高首页诗词更新频率的。比如这次开发鸿蒙版本时,新增了用户可以推荐诗词、诗句的功能,我可以在用户的推荐列表中选择优质推荐发布到首页。
沽酒家×笔记,最开始打算做诗词评论或鉴赏的,但考虑到用户生成内容(UGC)限制,后来改为笔记了,用户的笔记仅自己可见,当然用户还是可以将笔记分享给朋友的。
沽酒家×漫游,即随机诗词功能,后续会调整为沉浸式随机诗词,并能选择随机范围,比如推荐诗词,收藏诗词,指定诗人等。
沽酒家×分享,提供诗词分享、诗句分享和笔记分享。
沽酒家×创作,提供用户为诗人创作头像、主页背景图,为诗词配图等功能。希望用户能将对诗人、诗词的喜欢变成创作用起来。如果你是李白,你会用什么头像呢?实际上「沽酒家」的梅花 Logo 就是我在为苏轼创作头像时创作的。想到苏轼,我想到梅花的坚韧挺贴合苏轼的一生,于是我就画了梅花,画了之后觉得这梅花挺适合做应用的 Logo 的。
沽酒家×评分,提供了诗词评分功能,基于诗词评分将优秀的诗词推荐给更多人。
当然,一切还在路上,如果你有什么想法或问题欢迎与我交流。
几年前当我打算为这个应用起名和购买域名的时候,我想起了高三时在 QQ 空间写的一篇日志。在日志的结尾提到了「沽酒家」,我感觉挺合适的, 于是就用了这三个字作为应用名。
很多年过去,对于我而言,古诗词就是那沽酒处,可以为家。而未来,我希望借助鸿蒙的能力,可以“诗天下”。