天天看點

Android消息推送之Androidpn_Demo版到正式上線

前言:

最近公司需要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/

就可以出現如下界面:

Android消息推送之Androidpn_Demo版到正式上線

  然後,運作用戶端代碼,需要注意的是把androidpn.properties中的xmppHost改為你的區域網路ip位址.運作如下圖所示:

Android消息推送之Androidpn_Demo版到正式上線

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

Android消息推送之Androidpn_Demo版到正式上線

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

Android消息推送之Androidpn_Demo版到正式上線

在用戶端就收到了通知:

Android消息推送之Androidpn_Demo版到正式上線

其中通知裡面的内容就是網頁中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伺服器.

Android消息推送之Androidpn_Demo版到正式上線

  點選  Tomcat Manager出現如下界面:

Android消息推送之Androidpn_Demo版到正式上線

在預設的情況下登入不成功,需要在tomcat-user.xml檔案中配置,在該檔案的加上如下配置:

01.<role rolename="manager-gui"/>

02.<user username="tomcat" password="tomcat" roles="manager-gui"/>

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

Android消息推送之Androidpn_Demo版到正式上線

注意需要在伺服器電腦上有相應資料庫(我這個裡是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