[摘 要]消息推送在實際生活中有著廣泛的應用,尤其是對重要的信息推送更是有著極高的需求。當用戶需要實時的獲取重要信息時,通過消息推送技術能夠將報警信息推送至Android移動端。本文主要介紹了以報警信息為例的消息推送工作原理。
[關鍵詞]Android平臺;消息推送;長連接;
中圖分類號:S145 文獻標識碼:A 文章編號:1009-914X(2018)24-0371-01
0 前言
消息推送是現(xiàn)今App的重要組成功能部分,其中報警信息的推送是消息推送結構的主要分支。實體設備發(fā)生故障時將會造成嚴重影響,因此及時的發(fā)現(xiàn)和對故障的處理極其重要。當某設備發(fā)生故障時,報警信息應第一時間的發(fā)送至移動智能設備。即使在App后臺運行或未打開時,報警信息也能準確推送給使用者。
1 消息推送原理
推送技術的基礎思想是將瀏覽器主動查詢信息改為服務器主動發(fā)送信息,用戶端要保證與服務器的連接。因此推送的基礎原理是維護一個長連接,如果使用socket連接將對服務器帶來巨大的消耗。因此出現(xiàn)了MQTT這種輕量級低消耗協(xié)議來維護長連接。消息推送技術的實現(xiàn)技術主要有以下幾種:
(1)基于HTTP長連接的消息推送技術
長連接(長輪詢long-polling)技術建立在HTTP基礎上,在請求/應答的模式下構建出一種“服務器推送”的處理措施,并發(fā)展為Comet技術框架。Comet基于HTTP長連接技術,無需安裝第三方插件。在HTTP的版本中,HTTP/1.1能夠很好的支持長連接。
(2)基于消息中間件的消息推送技術
消息中間件通過可靠而高效的的消息傳遞體系實現(xiàn)了平臺相關的信息溝通,普遍的運用在分布式系統(tǒng)的搭建。對于消息中間件而言,由于其結構較為獨特,不但能夠在實時消息通信方面實現(xiàn)零距離傳輸,并且對于消息推送系統(tǒng)的構建也十分便捷。
(3)基于SMS的消息推送技術
在Android系統(tǒng)中,SMS可以對消息進行攔截,同時對消息內容解析處理,從而獲得服務器的意圖進而與服務器進行良好的通信。然而,目前用于發(fā)送消息的網關均需收費,因此將帶來較高的成本。
因此我們這里采用了基于HTTP長連接的原理來實現(xiàn)消息推送。
2 消息推送的實現(xiàn)
基于Android平臺的報警信息推送的結構圖如圖1所示。
移動智能設備在報警推送模塊中起著橋梁的作用,它連接了智能門店管理系統(tǒng)App與服務器,通過底層I/O管理從服務器端獲取信息并推送給App。同時它會對消息進行編解碼,轉換數(shù)據(jù)成為App可識別的格式。除此以外,它還負責App的長連接保持。
連接管理主要由I/O管理、編解碼器和長連接。長連接的實現(xiàn)是通過發(fā)送心跳包來實現(xiàn)的。系統(tǒng)定時向服務器發(fā)送心跳包,一旦發(fā)送失敗則證明連接斷開,此時將重啟連接機制。
App接口是智能門店管理系統(tǒng)App使用消息推送功能的接口,智能門店管理系統(tǒng)通過調用該接口獲取服務器端發(fā)送的數(shù)據(jù),也同樣通過該接口反饋信息至服務器。
(1)連接與發(fā)送消息的實現(xiàn)
連接服務器需要用到asmack類庫所提供的XMPPConnection,XMPPConnection是一個封裝了底層Socket連接的類,基于TCP/IP協(xié)議完成與服務器端的連接。同時為其綁定讀寫器(PacketReader,PacketWriter)。由其完成對數(shù)據(jù)的封裝和解析。
我們通過繼承asmack類庫的IQ基類來封裝自己的數(shù)據(jù),在XMPPManager中獲取連接并用編解碼器完成對數(shù)據(jù)的封裝,最后通過PacketWriter反饋消息給服務器端。
(2)接收推送信息的實現(xiàn)
智能門店管理App接收推送消息的過程是,App通過ServiceManager啟動NotificationService來啟動服務監(jiān)聽線程池。監(jiān)聽線程中的監(jiān)聽程序負責一直監(jiān)聽socket連接的數(shù)據(jù)變化。通過XMPPManager獲取XMPPConnection和數(shù)據(jù)包監(jiān)聽器,并將PacketReader初始化編解碼器綁定數(shù)據(jù)源以準備處理數(shù)據(jù),時刻監(jiān)聽socket連接數(shù)據(jù)包的變化。當服務器端有數(shù)據(jù)送達時,監(jiān)聽器會通知PacketReader類接收消息,數(shù)據(jù)源來自于底層Socket。通過parsePackets()將不同類型的消息交給不同的解碼器進行處理。服務器以IQ包的形式發(fā)來消息,因此將通過NotificationIQProvider處理數(shù)據(jù),解析出從服務器端發(fā)送來的消息內容,并且封裝成一個新的消息包notification(IQ的子類)。processPacket()方法將對消息進行再次處理,接著想系統(tǒng)監(jiān)聽器的管理器注冊一個監(jiān)聽。當有數(shù)據(jù)到來時,相關的監(jiān)聽都將被觸發(fā)。ListenerNotification會將消息packet交給類ListenerWrapper進行處理。ListenerWrapper中的方法notifyListener()將該消息通知給所有監(jiān)聽器。NotificationPacketListener將被服務器端發(fā)來的消息所觸發(fā),監(jiān)聽到Packet后將其轉換為NotificationIQ消息,將消息內的屬性內容解析出來構造一個intent。此時,先向服務端發(fā)送回執(zhí)消息,接著將intent向Android系統(tǒng)廣播。Android系統(tǒng)中的Broadcast接收器NotificationReceiver負責接收NotificationPacketListener廣播的消息,收到intent后取出參數(shù),調用Notifier發(fā)送消息至系統(tǒng)。Notifier里構造一個PendingIntent,設置廣播的內容與標題,然后將廣播分發(fā)出去,智能門店管理App將接收到響應廣播,從而完成消息的接收。
3 結語
在移動信息互聯(lián)網迅猛發(fā)展的當今社會,人們對信息的實時獲取有著越來越高的要求?;贏ndroid平臺的報警信息推送系統(tǒng)將通過長連接技術建立移動端與服務端的連接,能夠按用戶定制將對應的信息及時的推送到達。消息推送技術的穩(wěn)定實現(xiàn)能夠更全面,更及時的滿足用戶對消息推送的需求。
參考文獻
[1] 王龍濤.基于XMPP協(xié)議的服務器關鍵技術研究[D].西安.西安電子科技大學,2008.
[2] 殷昊.基于Android平臺的消息推送能力的研究與實現(xiàn)[D].北京.北京郵電大學,2013.
[3] 張長學,張偉,董智明.移動推送技術面面觀[J].移動通信2011.
作者簡介
趙雅萍(1992.05.16)女,陜西省西安市人,碩士學歷,專業(yè):模式識別和智能系統(tǒng)。