Android、iOS和Windows Phone中的推送技術詳解_Android

來源:互聯網
上載者:User

推送並不是什麼新技術,這種技術在互連網時代就已經很流行了。只是隨著進入移動互連網時代,推送技術顯得更加重要。因為在智能手機中,推送從某種程度上,可以取代使用多年的簡訊,而且與簡訊相比,還可以向使用者展示更多的資訊(如映像、表格、聲音等)。

推送技術的實現通常會使用服務端向用戶端推送訊息的方式。也就是說用戶端通過使用者名稱、Key等ID註冊到服務端後,在服務端就可以將訊息向所有活動的用戶端發送。

實際上,在很多移動作業系統中,官方都為其提供了推送方案,例如,Google的雲推送、IOS、Windows Phone7/8也都提供了類似的推送方案。不過這些推送方案的伺服器都在國外,有一些推送服務(如Google的雲推送)在國內由於某些原因不太穩定,所以國內近幾年湧現出了很多專門為國人打造的推送服務。

本文將從各種流行移動作業系統入手介紹推送技術的各種實現方式。當然,我們的主要目的是討論Android的推送技術。

一、iOS的推送技術

Apple為IOS提供了很完美的推送方案,其基本原理是Apple提供了自己的推送伺服器,叫APNS(Apple Push Notification Service,蘋果推播通知伺服器)。而用戶端裝置(IPhone、IPad等)直接與APNS建立長串連。不過向用戶端裝置發送的訊息並不是由APNS產生的,而是在需要發送訊息的使用者自己提供的伺服器(稱為Provider)中產生的,然後Provider將訊息傳送給APNS,最後由APNS將訊息傳送給用戶端裝置。也就是說,訊息最開始由Provider產生,然後Provider將訊息傳送給APNS,最後再由APNS傳送給用戶端裝置。訊息傳遞的過程如圖1所示。

在發送訊息到用戶端裝置接收到訊息的過程中,始終伴隨這一個令牌的傳送(device token)。要想使用APNS提供Message Service,應用程式需要先向IOS註冊需要提供的一個必要的資訊就是與當前裝置有關的device token,IOS在接收到devicetoken後,會向APNS查詢這個device token是否在APNS上註冊了(所有的IOS裝置在第一次使用時都需要向蘋果伺服器註冊一個帳號,否則無法從AppleStore下載應用,當然更無法使用推送服務了),如果已經註冊,APNS會直接嚮應用程式返回這個devicetoken。應用程式獲得這個devicetoken後,表示APNS已經允許向自己推送訊息了,接著還需要將該device token發送給推送伺服器(Provider)。到這裡應用程式已經成功將自己註冊到APNS中了。現在就可以通過Provider產生要推送的訊息,然後Provider會將訊息發送給APNS伺服器,最後APNS伺服器會直接嚮應用程式發送訊息。這個過程比較複雜,不過看一下圖2的描述就會對這一過程更加瞭解了。每一個流程描述前面的數字表示發送的時間先後順序。

二、Windows Phone的推送技術

微軟為Window Phone提供的推送方案與IOS類似,也需要自己準備推送伺服器(可以稱為Cloud Service)。只是表示裝置的ID變成了Uri。在Window Phone中有一個Push Client Service(PCS)。所有需要推送服務的應用程式都需要與Push Client Service通訊。下面是Window Phone推送的基本步驟,讀者可以與圖3對照來看這一過程。

第1步:應用程式會向Push Client Service請求一個Push Notification URI(①)。

第2步:如果當前Window Phone裝置已經在微軟伺服器註冊了,Push Client Service會從MPNS(Microsoft Push Notification Service ,微軟推播通知服務)擷取Push Notification URI,並返回給應用程式,表示推送服務可用(②和③)。

第3步:應用程式需要將Push Notification URI發送給自己的推送伺服器(Cloud Service)(④)。

第4步:如果需要推送訊息,Cloud Service會將訊息發送到MPNS,然後MPNS會將訊息發送給Push Client Service,最後由Push Client Service將訊息傳送給應用程式(⑤、⑥和③)。

