一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Android消息推送完美方案

 換個蝸牛當(dāng)坐騎 2016-06-15

推送功能在手機(jī)應(yīng)用開發(fā)中越來越重要,已經(jīng)成為手機(jī)開發(fā)的必須。在Android應(yīng)用開發(fā)中,由于眾所周知的原因,Android消息推送我們不得不大費周折。本文就是用來和大家共同探討一種Android消息推送的完美解決方案。

  1.消息推送基礎(chǔ)

         消息推送,就是在互聯(lián)網(wǎng)上通過定期傳送用戶需要的信息來減少信息過載的一項新技術(shù)。推送技術(shù)通過自動傳送信息給用戶,來減少用于網(wǎng)絡(luò)上搜索的時間。它根據(jù)用戶的興趣來搜索、過濾信息,并將其定期推給用戶,幫助用戶高效率地發(fā)掘有價值的信息

當(dāng)我們開發(fā)需要和服務(wù)器交互的移動應(yīng)用時,基本上都需要和服務(wù)器進(jìn)行交互,包括上傳數(shù)據(jù)到服務(wù)器,同時從服務(wù)器上獲取數(shù)據(jù)。

一般情況下,客戶端與服務(wù)器之間通訊客戶端是主動的,但這就存在一個問題就是一旦服務(wù)器數(shù)據(jù)有更新或者服務(wù)器要下發(fā)通知給客戶端只能等客戶端連接的時候才能實現(xiàn)。這種方式使消息失去了實時性。

如何使客戶端能夠?qū)崟r的收到服務(wù)器的消息和通知,總體來說有兩種方式,第一種是客戶端使用Pull(拉)的方式,就是隔一段時間就去服務(wù)器上獲取一下信息,看是否有更新的信息出現(xiàn)。第二種就是 服務(wù)器使用Push(推送)的方式,當(dāng)服務(wù)器端有新信息了,則把最新的信息Push到客戶端上。這樣,客戶端就能自動的接收到消息。?

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

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

  1)輪詢(Pull)方式:客戶端定時向服務(wù)器發(fā)送詢問消息,一旦服務(wù)器有變化則立即同步消息。

  2SMS(Push)方式:通過攔截SMS消息并且解析消息內(nèi)容來了解服務(wù)器的命令,但這種方式一般用戶在經(jīng)濟(jì)上很難承受。

  3)持久連接(Push)方式:客戶端和服務(wù)器之間建立長久連接,這樣就可以實現(xiàn)消息的及時行和實時性。

  3、消息推送解決方案概述

  A、C2DM云端推送方案

Android手機(jī)平臺上,Google提供了C2DMCloudto Device Messaging)服務(wù)。Android Cloud to Device Messaging (C2DM)是一個用來幫助開發(fā)者從服務(wù)器向Android應(yīng)用程序發(fā)送數(shù)據(jù)的服務(wù)。該服務(wù)提供了一個簡單的、輕量級的機(jī)制,允許服務(wù)器可以通知移動應(yīng)用程序直接與服務(wù)器進(jìn)行通信,以便于從服務(wù)器獲取應(yīng)用程序更新和用戶數(shù)據(jù)。

該方案存在的主要問題是C2DM需要依賴于Google官方提供的C2DM服務(wù)器,由于國內(nèi)的網(wǎng)絡(luò)環(huán)境,這個服務(wù)經(jīng)常不可用。

  B、MQTT協(xié)議實現(xiàn)Android推送

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

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

  CRSMB實現(xiàn)推送功能

  Really Small Message Broker (RSMB) ,是一個簡單的MQTT代理,同樣由IBM提供,其查看地址是:http://www.alphaworks.ibm.com/tech/rsmb。缺省打開1883端口,應(yīng)用程序當(dāng)中,它負(fù)責(zé)接收來自服務(wù)器的消息并將其轉(zhuǎn)發(fā)給指定的移動設(shè)備。SAM是一個針對MQTT寫的PHP庫。我們可以從這個http://pecl./package/sam/download/0.2.0地址下載它.

   D、XMPP協(xié)議實現(xiàn)Android推送

  Google官方的C2DM服務(wù)器底層也是采用XMPP協(xié)議進(jìn)行的封裝。XMPP(可擴(kuò)展通訊和表示協(xié)議)是基于可擴(kuò)展標(biāo)記語言(XML)的協(xié)議,它用于即時消息(IM)以及在線探測。這個協(xié)議可能最終允許因特網(wǎng)用戶向因特網(wǎng)上的其他任何人發(fā)送即時消息。

  androidpn是一個基于XMPP協(xié)議的java開源Android push notification實現(xiàn)。它包含了完整的客戶端和服務(wù)器端。但也存在一些不足之處:

  1 比如時間過長時,就再也收不到推送的信息了。

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

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

