1. 程式人生 > >androidpn實現訊息推送

androidpn實現訊息推送

androidpn是基於XMPP協議的用於向Android客戶端推送文字資訊的一套開源的工具。它幫我們做了那些維護Socket長連線等複雜的事情。

1.下載androidpn伺服器端與客戶端的Demo並執行;一共包含三個zip檔案:

1)androidpn-client-0.5.0.zip

2)androidpn-demoapp-0.5.0.zip

3)androidpn-server-0.5.0-bin.zip

2.啟動伺服器端與客戶端,通過Web頁面推送。XMPP在android客戶端上的應用。分兩部分實現:服務端搭建和客戶端實現

服務端搭建:如果想測試一下功能,可以直接用搭建好的服務就行,解壓androidpn-server-0.5.0-bin.zip,進入bin目錄下雙擊run.bat,直接執行服務;

在瀏覽器上輸入 http://127.0.0.1:7070  就進入管理介面。

遇到問題:

a.在win7環境下,雙擊執行run.bat閃退

解決辦法:點選run.bat,右鍵‘編輯’,在檔案末尾新增'pause';

b.執行run.bat出現’Error: JAVA_HOME environment variable not set, Androidpn not started.‘

原因:沒有配置正確的環境變數;

解決辦法:在’我的電腦‘-屬性-系統設定-環境變數,配置環境變數JAVA_HOME = jdk安裝目錄,地址寫到jdk目錄下bin的上一級,如C:\jdk;或者也可以編輯run.bat,把內容中的’JAVA_HOME‘強制替換成jdk目錄地址

c.執行run.bat出現’Error: no `server' JVM at `C:\jdk\bin\server\jvm.dll'.‘

原因:jdk-bin-server目錄下缺少jvm.dll檔案

解決辦法:預設安裝jdk完成後,在bin目錄下有client目錄,但是沒有server目錄,在client目錄下有jvm.dll檔案,可以直接新建server資料夾,將jvm.dll檔案拷貝進去

客戶端實現:

解壓androidpn-client-0.5.0.zip,匯入eclipse工程,執行前更改一處IP地址,修改res/raw/androidpn.properties檔案中的xmppHost為xmppHost=10.0.2.2

原因:模擬器訪問本機需要改成10.0.2.2,下面為SDK中IP說明。

[模擬器把10.0.2.2認為是所在主機的地址,127.0.0.1是模擬器本身的迴環地址,10.0.2.1表示閘道器地址,10.0.2.3表示DNS地址,10.0.2.15表示目標裝置的網路地址]

執行android程式,從服務端傳送訊息,客戶端就可以收到推送訊息了。

遇到問題:

a.執行時出現’java.lang.NoClassDefFoundError: org.androidpn.client.PersistentConnectionListener‘異常

原因:更新了Android SDK 和ADT 到 R17 以後出現了一個問題,就是原來所有引入第三方的jar檔案的專案,執行到一旦呼叫了第三方jar檔案裡的類的地方,都會出現類似

E/AndroidRuntime : java.lang.NoClassDefFoundError 的錯誤。

解決方法:將androidpn-client-0.5.0資料夾下的lib資料夾重新命名為libs,然後重新匯入該專案;匯入新的專案後將所有的第三方jar檔案從 standard Java build path中移除;右鍵專案名 > Properties > Java Build Path > tab Libraries >將 “Android X.X” and the “Android Dependencies”之外的所有jar檔案引用全部remove,重新引用libs資料夾下的jar包即可;最後Clean the project 。

b.Android 中出現這樣的警告 Exported service does not require permission 

解決辦法:加上這個就可以了android:exported="false";比如: <service android:name="MusicService"  android:exported="false">