天天看點

安卓消息推送解決方案

一、推送工具使用

我們在做安卓開發的時候,通常需要一些消息推送功能,我個人平時用的是極光推送,極光推送(JPush)是一個端到端的推送服務,使得伺服器端消息能夠及時地推送到終端使用者手機上,讓開發者積極地保持與使用者的連接配接,進而提高使用者活躍度、提高應用的留存率。極光推送用戶端支援 Android, iOS 兩個平台。

自己按照源碼重新做了一個簡單的可接收消息的demo,

下面給出的是PushReceiver的代碼:

當然,這段代碼用了一個自定義消息的功能,可以推送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秒一次)向伺服器發送一段極短的資料,作為心跳包, 伺服器定時收到心跳,證明用戶端活着,才會發消息.否則将消息儲存起來,等用戶端活了之後(重新連接配接),重新發送.

繼續閱讀