我一直在使用Smack XMPP Android庫爲聊天應用程序。Android Smack Xmpp連接處理最佳做法
我聊天當前架構,我用XMPP發送消息客戶只有當應用程序在前景以其它方式使用GCM。服務器已經正確處理。
由於android沒有方法來簡單地指出應用程序當前位於FG或BG的哪個位置,因此我發現難以連接和斷開XMPP。所以我實現了在每個活動上使用計時器onPause和onResume當應用程序有多個activities.This是非常痛苦和更多的工作要做。
對於例如,我有兩個活動,甲乙 .Connect XMPP在的onResume()的甲 .Switch從甲到乙,的onPause()將觸發A並在3秒後斷開XMPP連接。在3秒內,onResume()的B將觸發並停止計時器,以便連接處於活動狀態。 :-)
的onPause()
if (Application.getInstance().xmppStatus == XMPPSTATUS.CONNECTED) {
Application.getInstance().disconnectXmpp(); //disconnect xmpp after 3sec
}
的onResume()
if (Application.getInstance().xmppStatus == XMPPSTATUS.DISCONNECTED) {
LoginHelper.connectXmpp();//connect XMPP
}
我相信你們大多數人都陷入了這樣的問題,尤其在聊天,所以我會非常感謝您聽到您的這方面的經驗。
首先服務器不是由我維護的。其次如何讓服務器知道客戶端是否斷開連接?現在有新的通知要發送,服務器檢查客戶端是脫機(斷開XMPP)還是聯機(XMPP連接)。該服務器上的base將使用GCM脫機並使用XMPP,否則 – Sanny
服務器「知道」每個連接的客戶端和您應該在每次從服務器斷開連接時觸發切換到gcm,即使它不清楚(不發送「斷開」狀態),只是因爲用戶可能隨時丟失連接 – vitalyster
感謝回覆@vitalyster。有人說,當我切換到GCM從客戶端? – Sanny