我面临与创建ICS文件相关的几个问题,该文件必须与多个客户端兼容,尤其是iOS
,Gmail
,Outlook
,Android
和Windows Phone
。谷歌搜索,我发现了2009年提出的标准,即RFC5546。我仔细阅读了这篇文章,发现了一个非常有趣的观点,可以解决我的问题。第Methods for VEVENT Calendar Components节解释了方法REQUEST和PUBLISH之间的区别。但是,有几点我不太清楚:
VEVENT | 1+ | All components MUST have the same UID.
表示日历可能具有多于1个VEVENT,但它们必须具有相同的UID。然后,我如何区分这些事件?事实上,我尝试的客户端无法区分使用相同UID生成的事件,但它们只添加了SEQUENCE最高的事件。从逻辑上讲,我不希望每个邀请发送多个事件,但RFC允许我这样做(在我想要的案例研究中),那么如何?VEVENT | 1+ | All components MUST have the same UID.
,因此为ICS文件中的每个事件提供唯一的UID,Gmail和iOS会添加文件中包含的所有事件,而Lightning和Outlook仅添加第一个事件。有没有办法追求这条道路,或者因为不应该允许我找到另一种方式?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
REQUEST的样本:
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
答案 0 :(得分:1)
关于1)目前尚不清楚如何将事件传达给客户:是通过iMIP(电子邮件)还是通过HTTP URL?在任何情况下,您的问题都没有正确的答案:iTIP是关于iCalendar数据的传输。
关于2)是的,你可以在PUBLISH流中有多个事件
关于3):
iCalendar对定期会议有一个例外概念。这些异常由具有相同UID的VEVENT和表示将被视为异常的特定实例的RECURRENCE-ID表示。
因此,REQUEST只能用于传输单个事件(只有一个UID),但此事件本身可能表示为一组VEVENT:一个用于主控(例如每周五10:00开会)每个例外一个(例如,除了12月12日星期五,它将在09:00进行)。
中的最后一个事件