AndroidPN真機環(huán)境測試
一:AndroidPN環(huán)境配置
1.先確保本機已經(jīng)配置好了java環(huán)境
2.下載androidpn-client-0.5.0.zip和androidpn-server-0.5.0-bin.zip
網(wǎng)址:http://sourceforge.net/projects/androidpn/
解壓兩個包,Eclipse導入client,配置好目標平臺,打開raw/androidpn.properties文件,
apiKey=1234567890
xmppHost=10.0.2.2
xmppPort=5222
如果是模擬器來運行客戶端程序,把xmppHost配置成10.0.2.2 (模擬器把10.0.2.2認為是所在主機的地址,127.0.0.1是模擬器本身的回環(huán)地址).
如果是真機,配置成本機的IP地址 比如我在局域網(wǎng)內(nèi)的IP是192.168.1.101
xmppPort=5222 是服務器的xmpp服務監(jiān)聽端口(注意5222端口貌似是固定的,我改成其他端口就行了)
二:運行測試
從命令行運行androidpn-server-0.5.0\bin\run.bat啟動服務器(有些朋友說會一閃而過啟動不了,注意要從命令行進入該目錄了在運行),從瀏覽器訪問http://127.0.0.1:7070/index.do (androidPN Server有個輕量級的web服務器,在7070端口監(jiān)聽請求,接受用戶輸入的文本消息)
運行客戶端,客戶端會向服務器發(fā)起連接請求,注冊成功后,服務器能識別客戶端,并維護和客戶端的IP長連接
進入Notifications界面,輸入消息發(fā)送
真機客戶端接受到server推送來的消息
最后,我把AndroidPN服務器配置的VPS進行測試,同樣的測試成功!
這樣AndroidPN的環(huán)境就搭好了。真機環(huán)境也測試通過
問題:
1.asmack的包太大,3百多K。
2.只是完成Android的Push功能使用XMPP協(xié)議感覺很笨重。
3.androidpn服務器端的負載很難控制,除非自己改寫。
第一個問題關(guān)系不大,畢竟一個軟件多了300多K不算什么,如果自己來控制socket連接,我估計沒有100K也很難控制好。
第二個問題確實如此,使用XMPP的后果是帶來了60%的信息冗余量
第三個問題,負載的控制應該來說,用到socket都必須要考慮的,負載方面,androidpn用到了MINA這個socket框架,而在socket的處理方面,很多人都是用的socket來處理的。
總的來說,源代碼的開放是最大的優(yōu)點,就算用到androidpn,無論如何也是要在原有的基礎(chǔ)上進行修改的,照搬照抄肯定是不行的。但是比自己用socket來控制,在服務器和客戶端之間建立一個網(wǎng)關(guān),要來的容易。
注意:需將lib 沖命名 改為libs,然后在build path里面導入libs這個包,否則會報類找不到的錯誤
首先,基礎(chǔ)中的基礎(chǔ),就是按照第一篇日志中所說,使用模擬器完成web推送。這一塊非常簡單,按照第一篇去做完全可行,可能出錯的地方就是你忘記更改配置文件了。
后來我下載了第二篇日志中博主提供的tomcat版本服務端,放在自己本機tomcat下,并且啟動。用模擬器去測試發(fā)現(xiàn)無法推送,配置文件也沒有錯。檢查后發(fā)現(xiàn),原來自己tomcat的端口是8080,而server中配置的是7070。只要打開config.properties,修改admin.console.port=端口號,即可。
再接著,用同一個局域網(wǎng)內(nèi)其他機子的客戶端模擬器進行測試,只要將androidpn.properties中的xmppHost=服務端所在內(nèi)網(wǎng)IP就可以啦。比如192.168.1.150。
用真機測試,其實和模擬器沒啥區(qū)別,只要配置文件不寫錯,原則是不會出問題的。但是我測試的時候,還是出現(xiàn)無法推送成功的問題。仔細檢查后,原因有二。
1.客戶端android版本太低,換個android4.0版本就可以。貌似是不兼容低版本。
2.真機上其他的應用中,也有應用到這個androidpn的。其中,在androidpn.properties中,apikey默認是123456789。因為那個應用和我自己本機都選擇了默認的,所以我將自己這里的apikey改掉了。切記!這里有一點需要注意的,客戶端androidpn.properties中更改了apikey,服務端config.properties也要隨之修改。!!
OK,基本上單獨的web推送就完成了。
接下來就是整合到自己項目中,也就是從自己項目后臺將數(shù)據(jù)推送到客戶端,至于androidpn的server端,則作為中間的橋梁。
這里需要注意一點,androidpn會在你本地數(shù)據(jù)庫中新增一個表apn_user。如果你本地數(shù)據(jù)庫有權(quán)限,拒絕的話,你最好自己先手動增加這么一張表。
首先,我單獨啟動一個新的tomcat,將server端部署到這下面,修改配置文件config。properties,jdbc.properties。jdbc.properties這個文件是配置你本地數(shù)據(jù)庫的參數(shù)的,不能有錯。啟動后,簡單測試成功,在自己項目中使用http協(xié)議將數(shù)據(jù)POST到server端這個org.androidpn.server.console.controller.NotificationController類的send方法中。具體參數(shù)名稱及獲取參數(shù)的代碼,可以修改server端。
在這里插一句,不論時間多么緊張,至少你得追一邊代碼,尤其這個類。
代碼寫好后可以執(zhí)行,斷點跟蹤下,只要你代碼正確,配置文件沒錯,是可以正常推送的。
基本上,寫到這里的話,應該可以滿足項目需求了。如果你還需要將哪些用戶在線的功能整合到你自己項目中。那你就得自己跟蹤下代碼了。
我項目做到這里,基本上都是在windows環(huán)境下。將項目部署到linux環(huán)境下,又出問題了。
路徑問題比較容易堅決,按照后臺日志中提示的地方,將路徑修改下。
關(guān)鍵是在linux下重啟server端,會發(fā)現(xiàn)報錯,5222端口被占用。因為時間限制,能力有限,沒辦法修改代碼,只能每次重啟時,都先用命令將5222端口殺掉。
posted on 2014-01-16 11:35 順其自然EVO 閱讀(3596) 評論(2) 編輯 收藏 所屬分類: android