更新:2017年8月1日
實在是抱歉,git上的Demo這么久,有問題自己沒有發現!肯定給大家造成過不方便,抱歉!git上Demo剛重新上傳,要有需要的可以去下載,要有問題可以直接找我QQ聯系我!
最近在總結Socket方面的知識,等文章寫完會發不來,這篇文章是去年什么四五月份寫的吧,那是水平也是有限,希望接下來能總結的比這篇好一點!!
在Demo中,XMPP接收發送消息這一塊的代碼我暫時是刪除了,仿照微信的聊天框架是在的,你要想通過XMPP自己在項目中試試,你需要的也就是在Demo中集成XMPP,然后寫一下它的鏈接和接收/發送方法,其實也很簡單!等我補上去我也會在這里第一時間通知!
和這個相關的Socket的系列文章也是剛開始寫,有需要的可以看看,系列文章:
Socket學習總結系列(一) -- IM & Socket
Socket學習總結系列(二) -- CocoaAsyncSocket
以下正文:
即時通訊(IM)在iOS這片江湖里面已經算是一個老者了,我這小旋風也是在很早以前巡山的時候,就知道有即時通訊這個妖怪,以前也多多少少接觸過一些,在造App的時候用過,怎么可以用“造”這個詞,說着說着就感覺要跑題了,腦海中怎么波濤翻滾的樣子。不好,才開頭了兩句,不能亂開車!說回正題,我知道的即時通訊有用 CocoaAsyncSocket 還有 XMPPFramework 實現的,當然也有現在也有大部分接入環信等等三方的。有些東西掩蓋不住的,可能可能許多同行和我一樣,感覺你知道的越來越多,就越會覺得自己像是個文盲,其實不懂的真的還有好多好多,還有那么多等着你去學習!這時候果斷就要引入幾句有哲學含義的話,安慰一下自己。比如“你一定要努力,但千萬別着急”。這句是簡書主編的一本書的書名,順便也推薦給大家去看看,陶冶一下情操!
應該很多同行也都知道很多三方即時通訊,知道它們是怎么用的,要是還清楚網絡協議底層的知識,其實可以挺讓我羡慕的,畢竟不是計算機專業的,懂得不多,也知道還有很多和我一樣,算是一個半路出家的孩子,我還是建議有時間的話去了解學習一下這些最底層,最基礎的東西。我也在不斷的學習嘗試和總結中,相信這些底層的基礎的是你走向大神路,必不可少的,恩,對,必不可少 !
這篇文章我們就說說怎樣自己搭建一個仿模仿微信的聊天框架和怎樣搭建Openfire服務器來實現一個模仿微信的聊天。
要不造該咋辦?
下面是一些應該能幫到大家的東西,可以去好好看一看,當然很多理論上的東西,你得花時間,前提是你得有時間(=@__@=)!!
一: Socket通信 花時間去了解一下吧,在接觸 CocoaAsyncSocket 之前,記得先了解一下它的原理也是必要的,因為 CocoaAsyncSocket 是對蘋果 CFNetwork 的封裝,所以你了解一下 CFNetwork 也是好滴。
二: XMPP協議 了解XMPP到底是什么,我知道可能有許多剛PX出來的寶寶們,也經常聽到會用XMPP做即時通訊,那你知道 XMPP 到底是什么嗎?了解他是什么了,OK ,它里面一些類和一些方法的使用,也全都在 XMPPFramework使用 這里了。
三: 環信、網易、融雲等等的第三方,我自己覺得它真的是給前端開發者省了很大很大的功夫,其實有詳細開發文檔的東西難度都是下降了一萬點的。它還有UI聊天框架,你要做的,就是把它接到自己的APP里面,還有啥好說的,說了也說不過官方文檔。
NOTE: 在這里只是這樣簡單的說了一下這幾個知識點,在最上面更新的兩篇文章的第一篇中有細細總結即時通訊該怎樣去選擇,怎樣做的問題!
框架和服務器:
還是按順序來吧,我們先說說微信的整個聊天框架搭建的一個思路(對方不想和你說話,並向你丟了一堆 高仿微信聊天框架源碼 I Need You 星星!)。我也是看着 CocoaChina 上大神的一步步分析,模仿寫的,在源代碼里面注釋滿滿的,你要認真看,應該沒問題!

