同步 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
最后更新于 2026 年 1 月 17 日 23:32