如果我們要使用androidpn,則還需要做大量的工作,需要理解XMPP協(xié)議、理解Androidpn的實現(xiàn)機(jī)制,需要調(diào)試內(nèi)部存在的BUG

  E、使用第三方平臺

  目前國內(nèi)、國外有一些推送平臺可供使用,但是涉及到收費問題、保密問題、服務(wù)質(zhì)量問題、擴(kuò)展問題等等,又不得不是我們望而卻步。

         4、消息推送完美方案

      綜合以上論述,在建立Android消息推送方面可謂方案多多,但每一款方案都有其優(yōu)缺點。但無論如何,還是自己搭建一個推送平臺是上策。因為你有、他有不如自己有。

         在搭建自有推送平臺上建議使用《九日升Android消息推送組件》(http://www./product/13629681868537.html)。該組不僅可以拿來即用,并且還可以提供源碼以便擴(kuò)展,實現(xiàn)自己的特殊需求。

       A、推送原理

    九日升Android消息推送組件基于XMPP協(xié)議實現(xiàn)Android推送。XMPP(可擴(kuò)展通訊和表示協(xié)議)是基于可擴(kuò)展標(biāo)記語言(XML)的協(xié)議,它用于即時消息(IM)以及在線探測。這個協(xié)議可能最終允許因特網(wǎng)用戶向因特網(wǎng)上的其他任何人發(fā)送即時消息。

    九日升Android消息推送組件實現(xiàn)原理見下圖:

            a.JPG

                                                  1-消息推送原理圖

    九日升Android消息推送組件由服務(wù)器部分和客戶端部分組成。每一部分都由XMPP協(xié)議組件和外部接口組件構(gòu)成。XMPP協(xié)議組件負(fù)責(zé)服務(wù)器和Android客戶端間的連接管理、消息通訊,外部接口組件負(fù)責(zé)接收應(yīng)用系統(tǒng)、客戶端應(yīng)用的命令,向應(yīng)用系統(tǒng)發(fā)送接收到的通知消息。

    九日升Android消息組件提供基于Tomcat的服務(wù)器應(yīng)用和Android開發(fā)jar包。其中基于Tomcat的服務(wù)器應(yīng)用直接在Tomcat上部署即可,Android開發(fā)jar包引入Android項目即可。

   B 集成方式

    1)、服務(wù)器部署

    九日升Android消息組件Tomcat的服務(wù)器應(yīng)用直接部署在Tomcat中,端口號任意設(shè)定。

    2)、客戶端jar包引用

    Android項目中建立libs目錄,然后將提供的Android開發(fā)jar包復(fù)制到該目錄即可。見下圖:

                                                 b.JPG

                                                                             

2-jar包引入圖

    3)、Android項目AndroidManifest.xml文件修改

  在該文件中增加以下權(quán)限:

     <uses-permission android:name="android.permission.READ_PHONE_STATE" />

     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

     <uses-permission android:name="android.permission.INTERNET" />

     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

     <uses-permission android:name="android.permission.VIBRATE" />

   在該文件中注冊服務(wù):

     <service android:enabled="true"

     android:name="com.bjjrs.server.NotificationService"

     android:label="NotificationService">

          <intent-filter>

             <action android:name="com.bjjrs.server.NotificationService" />

         </intent-filter>

    </service>

   至此,九日升Android消息組件集成工作完成。

    C、接口方式

    1)、服務(wù)器端接口采用基于http協(xié)議的訪問方式,采用http協(xié)議從服務(wù)器中獲取各種信息,實現(xiàn)通知消息的推送。