說說上面的框架,采用的是在 控制器1 中添加 控制器2 和控制器3 的方式,控制器1就是一個普通的控制器,他是控制器2 和 控制器3 的代理,控制器2呢就是一個 TableViewController 用來顯示我們的聊天消息的。控制器3就主要是控制下面鍵盤部分的東西,鍵盤部分其實感覺應該是整個的關鍵,也是有鍵盤輸入,語音,表情,更多這幾部分組成的。整個一個主要的思路就是,控制器3 上的事件都是點擊后它的代理 控制器1 響應,然后在控制器1 中去改變 控制器2 上要顯示的東西。
簡單羅列一下 Git上源碼的一個大概,方便大家看吧。
整個聊天框架在 Chat 文件夾里面,Chat文件夾下面的 Models 里面存放的肯定就是各種 Model了,在 Views 文件夾下面,Message 存放的是各種要顯示的 cell , Box 存放的是各種控制器3里面的界面。
控制器1: XYDJViewController 控制器2:ZXChatMessageController 控制器3:ZXChatBoxController
代碼里面有詳細的注釋說明 點擊下載聊天框架源碼
說說聊天服務器吧!
以前項目有用到 AsyncSocket,環信就不多說了,說再多也然並卵,你能說的比人家官方文檔詳細嗎?O(∩_∩)O哈哈。。看着文檔去啪啪啪敲鍵盤就夠了,那就說說 XMPPFramework 吧。你要是沒有后台也沒有服務器,自己玩,那就和自己玩自己一樣,我是利用 Openfire 服務器和 Mysql 數據庫 還有 Spark 或者 Adium 前端來使用的。
關於 Openfire 服務器和 Mysql 數據庫的安裝配置,大家去看看這篇 Openfire配置安裝
根據我自己配置的情況,給大家說說下面注意的幾點!先記得去配置安裝數據庫,再去配置安裝服務器!當然也不是死的,只是這個順序合理一點!
配置數據庫的時候有幾個注意點提一下:

在這個新的 Connections 下面去添加一個新的數據庫,在配置服務器的時候,大家一定注意:
一: 你得去安裝 Java 的JDK。我也試着安裝過最新的JAVA環境,事實證明,還是得安裝JDK。。JAVA/jdk鏈接 安裝 8U91版 MAC OSX的。
二: 如果還是開啟失敗。可能就是權限的問題,在終端中輸入:
sudo chmod -R 777 /usr/local/openfire/bin
sudo su
cd /usr/local/openfire/bin
export JAVA_HOME=`/usr/libexec/java_home`
echo $JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home
cd /usr/local/openfire/bin
./openfire.sh
三: 在鏈接數據庫的時候:

用戶名和密碼,就按照你剛開始在配置數據庫的時候的用戶名和密碼填寫。和上上圖的 1 2 對應。
還有這個數據庫URL,你在最上面選擇了 .MySQL之后,下面就會有自動的填充,其中的 [host-name] 就是你配置數據庫的時候 3 處的地址,[database-name] 就是你在配置數據庫的時候在新建的 Connections 里面創建的數據庫的名字,不是 Connections 的名字,注意一下。
Spark 或者 Adium 大家點擊鏈接下載。你可以兩個都下載了,創建兩個用戶,分別登錄加好友聊聊天試試,看服務器有沒有什么問題。還有問題的可以加我QQ詳聊,QQ我博客園首頁有。
那結果呢?
先是創建了兩個用戶,聊兩句天看看我們的服務器OK么,結果它是沒問題的。

那我們用XMPPFramework呢?
關於 XMPPFramework具體的方法怎么使用 的,我就不再多說了,你可以找到的太多太多的文章去學習。在上面的框架中簡單的測試了一下能不能接收到消息,證明是沒問題的。

順便說說這個XMPP接收到的數據格式是 XML 格式的,有些寶寶可能接觸到的 JSON 格式的數據比較多,XML格式的數據解析不怎么熟悉,鏈接XML解析 給大家,數據解析的講解的非常詳細,寫的也是棒棒的!!
結束了?
恩,寫到這里差不多就結束了,得說明一點,上面的XMPP的測試代碼還沒有加進去我們寫的框架當中去,是寫在 XWViewController 里面的,大家可以下載代碼自己去完善一下,有時間我自己也會把它加進去的。。
最后: 給大家灌一口貼在我們公司牆壁上的雞湯,“你不努力,誰也給不了你想要的生活!” ,隨筆寫的有問題的地方大家留言指正,在首頁也有我 QQ 可以加 QQ交流 。。。
