日韩欧美人妻无码精品白浆,www.大香蕉久久网,狠狠的日狠狠的操,日本好好热在线观看

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

Android消息推送完美方案

admin
2014年11月24日 22:3 本文熱度 6283

  本文介紹在Android中實(shí)現(xiàn)推送方式的基礎(chǔ)知識(shí)及相關(guān)解決方案。推送功能在手機(jī)開(kāi)發(fā)中應(yīng)用的場(chǎng)景是越來(lái)起來(lái)了,不說(shuō)別的,就我們手機(jī)上的新聞客戶(hù)端就時(shí)不j時(shí)的推送過(guò)來(lái)新的消息,很方便的閱讀最新的新聞信息。這種推送功能是好的一面,但是也會(huì)經(jīng)??吹胶芏嗤扑瓦^(guò)來(lái)的垃圾信息,這就讓我們感到厭煩了,關(guān)于這個(gè)我們就不能多說(shuō)什么了,畢竟很多商家要做廣告。本文就是來(lái)探討下Android中實(shí)現(xiàn)推送功能的一些解決方案,也希望能夠起到拋磚引玉的作用。^_^



  1.推送方式基礎(chǔ)知識(shí):


  在移動(dòng)互聯(lián)網(wǎng)時(shí)代以前的手機(jī),如果有事情發(fā)生需要通知用戶(hù),則會(huì)有一個(gè)窗口彈出,將告訴用戶(hù)正在發(fā)生什么事情??赡苁俏唇与娫?huà)的提示,日歷的提醒,或是一封新的彩信。推送功能最早是被用于Email中,用來(lái)提示我們新的信息。由于時(shí)代的發(fā)展和移動(dòng)互聯(lián)網(wǎng)的熱潮,推送功能更加地普及,已經(jīng)不再僅僅用在推送郵件了,更多地用在我們的APP中了。



  當(dāng)我們開(kāi)發(fā)需要和服務(wù)器交互的應(yīng)用程序時(shí),基本上都需要獲取服務(wù)器端的數(shù)據(jù),比如《地震應(yīng)急通》就需要及時(shí)獲取服務(wù)器上最新的地震信息。要獲取服務(wù)器上不定時(shí)更新的信息,一般來(lái)說(shuō)有兩種方法:第一種是客戶(hù)端使用Pull(拉)的方式,就是隔一段時(shí)間就去服務(wù)器上獲取一下信息,看是否有更新的信息出現(xiàn)。第二種就是 服務(wù)器使用Push(推送)的方式,當(dāng)服務(wù)器端有新信息了,則把最新的信息Push到客戶(hù)端上。這樣,客戶(hù)端就能自動(dòng)的接收到消息。 



  雖然Pull和Push兩種方式都能實(shí)現(xiàn)獲取服務(wù)器端更新信息的功能,但是明顯來(lái)說(shuō)Push方式比Pull方式更優(yōu)越。因?yàn)镻ull方式更費(fèi)客戶(hù)端的網(wǎng)絡(luò)流量,更主要的是費(fèi)電量,還需要我們的程序不停地去監(jiān)測(cè)服務(wù)端的變化。  



  在開(kāi)發(fā)Android和iPhone應(yīng)用程序時(shí),我們往往需要從服務(wù)器不定的向手機(jī)客戶(hù)端即時(shí)推送各種通知消息。我們只需要在Android或IPhone的通知欄處向下一拉,就展開(kāi)了Notification Panel,可以集中一覽各種各樣通知消息。目前IOS平臺(tái)上已經(jīng)有了比較簡(jiǎn)單的和完美的推送通知解決方案,我會(huì)在以后詳細(xì)介紹IPhone中的解決方案,可是Android平臺(tái)上實(shí)現(xiàn)起來(lái)卻相對(duì)比較麻煩。


  最近利用幾天的時(shí)間對(duì)Android的推送通知服務(wù)進(jìn)行初步的研究,也希望能和大家共同探討一下。


 


  2. 幾種常見(jiàn)的解決方案實(shí)現(xiàn)原理:


  1)輪詢(xún)(Pull)方式:應(yīng)用程序應(yīng)當(dāng)階段性的與服務(wù)器進(jìn)行連接并查詢(xún)是否有新的消息到達(dá),你必須自己實(shí)現(xiàn)與服務(wù)器之間的通信,例如消息排隊(duì)等。而且你還要考慮輪詢(xún)的頻率,如果太慢可能導(dǎo)致某些消息的延遲,如果太快,則會(huì)大量消耗網(wǎng)絡(luò)帶寬和電池。



  2)SMS(Push)方式:在Android平臺(tái)上,你可以通過(guò)攔截SMS消息并且解析消息內(nèi)容來(lái)了解服務(wù)器的意圖,并獲取其顯示內(nèi)容進(jìn)行處理。這是一個(gè)不錯(cuò)的想法,我就見(jiàn)過(guò)采用這個(gè)方案的應(yīng)用程序。這個(gè)方案的好處是,可以實(shí)現(xiàn)完全的實(shí)時(shí)操作。但是問(wèn)題是這個(gè)方案的成本相對(duì)比較高,我們需要向移動(dòng)公司繳納相應(yīng)的費(fèi)用。我們目前很難找到免費(fèi)的短消息發(fā)送網(wǎng)關(guān)來(lái)實(shí)現(xiàn)這種方案。



  3)持久連接(Push)方式:這個(gè)方案可以解決由輪詢(xún)帶來(lái)的性能問(wèn)題,但是還是會(huì)消耗手機(jī)的電池。IOS平臺(tái)的推送服務(wù)之所以工作的很好,是因?yàn)槊恳慌_(tái)手機(jī)僅僅保持一個(gè)與服務(wù)器之間的連接,事實(shí)上C2DM也是這么工作的。不過(guò)剛才也講了,這個(gè)方案存在著很多的不足之處,就是我們很難在手機(jī)上實(shí)現(xiàn)一個(gè)可靠的服務(wù),目前也無(wú)法與IOS平臺(tái)的推送功能相比。



  Android操作系統(tǒng)允許在低內(nèi)存情況下殺死系統(tǒng)服務(wù),所以我們的推送通知服務(wù)很有可能就被操作系統(tǒng)Kill掉了。 輪詢(xún)(Pull)方式和SMS(Push)方式這兩個(gè)方案也存在明顯的不足。至于持久連接(Push)方案也有不足,不過(guò)我們可以通過(guò)良好的設(shè)計(jì)來(lái)彌補(bǔ),以便于讓該方案可以有效的工作。畢竟,我們要知道GMail,GTalk以及GoogleVoice都可以實(shí)現(xiàn)實(shí)時(shí)更新的。


  


  3.第一種解決方案:C2DM云端推送功能。


  在Android手機(jī)平臺(tái)上,Google提供了C2DM(Cloudto Device Messaging)服務(wù),起初我就是準(zhǔn)備采用這個(gè)服務(wù)來(lái)實(shí)現(xiàn)自己手機(jī)上的推送功能,并將其帶入自己的項(xiàng)目中。 



  Android Cloud to Device Messaging (C2DM)是一個(gè)用來(lái)幫助開(kāi)發(fā)者從服務(wù)器向Android應(yīng)用程序發(fā)送數(shù)據(jù)的服務(wù)。該服務(wù)提供了一個(gè)簡(jiǎn)單的、輕量級(jí)的機(jī)制,允許服務(wù)器可以通知移動(dòng)應(yīng)用程序直接與服務(wù)器進(jìn)行通信,以便于從服務(wù)器獲取應(yīng)用程序更新和用戶(hù)數(shù)據(jù)。C2DM服務(wù)負(fù)責(zé)處理諸如消息排隊(duì)等事務(wù)并向運(yùn)行于目標(biāo)設(shè)備上的應(yīng)用程序分發(fā)這些消息。關(guān)于C2DM具體使用過(guò)程,大家可以去查閱相關(guān)的資料,在這里先讓我們了解下大致方案情況。



  下面是C2DM操作過(guò)程示例圖:


  



  但是經(jīng)過(guò)一番研究發(fā)現(xiàn),這個(gè)服務(wù)存在很大的問(wèn)題:


  1)C2DM內(nèi)置于Android的2.2系統(tǒng)上,無(wú)法兼容老的1.6到2.1系統(tǒng);



  2)C2DM需要依賴(lài)于Google官方提供的C2DM服務(wù)器,由于國(guó)內(nèi)的網(wǎng)絡(luò)環(huán)境,這個(gè)服務(wù)經(jīng)常不可用,如果想要很好的使用,我們的App Server必須也在國(guó)外,這個(gè)恐怕不是每個(gè)開(kāi)發(fā)者都能夠?qū)崿F(xiàn)的;



  3) 不像在iPhone中,他們把硬件系統(tǒng)集成在一塊了。所以對(duì)于我們開(kāi)發(fā)者來(lái)說(shuō),如果要在我們的應(yīng)用程序中使用C2DM的推送功能,因?yàn)閷?duì)于不同的這種硬件廠商平臺(tái),比如摩托羅拉、華為、中興做一個(gè)手機(jī),他們可能會(huì)把Google的這種服務(wù)去掉,尤其像在國(guó)內(nèi)就很多這種,把Google這種原生的服務(wù)去掉。買(mǎi)了一些像什么山寨機(jī)或者是華為這種國(guó)產(chǎn)機(jī),可能Google的服務(wù)就沒(méi)有了。而像在國(guó)外出的那些可能會(huì)內(nèi)置。



  有了上述幾個(gè)方面的制約,導(dǎo)致我最終放棄了這個(gè)方案,不過(guò)我想利用另外一篇文章來(lái)詳細(xì)的介紹C2DM的框架以及客戶(hù)端和App Server的相應(yīng)設(shè)置方法,可以作為學(xué)習(xí)資源讓我們有個(gè)參考的資料。 即然C2DM無(wú)法滿(mǎn)足我們的要求,那么我們就需要自己來(lái)實(shí)現(xiàn)Android手機(jī)客戶(hù)端與App Server之間的通信協(xié)議,保證在App Server想向指定的Android設(shè)備發(fā)送消息時(shí),Android設(shè)備能夠及時(shí)的收到。



  4. 第二種解決方案:MQTT協(xié)議實(shí)現(xiàn)Android推送功能。


  采用MQTT協(xié)議實(shí)現(xiàn)Android推送功能也是一種解決方案。MQTT是一個(gè)輕量級(jí)的消息發(fā)布/訂閱協(xié)議,它是實(shí)現(xiàn)基于手機(jī)客戶(hù)端的消息推送服務(wù)器的理想解決方案。


  wmqtt.jar 是IBM提供的MQTT協(xié)議的實(shí)現(xiàn)。我們可以從這里https://github.com/tokudu/AndroidPushNotificationsDemo下載該項(xiàng)目的實(shí)例代碼,并且可以找到一個(gè)采用PHP書(shū)寫(xiě)的服務(wù)器端實(shí)現(xiàn)https://github.com/tokudu/PhpMQTTClient)。



  架構(gòu)如下圖所示:


  



  wmqtt.jar 是IBM提供的MQTT協(xié)議的實(shí)現(xiàn)。我們可以從如下站點(diǎn)下載http://www-01.ibm.com/support/docview.wss?rs=171&uid=swg24006006它。我們可以將該jar包加入自己的Android應(yīng)用程序中。



  5.第三種解決方案:RSMB實(shí)現(xiàn)推送功能。


  Really Small Message Broker (RSMB) ,他是一個(gè)簡(jiǎn)單的MQTT代理,同樣由IBM提供,其查看地址是:http://www.alphaworks.ibm.com/tech/rsmb。缺省打開(kāi)1883端口,應(yīng)用程序當(dāng)中,它負(fù)責(zé)接收來(lái)自服務(wù)器的消息并將其轉(zhuǎn)發(fā)給指定的移動(dòng)設(shè)備。




  SAM是一個(gè)針對(duì)MQTT寫(xiě)的PHP庫(kù)。我們可以從這個(gè)http://pecl.php.net/package/sam/download/0.2.0地址下載它.


  send_mqtt.php是一個(gè)通過(guò)POST接收消息并且通過(guò)SAM將消息發(fā)送給RSMB的PHP腳本。



  6. 第四種解決方案:XMPP協(xié)議實(shí)現(xiàn)Android推送功能。


  這是我希望在項(xiàng)目中采用的方案,因?yàn)槟壳八情_(kāi)源的,對(duì)于其簡(jiǎn)單的推送功能它還是能夠?qū)崿F(xiàn)的。我們可以修改其源代碼來(lái)適應(yīng)我們的應(yīng)用程序。


  事實(shí)上Google官方的C2DM服務(wù)器底層也是采用XMPP協(xié)議進(jìn)行的封裝。XMPP(可擴(kuò)展通訊和表示協(xié)議)是基于可擴(kuò)展標(biāo)記語(yǔ)言(XML)的協(xié)議,它用于即時(shí)消息(IM)以及在線(xiàn)探測(cè)。這個(gè)協(xié)議可能最終允許因特網(wǎng)用戶(hù)向因特網(wǎng)上的其他任何人發(fā)送即時(shí)消息。關(guān)于XMPP協(xié)議我在上篇博文中已經(jīng)介紹,大家可以參考下文章:http://www.cnblogs.com/hanyonglu/archive/2012/03/04/2378956.html



  androidpn是一個(gè)基于XMPP協(xié)議的java開(kāi)源Android push notification實(shí)現(xiàn),我會(huì)在以后的博文中詳細(xì)介紹androidpn。它包含了完整的客戶(hù)端和服務(wù)器端。經(jīng)過(guò)源代碼研究我發(fā)現(xiàn),該服務(wù)器端基本是在另外一個(gè)開(kāi)源工程openfire基礎(chǔ)上修改實(shí)現(xiàn)的,不過(guò)比較郁悶的是androidpn的文檔是由韓語(yǔ)寫(xiě)的,所以整個(gè)研究過(guò)程基本都是讀源碼。



  這是androidpn的項(xiàng)目主頁(yè):http://sourceforge.net/projects/androidpn/



  androidpn實(shí)現(xiàn)意圖如下圖所示:


  



  androidpn 客戶(hù)端需要用到一個(gè)基于java的開(kāi)源XMPP協(xié)議包asmack,這個(gè)包同樣也是基于openfire下的另外一個(gè)開(kāi)源項(xiàng)目smack,不過(guò)我們不需要自己編譯,可以直接把a(bǔ)ndroidpn客戶(hù)端里面的asmack.jar拿來(lái)使用??蛻?hù)端利用asmack中提供的XMPPConnection類(lèi)與服 務(wù)器建立持久連接,并通過(guò)該連接進(jìn)行用戶(hù)注冊(cè)和登錄認(rèn)證,同樣也是通過(guò)這條連接,接收服務(wù)器發(fā)送的通知。



  androidpn服務(wù)器端也是java語(yǔ)言實(shí)現(xiàn)的,基于openfire開(kāi)源工程,不過(guò)它的Web部分采用的是spring框架,這一點(diǎn)與 openfire是不同的。Androidpn服務(wù)器包含兩個(gè)部分,一個(gè)是偵聽(tīng)在5222端口上的XMPP服務(wù),負(fù)責(zé)與客戶(hù)端的 XMPPConnection類(lèi)進(jìn)行通信,作用是用戶(hù)注冊(cè)和身份認(rèn)證,并發(fā)送推送通知消息。另外一部分是Web服務(wù)器,采用一個(gè)輕量級(jí)的HTTP服務(wù)器, 負(fù)責(zé)接收用戶(hù)的Web請(qǐng)求。服務(wù)器架構(gòu)如下:





  最上層包含四個(gè)組成部分,分別是SessionManager,Auth Manager,PresenceManager以及Notification Manager。SessionManager負(fù)責(zé)管理客戶(hù)端與服務(wù)器之間的會(huì)話(huà),Auth Manager負(fù)責(zé)客戶(hù)端用戶(hù)認(rèn)證管理,Presence Manager負(fù)責(zé)管理客戶(hù)端用戶(hù)的登錄狀態(tài),NotificationManager負(fù)責(zé)實(shí)現(xiàn)服務(wù)器向客戶(hù)端推送消息功能。



  這個(gè)解決方案的最大優(yōu)勢(shì)就是簡(jiǎn)單,我們不需要象C2DM那樣依賴(lài)操作系統(tǒng)版本,也不會(huì)擔(dān)心某一天Google服務(wù)器不可用。利用XMPP協(xié)議我們還可以進(jìn)一步的對(duì)協(xié)議進(jìn)行擴(kuò)展,實(shí)現(xiàn)更為完善的功能。 采用這個(gè)方案,我們目前只能發(fā)送文字消息,不過(guò)對(duì)于推送來(lái)說(shuō)一般足夠了,因?yàn)槲覀儾荒苤竿ㄟ^(guò)推送得到所有的數(shù)據(jù),一般情況下,利用推送只是告訴手機(jī)端服務(wù)器發(fā)生了某些改變,當(dāng)客戶(hù)端收到通知以后,應(yīng)該主動(dòng)到服務(wù)器獲取最新的數(shù)據(jù),這樣才是推送服務(wù)的完整實(shí)現(xiàn)。 XMPP協(xié)議書(shū)相對(duì)來(lái)說(shuō)還是比較簡(jiǎn)單的,值得我們進(jìn)一步研究。



  但是在經(jīng)過(guò)一段時(shí)間的測(cè)試,我發(fā)現(xiàn)關(guān)于androidpn也存在一些不足之處:


  1. 比如時(shí)間過(guò)長(zhǎng)時(shí),就再也收不到推送的信息了。


  2. 性能上也不夠穩(wěn)定。


  3. 如果將消息從服務(wù)器上推送出去,就不再管理了,不管消息是否成功到達(dá)客戶(hù)端手機(jī)上。



  等等,總之,androidpn也有很多的缺點(diǎn)。如果我們要使用androidpn,則還需要做大量的工作。


  至于詳細(xì)使用過(guò)程,我們會(huì)在下個(gè)博文中再給大家介紹。



  7.第五種解決方案:使用第三方平臺(tái)。


  第三方平臺(tái)有商用的也有免費(fèi)的,我們可以根據(jù)實(shí)現(xiàn)情況使用。關(guān)于國(guó)內(nèi)的第三方平臺(tái),我感覺(jué)目前比較不錯(cuò)的就是極光推送。關(guān)于極光推送目前是免費(fèi)的,我們可以直接使用。關(guān)于詳細(xì)情況,大家可以查看它的主頁(yè):http://www.jpush.cn/index.jsp,這里不再詳細(xì)描述。



  關(guān)于MQTT的方案,國(guó)內(nèi)最近出現(xiàn)基于 mqtt 的第三方解決方案 云巴 (http://yunba.io),據(jù)了解是原 極光推送 CTO 創(chuàng)辦的,有興趣的朋友可以研究下。


  


  關(guān)于國(guó)外的第三方平臺(tái)我也見(jiàn)過(guò)幾個(gè):http://www.push-notification.org/。有興趣的朋友可以查閱相關(guān)信息。使用第三方平臺(tái)就需要使用別人的服務(wù)器,關(guān)于這點(diǎn),你懂的。



  8.第六種解決方案:自己搭建一個(gè)推送平臺(tái)。


  這不是一件輕松的工作,當(dāng)然可以根據(jù)各自的需要采取合適的方案。



  好了,以上是關(guān)于在Android中實(shí)現(xiàn)推送方式的基礎(chǔ)知識(shí)及相關(guān)解決方案。



  完畢。 ^_^


該文章在 2014/11/24 22:03:38 編輯過(guò)
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶(hù)的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

91精品国产综合久久香蕉的| 大香蕉伊网一| 亚洲激情啪啪啪| 三级黄色小视频| 丝袜淫乱五月天| 女人张开腿秘 视频网站| 91视频你懂的在线| 国产精品 青青草| 欧美日韩中文在线成人免费| 玖玖午夜黄色精品电影| 在线一区日韩精品人工字幕| 九九色综合| 97视频欧美| porn日韩在线9| 国产精品无码不卡| 日韩1区二区三区麻豆网页| 非洲久久精品青青草久久精品| 欧洲午夜视频在线播放| 93久久夜夜躁| 69AV成人| 丰满油亮丝袜少妇AV| 欧美亚洲国产精品乱一区二区| 巴马| 男人的毛片天堂| 欧美日韩搞鸡| 射一二三区| 草草影院在线看| 国产肉肉久久毛片| 日韩欧美人兽成人视频网站| 国产欧美精品一区二区三区三| 亚洲影院在线久久久| xxx久久久久久| 欧美成黄片| 91看片淫黄大片在线| 爱澡AV| 日韩精品 草草| 人妻少妇嫩草被猛烈进入无码密桃| Ⅰ,欧美少妇性生活| 天堂一二区a| 黄色免费口在线看| 久99爱精品|