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