Android消息推送(一)--AndroidPn(XMPP協議)Demo(包含tomacat)

前言:

最近公司需要android的消息推送,在網上找了很多消息推送的例子,都是無法運行.

經過一段時間的研究,終於把例子運行起來了.現在共享出來,共同學習.
在下載的文件裏面在bin目錄下有run.bat文件直接雙擊即可運行.然後在瀏覽器裏面輸入
http://127.0.0.1:7070即可,如果在eclipse中運行了客戶端即可在服務器端看到.這個很簡單,不是本文的重點.現在主要的就是把下載後的的服務器端源碼
搭建起來,然後部署到myeclipse中運行,當然可以在androidpn的官網下載(http://sourceforge.net/projects/androidpn/files/),
也可以下載我已經調好的程序.現在把源碼共享給大家,http://download.csdn.net/detail/johnny901114/4410546
需要注意的是我的這個源碼使用數據庫是mysql,所以讀者的pc機上需要安裝mysql數據庫,關於數據這裏就不多說了.當然最好能夠懂點spring和hibernate,這樣的話改的時候更加順手.

但是可能還有不懂hibernate的人,爲了能夠讓他很好的運行,這裏就簡單的說一下了.


過程:

首先打開jdbc.properties:


# JDBC Configuration
jdbcDriverClassName=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
jdbcUsername=root
jdbcPassword=
# DBCP Pool settings
jdbcInitialSize=5
jdbcMaxActive=10
jdbcMaxIdle=5
jdbcMaxWait=30000
jdbcValidationQuery=select 1



------------------------------------------------------------

jdbcDriverClassName:表示數據庫驅動的類名
jdbcUrl:表示連接數據庫的url,其中test是數據庫的名稱
hibernate.dialect: 數據庫方言
jdbcUsername和jdbcPassword:mysql的用戶名和密碼

其他的就不多說了.

如果沒有以外的話,服務器啓動成功後,可以在瀏覽器裏輸入:http://localhost:8080/

就可以出現如下界面:


然後,運行客戶端代碼,需要注意的是把androidpn.properties中的xmppHost改爲你的局域網ip地址.運行如下圖所示:


然後在瀏覽器中的Users界面可以看到手機與服務器之間的連接.如:



然後在Notifications界面可以發送消息給客戶端:


在客戶端就收到了通知:


其中通知裏面的內容就是網頁中message輸入的內容.ok按鈕就是網頁中uri的內容.


最後還有一個問題當我們服務器端重啓的時候,客戶端就無法在連接到服務器了,除非把android後臺的服務

關掉,然後重啓才行.在XmmpManager中加上如下紅色代碼就可:

    private void addTask(Runnable runnable) {
        Log.d(LOGTAG, "addTask(runnable)...");
        taskTracker.increase();
        synchronized (taskList) {
            if (taskList.isEmpty() && !running) {
                running = true;
                futureTask = taskSubmitter.submit(runnable);
                if (futureTask == null) {
                    taskTracker.decrease();
                }
            } else {
            //解決服務器端重啓後,客戶端不能成功連接androidpn服務器
            runTask();

           
                taskList.add(runnable);
            }
        }
        Log.d(LOGTAG, "addTask(runnable)... done");
    }




----------------------------------------------------------------------------------------------------------------------------------------------------------



後續: 2012-8-10


今天公司終於把Androidpn服務器端部署到服務器端了,終於真正的上線了.

大體步驟如下:

1,把服務器的程序通過myeclipse到處war包,然後訪問tomcat首頁,把war包上傳到tomcat服務器.


點擊Tomcat Manager出現如下界面:

在默認的情況下登錄不成功,需要在tomcat-user.xml文件中配置,在該文件的加上如下配置:

  1. <role rolename="manager-gui"/>  
  2. <user username="tomcat" password="tomcat" roles="manager-gui"/>  


然後通過如下界面把war包上傳到tomcat上:



注意需要在服務器電腦上有相應數據庫(我這個裏是mysql),並且有Androidpn對應的數據庫(我這裏的數據庫名爲test).並且還要注意數據庫的用戶名和密碼.

2,假設服務器端已經能夠訪問了,需要把客戶端的androidpn.properties文件的xmppHost的值改成你服務器端的主機名稱,假設你的服務器端訪問地址爲:http://push.android.net:8080/ ,那麼把xmppHost的值改成push.android.net


3,注意把你的8080端口和5222端口打開(這裏是服務器那邊的人搞的自己不是很懂).





---------------------------------------------------------------------------------------------------------------------------------------------------------



後續二 :關於Androidpn的一些問題(2012.8.16)


1,如果把客戶端的隨機生成的UUID代碼,改成把設備的id或者mac(device/mac)作爲用戶名,會出現重複插入的錯誤.

2,把客戶端的數據清除(或者重新安裝),那麼sharedPre裏的數據也會沒有,然而服務器端又有我們手機的設備id,然後啓動程序又會出現重複插入的問題.


所以解決方案爲,在服務器端保存用戶的時候,檢查數據時候存在該用戶.

因爲在客戶端來說自己有沒有註冊到服務器端,通過SharedPreferences裏面是否存在username和password.


-------------------------------------------------------------------------------------------------------------------------------------------------


後續三 :關於Android推送的其他方式(2013.1.4)


其他的推送方案 : 


1> 如果想要方便成本又低 , 推薦使用極光推送 , 只要集成它的官方SDK即可 . 在國內值比較出名的 , 推送文本是免費的 , 還可以推送媒體(收費) , 官網爲http://www.jpush.cn/ 


2> android官網最新提供的 , GCM ,是用來代替的C2DM , 其官網爲 http://developer.android.com/google/gcm/index.html


3> 可以通過Java nio來實現自己的服務器, 聽同事說它的經理自己通過Java NIO寫了一個推送服務器 可以接收30w左右的併發, 自己正在嘗試寫一個 , 如果有進展 , 一定會共享給大家 . 同時可以研究apache的項目mina 該項目就是封裝Java NIO的 . 


4> 當可以使用XMPP協議來實現 推送的. 自己也曾寫過簡單的一對一即時聊天軟件.


5> 也可以通過MQTT協議來實現推送 . 

             客戶端下載地址 : https://github.com/tokudu/AndroidPushNotificationsDemo 

             服務器下載地址 : https://github.com/tokudu/PhpMQTTClient


     更多關於MQTT的講解:Android消息推送(二)--基於MQTT協議實現的推送功能



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章