为什么我的.ics文件在打开时没有注册取消事件?

时间:2016-10-24 21:01:13

标签: calendar google-calendar-api icalendar

我们的应用程序以编程方式为事件吐出.ics文件。这是在最初确认事件时,通过电子邮件发送的初始.ics文件的样子:

BEGIN:VCALENDAR
BEGIN:VTIMEZONE
METHOD:REQUEST
TZID:America/New_York
TZURL:http://tzurl.org/zoneinfo-outlook/America/New_York
X-LIC-LOCATION:America/New_York
END:VTIMEZONE
BEGIN:VEVENT
UID:test-7-oct-24-2016-uid
DTSTAMP:20161024T181901
ORGANIZER;CN=Host:mailto:fake1@email.com
ATTENDEE;CN=Guest:mailto:fake2@email.com
DTSTART;TZID=America/New_York:20170103T073000
DTEND;TZID=America/New_York:20170103T093000
SUMMARY:Insert random summary
GEO:0;0
DESCRIPTION:Random event
LOCATION:Random Location
SEQUENCE: 0
STATUS: CONFIRMED
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR

这似乎随机提示Apple日历上的菜单,无论我是否要将该事件添加到我的日历中。有时它会显示提示,有时则表示不提示。不确定为什么会这样。

无论如何,我们会在事件取消时发出第二个.ics文件:

BEGIN:VCALENDAR
BEGIN:VTIMEZONE
METHOD:CANCEL
TZID:America/New_York
TZURL:http://tzurl.org/zoneinfo-outlook/America/New_York
X-LIC-LOCATION:America/New_York
END:VTIMEZONE
BEGIN:VEVENT
UID:test-7-oct-24-2016-uid
DTSTAMP:20161024T181901
ORGANIZER;CN=Host:mailto:fake1@email.com
ATTENDEE;CN=Guest:mailto:fake2@email.com
DTSTART;TZID=America/New_York:20170103T073000
DTEND;TZID=America/New_York:20170103T093000
SUMMARY:Insert random summary
GEO:0;0
DESCRIPTION:Random event
LOCATION:Random Location
SEQUENCE: 1
STATUS: CANCELLED
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR

这不会在我的日历应用中取消该事件。不确定这里发生了什么。有没有人知道我在这个ics文件中出错了什么?

2 个答案:

答案 0 :(得分:2)

指示iTIP消息类型的METHOD属性包含在VTIMEZONE定义中,因此最终可能被客户端完全忽略。 METHOD应出现在之前 VTIMEZONE。

换句话说,你应该:

BEGIN:VCALENDAR
METHOD:REQUEST
BEGIN:VTIMEZONE
...

而不是

BEGIN:VCALENDAR
BEGIN:VTIMEZONE
METHOD:REQUEST
...

对于您的取消也是如此。

当然可能还有其他问题。

答案 1 :(得分:0)

如果我们引用Using the iCalendar Format.ics文件中保存的事件仍应上传到您的日历中,以便能够正确访问它们。如此documentation中所述,您可以通过将iCalendar文件复制并粘贴到文本文档中,将其直接导入日历。使用“.ics”扩展名保存文档,然后将其上传到您的日历中。

此外,根据此forum,Google日历仍然没有直接从.ics文件处理事件的功能。如果您希望在Google日历中添加此功能,则可以提交功能请求here

但是,您也可以选择在此post中尝试给定的解决方法,看看它是否适合您。