3

我面临与创建必须与多个客户端兼容的 ICS 文件相关的几个问题,尤其是iOSGmail、和. 谷歌搜索,我发现了 2009 年提出的标准,即RFC5546。我通读了这份文档,发现了一个非常有趣的观点,并且可能会解决我的问题。VEVENT 日历组件的方法部分解释了方法 REQUEST 和 PUBLISH 之间的区别。但是,有几点我不是很清楚:OutlookAndroidWindows Phone

  1. PUBLISH 应该怎么做?它应该添加一个新日历吗?它应该创建一个新日历(如在 Outlook 或 iOS 中)还是应该在现有用户日历中添加事件(如在 Gmail 或 Lightning 中)?编辑:将日历记为电子邮件的附件。
  2. PUBLISH 可以包含多个事件吗?从文档来看,从逻辑上讲,是的,但是 Gmail 然后只添加列表的第一个事件。Lightning 仅添加一个事件,然后给出 804a0004 错误。
  3. REQUEST 应该如何工作?该文件指出:VEVENT | 1+ | All components MUST have the same UID.这意味着一个日历可能有超过 1 个 VEVENT,但它们必须具有相同的 UID。那么,客户端如何区分这些事件呢?事实上,我尝试过的任何客户端都无法区分使用相同 UID 生成的事件,但它们只添加具有最高 SEQUENCE 的事件。从逻辑上讲,我不想为每个邀请发送多个事件,但 RFC 允许我这样做(在我的案例研究中我想这样做),那怎么做?
  4. 使用 REQUEST,忘记语句VEVENT | 1+ | All components MUST have the same UID.,因此为 ICS 文件中的每个事件提供唯一的 UID,Gmail 和 iOS 添加文件中包含的所有事件,而 Lightning 和 Outlook 仅添加第一个事件。有没有办法走这条路,或者既然不应该被允许,我应该找到另一条路?
  5. 基本上,您如何建议继续使用单个 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
4

1 回答 1

1

关于 1)不清楚您如何将事件传达给客户端:是通过 iMIP(电子邮件)还是通过 HTTP URL?无论如何,您的问题没有正确答案:iTIP 是关于 iCalendar 数据的传输。

关于 2) 是的,您可以在 PUBLISH 流中包含多个事件

关于3):

iCalendar 对定期会议有一个例外的概念。这些异常由具有相同 UID 的 VEVENT 和指示应被视为异常的特定实例的 RECURRENCE-ID 表示。

因此,REQUEST 只能用于传输单个事件(只有一个 UID),但该事件本身可能表示为一组 VEVENT:一个用于 master(例如,每个星期五 10:00 开会),一个用于每个例外情况(例如 12 年 12 月 12 日星期五 09:00 除外)。

例如,参见https://www.rfc-editor.org/rfc/rfc5546#section-4.4.8中的最后一个事件

于 2013-05-16T16:10:37.523 回答