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