我面临创建ICS文件的几个问题,该文件必须与多个客户端兼容,特别是iOS、Gmail、Outlook、Android和Windows Phone。在搜索时,我发现了2009年提出的建议标准,也就是RFC5546。我阅读了这个文档,并找到了一个非常有趣的点,可能可以解决我的问题。RFC5546第VEVENT日历组件的方法节解释了REQUEST和PUBLISH方法之间的区别。但是,有几个点对我来说并不是很清楚:
- 发布应该做什么?它应该添加一个新日历吗?它应该创建一个新日历(类似于Outlook或iOS),还是将事件添加到现有的用户日历中(类似于Gmail或Lightning)?编辑:请注意,日历作为附加到电子邮件的文件。
- 发布可以包含多个事件吗?根据文档和逻辑,是的,但Gmail仅添加列表中的第一个事件。 Lightning仅添加一个事件,然后显示804a0004错误。
- 请求应该如何工作?文档说明:
VEVENT | 1+ | 所有组件必须具有相同的UID。
这意味着日历可能会有多个VEVENT,但它们必须具有相同的UID。那么,客户端如何区分这些事件?实际上,我尝试过的任何客户端都无法区分使用相同UID生成的事件,但它们仅添加SEQUENCE最高的事件。从逻辑上讲,我不想在每次邀请时发送多个事件,但RFC允许我这样做(在我的案例研究中我想这样做),那么怎么办? - 对于请求,忘记语句
VEVENT | 1+ | 所有组件必须具有相同的UID。
,因此为ICS文件中的每个事件提供唯一的UID,Gmail和iOS添加文件中包含的所有事件,而Lightning和Outlook仅添加第一个。是否有一种方法来追求这条路线,还是因为不应该允许,我应该找到另一种方式? - 基本上,您建议如何使用单个ICS文件向用户日历添加多个事件,适用于我提到的平台?
发布的样本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