安卓推送、android文本推送、安卓富媒体推送解决方案
? ? ? ? 在開(kāi)發(fā)Android和iPhone應(yīng)用程序時(shí),我們往往需要從服務(wù)器不定的向手機(jī)客戶端即時(shí)推送各種通知消息,iPhone上已經(jīng)有了比較簡(jiǎn)單的和完美的推送通知解決方案,可是Android平臺(tái)上實(shí)現(xiàn)起來(lái)卻相對(duì)比較麻煩,最近由于項(xiàng)目需要,利用十幾天的時(shí)間對(duì)Android的推送通知服務(wù)進(jìn)行了初步的研究。
?
?????? Android Cloud to Device Messaging (C2DM)是一個(gè)用來(lái)幫助開(kāi)發(fā)者從服務(wù)器向Android應(yīng)用程序發(fā)送數(shù)據(jù)的服務(wù)。該服務(wù)提供了一個(gè)簡(jiǎn)單的、輕量級(jí)的機(jī)制,允許服務(wù)器可以通知移動(dòng)應(yīng)用程序直接與服務(wù)器進(jìn)行通信,以便于從服務(wù)器獲取應(yīng)用程序更新和用戶數(shù)據(jù)。C2DM服務(wù)負(fù)責(zé)處理諸如消息排隊(duì)等事務(wù)并向運(yùn)行于目標(biāo)設(shè)備上的應(yīng)用程序分發(fā)這些消息。
C2DM操作過(guò)程圖:
?
?
但是經(jīng)過(guò)一番研究發(fā)現(xiàn),這個(gè)服務(wù)存在很大的問(wèn)題:
1)C2DM內(nèi)置于Android的2.2系統(tǒng)上,無(wú)法兼容老的1.6到2.1系統(tǒng);
2)C2DM需要依賴于Google官方提供的C2DM服務(wù)器,由于國(guó)內(nèi)的網(wǎng)絡(luò)環(huán)境,這個(gè)服務(wù)經(jīng)常不可用,如果想要很好的使用,我們的App Server必須也在國(guó)外,這個(gè)恐怕不是每個(gè)開(kāi)發(fā)者都能夠?qū)崿F(xiàn)的;
有了上述兩個(gè)使用上的制約,導(dǎo)致我最終放棄了這個(gè)方案.
?
?
?????? 下面我來(lái)介紹幾種常見(jiàn)的方案:
1)SMS(Push):在Android平臺(tái)上,你可以通過(guò)攔截SMS消息并且解析消息內(nèi)容來(lái)了解服務(wù)器的意圖。這是一個(gè)不錯(cuò)的想法,我就見(jiàn)過(guò)采用這個(gè)方案的應(yīng)用程序。這個(gè)方案的好處是,可以實(shí)現(xiàn)完全的實(shí)時(shí)操作。但是問(wèn)題是這個(gè)方案的成本相對(duì)比較高,你很難找到免費(fèi)的短消息發(fā)送網(wǎng)關(guān),關(guān)于這個(gè)方案的實(shí)現(xiàn)。
2)持久連接(Push):這個(gè)方案可以解決由輪詢帶來(lái)的性能問(wèn)題,但是還是會(huì)消耗手機(jī)的電池。Apple的推送服務(wù)之所以工作的很好,是因?yàn)槊恳慌_(tái)手機(jī)僅僅保持一個(gè)與服務(wù)器之間的連接,事實(shí)上C2DM也是這么工作的。不過(guò)這個(gè)方案也存在不足,就是我們很難在手機(jī)上實(shí)現(xiàn)一個(gè)可靠的服務(wù)。Android操作系統(tǒng)允許在低內(nèi)存情況下殺死系統(tǒng)服務(wù),所以你的通知服務(wù)很可能被操作系統(tǒng)Kill掉了。這種解決方案的局限性也很大,采用這個(gè)方案,我們目前只能發(fā)送文字消息。
3)輪詢(Pull):應(yīng)用程序應(yīng)當(dāng)階段性的與服務(wù)器進(jìn)行連接并查詢是否有新的消息到達(dá),你必須自己實(shí)現(xiàn)與服務(wù)器之間的通信,例如消息排隊(duì)等。而且你還要考慮輪詢的頻率,如果太慢可能導(dǎo)致某些消息的延遲,如果太快,則會(huì)大量消耗服務(wù)器的資源。
不過(guò)我們可以通過(guò)良好的設(shè)計(jì)來(lái)彌補(bǔ),以便于讓該方案可以有效的工作。??
?
?
安卓開(kāi)發(fā)者如何自己搭建服務(wù)器?
?????? androidpn目前它是開(kāi)源的,對(duì)于其簡(jiǎn)單的推送功能它還是能夠?qū)崿F(xiàn)的。我們可以修改其源代碼來(lái)適應(yīng)我們的應(yīng)用程序。
事實(shí)上Google官方的C2DM服務(wù)器底層也是采用XMPP協(xié)議進(jìn)行的封裝。XMPP(可擴(kuò)展通訊和表示協(xié)議)是基于可擴(kuò)展標(biāo)記語(yǔ)言(XML)的協(xié)議,它用于即時(shí)消息(IM)以及在線探測(cè)。這個(gè)協(xié)議可能最終允許因特網(wǎng)用戶向因特網(wǎng)上的其他任何人發(fā)送即時(shí)消息。經(jīng)過(guò)源代碼研究我發(fā)現(xiàn),該服務(wù)器端基本是在另外一個(gè)開(kāi)源工程openfire基礎(chǔ)上修改實(shí)現(xiàn)的,不過(guò)比較郁悶的是androidpn的文檔是由韓語(yǔ)寫(xiě)的,所以整個(gè)研究過(guò)程基本都是讀源碼。
這是androidpn的項(xiàng)目主頁(yè):http://sourceforge.net/projects/androidpn/
androidpn實(shí)現(xiàn)意圖如下圖所示:
androidpn服務(wù)器端也是java語(yǔ)言實(shí)現(xiàn)的,基于openfire開(kāi)源工程,不過(guò)它的Web部分采用的是spring框架,這一點(diǎn)與 openfire是不同的。Androidpn服務(wù)器包含兩個(gè)部分,一個(gè)是偵聽(tīng)在5222端口上的XMPP服務(wù),負(fù)責(zé)與客戶端的 XMPPConnection類進(jìn)行通信,作用是用戶注冊(cè)和身份認(rèn)證,并發(fā)送推送通知消息。另外一部分是Web服務(wù)器,采用一個(gè)輕量級(jí)的HTTP服務(wù)器, 負(fù)責(zé)接收用戶的Web請(qǐng)求。服務(wù)器架構(gòu)如下:
?
最上層包含四個(gè)組成部分,分別是SessionManager,Auth Manager,PresenceManager以及Notification Manager。SessionManager負(fù)責(zé)管理客戶端與服務(wù)器之間的會(huì)話,Auth Manager負(fù)責(zé)客戶端用戶認(rèn)證管理,Presence Manager負(fù)責(zé)管理客戶端用戶的登錄狀態(tài),NotificationManager負(fù)責(zé)實(shí)現(xiàn)服務(wù)器向客戶端推送消息功能。
?
這個(gè)解決方案的最大優(yōu)勢(shì)就是簡(jiǎn)單,我們不需要象C2DM那樣依賴操作系統(tǒng)版本,也不會(huì)擔(dān)心某一天Google服務(wù)器不可用。利用XMPP協(xié)議我們還可以進(jìn)一步的對(duì)協(xié)議進(jìn)行擴(kuò)展,實(shí)現(xiàn)更為完善的功能。 采用這個(gè)方案,我們目前只能發(fā)送文字消息,不過(guò)對(duì)于推送來(lái)說(shuō)一般足夠了,因?yàn)槲覀儾荒苤竿ㄟ^(guò)推送得到所有的數(shù)據(jù),一般情況下,利用推送只是告訴手機(jī)端服務(wù)器發(fā)生了某些改變,當(dāng)客戶端收到通知以后,應(yīng)該主動(dòng)到服務(wù)器獲取最新的數(shù)據(jù),這樣才是推送服務(wù)的完整實(shí)現(xiàn)。 XMPP協(xié)議書(shū)相對(duì)來(lái)說(shuō)還是比較簡(jiǎn)單的,值得我們進(jìn)一步研究。
?
但是在經(jīng)過(guò)一段時(shí)間的測(cè)試,我發(fā)現(xiàn)關(guān)于androidpn也存在一些不足之處:
1.?比如時(shí)間過(guò)長(zhǎng)時(shí),就再也收不到推送的信息了。
2.?性能上也不夠穩(wěn)定。
? ?3. 如果將消息從服務(wù)器上推送出去,就不再管理了,不管消息是否成功到達(dá)客戶端手機(jī)上。
?
等等,總之,androidpn也有很多的缺點(diǎn)。如果我們要使用androidpn,則還需要做大量的工作。
?
?利用現(xiàn)成的推送平臺(tái)
????? 最后一種簡(jiǎn)單的解決方案是使用第三方的推送平臺(tái),對(duì)于我們開(kāi)發(fā)者來(lái)說(shuō)也比較輕松。
第三方平臺(tái)有商用的也有免費(fèi)的,我們可以根據(jù)實(shí)現(xiàn)情況使用。關(guān)于國(guó)內(nèi)的第三方平臺(tái),我感覺(jué)目前比較不錯(cuò)的就是快推,它是國(guó)內(nèi)僅有的免費(fèi)富媒體推送平臺(tái),有兩種推送形式:通知欄和窗口。其他富媒體推送目前都是收費(fèi)的,對(duì)于我這種IT屌絲階層傷不起。關(guān)于詳細(xì)情況,大家可以查看它的主頁(yè),這里不再詳細(xì)描述:http://www.tiantianfl.net/
?
?
快推通知欄顯示:你好,張三
?
?
?
快推窗口顯示:你好,張三
總結(jié)
以上是生活随笔為你收集整理的安卓推送、android文本推送、安卓富媒体推送解决方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Win10如何给桌面文件夹自定义图标】
- 下一篇: 更改文件夹目录、硬盘、U盘的图标