Android Push Notification - 推播通知訊息給Android客戶端


要如何開發出能接收Server通知訊息(如活動消息、聊天訊息)的Android App呢?Google提供了Google Cloud Messaging(GCM)服務,能將您想要推送給客戶端裝置的訊息交給GCM伺服器來處理,Google推播伺服器會將收到的訊息推播Android客戶端裝置,接收到訊息的裝置可以將訊息處理後並顯示在通知欄,達成通知使用者的目的。

Google Cloud Messaging 運作機制

使用GCM來實作Android推播功能,運作方式如下圖,可以分為三個部份:

Android Push Notification - 推播通知訊息給Android客戶端

一、註冊API Key(紫色部份)

如果要使用Google API,一定要先到Google Developers Console中拿到API Key。

若在Console上還沒有專案,必須先新增一個。

Android Push Notification - 推播通知訊息給Android客戶端

接著到這個專案中,將Google Cloud Messaging for AndroidAPI設定為啟用。

Android Push Notification - 推播通知訊息給Android客戶端

然後替這個專案加入一個能讓App Server使用的Public API Key,並將API Key存到App Server中,再將Client ID(或是Project number)存到要接收推播Android App中,作為Sender ID。

Android Push Notification - 推播通知訊息給Android客戶端

做這個部份的用意是要讓App Server有權限能夠存取Google伺服器,並且能夠使用GCM。將Client ID存入Android App中,是為了提供給下一個部份使用。

二、Android客戶端裝置註冊GCM(藍色部份)

為了使GCM能夠辨識出訊息要傳給哪些裝置,必須讓這些裝置先向GCM註冊。因此Android裝置必須提供Client ID(Sender ID)給GCM,來要求使用GCM的功能(提供Sender ID是為了要讓GCM知道是由哪個上個部份提到的Console專案所發出的通知訊息)。如果GCM同意讓Android裝置使用它的功能,會回傳一個獨特的,代表這個Android裝置的Registration ID。這個Registration ID應該要交由App Server來儲存,讓App Server知道底下有哪些Android裝置能夠進行訊息推播

三、App Server推播訊息給Android裝置(橘色部份)

一旦App Server有了第一部份和第二部份所拿到的Public API Key和Registration ID,就可以向GCM傳送要推播給指定Android裝置的訊息。GCM在接收到App Server傳來的訊息後,會去判斷傳入的Registration ID(s)對應到哪個(哪些)裝置,在不固定的時間內將訊息推送出去。換句話說,Android裝置並不一定會「立刻」收到App Server所發出的訊息。

事實上,Android裝置也可以傳送訊息給GCM,然後反推給App Server,只不過傳送的方式並非一般的HTTP,實際上也不是那麼常使用,所以就不針對這個部份討論。

實作支援GCM的App Server

要向GCM發送訊息,必須透過下面這個HTTPS連線網址:

在傳送Request的時候,Header必須包含以下屬性:

資料要以POST的方式傳送,資料格式須為Json,且Json格式如下:

發送給GCM Request後,GCM將回傳一個Json回來,格式如下:

success欄位為推播能夠成功的裝置數量,failure欄位為推播失敗的裝置數量。

PHP範例下載

實作支援GCM的Android Client

以下是實作GCM的Android Client,必須注意的項目:

以下是每個檔案中,需要新增或是修改的程式碼。

AndroidManifest.xml

permission

application

以上的「org.magiclen.gcmclient」記得改成自己的package名稱

MagicLenGCM.java

GcmBroadcastReceiver.java

使用MagicLenGCM可以很快地完成GCM註冊以及取得Registration ID的功能。在GcmBroadcastReceiver內可以使用MagicLenGCM的sendLocalNotification,將接收到的推播訊息顯示在本地端的通知欄中。

關於作者

Magic Len

各位好,我是Magic Len,是這網站的管理員。我是台灣台中大肚山上人,畢業於台中高工資訊科和台灣科技大學資訊工程系,曾在桃機航警局服役。我熱愛自然也熱愛科學,喜歡和別人分享自己的知識與經驗。如果你有興趣認識我,可以加我的Facebook,並且請註明是從MagicLen來的。

相關文章