2013-08-19 20 views
4

我正在爲Google日曆集成創建應用程序。我試圖在任何人手動更改Google日曆活動時收到Google的通知。所以在Google和我的應用程序之間創建了一個渠道。現在的問題是,當谷歌發送響應頭到我的重定向URI,那麼我們沒有任何描述,他們是在哪裏更改日曆。請檢查的答覆,我們會得到來自Google關於推送通知的回覆

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/[email protected]/events 
X-Goog-Resource-State: exists 
X-Goog-Message-Number: 10 

因此可以在任何一些指導我怎樣才能得到說明,只要有一個變化的事件。

+1

那麼,X-Goog-Resource-ID沒有引用事件ID? – jtmoulia

+1

@jtmoulia不幸的沒有。請參閱下面的答案。總之,你需要做一個同步來獲得改變的事件。 – FullStack

回答

1

這是最終和正確的答覆(推送通知),或至少我收到完全一樣的。我建議您將上次同步日期與頻道數據一起保存,並且每次收到此類通知時,都會向Google API請求自上次同步後發生更改的事件。我唯一的問題是缺少一件重要的事情 - Google服務器時間。我的服務器上的時間與google上的時間不完全相同,我必須在發送同步請求之前對updateMin參數進行調整(因此它不是簡單的「now()」)。並且在您獲得更新事件後,不要忘記再次保存上次同步日期:)

+0

谷歌日曆API中是否有任何功能用於在一段時間內檢查更新的事件。 –

+1

不建議使用updatedMin。同步令牌(https://developers.google.com/google-apps/calendar/v3/sync)即將推出;) – luc

3

您需要執行增量同步(請參閱previous SO answer)。從the creators themselves根據我的口味略微修改:

應用程序需要做的第一件事是獲得新的推送功能是訂閱感興趣的日曆。當日歷發生變化時,Google會通知您的應用,應用會執行API調用以獲取更新。

舉一個例子,假設你有一個日曆[email protected]。您的應用託管在帶有my-host.com域名的服務器上,推送通知應發送到HTTPS Web掛鉤https://my-host.com/notification

每次[email protected]更改時,Google日曆服務器都會觸發Web - 掛鉤回調在https://my-host.com/notification。收到回調後,該應用需要執行incremental sync