Alex Dai Playground

[GCM] - Google Cloud Messaging

| Comments

Google Cloud Messaging

GCM推播 基本流程
  1. 使用 senderID 向 GCM 註冊你的 App (裝置第一次執行App時觸發)
  2. GCM 會回傳 registration id (162字元)
  3. 將 registration id 儲存至自己的 App Server
  4. 透過 App Server 發送要推播的訊息與 registration id 到 GCM
  5. GCM 接收到後,發送推播到對應 registration id 的裝置

客戶端 Client Side
  • senderID:
    • 發送者ID (google console project number).
    • 最多 100 的, 以逗號分隔 : 78945,63215.
伺服器端 Server Side (HTTP Connection Server)
  • registration_ids:
    • 要發送的裝置 reg_id
    • 格式: String or Array
    • 發送數量限制: 最多1000 組
  • collapse_key:
    • This parameter identifies a group of messages
    • 用意是避免發送太多相同的訊息,當裝置上線或恢復成可接收狀態 (與 delay_while_idle 有關)
    • 不保證發送順序
    • GCM server 最多儲存 4組, 如果超過不保證哪個會被忽略
  • delay_while_idle: 當設為true只有裝置為上線(非鎖屏狀態)才會發送推播. (預設為 false)
  • time_to_live:
    • 單位與範圍: 0 ~ 2,419,200(4週) 秒. (預設為 4週)
    • 當裝置為離線狀態時 GCM 所保留推播訊息的時間.
    • 通常會與 delay_while_idle: true 搭配.
    • 例如 發送推播時 time_to_live: 60 & delay_while_idle: true, A裝置剛好在關機、飛行模式、沒網路的狀況下,60秒內連上網路一樣可接收到推播訊息.
    • IOS 裝置目前不支援
  • data: 發送的資料(JSON), 最大4KB
GCM Server

HTTP message response header

  • 200: 成功
  • 400: JSON 格式解析錯誤 or 資料內容有無效的欄位
  • 401: API Key 錯誤
  • 5xx: GCM server error

HTTP message response body

  • multicast_id: 推播 Unique ID
  • success: 推送成功的數量
  • failure: 推送失敗的數量
  • canonical_ids: 重複註冊裝置數量?
  • results
    • message_id: 推播訊息的 Unique ID
    • registration_id: 這個代表訊息已成功發出, 但客戶端的 reg_id 已變更 server 端需要更新, 否則訊息可能會被拒絕
    • error: 客戶端接收失敗時的資訊

ps: 當 failure & canonical_ids 為 0, 則不必判斷 , 否則 如果 message_id 有值 檢查是否有 registration_id, 有就代表 我們的 server 需要更新(把此 registration_id 取代掉舊的)

參考
https://developers.google.com/cloud-messaging/http-server-ref
http://lovelycateyes.blogspot.tw/2012/08/gcm-google-cloud-messaging-faq.html
http://blog.maxkit.com.tw/2014/04/push-notification-android-client-gcm_2.html

Comments

comments powered by Disqus