網路雲(Bai Cloud)是網路推出的一項雲存儲服務,首次注冊即有機會獲得2T的空間,已覆蓋主流PC和手機操作系統,包含Web版、Windows版、Mac版、android版、iphone版和Windows Phone版,用戶將可以輕松將自己的文件上傳到網盤上,並可跨終端隨時隨地查看和分享。
網路雲推送
網路提供了完整的Demo幫助開發者集成雲推送服務,推送服務SDK通過.jar包和.so文件的方式可以集成到我們自己的工程中。在此之前,需要到網路開發者中心進行應用注冊並獲取API Key,這個作為使用推送服務應用的唯一標示,具體流程我就不贅述了,需要使用的話可以直接訪問網路開發者中心進行查看。
下面主要看看Android_SDK的整體概覽和內部運行機制:
上圖是網路雲推送Android_SDK的框架圖,通過SDK可以繞過復雜的Push HTTP/HTTPS API直接和Push伺服器進行交互,主要提供如下功能:
Push服務初始化以及Client注冊綁定
創建或刪除標簽(Tag)
接收Push Server的通知並提供自定義展現消息方式
推送統計分析功能,包括通知的點擊和刪除統計以及應用使用情況統計
富媒體推送
在Android端,總共實現了三個Receiver和一個Service,其中,一個Receiver是用來處理注冊綁定後接收服務端返回的channelID等信息:
<receiver android:name="com..android.pushservice.RegistrationReceiver" android:process=": bdservice_v1"> <intent-filter> <action android:name="com..android.pushservice.action.METHOD " /> <action android:name="com..android.pushservice.action.BIND_SYNC " /> </intent-filter> <intent-filter> <action android:name="android.intent.action.PACKAGE_REMOVED"/> <data android:scheme="package" /> </intent-filter> </receiver>
第二個Receiver是用於接收系統消息以保證PushService正常運行:
<receiver android:name="com..android.pushservice.PushServiceReceiver" android:process=": bdservice_v1"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> <action android:name="com..android.pushservice.action.notification.SHOW" /> <action android:name="com..android.pushservice.action.media.CLICK" /> </intent-filter> </receiver>
第三個Receiver就是開發者自己實現的用來接收並處理推送消息:
<receiver android:name="your.package.PushMessageReceiver"> <intent-filter> <!-- 接收 push 消息 --> <action android:name="com..android.pushservice.action.MESSAGE" /> <!-- 接收 bind、setTags 等 method 的返回結果 --> <action android:name="com..android.pushservice.action.RECEIVE" /> </intent-filter> </receiver>
一個Service就是在後台運行的用於保障與Push Server維持長連接並做相關處理的後台服務:
<service android:name="com..android.pushservice.PushService" android:exported="true" android:process=" bdservice_v1"/> <!-- push service end -->
在開發者自己需要處理的廣播接收器中,可以對接收到的推送消息進行處理,Push消息通過 action為com..android.pushservice.action.MESSAGE的Intent把數據發送給客戶端your.package.PushMessageReceiver,消息格式由應用自己決定,PushService只負責把伺服器下發的消息以字元串格式透傳給客戶端。介面調用回調通過action為com..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)) { //獲取消息內容 String message = intent.getExtras().getString( PushConstants.EXTRA_PUSH_MESSAGE_STRING); //消息的用戶自定義內容讀取方式 Log.i(TAG, "onMessage: " + message); } else if (intent.getAction().equals(PushConstants.ACTION_RECEIVE)) { //處理綁定等方法的返回數據 //PushManager.startWork()的返回值通過PushConstants.METHOD_BIND得到 //獲取方法 final String method = intent .getStringExtra(PushConstants.EXTRA_METHOD); //方法返回錯誤碼。若綁定返回錯誤(非0),則應用將不能正常接收消息。 //綁定失敗的原因有多種,如網路原因,或access token過期。 //請不要在出錯時進行簡單的startWork調用,這有可能導致死循環。 //可以通過限制重試次數,或者在其他時機重新調用來解決。 final int errorCode = intent .getIntExtra(PushConstants.EXTRA_ERROR_CODE, PushConstants.ERROR_SUCCESS); //返回內容 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); } } }
通過在入口Activity的onCreate方法中進行推送服務的注冊綁定後,即可在推送管理後台或是自己的應用伺服器上進行消息推送的操作了。
PushManager.startWork(getApplicationContext(),PushConstants.LOGIN_TYPE_API_KEY, "you_api_key");
另外,雲推送提供php、java等Server端的SDK供開發者在自己的伺服器上實現推送服務進行定製化管理和操作。
四、單服務單通道機制
網路雲推送實現了單服務單通道的機制,如果在一台Device上安裝了多款Push SDK的應用,不會為每個應用都創建PushService,而是會採用多應用共享一個PushService的模式。這樣既能減少資源消耗也能降低網路流量。PushService運行於一個獨立進程,沒有和主進程運行於同一進程,所以主進程不需要常駐內存,當有新的Push消息時,PushService會通過Intent發送消息給主進程進行處理。通過Intent,以指定目標應用包名的方式,發送私有消息給應用。應用即不能接收不屬於自己的消息,也不能截取別人的消息,同時又降低了消耗,如下為示意圖:
後記:如今,國內提供Android推送服務的還有很多家,例如個推和極光推送等,實現的原理大同小異,開發者可以根據自身需要進行選擇。
Ⅱ java如何實現兩個客服端之間互相發送信息
兩個客戶端發送消息,是通過伺服器來處理的
建議你查看網路雲推送,或者極光推送,都是免費
他們的推送技術有個叫推聊的功能就可以直接推送給指定的客戶端
你不需要去實現這種邏輯
當然如果你非要用自己伺服器去做的話,也是可以的,以下給你提供思路:
用長連接或者java sokcet 即所有客戶端都和伺服器保持連接,一但有數據寫入就向客戶端發送數據
用輪詢,即客戶端定時去查消息,例如A向B發消息,首先把數據寫到伺服器,B去查伺服器就能查出來了
Ⅲ 百度雲推送服務端SDK怎麼用
使用方法如下:Ⅳ 如何利用Java語言實現消息推送到手機app
首先APP後台就得有這樣的輪詢程序,比如每次打開app時觸發,比如每隔10分鍾觸發,每次觸發就調用下伺服器端的服務,服務端去拉取要推送的信息,或者知道對方的手機號或微信號,那就直接調用簡訊介面或直接發送微信信息了。Ⅳ java 如何實現系統消息推送
消息推送方式分為兩種:短連接和長連接。也就是客戶端與伺服器之間的數據傳輸交互方式不同。Ⅵ java 擁有channelid怎樣測試百度推送
這個確實是個問題。我想你說的user_id應該是推送時要使用的user_id,是雲伺服器配置給客戶端的唯一標識。 但你客戶端APP的SERVER端是不知道你的這個標識的,伺服器端觸發推送的時候是無法推送到客戶端APP的。目前可能只有將APP和雲伺服器配置給你的user_id 回傳到你們自己的伺服器端。由你們APP伺服器端長期維護這兩個標識的對映關系。推送目前好像不會維護這個對映關系。
包括tag標簽和其對應的user_id 這種一對多的關系 可能還是需要APP伺服器端自己維護;目測推送服務沒有維護這些關聯關系。
Ⅶ 百度雲推送 java開發的伺服器端與android開發的客戶端之間的通信
高大上,直接問網路或網路客服吧。