android應用開發(fā)第14章消息推送_第1頁
android應用開發(fā)第14章消息推送_第2頁
android應用開發(fā)第14章消息推送_第3頁
android應用開發(fā)第14章消息推送_第4頁
android應用開發(fā)第14章消息推送_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

鄭州大學信息工程學院第14章消息推送點擊添加文本鄭州大學信息工程學院14.1Android消息推送機制14.2Android平臺的消息推送實現(xiàn)14.3項目實戰(zhàn):“Android客戶端實現(xiàn)推送”14.4相關閱讀材料14.5本章小結本章導讀 在開發(fā)Android和iPhone應用程序時,我們往往需要從服務器向手機客戶端即時推送各種通知消息。iPhone上已經有了比較簡單的、較完美的推送通知解決方案,可是Android平臺上實現(xiàn)起來卻相對比較麻煩。本章主要研究在Android平臺如何實現(xiàn)消息推送。推送是什么推送服務----信息快遞服務消息消息開發(fā)者百度云推送用戶消息消息客戶端SDK服務端SDK14.1Android消息推送機制 消息推送,就是在互聯(lián)網(wǎng)上通過定期傳送用戶需要的信息來減少信息過載的一項新技術。推送技術通過自動傳送信息給用戶,來減少用于網(wǎng)絡上搜索的時間。它根據(jù)用戶的興趣來搜索、過濾信息,并將其定期推給用戶,幫助用戶高效率地發(fā)掘有價值的信息14.1.1推送方式基礎 當我們開發(fā)需要和服務器交互的移動應用時,基本上都需要和服務器進行交互,包括上傳數(shù)據(jù)到服務器,同時從服務器上獲取數(shù)據(jù)。 一般情況下,客戶端與服務器之間通訊客戶端是主動的,但這就存在一個問題:一旦服務器數(shù)據(jù)有更新或者服務器要下發(fā)通知給客戶端只能等客戶端連接的時候才能實現(xiàn)。這種方式使消息失去了實時性。 使客戶端能夠實時收到服務器的消息和通知,有兩種方式,第一種是客戶端使用Pull(拉)的方式,就是隔一段時間就去服務器上獲取一下信息,看是否有更新的信息出現(xiàn)。第二種就是服務器使用Push(推送)的方式,當服務器端有新信息了,則把最新的信息Push到客戶端上。 Push方式比Pull方式更優(yōu)越。因為Pull方式更費客戶端的網(wǎng)絡流量和電量,還需要我們的程序不停地去監(jiān)測服務端的變化。14.1.2消息推送實現(xiàn)原理1.輪詢(Pull)方式客戶端應用定時與服務器進行連接并查詢是否有新消息,一旦服務器有變化則立即同步消息。2.SMS(Push)方式在Android平臺上,可以通過攔截SMS消息并且解析消息內容來了解服務器的意圖,并獲取其顯示內容進行處理。3.持久連接(Push)方式客戶端和服務器之間建立長久連接,這樣就可以實現(xiàn)消息的及時性和實時性。RealTimePushSocket長連接服務器端觸發(fā),實時,手機可休眠,省電省流量PullHttp輪詢客戶端觸發(fā),延時,手機不休眠流量電量killerPush是主流!服務端編程語言并發(fā)億級長連接并發(fā)支持穩(wěn)定限流控制,平滑流量峰值擴容水平擴容讀寫分離服務端要求客戶端平臺支持云推送客戶端需求——省電量Alarm&WakeLock按需并按最低標準使用減少使用WakeLock的時間精簡邏輯,節(jié)省CPU利用率Scalability內容消息通知圖片html音視頻14.2Android平臺消息推送實現(xiàn)14.2.1Push在Android平臺上長連接的實現(xiàn) 現(xiàn)在的大多數(shù)移動端應用都有實時得到消息的能力,簡單來說,有發(fā)送消息的主動權和接受消息的被動權。例如:微信、QQ、天氣預報等等。這種功能必須涉及Client(客戶端)和Server(服務器) 這種功能實際上就是數(shù)據(jù)同步,同時要考慮手機本身、電量、網(wǎng)絡流量等等限制因素。1.問題的提出 從耗費的電量、流量和數(shù)據(jù)延遲性各方面來說,Push有明顯的優(yōu)勢。但是使用Push的缺點是:對于客戶端,實現(xiàn)和維護相對成本高在移動無線網(wǎng)絡下維護長連接,相對有一些技術上的開發(fā)難度對于服務器,如何實現(xiàn)多核并發(fā),CPU作業(yè)調度,數(shù)量龐大的長連接并發(fā)維護等技術,仍存在開發(fā)難點。講述Push方案的原理前,先了解一下移動無線網(wǎng)絡的特點。2.移動無線網(wǎng)絡的特點 因為IPv4的IP量有限,運營商分配給手機終端的IP是運營商內網(wǎng)的IP,手機要連接Internet,就需要通過運營商的網(wǎng)關做一個網(wǎng)絡地址轉換(NetworkAddressTranslation,NAT)。簡單地說運營商的網(wǎng)關需要維護一個外網(wǎng)IP、端口到內網(wǎng)IP、端口的對應關系,以確保內網(wǎng)的手機可以跟Internet的服務器通訊。3.Push在Android平臺上長連接的實現(xiàn) 移動端要和Internet進行通信,必須通過運營商的網(wǎng)關,所以,為了不讓NAT映射表失效,需要定時向Internet發(fā)送數(shù)據(jù),因為只是為了不讓NAT映射表失效,所以只需發(fā)送長度為0的數(shù)據(jù)即可。 這時候就要用到定時器,在Android系統(tǒng)上,定時器通常有兩種,但在Android客戶端使用Push推送時,使用AlarmManager來實現(xiàn)心跳功能,使其真正實現(xiàn)長連接。14.2.2使用Androidpn實現(xiàn)消息推送 服務器推送技術,目前應用廣泛的大部分都是對XMPP協(xié)議的再次封裝。qq、gmail、Gtalk、FacebookChat、iMessage等都是基于XMPP協(xié)議的。XMPP是個成熟的IM(即時通訊)協(xié)議,基于XML文本方式實現(xiàn),靈活強大。Androidpn是一個整合方案,它是基于XMPP開源組件的。簡介:基于XML協(xié)議的通訊協(xié)議,前身是Jabber,目前已由IETF國際標準化組織完成了標準化工作。

