[技術探討]GCM實作初探(二)

GCM實作初探(二)

上一篇GCM實作初探(一)說明了如何在Google API console設定專案以及開啟GCM for Android,這篇將說明Push基本流程。

目前Push流程不論是iOS還是Android或是Windows Phone,各自有不同的實作細節與名詞,卻都有類似的基本流程,因此以下將說明Push的大流程,然後重點提示不同系統間的差異,本篇既然叫GCM實作初探,因此說明時會以GCM為主,同時略為提到其他系統不同之處。

Push主要有三種機器互相溝通,第一種是裝置作業系統廠商的Push服務伺服器,如Google的GCM、Apple的APNS、Microsoft的MPNS,以後提到Push服務時使用各公司的服務名稱,或三者統稱為官方服務。第二種是APP開發者架設的Push伺服器,簡稱為我方伺服器。第三種為各種裝置,如iPhone、iPad、Android Phone、Windows Phone、各式平板…等等,統稱為裝置或手持裝置。

GCM實作初探(二)

要完成Push流程,筆者歸納出了包含前置作業主要有三個階段,分成八個步驟。

 

階段一:前置作業

 

步驟一,開發者向官方服務註冊取得Key供我方伺服器使用。在Android上實作Push時,取得Key的方式在前一篇已經詳細說明了。iOS的Key為伺服器交換憑證,我方伺服器產生憑證檔上傳到APNS,接著下載憑證之後使用憑證發送訊息。

GCM實作初探(二)

步驟二,在APP加入權限、註冊Key、我方伺服器的資訊…等等使用Push功能時,APP必要的設定,細節將根據各平台另外撰文個別說明,不在本篇的討論範圍。

 

階段二:使用者使用APP

 

步驟三,使用者下載APP,並且執行APP。此時APP會根據開發者所設定的權限以及程式取得裝置上的資訊,以Android為例APP可以取得裝置的UID、使用者註冊的Gmail帳號、網路連線狀況、網路連線許可…等等,細節也根據各平台個別說明,不在本篇的討論範圍。

GCM實作初探(二)

步驟四,APP將APP與裝置資訊註冊在官方服務,官方服務將回傳發送Push的Token給APP。Token是一串序號,代表這個裝置上的這個APP。

不同平台的對於Token的稱呼不盡相同,例如GCM通常稱為RegID或者Registration ID,大小為4K;iOS稱為Device Token,大小為32 bytes;MPNS稱為URI ,大小為1024字元。

不同系統稱呼Token都使用不同的說法,若小組同時開發不同系統的APP時,首要工作就是釐清名詞以及限制,不然討論起來牛頭不對馬嘴,讓人十分困擾。本篇在說明各系統的儲存單位使用官方說明的文字不做換算,避免找查資料時造成誤解。

GCM實作初探(二)

步驟五,APP將Token回傳至我方伺服器存進資料庫,未來伺服器發送訊息就可以根據這個Token以及步驟一取得的Key發送給註冊在官方服務的APP。

GCM實作初探(二)

階段三:傳送訊息

 

步驟六,我方伺服器打算傳送一段訊息給手持裝置,這個手持裝置接收訊息的必要條件是目前仍然安裝我們的APP而且也已經將Token回傳給我方伺服器。我方伺服器會根據步驟一得到的Key以及步驟五得到的裝置Token,將訊息包在一起送到官方服務。

GCM實作初探(二)

步驟七,官方服務檢查伺服器的Key是否正確,檢查Token是否屬於這組Key,檢查Token是否有效,最後將訊息存在伺服器。筆者測過或者有參考資料的已知發送限制如下:

GSM一次發送請求的發送對象上限為1000個,上限為4kb,訊息內容可以自訂Tag,在GCM伺服器上保留4周,但是Google不保證裝置一定能收到訊息以及收到的順序。

APNS一次發送請求只能發送給一個對象,對於相同的發送對象只會保存最新的一筆訊息,上限為256 bytes,且文字、圖片、訊息、未讀訊息數(右上的小數字)必須使用相對應的TAG。

由於APP收到訊息之後能不能背景作業以及官方服務開放程度的不同,會導致APP得知新訊息之後實作的方式有所不同。

 

步驟八,裝置連上網路,裝置的作業系統向官方服務檢查是否有屬於這個裝置的訊息。

在Android,檢查訊息之後,可以跟著啟動APP的背景作業,因此訊息可以指定APP接著要進行什麼作業,例如APP連上我方伺服器取得更詳細的訊息內容。

在iOS 6,APNS只能單純傳遞文字,指定訊息的圖示以及聲音等,不能背景作業,因此只是單純顯示文字訊息。iOS 7之後允許背景作業,因此能連上我方伺服器取得更詳細的訊息內容,不過筆者查到限制背景作業有30秒限制,超過30秒就會被強迫結束背景作業。

GCM實作初探(二)

以上主要同時討論了GCM與APNS,至於MPNS,由於筆者手上沒有Windows Phone無法進行測試,因此細節部分粗淺帶過,筆者查看官方網站的Push流程說明,發現流程與GCM以及APNS是大同小異,因此有辦法歸納出本篇文章,並且將三種服務製作在相同的Push伺服器上。

相關文章:GCM實作初探(一)

Comments

No comments yet. Why don’t you start the discussion?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料