不同客户端的 CalDAV 协议同步和行为

CalDAV protocol synchronization and behavior of different clients

我目前正在尝试为系统实现一个“简单的”只读 CALDAV-interface。但是同步协议和 CALDAV-clients 让我有些头疼。

我使用的主要测试客户端是macos-calendar (sierra)。 初始握手(DAV 原理、日历查找)和初始数据加载正在运行。我收到一些 REPORT:calendar 查询请求。 问题是初始加载后的增量同步。有两种方法:

ios-Calendar 我面临另一个问题:

MKCALENDAR /services/cal/_userid/220EDB4A-F00C-41C9-B78F-10781BBA77E4/ HTTP/1.1 Host: 127.0.0.1:8003 Content-Type: text/xml User-Agent: iOS/10.0.1 (14A403) dataaccessd/1.0 <?xml version="1.0" encoding="UTF-8"?> <B:mkcalendar xmlns:B="urn:ietf:params:xml:ns:caldav"> <A:set xmlns:A="DAV:"> <A:prop> <B:calendar-free-busy-set> <NO/> </B:calendar-free-busy-set> <D:calendar-order xmlns:D="http://apple.com/ns/ical/">1</D:calendar-order> <A:displayname>Kalender</A:displayname> <B:calendar-timezone>BEGIN:VCALENDAR ...deleted.... </B:calendar-timezone> <B:supported-calendar-component-set> <B:comp name="VEVENT"/> </B:supported-calendar-component-set> </A:prop> </A:set> </B:mkcalendar>

使用雷鸟闪电:

非常感谢任何提示!

这确实是一个相当宽泛的问题。但让我尝试解决一些问题:

Via WebSync-extension (REPORT:sync-collection and sync-token prop) my main issue here is that provisioning the sync-token from the server is not trivial in my system

即使这对你来说很难,你也应该在这里尝试想出点什么。即使这意味着在服务器上存储一些额外的信息。同步收集效率更高。 (想法:也许你至少可以在实际删除某些内容时设置一个标志,然后才使同步令牌过期?)

Via basic protocal synchronization (respond to REPORT:calendar-query and propfind (depth=1))

calendar-range-queryPROPFIND 哪个?完全不同的东西...

this is also working already in principle for new and changed data. But the macos-calendar doesnt remove items which are not part the collection response (propfind with depth=1).

如果我们谈论的是日历范围查询,客户端无法主动删除项目,因为它不知道它们是否刚刚离开范围(相对于被删除)。

对于 PROPFIND 它应该这样做。如果您有证据证明它没有,也许可以创建另一个包含所有相关详细信息的问题。

With ios-Calendar i face another issue: ... a MKCALENDAR request is coming ...

这可能意味着它找不到默认的日程安排日历,根本没有日历,none 具有适当的组件类型 属性。或者对于待办事项(提醒应用程序,同一个帐户)都是一样的。 MKCALENDAR 的有效载荷是多少? 难以诊断 w/o 详细信息,如果您无法弄清楚,请就此提出一个具体问题,并提供所有相关详细信息(例如,您发送的 XML 以响应主页查询)。

Thunderbird Lightning

对此不能说太多,可能在很大程度上取决于版本和您使用的扩展。据我所知,许多人使用 ScalableOGo Thunderbird 扩展来获得正确的 Cal/CardDAV Thunderbird。

对于 Thunderbird/Lightning,您可能需要在高级配置编辑器中打开 calendar.debug.logcalendar.debug.log.verbose,然后重新启动。您可以在 Options > Advanced > General > Config Editor 中找到它。这将为您提供更详细的 http 请求和有关失败内容的信息。您还可以连接 remote debugger and look at the network monitor, or set breakpoints in the code.

Thunderbird/Lightning 请注意,我们混合使用了 webdav-sync 草稿的先前版本和当前版本。我不能从错误消息中说出太多,因为它非常笼统,但看起来结果中确实有一些意想不到的东西。

也许比较现有服务器(如sabre/dav)和客户端之间的握手是有意义的,然后看看你和他们的通信之间的区别在哪里。

此外,您可能对 CalDAVTester from Apple, which checks server interoperability. Note however that it does contain various apple specific tests. The folks at CalConnect 正在与 Apple 合作以使其更普遍可用并拆分特定于 Apple 的测试感兴趣。鉴于您的服务器是只读的,不要指望一切正常,但您可以寻找修复特定测试的方法。