真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

推送java服務(wù)端代碼 java后端推送消息給app

java向手機(jī)推送消息有哪些方式?

Java Web 服務(wù)器的消息推送的幾種方案有:輪詢、長(zhǎng)連接、DWR和HTTP2協(xié)議,有以下兩種方法。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到內(nèi)江網(wǎng)站設(shè)計(jì)與內(nèi)江網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:做網(wǎng)站、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋內(nèi)江地區(qū)。

一種,自己搭推送服務(wù)器,一般主流使用XMPP協(xié)議,也有相對(duì)成熟的框架和開(kāi)源項(xiàng)目給你使用。。優(yōu)點(diǎn)是可以自由控制因?yàn)榇a都是自己寫的,缺點(diǎn)是搭建難度大,要吃透很花時(shí)間,而且心跳包的控制和終端的電量消耗都需要一定的水平

另外一種是用第三方推送,比如極光推送,個(gè)推等,優(yōu)點(diǎn)是簡(jiǎn)單易用,不用考慮服務(wù)端的實(shí)現(xiàn),然后有相對(duì)完整的文檔,寫幾段java代碼就好,對(duì)于中小公司等開(kāi)發(fā)資源少的公司,極光推送是經(jīng)過(guò)考驗(yàn)的大規(guī)模 App 推送平臺(tái),每天推送消息量級(jí)為數(shù)百億條,能確保消息送達(dá)率

java服務(wù)器推送消息給android

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

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

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

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

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

A、C2DM云端推送方案

在Android手機(jī)平臺(tái)上,Google提供了C2DM(Cloudto Device Messaging)服務(wù)。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)用程序更新和用戶數(shù)據(jù)。

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

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

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

wmqtt.jar

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

C、RSMB實(shí)現(xiàn)推送功能

Really Small Message Broker (RSMB)

,是一個(gè)簡(jiǎn)單的MQTT代理,同樣由IBM提供,其查看地址是:。缺省打開(kāi)1883端口,應(yīng)用程序當(dāng)中,它負(fù)責(zé)接收來(lái)自服務(wù)器的消息并將其轉(zhuǎn)發(fā)給指定的移動(dòng)設(shè)備。SAM是一個(gè)針對(duì)MQTT寫的PHP庫(kù)。我們可以從這個(gè)地址下載它.

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

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

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

1)

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

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

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

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

百度云推送java服務(wù)器怎么弄

百度云(Baidu Cloud)是百度推出的一項(xiàng)云存儲(chǔ)服務(wù),首次注冊(cè)即有機(jī)會(huì)獲得2T的空間,已覆蓋主流PC和手機(jī)操作系統(tǒng),包含Web版、Windows版、Mac版、Android版、iphone版和Windows Phone版,用戶將可以輕松將自己的文件上傳到網(wǎng)盤上,并可跨終端隨時(shí)隨地查看和分享。

百度云推送

百度提供了完整的Demo幫助開(kāi)發(fā)者集成云推送服務(wù),推送服務(wù)SDK通過(guò).jar包和.so文件的方式可以集成到我們自己的工程中。在此之前,需要到百度開(kāi)發(fā)者中心進(jìn)行應(yīng)用注冊(cè)并獲取API Key,這個(gè)作為使用推送服務(wù)應(yīng)用的唯一標(biāo)示,具體流程我就不贅述了,需要使用的話可以直接訪問(wèn)百度開(kāi)發(fā)者中心進(jìn)行查看。

下面主要看看Android_SDK的整體概覽和內(nèi)部運(yùn)行機(jī)制:

上圖是百度云推送Android_SDK的框架圖,通過(guò)SDK可以繞過(guò)復(fù)雜的Push HTTP/HTTPS API直接和Push服務(wù)器進(jìn)行交互,主要提供如下功能:

Push服務(wù)初始化以及Client注冊(cè)綁定

創(chuàng)建或刪除標(biāo)簽(Tag)

接收Push Server的通知并提供自定義展現(xiàn)消息方式

推送統(tǒng)計(jì)分析功能,包括通知的點(diǎn)擊和刪除統(tǒng)計(jì)以及應(yīng)用使用情況統(tǒng)計(jì)

富媒體推送

在Android端,總共實(shí)現(xiàn)了三個(gè)Receiver和一個(gè)Service,其中,一個(gè)Receiver是用來(lái)處理注冊(cè)綁定后接收服務(wù)端返回的channelID等信息:

receiver android:name="com.baidu.android.pushservice.RegistrationReceiver" android:process=": bdservice_v1" intent-filter action android:name="com.baidu.android.pushservice.action.METHOD " / action android:name="com.baidu.android.pushservice.action.BIND_SYNC " / /intent-filter intent-filter action android:name="android.intent.action.PACKAGE_REMOVED"/ data android:scheme="package" / /intent-filter /receiver

第二個(gè)Receiver是用于接收系統(tǒng)消息以保證PushService正常運(yùn)行:

receiver android:name="com.baidu.android.pushservice.PushServiceReceiver" android:process=": bdservice_v1" intent-filter action android:name="android.intent.action.BOOT_COMPLETED" / action android:name="android點(diǎn)虐 .conn.CONNECTIVITY_CHANGE" / action android:name="com.baidu.android.pushservice.action.notification.SHOW" / action android:name="com.baidu.android.pushservice.action.media.CLICK" / /intent-filter /receiver

第三個(gè)Receiver就是開(kāi)發(fā)者自己實(shí)現(xiàn)的用來(lái)接收并處理推送消息:

