4

我正在为 Google 日历集成创建一个应用程序。当有人手动更改 Google 日历事件时,我正在尝试从 Google 获取通知。因此,在 Google 和我的应用程序之间创建了一个通道。现在的问题是,当 google 将响应标头发送到我的重定向 URI 时,我们没有任何描述它们在哪里更改日历。请查看我们将收到的回复

POST https://mydomain.com/notifications // Your receiving URL.
Content-Type: application/json; utf-8
Content-Length: 0
X-Goog-Channel-ID: 4ba78bf0-6a47-11e2-bcfd-0800200c9a66
X-Goog-Channel-Token: 398348u3tu83ut8uu38
X-Goog-Channel-Expiration: 1367869013915
X-Goog-Resource-ID:  ret08u3rv24htgh289g
X-Goog-Resource-URI: https://www.googleapis.com/calendar/v3/calendars/my_calendar@gmail.com/events
X-Goog-Resource-State:  exists
X-Goog-Message-Number: 10

那么任何人都可以指导我如何获得事件发生变化的描述。

4

2 回答 2

3

您需要进行增量同步(请参阅之前的 SO 答案)。创作者自己根据我的口味稍作修改:

应用程序需要做的第一件事是获得新的推送功能,即订阅感兴趣的日历。当日历更改时,Google 会通知您的应用,并且该应用会调用 API 以获取更新。

例如,假设您有一个日历 my_calendar@my-host.com。您的应用程序托管在具有 my-host.com 域的服务器上,并且应将推送通知传送到 HTTPS 网络挂钩https://my-host.com/notification

每次 my_calendar@my-host.com 更改时,Google 日历服务器都会在https://my-host.com/notification触发 web-hook 回调。收到回调后,应用程序需要进行增量同步

于 2015-04-06T03:53:07.407 回答
1

这是最终且正确的回复(推送通知),或者至少我收到的回复完全相同。我建议您将上次同步日期与频道数据一起保存,并且每次收到此类通知时,您都会调用 Google API 并请求自上次同步以来已更改的事件。我唯一的问题是缺少一件重要的事情——谷歌服务器时间。我的服务器上的时间与谷歌上的时间不完全相同,我必须在发送同步请求之前对 updateMin 参数进行调整(所以它不是简单的“now()”)。在您获得更新的事件后,不要忘记再次保存上次同步日期 :)

于 2013-09-13T08:30:03.727 回答