同步 iCloud (云上贵州)日历

作为一个 Android + Apple + Windows 用户,寻找跨平台数据同步方案一直是一大难题,日历也不例外。纵观全局,日历同步服务倒也不少,比如 Google、Outlook 和 iCloud 等,但 Google 国内根本连不上,Outlook 托微软的尿性也不稳定,我这次又懒得自己部署一个,此时 iCloud 就成为了一个好选择。

iCloud 使用的也是通用的 CalDAV 协议,然而 iCloud 并没有一个开放的 CalDAV 配置指引,甚至连服务器都不给。手动配置也不难,要配置一个 CalDAV 客户端,一般需要服务器地址、用户名和密码。用户名就是你的 iCloud 邮箱地址,即 xxx@icloud.com。

macOS 上并不支持授权 CalDAV
macOS 上并不支持授权 CalDAV

客户端支持情况

有的日历客户端需要手动配置服务器地址,但有的不用。但除了 iOS 和 macOS 系统自带的日历客户端,其他大部分都需要获取 App 专用密码。

以下是我使用过的几个客户端,以及它们对手动配置服务器地址的需求情况:

  • iOS、macOS 等苹果第一方客户端:当然不需要
  • MIUI 日历:不需要(不含 HyperOS)
  • Windows 日历:不需要
  • Thunderbird:需要*

* 可以使用 TbSync 插件同步国际版 iCloud,但不适用于云上贵州

如下图,需要手动填入“位置”的即为需要获取服务器地址。

Thunderbird 创建新日历
Thunderbird 创建新日历

获取密码

众所周知,仅凭 Apple ID 和其密码当然过不了二步验证,验证码都没地方输。好在可以创建 App 专用密码。

Apple ID 管理页面 的下方找到 “App 专用密码”,创建一个,然后暂存下来,这个密码之后不会再出现。每个专用密码都等效,所以建议对每个应用使用不同的专用密码。

App 专用密码
App 专用密码

获取服务器地址

方法一:分析请求

苹果没有给服务器地址,但网络上有现成的获取方法,如 这个。但是已经过去了五年,在云上贵州的环境中又有点不同。长话短说,就是把 icloud.com 换成 icloud.com.cn,然后自己摸索起来应该也不难。

仿照那个教程的获取方法,iCloud 云上贵州的 CalDAV 服务器地址格式为:

text
1
https://<server-id>-caldav.icloud.com.cn/<user-id>/calendars/<calendar-id>/

其中:

  • <server-id> 是数字和字母混合的字符串,我的是 4 位;
  • <user-id> 是一串数字,我的是 11 位;
  • <calendar-id> 是一个用 - 分隔的、全部大写的 UUID。

需要注意,一个 CalDAV 地址对应一个日历,如果有多个日历必须在下面的步骤中重复操作。

现在打开你的 iCloud 网页版,打开浏览器的开发者选项-网络,然后在日历页面双击任意一个事件,进入详情。

在开发者选项中过滤“XHR”请求,然后找到传输这个事件详细信息的 GET 请求,例如下图:

对应请求

找到这个请求 URL,它大概是以下格式:

text
1
https://<server-id>-calendarws.icloud.com.cn/ca/eventdetail/<calendar-id>/<event-id>?clientBuildNumber=<some-random-text>&clientId=<some-random-text>&clientMasteringNumber=<some-random-text>&clientVersion=<some-random-text>&dsid=<user-id>&lang=<some-random-text>&requestID=<some-random-text>&usertz=<some-random-text>

或许你得到的 request param 会有所不同,但只要能找出你链接中的对应位置,提取出上面提到的三个 ID 就行了。如果发现提取不出来,请评论。

将上面三个 ID 填入上面的 CalDAV 服务器地址中,就可以得到你的 CalDAV 服务器地址了。

方法二:MIUI 日历

更新:HyperOS 的日历已经去掉 iCloud 登录功能。

如果你恰好有一台小米手机,那么可以直接在 MIUI 日历中添加 iCloud 日历,MIUI 会自动获取服务器地址,也能正确处理云上贵州链接。在日历详细信息页面,你就可以提取出对应的日历地址。

MIUI 日历可以正确提取链接
MIUI 日历可以正确提取链接

方法三:工具提取

可以试一下以下的工具(未经验证):

许可证:CC BY-SA 4.0
最后更新于 Dec 08, 2023 23:37 +0800