Thursday, February 2, 2012

Android Push Notification推播機制(1)-簡介篇

撰寫時間︰2012/02/02 16:40
更新時間︰2012/02/14 09:52
文章更新次數︰5

以下文章取自Google I/O Building push applications for Android15:28~18:01秒

一、前言
如果我們今天開發了一款服務型App(如︰賣雜誌的App),
出版商希望隨時通知使用者有新的雜誌上架,
在Android上該怎麼做呢?

在iOS上,
Apple有提供訊息推播伺服器,
讓開發商很容易透過Notification Server,
將需要的資料,
即時推播到iPhone使用者的手中。
這件事在Android上也是可行的,
這個機制叫C2DM(Cloud To Device Message)。

在開始正題以前,
我們要先理解Poll和Push這2個跟Server溝通的機制。

所謂的Poll
就是開發者以自訂的時間,
可能每1小時1次,
定時跟伺服器詢問是否有需要更新的資料。
Push
是從Server端推送即時訊息至手機端。

通常Poll機制用在
1.定時更新即時新聞
2.定時更新股票匯率
在這種條件下,
使用Poll機制是很方便、也很合理的。

但是,
如果每個App都使用此機制,
卻會造成電量耗損的問題,
請看我部落格中的前一篇文章

因此,
Google建議我們使用Push機制去更新我們App的內容。

在Android手機上,
看到的Push機制的App有︰
Gmail、行事曆、Google Voice、Android Market⋯
以上這些App,
都用到了Push機制,
因此,我們才要研究C2DM

二、文章開始
1.C2DM的使用限制
要使用C2DM機制,
有一些先決條件︰
(1)Android版本需要在2.2以上
(2)需要有Android Market - C2DM透過Android Market底層做了一些溝通和認証。

2.C2DM的使用流程
C2DM雖然只是一個"傳訊息到手機端"的簡單動作,
但它仍然有一個使用流程是我們需注意的。
本圖取自Google I/O 2010 Building push applications for Android 15:38

首先,
我們必須先取得一組registration ID
這個registration ID是每隻Android手機中唯一的ID(不會有重覆ID的APP發生),
一旦取得後,
需將這個ID傳至我們APP的Server
我們App Server才會有能力能夠傳送訊息給Google Server(傳訊的使用方式︰使用http POST)。
Google Server收到App Server 使用http POST傳來的訊息後,
將其依序排列準備發送給App

整個C2DM的操作流程,
在手機使用中、且Server端一切運作正常的狀況下,
概念是這樣的︰

1.首先,Android手機和Google Connect Server是連結的狀態(表示手機正處於上網狀態。如果不是上網狀態,會有別的狀況發生,我會在後續做討論)
2.我們的App Server會用HTTP POST告知C2DM前端︰我們希望啟動通知功能。
3-1.C2DM前端會將傳來的訊息儲存起來。
3-2.C2DM前端順便找到該裝置所歸屬的Connect Server。
4.Connect Server接著將傳送一個通知到該裝置中。
5.在傳送的過程中,其實有2件事情同步發生︰

5-1.該傳送的通知被轉成Intent,
該Intent是一個廣播訊息(Broadcast),
它將手機喚醒(叫手機起床)。
5-2.裝置會跟Connect Server說它已經收到該通知了,
Google C2DM才知道可以把剛才的通知刪掉。
6.手機的App此時會去跟我們的App Server詢問︰
"最後一則訊息通知"為何?
7.將訊息顯示在開發者預定的位置。

三、總結
整個C2DM流程總結來說,
我們推播的訊息,
C2DM只是幫我們做到"將手機喚醒"的動作。
至於要在手機上做什麼事、顯示什麼訊息,
看起來似乎都是App Server的功居多。

下一篇︰
Android Push Notification推播機制(2)-實務篇

相關文章︰
Android Push Notification推播機制(3)-collapse key
Android Push Notification推播機制(4)-[狀況1]手機在飛航模式下
Android Push Notification推播機制(5)-Attenuation
Android Push Notification推播機制(6)-[狀況2]手機在待機下
Android Push Notification推播機制(7)-[實例分享]以Chrome to Phone為例
Android Push Notification推播機制(8)-問答篇
官方技術公報 - Android Cloud To Device Messaging

No comments: