1. 程式人生 > >AndroidPN真機環境測試

AndroidPN真機環境測試

一:AndroidPN環境配置

      AndroidPN框架實現了從伺服器到android移動平臺的文字資訊推送。下面是AndroidPN的環境配置

      1.先確保本機已經配置好了java環境

      2.下載androidpn-client-0.5.0.zip和androidpn-server-0.5.0-bin.zip

解壓兩個包,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是模擬器本身的迴環地址).

       如果是真機,配置成本機的IP地址 比如我在區域網內的IP是192.168.1.101

xmppPort=5222 是伺服器的xmpp服務監聽埠(注意5222埠貌似是固定的,我改成其他埠就行了)

二:執行測試

     從命令列執行androidpn-server-0.5.0\bin\run.bat啟動伺服器(有些朋友說會一閃而過啟動不了,注意要從命令列進入該目錄了在執行),從瀏覽器訪問http://127.0.0.1:7070/index.do (androidPN Server有個輕量級的web伺服器,在7070埠監聽請求,接受使用者輸入的文字訊息)

執行客戶端,客戶端會向伺服器發起連線請求,註冊成功後,伺服器能識別客戶端,並維護和客戶端的IP長連線


進入Notifications介面,輸入訊息傳送


真機客戶端接受到server推送來的訊息


最後,我把AndroidPN伺服器配置的VPS進行測試,同樣的測試成功!

這樣AndroidPN的環境就搭好了。真機環境也測試通過

問題: 
1.asmack的包太大,3百多K。
 
2.只是完成Android的Push功能使用XMPP協議感覺很笨重。
 
3.androidpn伺服器端的負載很難控制,除非自己改寫。


第一個問題關係不大,畢竟一個軟體多了300多K不算什麼,如果自己來控制socket連線,我估計沒有100K也很難控制好。 
第二個問題確實如此,使用XMPP的後果是帶來了60%的資訊冗餘量

 
第三個問題,負載的控制應該來說,用到socket都必須要考慮的,負載方面,androidpn用到了MINA這個socket框架,而在socket的處理方面,很多人都是用的socket來處理的。
 

       總的來說,原始碼的開放是最大的優點,就算用到androidpn,無論如何也是要在原有的基礎上進行修改的,照搬照抄肯定是不行的。但是比自己用socket來控制,在伺服器和客戶端之間建立一個閘道器,要來的容易。
 
注意:需將lib 衝命名 改為libs,然後在build path裡面匯入libs這個包,否則會報類找不到的錯誤

      首先,基礎中的基礎,就是按照第一篇日誌中所說,使用模擬器完成web推送。這一塊非常簡單,按照第一篇去做完全可行,可能出錯的地方就是你忘記更改配置檔案了。

      後來我下載了第二篇日誌中博主提供的tomcat版本服務端,放在自己本機tomcat下,並且啟動。用模擬器去測試發現無法推送,配置檔案也沒有錯。檢查後發現,原來自己tomcat的埠是8080,而server中配置的是7070。只要開啟config.properties,修改admin.console.port=埠號,即可。

      再接著,用同一個區域網內其他機子的客戶端模擬器進行測試,只要將androidpn.properties中的xmppHost=服務端所在內網IP就可以啦。比如192.168.1.150。

         用真機測試,其實和模擬器沒啥區別,只要配置檔案不寫錯,原則是不會出問題的。但是我測試的時候,還是出現無法推送成功的問題。仔細檢查後,原因有二。

      1.客戶端android版本太低,換個android4.0版本就可以。貌似是不相容低版本。

      2.真機上其他的應用中,也有應用到這個androidpn的。其中,在androidpn.properties中,apikey預設是123456789。因為那個應用和我自己本機都選擇了預設的,所以我將自己這裡的apikey改掉了。切記!這裡有一點需要注意的,客戶端androidpn.properties中更改了apikey,服務端config.properties也要隨之修改。!!

      OK,基本上單獨的web推送就完成了。

      接下來就是整合到自己專案中,也就是從自己專案後臺將資料推送到客戶端,至於androidpn的server端,則作為中間的橋樑。

      這裡需要注意一點,androidpn會在你本地資料庫中新增一個表apn_user。如果你本地資料庫有許可權,拒絕的話,你最好自己先手動增加這麼一張表。

      首先,我單獨啟動一個新的tomcat,將server端部署到這下面,修改配置檔案config。properties,jdbc.properties。jdbc.properties這個檔案是配置你本地資料庫的引數的,不能有錯。啟動後,簡單測試成功,在自己專案中使用http協議將資料POST到server端這個org.androidpn.server.console.controller.NotificationController類的send方法中。具體引數名稱及獲取引數的程式碼,可以修改server端。

      在這裡插一句,不論時間多麼緊張,至少你得追一邊程式碼,尤其這個類。

      程式碼寫好後可以執行,斷點跟蹤下,只要你程式碼正確,配置檔案沒錯,是可以正常推送的。

        基本上,寫到這裡的話,應該可以滿足專案需求了。如果你還需要將哪些使用者線上的功能整合到你自己專案中。那你就得自己跟蹤下程式碼了。

      我專案做到這裡,基本上都是在windows環境下。將專案部署到linux環境下,又出問題了。

      路徑問題比較容易堅決,按照後臺日誌中提示的地方,將路徑修改下。

      關鍵是在linux下重啟server端,會發現報錯,5222埠被佔用。因為時間限制,能力有限,沒辦法修改程式碼,只能每次重啟時,都先用命令將5222埠殺掉。