这话,似乎是一种暗示,就是还有其他的鸿蒙应用会上架。
我是有数据洁癖的,就是,数据能掌握在自己手中,就不会放在平台上,自从我搞了一个自己的服务器,并买了一个NAS,我就把很多数据都放在自己这里了。
日程是我认为比较重要的数据,但是我发现很多人并不重视,好在群晖的NAS有日历的功能,于是我就用这个日历来管理我的日程。之前在各类设备上使用都没问题,可是手机升级成为鸿蒙系统,竟然一个好用的CalDav客户端都没有,华为官方的那个,只能读取,并不能编辑,有点残废,后面实在忍不了,自己做一个吧。
于是就有了「同步日历」。自己用了一段时间,感觉还行,这里写篇文章介绍一下,也给有同样需求的朋友参考。
它到底是什么
一句话:面向鸿蒙(HarmonyOS NEXT)的 CalDAV 日历同步应用。
它不提供云端托管,也不需要注册任何账号。你把它连到你自己的 CalDAV 服务器上(群晖、Nextcloud、Radicale、Baïkal,或者任何支持标准 CalDAV 的服务),它就负责把日程同步下来、显示出来,再把你的修改推回服务器。数据自始至终在你的设备和你的服务器之间流动,中间没有第三个地方。
手机和平板都能装,源码是开放的。
几个特点
时间轴:日程不是列表,是时间
这是我做这个 App 最主要的原因。
大部分日历软件把一天的日程“一条一行”地列出来。这样能看清“有哪些事”,但看不清“什么时候、多长时间、跟什么撞上了”。比如上午十点你有个会,同时也约了一通电话,列表里它们就是相邻的两行,你得自己在脑子里换算时间才知道重了。
「同步日历」默认用一种我把它叫做时间轴的方式来画:
- 一条日程按真实时长画成一块竖着的色块,块越高,时间越长;
- 时间重叠的日程,会自动左右并排,各占一半宽度,不会互相盖住;
- 全天、跨天的日程单独画在时间轴上方,不跟日内日程混在一起;
- 如果是“今天”,刻度上还有一条红色的当前时刻线,随时间自动往下走,一眼就知道现在进行到哪、下一件事还有多久。
色块的颜色取自所属日历本的默认色,所以看一眼颜色就知道这条日程来自哪个本。刻度范围默认是 8:00 到 18:00,如果某天在 8 点前或 18 点后有日程,才会把那段刻度一并显示出来——这样即使一天只有一两件事,也不会只剩短短的一条刻度。
如果你就是想快速扫读、或者日程标题特别长,可以在「设置 → 日程显示方式」里一键切成列表方式:同一天的日程改成逐条排列,不受时间刻度约束,长标题不容易被挤成省略号。
两种方式共用同一套数据和操作,切换只改变“怎么画”,不会动到任何日程。而且这个开关是全局的,主界面和桌面卡片会一起生效。
可选地“镜像”到系统日历
这里要解释一个我这边的取舍。
鸿蒙系统里有些入口——比如小艺、桌面上的系统日历卡片、手表、负一屏——它们只认系统日历,不认第三方 App 自己存的日程。也就是说,你在这个 App 里安排得再清楚,小艺也看不见。
所以「同步日历」做了一个可选的日历镜像:开启后,把你选中的日历本写进系统日历里一个由本应用创建的独立账户,这样上述那些系统入口就都能看到你的日程了;每个日历本保持各自的颜色,彼此分得清。系统日历里的改动,也会在下次同步时回读、写回你的 CalDAV 服务器,形成闭环。
这个功能默认是关闭的,需要你自己在设置里打开;打开时会单独申请“写入日历”权限。不想要了可以随时关掉,并且一键清除已经镜像出去的内容。
四张服务卡片
不看手机也能知道今天有什么安排:2×2 今日速览、2×4 正在进行、4×4 今日时间轴、6×4 全天时间轴,四种尺寸。其中 4×4 和 6×4 会在桌面上画一个迷你时间轴,冲突日程左右并排、还有当前时刻的红线,支持前后翻页。
后台同步
鸿蒙出于省电考虑,不允许普通应用在后台常驻并高频轮询,这一点我完全理解,也不打算跟系统对着干。所以用的是组合方案:前台按间隔自动同步 + 后台由系统定时唤起同步 + 回到前台/网络恢复时立刻补一次。
后台那条通道受系统省电策略约束(最短大约 2 小时一次,应用使用越频繁间隔越接近这个下限),需要在设置里把「后台自动同步」打开。老实说,如果你的场景是“日程变了要马上知道”,任何系统的普通应用都做不到,除非走厂商的推送服务——而我做这个 App 的出发点之一,恰恰是不依赖厂商云。
为了能最大限度的成功在后台同步数据,使用了卡片自带的刷新功能,每30分钟刷新一次,这样,如果你在桌面上放了一个卡片,那么就会每30分钟更新一次同步。
关于隐私
这部分我想说得具体一点,免得空喊口号:
- App 没有自己的服务器,开发者无法访问你的日程内容;
- CalDAV 的账号密码用 AES-256-GCM 加密后存在本机,密钥由系统硬件密钥库(HUKS / TEE)生成和保管、不可导出,只在同步时临时解密;
- 权限只申请功能必需的:读取日历、位置(都是只在前台用);“写入日历”只在你主动开启镜像时才申请,而且只写本应用自己创建的那个账户,不会动系统日历里其它任何内容;
- 没有集成任何第三方统计、广告或数据采集 SDK,代码完全开源,欢迎审计。
最后
这个 App 已在华为应用市场可以下载,源码也放在我自己的代码库上。
如果你也有自己的 CalDAV 服务器,或者只是不想把日程交给别人的云,欢迎试试看。用着有问题、或者有什么功能是你特别想要的,可以到官网的反馈页留言,或者给我发邮件。
- 官网:https://synccalendar.yangyq.net/
- 华为应用市场:https://appgallery.huawei.com/app/detail?id=synccalendar.yangyq.net
- 开源仓库:https://code.yangyq.net/laoyang/SyncCalendar
- 使用帮助:https://synccalendar.yangyq.net/uh.html
本人承诺,该软件,永久开源免费,永远不会有广告,永远不会搜集用户任何数据。
如有疑问,可以留言。


