我正在为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
所以有人可以指导我如何获得有关事件发生变化的描述。
答案 0 :(得分:3)
您需要进行增量同步(请参阅previous SO answer)。从the creators themselves根据我的口味略微修改:
应用程序需要做的第一件事是获得新的推送功能是订阅感兴趣的日历。当日历发生变化时,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触发网络勾回调。收到回调后,应用需要执行incremental sync。
答案 1 :(得分:1)
这是最终和正确的回复(推送通知),或者至少我收到完全相同的回复。我建议您将上次同步日期与频道数据一起保存,每次收到此类通知时,都会调用Google API,请求自上次同步后更改的事件。我遇到的唯一问题是缺少一件重要的事情 - 谷歌服务器时间。我的服务器上的时间与谷歌上的时间不完全相同,我必须在发送同步请求之前调整updateMin参数(因此它不是简单的“now()”)。在获得更新事件后,请不要忘记再次保存上次同步日期:)