**一、推送工具使用**
我們在做安卓開發的時候,通常需要一些消息推送功能,我個人平時用的是極光推送,極光推送(JPush)是一個端到端的推送服務,使得服務器端消息能夠及時地推送到終端用戶手機上,讓開發者積極地保持與用戶的連接,從而提高用戶活躍度、提高應用的留存率。極光推送客戶端支持 Android, iOS 兩個平臺。
使用的時候我們可以先去官網看[開發文檔](http://docs.jpush.io/guideline/android_guide/),我是在我的新聞客戶端中引用了這個sdk,下載解壓之后可以按照步驟做相應操作就可以了,個人感覺還是挺實用的。
自己按照源碼重新做了一個簡單的可接收消息的demo,
下面給出的是PushReceiver的代碼:
~~~
public class PushReceiver extends BroadcastReceiver {
private static final String TAG = "PushReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
Log.d(TAG, "onReceive - " + intent.getAction());
if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
} else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent
.getAction())) {
System.out.println("收到了自定義消息。消息內容是:"
+ bundle.getString(JPushInterface.EXTRA_MESSAGE));
// 自定義消息不會展示在通知欄,完全要開發者寫代碼去處理
} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent
.getAction())) {
System.out.println("收到了通知");
// 在這里可以做些統計,或者做些其他工作
} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent
.getAction())) {
System.out.println("用戶點擊打開了通知");
// 在這里可以自己寫代碼去定義用戶點擊后的行為
String extra = bundle.getString(JPushInterface.EXTRA_EXTRA);
System.out.println("附加信息:" + extra);
try {
JSONObject jo = new JSONObject(extra);
String url = jo.getString("url");
System.out.println("url:" + url);
// 跳瀏覽器加載網頁
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
~~~
當然,這段代碼用了一個自定義消息的功能,可以推送json數據,不只是推送標題消息哦!所有需要客戶端被動接收信息的功能模塊,都可以用推送實現
然后用JSONObject jo = new JSONObject(extra);
String url = jo.getString("url");來解析,當然我們還可以用Gson來解析json數據。

**二、推送原理簡介**
-xmpp 是一種基于TCP/IP的協議, 這種協議更適合消息發送。七層協議。
?事實上Google官方的C2DM服務器底層也是采用XMPP協議進行的封裝。XMPP(可擴展通訊和表示協議)是基于可擴展標記語言(XML)的協議,它用于即時消息(IM)以及在線探測。這個協議可能最終允許因特網用戶向因特網上的其他任何人發送即時消息。關于XMPP協議我在上篇博文中已經介紹,大家可以參考下文章:http://www.cnblogs.com/hanyonglu/archive/2012/03/04/2378956.html
- socket 套接字, 發送和接收網絡請求。這個我在大三的時候上網絡編程的時候學過,但是當時沒有用心學額
我們知道兩個進程如果需要進行通訊最基本的一個前提能能夠唯一的標示一個進程,在本地進程通訊中我們可以使用PID來唯一標示一個進程,但PID只在本地唯一,網絡中的兩個進程PID沖突幾率很大,這時候我們需要另辟它徑了,我們知道IP層的ip地址可以唯一標示主機,而TCP層協議和端口號可以唯一標示主機的一個進程,這樣我們可以利用ip地址+協議+端口號唯一標示網絡中的一個進程。

能夠唯一標示網絡中的進程后,它們就可以利用socket進行通信了,什么是socket呢?我們經常把socket翻譯為套接字,socket是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層復雜的操作抽象為幾個簡單的接口供應用層調用已實現進程在網絡中通信。
長連接 keep-alive, 服務器基于長連接找到設備,發送消息
-心跳包 , 客戶端會定時(30秒一次)向服務器發送一段極短的數據,作為心跳包, 服務器定時收到心跳,證明客戶端活著,才會發消息.否則將消息保存起來,等客戶端活了之后(重新連接),重新發送.
- 前言
- 內存溢出的解決方案
- 安卓消息推送解決方案
- 語言識別和聊天機器人的實現
- 抽屜效果的實現(DrawerLayout和SlidingMenu的對比)
- 植物大戰僵尸經典開發步驟
- 屏幕適配全攻略
- 安卓圖像處理入門教程
- android開發常用工具箱
- java基礎知識總結
- 剖析軟件外包項目
- java基礎知識——網絡編程、IO流
- 安卓性能優化手冊
- 電商活動中刮刮卡的實現
- Android系統的安全設計與架構
- AsnycTask的內部的實現機制
- Android應用UI設計流程
- 數據結構與算法,每日一道
- html5全解析
- 深入解讀XML解析
- 新聞客戶端案例開發
- 細說Http協議
- win10+ubuntu雙系統安裝方案
- 隨機驗證碼實現案例
- 動態數組的實現案例
- 猜拳游戲案例
- 商業級項目——基金客戶端的架構設計與開發(上)