作为一个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会自动获取服务器地址,也能正确处理云上贵州链接。在日历详细信息页面,你就可以提取出对应的日历地址。
方法三:工具提取
可以试一下以下的工具(未经验证):