三、Android的推送方案

Android的推送方案就比較多了,也比較亂。例如,有Google官方提供的C2DM(Android Cloud to Device Messaging);第三方的推送服務(如極光推送);還有通過各種協議實現的推送服務端程式(如AndroidPN),使用者通過這些服務端程式可以搭建自己的推送伺服器。這些推送技術會在本節後面的部分詳細介紹,本節先來介紹一下Android中經常使用的各種推送技術。當然,這些推送技術也能用於其它的行動裝置,但由於Android的官方推送服務(C2DM)在國內使用上有一些問題,所以基於Android的第三方推送服務較其它系統多,因此這裡主要針對Android來介紹。

通常推送技術會使用如下兩種方式實現。

1. 輪詢(Pull)方式

2. 持久串連方式(服務端Push方式)

輪詢方式就是用戶端以一定的時間間隔不斷查詢服務端是否有新的訊息。這種方式必須自己實現與伺服器之間的通訊機制,例如訊息佇列等。而且還要考慮輪詢的頻率,如果太慢可能導致某些訊息的延遲,如果太快,則會大量消耗網路頻寬和電池。所以大多數推送服務都不會使用輪詢方式。

持久串連方式也就是Push方 式,對於用戶端來說,是一種被動的方式,而主動權在服務端,當有訊息時,服務端會向所有註冊到推送伺服器的用戶端推送訊息。這種推送方式的好處是可以保證 即時性,而且用戶端實現簡單。當然,也會有不足,例如,如果大量的用戶端與服務端保持長串連時,會消耗伺服器的資源。不過在未推送訊息時,這些長串連就成 了空閑串連,通常這種串連主要消耗的是記憶體資源。例如,200萬使用者可能會消耗數十GB的記憶體。因此搭建這種推送機制時要使用效能好的伺服器。

持久串連的實現有很多方式,例如,可以使用XMPP作為通訊協定。XMPP的主要優勢是協議成熟、強大,可擴充性強。XMPP更多地用於IM系統中,後面要介紹的AndroidPN也是用了XMPP協議。

XMPP也有明顯的缺點,例如,協議很複雜,如果吃透XMPP協議可能需要很長時間,還有就是由於XMPP是基於XML的,從而造成了資料冗餘、這樣會造成行動裝置費流量、耗電等弊病。

除了XMPP,還可以使用MQTT協議,這種協議的主要優勢是簡潔、小巧、可擴充性強,從而帶來了省流量、省電等優點,而且有C++版的服務端組件rsmb。缺點是協議不夠成熟,而且實現較複雜,而且rsmb不開源,部署硬體的成本較高。

儘管C2DM服務在國內可能不太穩定或有一些地區不可用,但還是有必要介紹一下C2DM的原理。不過對於在國內使用的應用最好使用第三方的推送服務,或自己假設推送伺服器。

C2DM和IOS的APNS以及Window Phone的MPNS大同小異。還需要自己準備一台推送伺服器,並通過如下步驟實現訊息的推送。

第1步:行動裝置上的C2DM服務需要與Google官方的C2DM伺服器互動,驗證當前裝置是否在C2DM伺服器上註冊了,如果已經註冊,C2DM伺服器會返回一個註冊ID給用戶端的C2DM服務。(①和②)

第2步:用戶端的C2DM服務會與自己的推送伺服器互動,將帳號和C2DM伺服器返回的註冊ID傳給推送伺服器。(③)

第3步:如果要推送訊息,推送伺服器會將註冊ID和要推送的訊息先發送到C2DM伺服器,然後C2DM伺服器會直接將訊息推送給用戶端(手機、平板電腦的裝置)(④和⑤)。

讀者可以對照圖4來理解這3個步驟。

除了使用官方的推送方案外,現在國內湧現出多個第三方的推送方案,例如,極光推送(JPush)、百度推送等。讀者也可以用一下,這些同時通常是免費的(可能推送多媒體資料需要收費)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.