廢話少說,切入今天的正題。今天要給之前的微信加入登陸,擷取好友清單,聊天(發送文字,表情,圖檔,聲音等功能),最近聯系人等。在部落格的開頭還是先來幾張圖來介紹一下功能,然後再給出核心代碼的實作。
一、功能子產品截圖
1.登陸和擷取好友清單
登陸的過程就是連接配接用xmppframework連接配接openfire的過程,如果使用者登陸過,就從userdefault裡擷取使用者的jid和密碼自動連接配接,如果使用者沒有登陸過則登陸。擷取好友清單也是通過xmppframework中的roster來擷取的,運作截圖如下:

2.好友點選去就是聊天頁面,聊天時如果是發送的圖檔或者聲音,先存儲到伺服器上存儲,伺服器會傳回存儲路徑然後再把url發送給接收方,接收方再下載下傳
(1)如果是發送的文字,把文字轉成屬性字元串,然後再轉成nsdata,最後轉成字元串放在message的body中進行發送,下面是用spark做接收端做得測試,截圖如下:
(2)發送圖檔,把圖檔的存儲路徑發送給對方,讓對方從伺服器上下載下傳。截圖如下:
(3)發送聲音和圖檔一樣都是發送url,截圖如下:
二、代碼實作部分
上面的部分是允許的效果截圖,從截圖上是不難看出功能點的。圖就先貼到這吧,下面給出核心代碼的實作。
1.使用xmppframework前的準備,擷取xmppstream和激活要用的元件,在appdelegate添加代碼。以後要用xmppstream時,要通過appdelegate擷取。下面的代碼是在appdelegate.m中進行的相關元件的初始化,代碼如下
(1)執行個體化xmppstream
(2)建立重連元件,并在xmppstream中激活
(3)建立message部分的内容,接受的消息我們儲存在本地資料庫中,我們要顯示的時候是從資料庫中擷取的。在初始化消息元件的時候,要指定儲存政策,一般可以選的是coredata還是記憶體。指定完儲存政策後執行個體化message是要關聯儲存政策,之後也是需要在xmppstream中進行激活的,最後要擷取coredata的上下文。代碼如下:
(4),初始化擷取好友清單的相關元件并指定儲存政策,和上面的代碼步驟極為相似。這也能看出來在xmppframework中進行元件的初始化步驟是差不多的。下面我們設定自動擷取花名冊,代碼如下:
2.登陸子產品的實作
登陸時就是使用者輸入jid和password,然後連接配接伺服器和驗證密碼,如果認證成功則跳轉到好友清單才controller,同時把jid和password存儲到userdefaults中便于下次自動連接配接。下面的代碼就是登陸部分的代碼(loginviewcontroller.m):
(1).通過應用代理擷取xmppstream,并注冊回調,代碼如下:
(2).建立jid連接配接伺服器
(3).連接配接成後需要認證密碼,代碼如下:
(4)密碼認證成功後的回調
(5)密碼認證失敗後的回調
(6),二次登陸自動連接配接代碼:
3.擷取好友清單的xmppframework的代碼實作
在擷取使用者清單的代碼中就會用到我們之前注冊的roster的内容,因為我們在執行個體化roster的時候指定的儲存政策是用coredata進行儲存的,并且是自動擷取好友清單。是以在擷取好友清單的tableviewcontroller中我們隻需要通過coredata來擷取好友清單即可。下面将給出擷取好友清單的核心代碼:
(1),擷取roster對應的上下文,用于擷取存儲在roster相應實體中的資料
(2).擷取fetchrequst對象,并指定coredata實體類,之後添加排序規則,代碼如下:
(3).擷取fetchedresultcontroller并注冊回調,用于自動重新整理tableview,代碼如下:
(4)擷取存儲的内容
今天的xmppframework就先到這兒吧,内容也挺多的了,其實xmppframework中的元件使用方法都差不多,首先第初始化記憶體,然後進行相關配置,在後就是在xmppstream中激活,最後就是如何使用了。