如使用以下方式和參數(shù)就可以實現(xiàn)各種用戶消息的查詢:

  http://localhost:8080/user.do?action=getAllUser&isOnline=&userID=&userType=&deptID=&deptName=&realName=

    使用如下方式就可以實現(xiàn)各種消息的推送:

    http://localhost:8080/notification.do?action=pushNoti&userNames=&title=&content=

    2)、Android客戶端接口采用廣播機(jī)制。

    消息接收:當(dāng)XMPP協(xié)議組件接收到推送消息時,將按照一定格式廣播該消息,通知客戶端其他應(yīng)用接收并處理該消息。

    消息發(fā)送:客戶端應(yīng)用需要向服務(wù)器或者其他客戶端發(fā)送即時消息時,只需按一定格式廣播該消息,XMPP組件就會自動接收該消息并發(fā)送到指定的其他客戶端。

    D、優(yōu)勢特點

    1)、系統(tǒng)集成簡單,無需復(fù)雜的設(shè)置。

    2)、Android客戶端應(yīng)用和九日升Android消息推送組件完全分離,通過接口相互調(diào)用,實現(xiàn)模塊應(yīng)用最優(yōu)化。

    3)、客戶端通訊機(jī)制采用廣播方式,給客戶端應(yīng)用帶來極大的靈活性和可擴(kuò)展性,可以自由處理接收到的推送消息。

    4)、九日升Android消息推送組件在服務(wù)器端具備消息存儲、消息重發(fā)、消息路由等功能,在客戶端部分具備斷線重連、、收到確認(rèn)、閱讀確認(rèn)、消息發(fā)送、命令執(zhí)行等功能,確保消息能夠推送到客戶端,同時也保證客戶端能夠收到、閱讀消息。

   E 應(yīng)用范圍

  九日升Android消息推送組件可在以下場景中使用:

    1)、用于消息推送。如:通知下達(dá)、應(yīng)急指揮等。

    2)、用戶及時消息交互。如在線聊天、工作情況交互等。

    3)、用于遠(yuǎn)程控制。如控制遠(yuǎn)程客戶端的狀態(tài)、數(shù)據(jù)上報等。

 最后,希望轉(zhuǎn)載的朋友能夠尊重作者的勞動成果,加上轉(zhuǎn)載地址。


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产一区国产二区在线视频| 欧美成人一区二区三区在线| 免费在线观看欧美喷水黄片| 亚洲国产欧美精品久久| 老司机激情五月天在线不卡| 国产内射一级二级三级| 一区中文字幕人妻少妇| 91精品国自产拍老熟女露脸| 中文字幕中文字幕一区二区| 两性色午夜天堂免费视频| 日韩在线中文字幕不卡| 国产精品激情对白一区二区| 加勒比人妻精品一区二区| 日韩中文字幕人妻精品| 无套内射美女视频免费在线观看 | 国产欧美一区二区三区精品视| 91欧美日韩中在线视频| 日韩丝袜诱惑一区二区| 日本免费一区二区三女| 精品精品国产欧美在线| 99久免费精品视频在线观| 国产a天堂一区二区专区| 久久99爱爱视频视频| 美女黄片大全在线观看| 亚洲欧美日韩另类第一页| 国产中文另类天堂二区| 欧美日韩精品一区二区三区不卡| 日韩欧美国产精品自拍| 亚洲国产精品无遮挡羞羞| 国产成人人人97超碰熟女| 日韩精品在线观看一区| 亚洲av秘片一区二区三区| 色老汉在线视频免费亚欧| 亚洲性生活一区二区三区| 欧美乱视频一区二区三区| 亚洲最新一区二区三区| 成人国产激情福利久久| 欧美日韩免费观看视频| 国产亚州欧美一区二区| 人妻熟女中文字幕在线| 久久99精品日韩人妻|