android實現主動推送小結
推送功能,大致能用其實就這么兩種,一種pull和一種push:
所謂pull就是客戶端做論詢,定期從服務端指定接口獲取數據
而push就是目前較主流的,服務端主動推數據到客戶端(IOS實現起來很簡單)
而實現方式呢,能用其實就幾種
1,MQTT(IBM的一套輕量訂閱)
2,http長連接(使用keep-alive技術,http1.0 需要添加此字段 http1.1默認是開啟的)
3, AndroidPn(開源框架都有)
我目前只跑通了 mqtt 和 androidPn 對于http長連接個人不建議用,我也沒有去嘗試
一,MQTT小結一下
參考下面鏈接:
構建Android Push Notification Service服務端及客戶端[含代碼] (MQTT及php的)
http://blog.csdn.net/huzhangyou/article/details/7314988
沒有做過驗證,到底可以支持多少用戶在線,想過一種方式,服務端做處理,監聽在線用戶量,當達到極限時,退出一部分在線用戶,比如讓其sleep 10分鐘(通知方式呢,可以以通知的方式指定字段告訴客戶端),,,以減少服務端壓力
另外MQTT其實已經是socket長連接了,只是維護工作放到了客戶端來做,斷線重連等(早知道有現成的當初就不自己寫套socket維護機制了)
然后,說下推送方式,抓到了調用了地址
http://apache服務器地址/androidpushservice/send_mqtt.php?target=tokudu%2F設備ID&message=內容
替換紅色的字段就可以實現調用一個地址推送數據了,,
另外如果要做群發,,沒想到怎么做好,可以服務端做異步對列么?留給大家討論下
二,AndroidPn小結
參考資料
Android Push Notification實現信息推送使用
http://www.cnblogs.com/hanyonglu/archive/2012/03/16/2399655.html
推送數據到指定設備上
http://配置的服務器地址/notification.do?action=send&broadcast=N&username=設備名&title=提醒&message=內容&uri=動作
推送數據到所有在線設備上
http://配置的服務器地址/notification.do?action=send&broadcast=Y&username=&title=提醒&message=內容&uri=動作
最后說下,根據項目需求,可能還需要做是否收到提醒的反饋?是否要發送到指定部分用戶群中,,因此比較后,建議使用AndroidPn因為服務端可編輯的多,
安裝方式都不難
MQTT:windows 或 linux 需安裝mosquitto,,它會監聽1833端口,,客戶端會通過wmqtt與服務器的1833端口掛上連接(目前服務端只看到有一套php的運行環境)AndroidPn : windows和linux都能一鍵運行(需求復雜的話可編輯源碼重新生成部署),安裝后,會監聽7070端口和5222端口 客戶端會通過asmack去連接服務端的5222端口