優(yōu)點:協(xié)議成熟、強大、可擴展性強、目前主要應用于許多聊天系統(tǒng)中,且已有開源的Java版的開發(fā)實例androidpn。

缺點:協(xié)議較復雜、冗余(基于XML)、費流量、費電,部署硬件成本高。(Openfire

+

Spark

+

Smack)XMPP協(xié)議1.Androidpn Androidpn服務器端是Java語言實現(xiàn)的,基于Openfire開源工程。不過它的Web部分采用的是Spring框架。Androidpn服務器包含兩個部分,一個是偵聽在5222端口上的XMPP服務,負責與客戶端的XMPPConnection類進行通信,作用是用戶注冊和身份認證,并發(fā)送推送通知消息。另外一部分是Web服務器,采用一個輕量級的HTTP服務器,負責接收用戶的Web請求。 Androidpn客戶端需要用到一個基于java的開源XMPP協(xié)議包asmack,這個包同樣也是基于Openfire下的另外一個開源項目Smack。 客戶端利用asmack中提供的XMPPConnection類與服務器建立持久連接,并通過該連接進行用戶注冊和登錄認證,同樣也是通過這條連接,接收服務器發(fā)送的通知。Google消息推送

GCM服務(Google

Cloud

Messaging)1、運行系統(tǒng)為Android2.3或更高版本,其中包括谷歌Play商店、play服務,服務框架。2、或者是使用了GoogleAPIs,系統(tǒng)在2.2及以上的Android模擬器3、手機需要能鏈接google服務器,app服務器能夠發(fā)送對GCM服務器的HTTPS請求。簡介:Google推出的云消息服務,即第二代的C2DM。

優(yōu)點:Google提供的服務、原生、簡單,無需實現(xiàn)和部署服務端

缺點:Android版本限制(必須大于2.3版本),該服務在國內不夠穩(wěn)定、需要用戶綁定Google帳號,受限于Google。1、谷歌GCM連接服務器:接收應用服務器的下行消息,并將它們發(fā)送到客戶端應用程序。若是XMPP連接服務器,也可以接受客戶端應用程序發(fā)送的消息,并將其轉發(fā)給你的應用服務器。

2、應用服務器:(利用HTTP或XMPP協(xié)議與GCM連接服務器進行通信)應用服務器發(fā)送下行消息到GCM連接服務器,GCM連接服務器,存儲該消息并維護消息隊列,然后將其發(fā)送到客戶端應用程序。如果您實現(xiàn)XMPP,你的應用服務器可以接收來自客戶端應用程序發(fā)送的消息。

