編輯:關於Android編程
1.引言
所謂的消息推送就是從服務器端向移動終端發送連接,傳輸一定的信息。比如一些新聞客戶端,每隔一段時間收到一條或者多條通知,這就是從服務器端傳來的推送消息;還比如常用的一些IM軟件如微信、GTalk等,都具有服務器推送功能。
推送方法如下:
1)通過SMS進行服務器端和客戶端的交流通信。
在Android平台上,你可以通過攔截SMS消息並且解析消息內容來了解服務器的意圖,可以實現完全的實時操作。但是問題是這個方案的成本相對比較高,且依賴於運營商。
2)循環主動定時獲取
這種方法需要客戶端來做一個定時或者周期性的訪問服務器端接口,以獲得最新的消息。輪詢的頻率太慢可能導致某些消息的延遲,太快則會大量消耗網絡帶寬和電池。
3)持久連接
這個方案可以解決由輪詢帶來的性能問題,但是還是會消耗手機的電池。我們需要開一個服務來保持和服務器端的持久連接(蘋果就和谷歌的C2DM是這種機制)。但是對於Android系統,當系統可用資源較低,系統會強制關閉我們的服務或者是應用,這種情況下連接會強制中斷。(Apple的推送服務之所以工作的很好,是因為每一台手機僅僅保持一個與服務器之間的連接,事實上C2DM也是這麼工作的。即所有的推送服務都是經由一個代理服務器完成的,這種情況下只需要和一台服務器保持持久連接即可。C2DM=Cloud to Device Messaging)。
相比之下第三種還是最可行的。為軟件編寫系統服務或開機啟動功能;或者如果系統資源較低,服務被關閉後可以在onDestroy ()方法裡面再重啟該服務,進而實現持久連接的方式。
C2DM內置於Android的2.2系統上,無法兼容老的1.6到2.1系統;且依賴於Google官方提供的C2DM服務器,由於國內的網絡環境,這個服務經常不可用。
建立在TCP協議之上的XMPP協議,不僅可提供可這種持久連接的功能,能實現服務器和客戶機的雙工通信,還能不依賴與系統版本和google服務器的限制,提供了比較好的解決方案。
2. XMPP協議
XMPP全稱Extensible Messaging and Presence Protocol,前身是Jabber項目,是一種以XML為基礎的開放式即時通訊協議。XMPP因為被Google Talk和網易泡泡應用而被廣大網民所接觸。XMPP的關鍵特色是,分散式的即時通訊系統,以及使用XML串流。XMPP目前被IETF國際標准組織完成了標准化工作。
Android push notification(androidpn) 是一個基於XMPP協議的java開源實現,它包含了完整的客戶端和服務器端。該服務器端基本是在另外一個開源工程openfire基礎上修改實現的。
androidpn客戶端需要用到一個基於java的開源XMPP協議包asmack,這個包同樣也是基於openfire下的另外一個開源項目smack,不過我們不需要自己編譯,可以直接把androidpn客戶端裡面的asmack.jar拿來使用。客戶端利用asmack中提供的XMPPConnection類與服務器建立持久連接,並通過該連接進行用戶注冊和登錄認證,同樣也是通過這條連接,接收服務器發送的通知。
androidpn服務器端也是java語言實現的,基於openfire開源工程,不過它的Web部分采用的是spring框架,這一點與openfire是不同的。Androidpn服務器包含兩個部分,一個是偵聽在5222端口上的XMPP服務,負責與客戶端的XMPPConnection類進行通信,作用是用戶注冊和身份認證,並發送推送通知消息。另外一部分是Web服務器,采用一個輕量級的HTTP服務器,負責接收用戶的Web請求。服務器的這兩方式,意義非凡:當相應的TCP端口被防火牆封閉,可以使用輪詢的方式進行訪問,因此又有助於通過防火牆。
3. XMPP協議實現Android推送
本文主要介紹AndroidPn項目實現推送的使用過程。
在Android中實現信息推送,其中一個比較成熟的解決方案便是使用XMPP協議實現。而AndroidPn項目就是使用XMPP協議實現信息推送的一個開源項目。
Apndroid Push Notification的特點:
快速集成:提供一種比C2DM更加快捷的使用方式,避免各種限制.
無需架設服務器:通過使用"雲服務",減少額外服務器負擔.
可以同時推送消息到網站頁面,android 手機
耗電少,占用流量少.
具體配置過程:
首先, 我們需要下載androidpn-client-0.5.0.zip和androidpn-server-0.5.0-bin.zip。
下載地址:http://sourceforge.net/projects/androidpn/ (如果打開不了上面的網址,那就需要翻牆了,你懂得)。
解壓兩個包,Eclipse導入client,配置好目標平台,打開raw/androidpn.properties文件,配置客戶端程序。
1. 如果是模擬器來運行客戶端程序,把xmppHost配置成10.0.2.2[模擬器把10.0.2.2認為是所在主機的地址,127.0.0.1是模擬器 本身的回環地址,10.0.2.1表示網關地址,10.0.2.3表示DNS地址,10.0.2.15表示目標設備的網絡地址],關於模擬器的詳細信息,大家可參閱相關資料,這裡不再詳述.
xmppPort=5222 是服務器的xmpp服務監聽端口 運行androidpn-server-0.5.0\bin\run.bat啟動服務器,從浏覽器訪問http://127.0.0.1:7070/index.do (androidPN Server有個輕量級的web服務器,在7070端口監聽請求,接受用戶輸入的文本消息)運行客戶端,客戶端會向服務器發起連接請求,注冊成功後,服務器能識別客戶端,並維護和客戶端的IP長連接。
2. 如果是在同一個局域網內的其他機器的模擬器測試(或者使用同一無線路由器wifi上網的真機) ,則需要把這個值設置為服務器機器的局域網ip.
例如 你的電腦和android手機 都通過同一個無線路由器wifi上網, 電腦的ip地址為 192.168.1.2 而 手機的ip地址為 192.168.1.3, 這個時候 需要把這個值修改為 xmppHost=192.168.1.1 或是電腦的IP地址,就可以在手機上使用了.
3. 如果是不在同一個局域網的真機測試,我們需要將這個值設置為服務器的IP地址。
具體配置如下圖所示:
我的電腦IP是:192.168.8.107
服務器運行主界面:
推送消息:
<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+CiAgICA8aW1nIHNyYz0="/uploadfile/Collfiles/20141106/2014110608125645.png" alt="">
模擬器和真機測試通過。
2:PackageManagerServiceAndroid既然基於linux,那我們能不能將c/c++代碼交叉編譯成可執行文件然後放到目標機器上跑呢?當然可以,不過前提
Android UI組件進階(2)——仿Windows對話框 在開始本章前先祝大家中秋節快樂哈,相信很多上班的朋友都是放三天假的哈! 有時間的話回家陪陪父母吧!樹欲靜
設置頁面(Settings)用於修改、保存app的特性或行為 等。如某些新聞app可以在設置頁面設置其白天/夜間模式、清除緩存、是否允許推送通知等。如下圖所示。如需為應用
一.摘要彈窗通常用於提示用戶進行某種操作,比如:點擊分享按鈕,彈窗分享對話框;雙擊返回按鈕,彈窗退出對話框;下載文件,提示下載對話框等等,分享對話框/退出對話框/下載對話