我面临与创建必须与多个客户端兼容的 ICS 文件相关的几个问题,尤其是iOS
、Gmail
、和. 谷歌搜索,我发现了 2009 年提出的标准,即RFC5546。我通读了这份文档,发现了一个非常有趣的观点,并且可能会解决我的问题。VEVENT 日历组件的方法部分解释了方法 REQUEST 和 PUBLISH 之间的区别。但是,有几点我不是很清楚:Outlook
Android
Windows Phone
- PUBLISH 应该怎么做?它应该添加一个新日历吗?它应该创建一个新日历(如在 Outlook 或 iOS 中)还是应该在现有用户日历中添加事件(如在 Gmail 或 Lightning 中)?编辑:将日历记为电子邮件的附件。
- PUBLISH 可以包含多个事件吗?从文档来看,从逻辑上讲,是的,但是 Gmail 然后只添加列表的第一个事件。Lightning 仅添加一个事件,然后给出 804a0004 错误。
- REQUEST 应该如何工作?该文件指出:
VEVENT | 1+ | All components MUST have the same UID.
这意味着一个日历可能有超过 1 个 VEVENT,但它们必须具有相同的 UID。那么,客户端如何区分这些事件呢?事实上,我尝试过的任何客户端都无法区分使用相同 UID 生成的事件,但它们只添加具有最高 SEQUENCE 的事件。从逻辑上讲,我不想为每个邀请发送多个事件,但 RFC 允许我这样做(在我的案例研究中我想这样做),那怎么做? - 使用 REQUEST,忘记语句
VEVENT | 1+ | All components MUST have the same UID.
,因此为 ICS 文件中的每个事件提供唯一的 UID,Gmail 和 iOS 添加文件中包含的所有事件,而 Lightning 和 Outlook 仅添加第一个事件。有没有办法走这条路,或者既然不应该被允许,我应该找到另一条路? - 基本上,您如何建议继续使用单个 ICS 文件将更多事件添加到我提到的平台的用户日历中?
PUBLISH 的示例 ICS:
BEGIN:VCALENDAR
PRODID:-//prodid//product//IT
VERSION:2.0
METHOD:PUBLISH
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:uid1
DTSTAMP:20130515T121437Z
DTSTART:20130619T205000
DTEND:20130619T215000
DESCRIPTION:Desc 1
SUMMARY:Sum 1
LOCATION:location
ORGANIZER:mailto:organizer@somedomain
SEQUENCE:1
STATUS:CONFIRMED
END:VEVENT
BEGIN:VEVENT
UID:uid2
DTSTAMP:20130515T121437Z
DTSTART:20130719T205000
DTEND:20130719T215000
DESCRIPTION:Desc 2
SUMMARY:Sum 2
LOCATION:location
ORGANIZER:mailto:organizer@somedomain
SEQUENCE:1
STATUS:CONFIRMED
END:VEVENT
END:VCALENDAR
请求样本:
BEGIN:VCALENDAR
PRODID:-//prodid//product//IT
VERSION:2.0
METHOD:REQUEST
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:uid1
DTSTAMP:20130515T121437Z
DTSTART:20130619T205000
DTEND:20130619T215000
DESCRIPTION:Desc 1
SUMMARY:Sum 1
LOCATION:location
ORGANIZER:mailto:organizer@somedomain
ATTENDEE;RSVP=TRUE;CN=attendee cn:mailto:attendee@email
SEQUENCE:1
STATUS:CONFIRMED
END:VEVENT
BEGIN:VEVENT
UID:uid2
DTSTAMP:20130515T121437Z
DTSTART:20130719T205000
DTEND:20130719T215000
DESCRIPTION:Desc 2
SUMMARY:Sum 2
LOCATION:location
ORGANIZER:mailto:organizer@somedomain
ATTENDEE;RSVP=TRUE;CN=attendee cn:mailto:attendee@email
SEQUENCE:1
STATUS:CONFIRMED
END:VEVENT
END:VCALENDAR