作为一个 Android + Apple + Windows 用户,寻找跨平台数据同步方案一直是一大难题,日历也不例外。纵观全局,日历同步服务倒也不少,比如 Google、Outlook 和 iCloud 等,但 Google 国内根本连不上,Outlook 托微软的尿性也不稳定,我这次又懒得自己部署一个,此时 iCloud 就成为了一个好选择。
iCloud 使用的也是通用的 CalDAV 协议,然而 iCloud 并没有一个开放的 CalDAV 配置指引,甚至连服务器都不给。手动配置也不难,要配置一个 CalDAV 客户端,一般需要服务器地址、用户名和密码。用户名就是你的 iCloud 邮箱地址,即 xxx@icloud.com。
客户端支持情况
有的日历客户端需要手动配置服务器地址,但有的不用。但除了 iOS 和 macOS 系统自带的日历客户端,其他大部分都需要获取 App 专用密码。
以下是我使用过的几个客户端,以及它们对手动配置服务器地址的需求情况:
- iOS、macOS 等苹果第一方客户端:当然不需要
- MIUI 日历:不需要(不含 HyperOS)
- Windows 日历:不需要
- Thunderbird:需要*
* 可以使用 TbSync 插件同步国际版 iCloud,但不适用于云上贵州
如下图,需要手动填入“位置”的即为需要获取服务器地址。
获取密码
众所周知,仅凭 Apple ID 和其密码当然过不了二步验证,验证码都没地方输。好在可以创建 App 专用密码。
在 Apple ID 管理页面 的下方找到 “App 专用密码”,创建一个,然后暂存下来,这个密码之后不会再出现。每个专用密码都等效,所以建议对每个应用使用不同的专用密码。
获取服务器地址
方法一:分析请求
苹果没有给服务器地址,但网络上有现成的获取方法,如 这个。但是已经过去了五年,在云上贵州的环境中又有点不同。长话短说,就是把 icloud.com 换成 icloud.com.cn,然后自己摸索起来应该也不难。
仿照那个教程的获取方法,iCloud 云上贵州的 CalDAV 服务器地址格式为:
|
|
其中:
<server-id>
是数字和字母混合的字符串,我的是 4 位;<user-id>
是一串数字,我的是 11 位;<calendar-id>
是一个用-
分隔的、全部大写的 UUID。
需要注意,一个 CalDAV 地址对应一个日历,如果有多个日历必须在下面的步骤中重复操作。
现在打开你的 iCloud 网页版,打开浏览器的开发者选项-网络,然后在日历页面双击任意一个事件,进入详情。
在开发者选项中过滤“XHR”请求,然后找到传输这个事件详细信息的 GET 请求,例如下图:
找到这个请求 URL,它大概是以下格式:
|
|
或许你得到的 request param 会有所不同,但只要能找出你链接中的对应位置,提取出上面提到的三个 ID 就行了。如果发现提取不出来,请评论。
将上面三个 ID 填入上面的 CalDAV 服务器地址中,就可以得到你的 CalDAV 服务器地址了。
方法二:MIUI 日历
更新:HyperOS 的日历已经去掉 iCloud 登录功能。
如果你恰好有一台小米手机,那么可以直接在 MIUI 日历中添加 iCloud 日历,MIUI 会自动获取服务器地址,也能正确处理云上贵州链接。在日历详细信息页面,你就可以提取出对应的日历地址。
方法三:工具提取
可以试一下以下的工具(未经验证):