【发布时间】:2018-10-29 13:30:46
【问题描述】:
我正在尝试创建一个 ICS 文件以通过电子邮件将事件添加到 Google 日历。最后,日历将从桌面应用程序发送给多个用户。理想情况下,如果事件发生变化,我希望能够修改日历(只是事件时间,我忽略了取消的事件)
这是我的 ICS 文件
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//MY COMPANY//Calendar//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
UID:shift-439-emp-128@mycompany.com
DTSTART:20180604T090000
DTEND:20180604T153000
DTSTAMP:20180519T081800
SUMMARY:Morning shfit
LOCATION:Morning Location
DESCRIPTION:Morning shift
END:VEVENT
BEGIN:VEVENT
UID:shift-446-emp-128@mycompany.com
DTSTART:20180605T153000
DTEND:20180605T233000
DTSTAMP:20180519T081800
SUMMARY:Night shift
LOCATION:
DESCRIPTION:Night
END:VEVENT
END:VCALENDAR
当我将该文件通过电子邮件发送到我的 gmail 帐户时,我可以看到一个“添加到 Google 日历”按钮,我可以使用该按钮将事件添加到我的主日历中。
现在,假设事件时间发生了变化。
问题:如何使用新时间创建新的 ICS 文件,以便在 google 日历中修改现有事件?
我将 UID 用于事件,以便 google 不会创建重复条目。但是,当我通过电子邮件发送第二个带有修改事件(带有 uid)的 ics 文件时,“添加到谷歌日历”按钮不会出现。如果我尝试从谷歌日历导入功能手动导入 ics 文件,则会收到此错误消息
无法上传您的活动,因为您在目标日历上没有足够的访问权限。
如果我每次都设置不同的 UID,导入过程将起作用,但会创建重复条目。
我也尝试使用REQUEST 代替PUBLISH 方法
谢谢
【问题讨论】:
-
如果您想要这种控制,您最好通过 API 以编程方式与日历数据进行交互,而不是依赖电子邮件界面。 developers.google.com/calendar
-
是的,但是要为其他用户添加/修改日历中的事件,我需要他们的 API 密钥。目前,电子邮件被发送到桌面应用程序
-
啊好的。您只提到通过电子邮件发送您自己的 gmail 帐户。也许在这种情况下,您最好在 URL 上提供 ICS 提要,其他人可以订阅该提要。这样同步由他们自己的日历软件处理。我不知道,这取决于你的整体要求,我不太了解。无论哪种方式,我都不相信您可以通过电子邮件发送静态 ics 文件来实现这一点。
-
对于更新能力,导入是不好的 - 只是将事件数据添加到现有日历,用户可以覆盖 - 如果有更新的潜力,这通常没有帮助。'订阅'网址是更好 - 在接收应用程序中显示为单独的日历。最终会更新。然后,您必须具有相同的事件 UID 和 SEQUENCE 以指示该事件的最新更新。如果您正在修改重复事件的实例,您还需要一个 RECURRENCE-ID 来指示您正在修改哪个实例。谷歌 RFC5545 和序列
-
谢谢你们两位的cmets。我将调查 ICS 提要
标签: email google-calendar-api icalendar