Android基於xmpp的即時通訊應用

來源:互聯網
上載者:User

標籤:res   一個   ble   park   成員   builds   ase   業務   target   

  xmpp是一個通訊協定。因為這是個開放的協議,為了節儉開發成本,很多即時應用都採用了這個協議。Android上最常用的組合asmack +openfire。Asmack是smack的android版,是對xmpp協議進行了封裝,並提供了豐富的api,簡化了操作。Openfire是一個開源的IM伺服器,基於Xmpp實現。換句話說使用xmpp開發即時通訊應用的話,伺服器端已經開發好了,就是openfire。

 

        現在我做的一個android應用就是採用asmack+openfire。說實在的,xmpp協議太多了,大多都是英文的,去學這個東西成本高,但是如果不學,僅僅依賴openfire+asmack提供的功能很難滿足多樣性的需求。Openfire因為是開源的,所以可以進行外掛程式開發或者二次開發去滿足自己業務需求。xmpp還增加了Jingle擴充協議來支援連線導向的業務,如語音和視頻。

        之前業界xmpp最典型的例子就是Google talk,而且之前Google一直力推xmpp協議。但是Google最新的IM軟體Hangouts並沒有採用xmpp協議,對這一做法Google也沒有一個明確的回答。Google這一做法的確降低的xmpp的熱度。另外很多人說xmpp傳輸效率低,xmpp使用xml格式資料進行通訊,過多的標籤的確可能降低傳輸效率。再說現在的國內主流的IM軟體,QQ,等,都是採用自己私人的通訊協定。Openfire採用的TCP串連,QQ採用TCP+UDP。

        是開發自己的協議,是使用xmpp協議,還是用封裝好的xmpp協議(smack)+現成的伺服器(openfire)就是大家的決定了。不過要說的是三種方案靈活性依次降低,成本也依次降低。我們項目的預算比較低所以採用了asmack+openfire。不過這裡我要說的是僅僅依賴asmack+openfire是滿足不了常規的業務需求的。所以我們的項目引入了webservice,同時嘗試對openfire進行外掛程式開發。

        這裡我可以說說asmack+openfire開發遇到的一些無力的地方,比如:

        使用者無法接受離線的圖片,語音。

        群成員在離線後就會離開群(細來說,smack沒有群的概念,只有個聊天室)

        群聊裡沒有辦法發圖片(點對點的時候發送圖片使用的是檔案傳輸,只能一對一,不能一對多)

 

        其他的問題就不在細說。對於上述的問題會在後續的文章中分享自己的解決方案。

Xmpp最大的優勢是什麼,在我看來就是開源。這種開源可以讓任意兩個使用xmpp協議的軟體進行通訊。

開發之前有必要瞭解一些xmpp的一些資料結構。Xmpp串連使用xml流,這個XML流相當於一個會話期間所有XML節的一個信封

 

  |--------------------|  | <stream>           |  |--------------------|  | <presence>         |  |   <show/>          |  | </presence>        |  |--------------------|  | <message to=‘foo‘> |  |   <body/>          |  | </message>         |  |--------------------|  | <iq to=‘bar‘>      |  |   <query/>         |  | </iq>              |  |--------------------|  | ...                |  |--------------------|  | </stream>          |  |--------------------|

 

中的幾個節點 presence、message、IQ對應著asmack的3個對象。這些都是packet的子類。

 

        關於asmack的api,沒有找到單獨的asmack api,更沒有中文的。大家可以再下載jar包的同時選擇下載源碼。Eclipse引用源碼後,通過javadoc就可以看到介面說明了,和api無異。

 

 

asmack官網:https://github.com/Flowdalic/asmack

asmack:http://asmack.freakempire.de/

openfire:http://www.igniterealtime.org/downloads/index.jsp

smack使用指南:http://www.igniterealtime.org/builds/smack/docs/latest/documentation/index.html

下載openfire的同時,大家可以下載Spark測試用

 

更新2015-3-12

現在smack(4.1以上版本)已經可以直接跑在Android平台上了,以後asmack也沒有更新的必要了。這次smack做了針對Android平台做了很多的最佳化,也是smack一次裡程碑式的更新。

此外設計方案上用openfire+smack+webservice 也許是更優秀的方案。也就是說 只使用smack的通訊功能,諸如好友關係,使用者資料這些東西都交給webservice去管理維護。

Smack參考:https://community.igniterealtime.org/blogs/ignite/2015/01/14/smack-410-beta1-available

Android基於xmpp的即時通訊應用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.