android消息推送GCM、XMPP、MQTT三種方案的優(yōu)劣如下:

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、成都網(wǎng)站制作、黃平網(wǎng)絡(luò)推廣、成都小程序開發(fā)、黃平網(wǎng)絡(luò)營銷、黃平企業(yè)策劃、黃平品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供黃平建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:chinadenli.net
1、GCM
(1)優(yōu)點(diǎn):提供的服務(wù)、原生、簡單,無需實(shí)現(xiàn)和部署的服務(wù)端。
(2)缺點(diǎn):Android版本限制(必須大于2.2版本),該服務(wù)在國內(nèi)不夠穩(wěn)定、需要用戶綁定相關(guān)的Google帳號,而且只受限于Google。
2、XMPP
(1)優(yōu)點(diǎn):成熟、強(qiáng)大、可擴(kuò)展也性強(qiáng)、目前主要應(yīng)用于聊天系統(tǒng)中,且已有開源的Java版的開發(fā)實(shí)例androidpn。
(2)缺點(diǎn):協(xié)議較復(fù)雜、冗余(基于XML)、也比較費(fèi)流量和費(fèi)電,部署硬件成本高。
3、MQTT
(1)優(yōu)點(diǎn):簡潔、小巧、可擴(kuò)展性強(qiáng)、是比較省流量、省電。目前已有C++版的服務(wù)端組件rsmb。
(2)缺點(diǎn):不夠成熟、實(shí)現(xiàn)起來較復(fù)雜、服務(wù)端組件rsmb不開源,也是部署硬件成本較高。
消息推送軟件可以使用深圳極光的。極光成立于2011年;憑借領(lǐng)先的人工智能及機(jī)器學(xué)習(xí)技術(shù),極光將在APP消息推送、用戶增長與活躍等方面為客戶提供服務(wù)。
Android 幾種消息推送方案總結(jié):
一、使用GCM(Google Cloude Messaging)
Android自帶的推送GCM可以幫助開發(fā)人員給他們的Android應(yīng)用程序發(fā)送數(shù)據(jù)。它是一個(gè)輕量級的消息,告訴Android應(yīng)用程序有新的數(shù)據(jù)要從服務(wù)器獲取,或者是一個(gè)消息,其中包含了4KB的payload data(像即時(shí)通訊這類應(yīng)用程序可以直接使用該payload消息)。
GCM服務(wù)處理排隊(duì)的消息,并把消息傳遞到目標(biāo)設(shè)備上運(yùn)行的Android應(yīng)用程序。
二、使用XMPP協(xié)議(Openfire+Spark+Smark)
XMPP是一種基于XML的協(xié)議,它繼承了在XML環(huán)境中靈活的發(fā)展性,有很強(qiáng)的可擴(kuò)展性。包括上面講的GCM服務(wù)器底層也是采用XMPP協(xié)議封裝的。
三、使用MQTT協(xié)議(想了解更多可以看)輕量級的、基于代理的“發(fā)布/訂閱”模式的消息傳輸協(xié)議。
四、HTTP輪循方式。定時(shí)向HTTP服務(wù)端接口(Web Service API)獲取最新消息。
五、采用第三方服務(wù)。客戶端只需要導(dǎo)入第三方提供的lib庫,有第三方管理長連接,負(fù)責(zé)消息的接收/發(fā)送。同時(shí)對消息都有比較詳細(xì)的報(bào)表數(shù)據(jù),可以用于做數(shù)據(jù)分析、挖掘,改善用戶體驗(yàn)。
中合對比還是采用第三方服務(wù)簡捷高效。比如極光推送就很好用,極光推送搭建起一個(gè)高度穩(wěn)定、可擴(kuò)展的云端架構(gòu),極大地幫助移動(dòng)應(yīng)用開發(fā)者節(jié)約開發(fā)和維護(hù)的成本,輕松實(shí)現(xiàn)毫秒級的精準(zhǔn)推送。
首先第一、與服務(wù)器建立好連接
關(guān)鍵代碼:127.0.0.1為服務(wù)器IP,5222為服務(wù)器端口號
[java] view plain copy print?
/**
* 連接服務(wù)器
*
* @return
*/
public boolean conServer() {
ConnectionConfiguration config = new ConnectionConfiguration(
127.0.0.1, 5222);
/** 是否啟用安全驗(yàn)證 */
config.setSASLAuthenticationEnabled(false);
/** 是否啟用調(diào)試 */
// config.setDebuggerEnabled(true);
/** 創(chuàng)建connection鏈接 */
try {
connection = new XMPPConnection(config);
/** 建立連接 */
connection.connect();
return true;
} catch (XMPPException e) {
e.printStackTrace();
}
return false;
}
第二、實(shí)現(xiàn)注冊
關(guān)鍵代碼:
以下代碼注釋都很清楚了,如有不懂的地方可以留言,這里就不多做解釋了。
[java] view plain copy print?
/**
* 注冊
*
* @param account 注冊帳號
* @param password 注冊密碼
* @return 1、注冊成功 0、服務(wù)器沒有返回結(jié)果2、這個(gè)賬號已經(jīng)存在3、注冊失敗
*/
public String regist(String account, String password) {
if (connection == null)
return "0";
Registration reg = new Registration();
reg.setType(IQ.Type.SET);
reg.setTo(ClientConServer.connection.getServiceName());
reg.setUsername(account);// 注意這里createAccount注冊時(shí),參數(shù)是username,不是jid,是“@”前面的部分。
reg.setPassword(password);
reg.addAttribute("android", "geolo_createUser_android");// 這邊addAttribute不能為空,否則出錯(cuò)。所以做個(gè)標(biāo)志是android手機(jī)創(chuàng)建的吧!!!!!
PacketFilter filter = new AndFilter(new PacketIDFilter(
reg.getPacketID()), new PacketTypeFilter(IQ.class));
PacketCollector collector = ClientConServer.connection
.createPacketCollector(filter);
ClientConServer.connection.sendPacket(reg);
IQ result = (IQ) collector.nextResult(SmackConfiguration
.getPacketReplyTimeout());
// Stop queuing results
collector.cancel();// 停止請求results(是否成功的結(jié)果)
if (result == null) {
Log.e("RegistActivity", "No response from server.");
return "0";
} else if (result.getType() == IQ.Type.RESULT) {
return "1";
} else { // if (result.getType() == IQ.Type.ERROR)
if (result.getError().toString().equalsIgnoreCase("conflict(409)")) {
Log.e("RegistActivity", "IQ.Type.ERROR: "
+ result.getError().toString());
return "2";
} else {
Log.e("RegistActivity", "IQ.Type.ERROR: "
+ result.getError().toString());
return "3";
}
}
}
第三、實(shí)現(xiàn)登錄
關(guān)鍵代碼: 代碼很簡單不做太多解釋
[java] view plain copy print?
/**
* 登錄
*
* @param a 登錄帳號
* @param p 登錄密碼
* @return
*/
public boolean login(String a, String p) {
try {
if (connection == null)
return false;
/** 登錄 */
connection.login(a, p);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
第四、修改密碼
關(guān)鍵代碼:同樣很簡單
[java] view plain copy print?
/**
* 修改密碼
* @param connection
* @return
*/
public static boolean changePassword(XMPPConnection connection,String pwd)
{
try {
connection.getAccountManager().changePassword(pwd);
return true;
} catch (Exception e) {
return false;
}
}
android消息推送GCM、XMPP、MQTT三種方案的優(yōu)劣:
1、GCM服務(wù)(Google Cloud Messaging)優(yōu)點(diǎn):Google提供的服務(wù)、原生、簡單,無需實(shí)現(xiàn)和部署服務(wù)端。缺點(diǎn):Android版本限制,該服務(wù)在國內(nèi)不夠穩(wěn)定、需要用戶綁定Google帳號,受限于Google。
2、XMPP協(xié)議(Openfire + Spark + Smack)優(yōu)點(diǎn):協(xié)議成熟、強(qiáng)大、可擴(kuò)展性強(qiáng)、目前主要應(yīng)用于許多聊天系統(tǒng)中,且已有開源的Java版的開發(fā)實(shí)例androidpn。缺點(diǎn):協(xié)議較復(fù)雜、冗余(基于XML)、費(fèi)流量、費(fèi)電,部署硬件成本高。
3、MQTT協(xié)議優(yōu)點(diǎn):協(xié)議簡潔、小巧、可擴(kuò)展性強(qiáng)、省流量、省電,目前已經(jīng)應(yīng)用到企業(yè)領(lǐng)域,且已有C++版的服務(wù)端組件rsmb。缺點(diǎn):不夠成熟、實(shí)現(xiàn)較復(fù)雜、服務(wù)端組件rsmb不開源,部署硬件成本較高。
d消息推送可以去了解一下極光,極光是個(gè)不錯(cuò)的平臺。極光緊密圍繞移動(dòng)開發(fā)者需求,打造的開發(fā)者服務(wù)平臺,可以提供一站式SaaS服務(wù),通過全面覆蓋PC、手機(jī)、傳感器、無線路由器等多種設(shè)備數(shù)據(jù),打造全域數(shù)據(jù)平臺。當(dāng)前,不斷更新的SaaS產(chǎn)品及服務(wù)已深受國內(nèi)百萬開發(fā)者的認(rèn)可和信賴。
04-24 00:51:37.885: W/System.err(329): java.lang.IllegalStateException: Not connected to server.
04-24 00:51:37.885: W/System.err(329): at org.jivesoftware.smack.XMPPConnection.sendPacket(XMPPConnection.java:488)
04-24 00:51:37.885: W/System.err(329): at org.jivesoftware.smack.NonSASLAuthentication.authenticate(NonSASLAuthentication.java:69)
04-24 00:51:37.895: W/System.err(329): at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:353)
04-24 00:51:37.895: W/System.err(329): at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:230)
04-24 00:51:37.895: W/System.err(329): at org.jivesoftware.smack.Connection.login(Connection.java:353)
04-24 00:51:37.895: W/System.err(329): at com.wxs.model.User.login(User.java:200)
04-24 00:51:37.895: W/System.err(329): at com.wechat.project.activity.LoginAcitivity$4$1.run(LoginAcitivity.java:78)
04-24 00:51:37.905: W/System.err(329): at java.lang.Thread.run(Thread.java:1096)
其他推送方式還有:C2DM、輪詢、SMS、MQTT協(xié)議、XMPP協(xié)議等等,相對于這些推送方式,第三方推送方式的特點(diǎn)分別是:
請記住一個(gè)潛規(guī)則:操作系統(tǒng)是不會殺死屬于自己品牌的推送服務(wù)。
當(dāng)今市場上的Android手機(jī)系統(tǒng)份額最高是MIUI系統(tǒng),即小米(具體排名請看 )
因?yàn)椋好赓M(fèi)、到達(dá)率高且在Android系統(tǒng)市場份額第一的MIUI系統(tǒng)上不被殺死。所以,如果要選擇手機(jī)廠商的推送服務(wù), 請選擇小米推送作為第三方平臺實(shí)現(xiàn)推送服務(wù)
下面一些應(yīng)用可以從側(cè)面來證明我的推斷:
請記住一個(gè)規(guī)則:推送系統(tǒng)會共享一條推送渠道
所以說,關(guān)于如何選擇第三方平臺類的推送,推送平臺的規(guī)模效應(yīng)就很重要了。
那如何得知他們的規(guī)模和市場份額呢?按個(gè)人經(jīng)驗(yàn),主要看兩點(diǎn):
BAT大廠其實(shí)并沒有什么優(yōu)勢, 同時(shí)謹(jǐn)記:
所以,大家可根據(jù)自己的使用場景來進(jìn)行消息推送平臺的選擇。
通常第三方推送平臺都支持兩種推送消息類型:通知欄消息和透傳消息。
不定期分享關(guān)于 安卓開發(fā) 的干貨,追求 短、平、快 ,但 卻不缺深度 。
新聞標(biāo)題:androidxmpp的簡單介紹
分享URL:http://chinadenli.net/article26/dseppjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、關(guān)鍵詞優(yōu)化、外貿(mào)建站、域名注冊、微信公眾號、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)