2014年4月2日

push notification - android client 以 GCM 實現 (一)


app 發布後,想要從 server 發訊息給 client 時,該怎麼做呢?一直保持 server 與 client 間的連線?若 server 只是偶而或幾天才發送一次訊息,這樣做不僅耗電還浪費資源,重點是很可能被使用者移除!但是不保持連線,那要如何讓 server 主動將訊息傳給 client 呢?下面就來介紹一下 Android 如何透過 GCM 讓 server 將訊息傳送給 client

GCM ( Google Cloud Messaging for Android ) 簡介

  • 由 Google 提供的一個 service
  • C2DM ( Android Cloud to Device Messaging ) 於 2012/6/26 正式棄用,由 GCM 取代
  • 主要用來幫助 server push message to android device
    ※ C2DM 改成 GCM,取得 API Key 流程可參考 Google 雲端通訊 (GCM)
  • GCM 節流機制:
    • 一個 client 在 GCM 上訊息,最多可保留 100 則 ( key - value )
    • 若 client 四周內都沒有連上 GCM server ,則 GCM 上訊息將被丟棄
    • 一次發送訊息給太大量的 Android device,訊息就會直接被丟棄,建議一次最多發送給 100 個 client

GCM 硬體需求及限制

  • android 2.2 ( 含 ) 以上系統
  • 推送的訊息大小不可以超過 4kb
  • Android Devices 必須有安裝 Google Service Framework ( 安裝 Google Play Store 時會自動安裝)
  • 如果你的 Android Device 目前 run 的版本低於 4.0.4 的話,你就需要申請一個 Google Account

GCM 原理

  1. client 對 GCM server 註冊取得 regId,regId 長達 162 字元,建議存放 regId 的欄位長度最好大於 162 字元,避免未來 regId 長度增加
  2. client 將 regId 傳給自己的 server 存起來
  3. server 從資料庫中取出 client regId,並將 regId 與訊息以 JSON 格式傳送至 GCM server
  4. client 註冊接收 GCM broadcast
  5. GCM server 將訊息以 broadcast 傳送至 client
  6. client 做自訂的工作

GCM 註冊流程

(1) 建立一個Google Account

※ 注意,請先記住 project number,之後 client 註冊,server 傳訊息都需要使用他
(4) 切到 APIs 頁籤,將 Google Cloud Messaging for Android 服務打開

※ 注意,請先記住 server api key,之後 server 傳訊息都需要使用他
※ Server 與 Client 實作部分請參考下篇 push notification - android client 以 GCM 實現 (二)

References

範例下載  ( 測試時請記得將 ConfigUtil 中 SERVER_URL, SENDER_ID, API_KEY 換掉 )