前言
最近在实现一个事务同步的软件功能,但前提是尽可能的避免用户安装新的应用,也尽可能的避免使用微信小程序或让用户提供隐私数据,最最最还要注意的是跨平台的兼容性,思来想去也就是各个设备上的邮箱功能了,那个玩意的通用性是真的强。
现在大多数设备上的邮件同步系统都支持IMAP、POP3、Exchange服务,而Exchange服务可以同步日历,那么该服务是如何实现的呢?为了开发我们要进一步摸清其中的原理。
让我们先通过一个图纵观系统结构
ExchangeActiveSync协议
- 标准:该协议不是国际标准,但却是事实上的协议,该协议的技术来源于微软
- 功能描述:该协议可实现从服务器到客户端的电子邮件,联系人,日历,任务和便笺的同步(国内厂商大部分都只看中邮件同步的功能)
- 基础协议:XML,HTTP,HTTPS
- 支援软件:谷歌家Gmail、微软家Outlook、腾讯家的Foxmail等
- 协议应用:可引导用户向Gmail或者Outlook中添加日程订阅,并将邮件账户通过Exchange
WebDav
- 标准:RFC 4918
- 功能描述:基于HTTP的数据操作协议,提供分布式创作与版本控制功能。简单来说就是允许客户端发布、锁定和管理服务器中的部分资源,而且该操作可以是有权限的、多用户的。
- 基础协议:基于HTTP1.1的扩展
- 支援软件: Dropbox、坚果云、OwnCloud等服务
- 协议应用:该协议常见于网盘系统(服务器)并被常见的操作系统所支持(客户端),允许用户将云盘以网络驱动器的形式挂载到客户端系统上,可自由的上传、修改和下载文件资源。该协议是CalDav协议的基础。
WebCal
- 标准:该协议不是国际标准,但却是事实上的标准
- 功能描述:用于访问iCalendar文件的非官方统一资源标识符(URI)方案。简单来说就是一种自定义的URL标识,但是该标识被不少软件所认可,通过该协议可以访问服务器上的日程资源,也就是访问iCalendar文件。
- 基础协议:未知
- 支援软件:Google Calendar、Microsoft Outlook、Mozilla Lightning
- 协议应用:该标准最早被设计用于苹果的iCal应用程序,应用程序发起的请求以
webcal://
为开头,被服务器上的外部协议处理程序所捕获,并通过WebDav协议操作iCalendar文件。这种非国际标准的请求可能会被不兼容的应用程序拦截并认定为下载iCalendar文件(后缀为.ics
)。所以综合来说,基本上可以认为下载*.ics
文件并导入应用程序和直接使用链接webcal://xxx.xxx.xxx/....
导入的是相同的行为。
CalDav
- 标准:RFC 4791
- 功能描述:远程日程信息访问(共享)协议。允许客户端访问共享服务器上的日程信息。简单来说就是允许具有权限的用户访问一份共享的日程。
- 基础协议:扩展了WebDav协议的规范, 并使用iCalendar格式的数据
- 支援软件:CalDav服务器与操作系统(国内安卓基本都不支持)
- 协议应用:该协议被各大邮件系统所支持,利用该协议可引导用户订阅日程信息流,并将日程信息通过邮箱帐号同步至绑定的设备中。但是,国内的邮件系统基本不支持日程的订阅服务属于阉割版本,应有条件的采用国际大厂的日程订阅服务。这种日程订阅的方案虽然没有即时通讯那么快,但是和邮件的同步速度旗鼓相当。
CardDav
- 标准:RFC 6352
- 功能描述:远程地址簿信息访问(共享)协议。允许客户端访问共享服务器上的联系人数据。简单来说就是允许具有权限的用户访问一份共享的地址簿。
- 基础协议:扩展了WebDav协议的规范, 并使用vCard格式的数据
- 支援软件:Apple Contacts、Outlook CalDav Synchronizer、GMail
- 协议应用:该协议可认为是CalDav协议的孪生兄弟,一般支持CalDav同步的邮箱系统都可以支持CardDav的同步。
iCalendar
- 标准: RFC 5545
- 功能描述:日程信息文件交换格式。允许用户通过各种方法共享或发送此格式的文件,将会议请求和任务发送给其他用户。简单来说就是规范的将"时间、地点、人物"等日程中的要素写入文件中,方便多用户之间的信息传输。
- 基础协议:媒体类型应为text/calendar,扩展名为
*.ics
- 支援软件:好多好多,但是兼容性各有千秋
- 协议应用:可以引导用户下载ics文件并导入在邮件系统的日程订阅中已完成日程信息的数据同步,不过能用webcal链接时还是链接更妙一些。建议使用时多关注一下文件协议的格式版本,部分不兼容的版本可能会被订阅程序所拒绝。
以上内容都是我个人对于协议的理解与认知,部分信息来源于维基百科,如果有什么错误欢迎指正。