3、客戶端應用程序:(需要安裝GCM服務)要接收和發(fā)送GCM的消息,這個程序必須注冊GCM服務,并獲得稱為注冊標記的唯一標識符。第三方消息推送到達率,接口穩(wěn)定性,后臺接口對接問題以百度云推送為例百度云推送功能同類產品A同類產品B百度云推送通知???消息???富媒體???富媒體模版和在線編輯???推送Console???定時發(fā)送???周期性發(fā)送???離線消息存儲時間???通知點擊行為???通知欄展現(xiàn)樣式(基礎)???通知欄展現(xiàn)樣式(自定)???用戶/消息統(tǒng)計???點對點消息發(fā)送???TAG支持???Logiclayer邏輯層消息隊列連接管理用戶管理存儲管理消息管理推送控制臺通知消息富媒體推送反饋統(tǒng)計富媒體編輯應用管理客戶端SDK百度云推送系統(tǒng)架構服務端SDK(PHP/JAVA/Python/NodeJS)接入層AndroidioswpwebpcBCSMySqlRedisDTBCMSBigpipeLBSApp分發(fā)省流量私有精簡協(xié)議XMPPor私有二進制協(xié)議握手,心跳,消息上下行極限心跳包TCP_QUICKACK壓縮心跳包,2byte心跳內容智能心跳調節(jié)根據(jù)實時網(wǎng)絡狀況調節(jié)心跳間隔,穩(wěn)定長連接單服務單通道單服務單通道ChannelPushServiceAPP1百度PushSDKAPP2百度PushSDKAPP3百度PushSDK百度云推送單服務單通道IntentIntent流量電量內存基于地理位置的推送控制臺管理現(xiàn)有產品選擇百度云推送14.3項目實戰(zhàn):“Android客戶端實現(xiàn)推送”14.3.1任務說明在Android客戶端接收推送服務器管理端推送過來的消息。(下載Androidpn,搭建服務器和客戶端)Androidpn工具的配置服務器啟動和配置:執(zhí)行腳本程序androidpn-server-0.5.0/bin/run.sh通過網(wǎng)址進入管理面板客戶端Demo案例(配置推送服務器信息): 配置文件res/raw/perties apiKey=1234567890

xmppHost=(不是localhost,表示模擬器所在主機的ip地址)

xmppPort=522214.4相關閱讀材料14.4.1幾種常見的消息推送解決方案1.C2DM云端推送 在Android手機平臺上,Google提供了C2DM(CloudtoDeviceMessaging)服務。C2DM是一個用來幫助開發(fā)者從服務器向Android應用程序發(fā)送數(shù)據(jù)的服務。該服務提供了一個簡單的、輕量級的機制,允許服務器可以通知移動應用程序直接與服務器進行通信,以便于從服務器獲取應用程序更新和用戶數(shù)據(jù)。2.MQTT協(xié)議實現(xiàn)Android推送。采用MQTT協(xié)議實現(xiàn)Android推送功能也是一種解決方案。MQTT是一個輕量級的消息發(fā)布/訂閱協(xié)議,它是實現(xiàn)基于手機客戶端的消息推送服務器的理想解決方案。3.RSMB實現(xiàn)推送功能。ReallySmallMessageBroker(RSMB),是一個簡單的MQTT代理,同樣由IBM提供,其查看地址是:。缺省打開1883端口,應用程序中,它負責接收來自服務器的消息并將其轉發(fā)給指定的移動設備。SAM是一個針對MQTT寫的PHP庫。可以從地址下載它。send_mqtt.php是一個通過POST接收消息并且通過SAM將消息發(fā)送給RSMB的PHP腳本。4.XMPP協(xié)議實現(xiàn)Android推送。 Google官方的C2DM服務器底層也是采用XMPP協(xié)議進行的封裝。XMPP(可擴展通訊和表示協(xié)議)是基于可擴展標記語言(XML)的協(xié)議,它用于即時消息(IM)以及在線探測。這個協(xié)議可能最終允許因特網(wǎng)用戶向因特網(wǎng)上的其他任何人發(fā)送即時消息。 Androidpn是一個基于XMPP協(xié)議的java開源Androidpushnotification實現(xiàn),這是韓國人放在上的一個開源項目。它包含了完整的客戶端和服務器端。其不足之處在于:性能上也不夠穩(wěn)定;如果將消息從服務器上推送出去,就不再管理了,不管消息是否成功到達客戶端手機上。5.使用第三方平臺。 目前國內、國外有一些推送平臺可供使用,但是涉及到收費問題、保密問題、服務質量問題、擴展問題等等,往往讓我們望而卻步。6.自己搭建一個推送平臺。 這不是一件輕松的工作,當然可以根據(jù)各自的需要采取合適的方案。 綜合以上論述,在建立Android消息推送方面可謂方案很多,但每一款方案都有其優(yōu)缺點。但無論如何,還是自己搭建一個推送平臺是上策。14.4.2Androidpn所存在的一些問題1、Androidpn服務器收到消息后如何知道要發(fā)給哪個用戶?2、一旦服務器重啟了,客戶端似乎不會自動重連,需要用戶自己中斷后臺Service再重啟應用。3、Androidpn服務器不保存消息。就是說它一有消息就會發(fā)出去,即使客戶端根本不在線,它也

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論