receiver android:name="your.package.PushMessageReceiver" intent-filter !-- 接收 push 消息 -- action android:name="com.baidu.android.pushservice.action.MESSAGE" / !-- 接收 bind、setTags 等 method 的返回結(jié)果 -- action android:name="com.baidu.android.pushservice.action.RECEIVE" / /intent-filter /receiver

一個(gè)Service就是在后臺(tái)運(yùn)行的用于保障與Push Server維持長(zhǎng)連接并做相關(guān)處理的后臺(tái)服務(wù):

service android:name="com.baidu.android.pushservice.PushService" android:exported="true" android:process=" bdservice_v1"/ !-- push service end --

在開(kāi)發(fā)者自己需要處理的廣播接收器中,可以對(duì)接收到的推送消息進(jìn)行處理,Push消息通過(guò) action為com.baidu.android.pushservice.action.MESSAGE的Intent把數(shù)據(jù)發(fā)送給客戶端your.package.PushMessageReceiver,消息格式由應(yīng)用自己決定,PushService只負(fù)責(zé)把服務(wù)器下發(fā)的消息以字符串格式透?jìng)鹘o客戶端。接口調(diào)用回調(diào)通過(guò)action為com.baidu.android.pushservice.action.RECEIVE的Intent 返回給your.package.PushMessageReceiver。

PushMessageReceiver.java

/** * Push消息處理receiver * @Author Ryan * @Create 2013-8-6 下午5:59:38 */ public class PushMessageReceiver extends BroadcastReceiver { public static final String TAG = PushMessageReceiver.class.getSimpleName(); @Override public void onReceive(final Context context, Intent intent) { if (intent.getAction().equals(PushConstants.ACTION_MESSAGE)) { //獲取消息內(nèi)容 String message = intent.getExtras().getString( PushConstants.EXTRA_PUSH_MESSAGE_STRING); //消息的用戶自定義內(nèi)容讀取方式 Log.i(TAG, "onMessage: " + message); } else if (intent.getAction().equals(PushConstants.ACTION_RECEIVE)) { //處理綁定等方法的返回?cái)?shù)據(jù) //PushManager.startWork()的返回值通過(guò)PushConstants.METHOD_BIND得到 //獲取方法 final String method = intent .getStringExtra(PushConstants.EXTRA_METHOD); //方法返回錯(cuò)誤碼。若綁定返回錯(cuò)誤(非0),則應(yīng)用將不能正常接收消息。 //綁定失敗的原因有多種,如網(wǎng)絡(luò)原因,或access token過(guò)期。 //請(qǐng)不要在出錯(cuò)時(shí)進(jìn)行簡(jiǎn)單的startWork調(diào)用,這有可能導(dǎo)致死循環(huán)。 //可以通過(guò)限制重試次數(shù),或者在其他時(shí)機(jī)重新調(diào)用來(lái)解決。 final int errorCode = intent .getIntExtra(PushConstants.EXTRA_ERROR_CODE, PushConstants.ERROR_SUCCESS); //返回內(nèi)容 final String content = new String( intent.getByteArrayExtra(PushConstants.EXTRA_CONTENT)); //用戶在此自定義處理消息,以下代碼為demo界面展示用 Log.d(TAG, "onMessage: method : " + method); Log.d(TAG, "onMessage: result : " + errorCode); Log.d(TAG, "onMessage: content : " + content); } } }

通過(guò)在入口Activity的onCreate方法中進(jìn)行推送服務(wù)的注冊(cè)綁定后,即可在推送管理后臺(tái)或是自己的應(yīng)用服務(wù)器上進(jìn)行消息推送的操作了。

PushManager.startWork(getApplicationContext(),PushConstants.LOGIN_TYPE_API_KEY, "you_api_key");

另外,云推送提供php、java等Server端的SDK供開(kāi)發(fā)者在自己的服務(wù)器上實(shí)現(xiàn)推送服務(wù)進(jìn)行定制化管理和操作。

四、單服務(wù)單通道機(jī)制

百度云推送實(shí)現(xiàn)了單服務(wù)單通道的機(jī)制,如果在一臺(tái)Device上安裝了多款Push SDK的應(yīng)用,不會(huì)為每個(gè)應(yīng)用都創(chuàng)建PushService,而是會(huì)采用多應(yīng)用共享一個(gè)PushService的模式。這樣既能減少資源消耗也能降低網(wǎng)絡(luò)流量。PushService運(yùn)行于一個(gè)獨(dú)立進(jìn)程,沒(méi)有和主進(jìn)程運(yùn)行于同一進(jìn)程,所以主進(jìn)程不需要常駐內(nèi)存,當(dāng)有新的Push消息時(shí),PushService會(huì)通過(guò)Intent發(fā)送消息給主進(jìn)程進(jìn)行處理。通過(guò)Intent,以指定目標(biāo)應(yīng)用包名的方式,發(fā)送私有消息給應(yīng)用。應(yīng)用即不能接收不屬于自己的消息,也不能截取別人的消息,同時(shí)又降低了消耗,如下為示意圖:

后記:如今,國(guó)內(nèi)提供Android推送服務(wù)的還有很多家,例如個(gè)推和極光推送等,實(shí)現(xiàn)的原理大同小異,開(kāi)發(fā)者可以根據(jù)自身需要進(jìn)行選擇。


新聞標(biāo)題:推送java服務(wù)端代碼 java后端推送消息給app
文章轉(zhuǎn)載:http://weahome.cn/article/ddsdgce.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部