1. 程式人生 > >iOS開發之使用XMPPFramework實現即時通訊(一)

iOS開發之使用XMPPFramework實現即時通訊(一)

關於XMPP的理論介紹在本篇部落格中就不做贅述了,如何在我們之前的微信中加入XMPP協議來實現通訊呢?下面將會介紹一下XMPP的基本的知識,讓我們的微信可以實現互聯通訊。要做的準備工作是要有伺服器支援XMPP協議,然後通過spark註冊個測試賬號,最後就可以通過XMPP用我們已有的賬號和密碼進行通訊啦。至於如何使伺服器支援XMPP協議,如何通過Spark註冊賬號,不是本篇部落格的論述主題,本篇部落格中主要是如何在我們的App中使用XMPP協議。

  今天的部落格中的內容是如何在工程中引入XMPPFramework,並在App上可以連線並認證我們的賬戶和密碼,好啦,廢話少說,切入今天的正題。

  一.XMPPFramework的引入

    1.使用XMPP當然少不了框架的匯入,還是用CocoaPods來管理第三方類庫,在對應的工程中用CocoaPods引入XMPPFramework, 在Profile中新增相應版本的XMPPFramework框架,然後pod update一下安裝即可,終端截圖如下:

    2.update成功以後我們就可以用XMPPFramework幹活了

  二.使用XMPPFramework連線伺服器並認證密碼

    1.在AppDelegate中宣告並例項化XMPPStream,在獲取XMPPStream例項時,和CoreData中的managedObjectContext類似,下面會給出程式碼,

      初始化XMPPSteam程式碼如下:

複製程式碼
1 //XMPP資料流
2 @property (strong, nonatomic) XMPPStream * xmppStream;
3 
4 
5  //建立xmppstream
6  self.xmppStream = [[XMPPStream alloc]init];
複製程式碼

    2.在使用XMPPFramework時,因為其用到是委託回撥,所以要在相應的Controller中實現XMPPStreamDelegate協議,然後實現協議中相應的方法。

      (1).在使用XMPPStream的Controller中通過Application的delegate獲取我們上面建立的xmppStream例項,程式碼如下:

複製程式碼
1     //獲取應用的xmppSteam(通過Application中的單例獲取)
2     UIApplication *application = [UIApplication sharedApplication];
3     id delegate = [application delegate];
4     self.xmppStream = [delegate xmppStream];
5     
6     //註冊回撥
7     [self.xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];
複製程式碼

     (2)獲取XMPP流以後,就可以連線伺服器了,連線伺服器分為三部分,先拼接XMPPJID, 然後把JID新增到xmppStream中,最後連線。程式碼如下:

複製程式碼
 1 //連線伺服器
 2 -(void) xmppConnect
 3 {
 4     //1.建立JID
 5     XMPPJID *jid = [XMPPJID jidWithUser:@"lizelusdut" domain:MY_DOMAIN resource:@"iPhone"];
 6     
 7     //2.把JID新增到xmppSteam中
 8     [self.xmppStream setMyJID:jid];
 9     
10     //連線伺服器
11     NSError *error = nil;
12     [self.xmppStream connectWithTimeout:10 error:&error];
13     if (error) {
14         NSLog(@"連接出錯:%@",[error localizedDescription]);
15     }
16 }
複製程式碼

    (3)實現連線伺服器後要回調的方法(連線後要認證使用者密碼),程式碼如下

複製程式碼
 1 //連線後的回撥
 2 -(void)xmppStreamDidConnect:(XMPPStream *)sender
 3 {
 4     //連線成功後認證使用者名稱和密碼
 5     NSError *error = nil;
 6     [self.xmppStream authenticateWithPassword:@"[email protected]#admin" error:&error];
 7     if (error) {
 8         NSLog(@"認證錯誤:%@",[error localizedDescription]);
 9     }
10 }
複製程式碼

    (4)實現認證成功後要回調的方法,程式碼如下:

//認證成功後的回撥
-(void)xmppStreamDidAuthenticate:(XMPPStream *)sender
{
    NSLog(@"登陸成功");
}

    (5)認證失敗後要呼叫的方法,程式碼如下:

1 //認證成功後的回撥
2 -(void)xmppStream:sender didNotAuthenticate:(DDXMLElement *)error
3 {
4 NSLog(@"登陸失敗");
5 }

  個人感覺部落格長篇大論不利於別人攝取自己要用的知識,所以今天的部落格先就這麼長吧,今天是連線伺服器並認證使用者身份。以後會繼續更新部落格的內容,直到兩個APP之間可以通訊為止,希望大家繼續關注。

相關推薦

iOS開發使用XMPPFramework實現即時通訊()

關於XMPP的理論介紹在本篇部落格中就不做贅述了,如何在我們之前的微信中加入XMPP協議來實現通訊呢?下面將會介紹一下XMPP的基本的知識,讓我們的微信可以實現互聯通訊。要做的準備工作是要有伺服器支援XMPP協議,然後通過spark註冊個測試賬號,最後就可以通過XMPP用

iOS開發使用XMPPFramework實現即時通訊(二)

上篇的部落格只是本篇的引子,本篇部落格就給之前的微信加上即時通訊的功能,主要是對XMPPFramework的使用。本篇部落格中用到了Spark做測試,當然也少不了Openfire伺服器,在這就不詳述Openfire的安裝過程了(網上的教程還是蠻多的),Openfire的安

iOS開發窺探UICollectionViewController(五):款炫酷的圖片瀏覽元件

本篇部落格應該算的上CollectionView的高階應用了,從到今天的(五),可謂是由淺入深的窺探了一下UICollectionView的用法,這些用法不僅包括SDK中自帶的流式佈局(UICollectionViewDelegateFlowLayout)而且介紹瞭如何根據你的

iOS開發效能除錯Instruments(

iOS效能除錯有很多方法,這裡講一下Xcode內建工具Instruments。 Instruments是一個官方提供的強大的效能除錯工具集。 instruments.png 1.Blank(空模板):建立一個空的模板,可以從Library庫中新增其他模板; 2.Act

Android開發聲網即時通訊與訊飛語音識別相結合

聲網是一家提供語音、視訊即時通訊服務的公司,他的服務大多基於WebRTC開源專案並進行一些優化和修改。而訊飛語音識別應該不用多說了,老羅在釋出會上介紹得已經夠詳細了。 那麼下面進入今天的主題,就是讓聲網和訊飛識別同時使用,之前可能有朋友沒遇到過這樣的需求,那先說一下讓兩者同

iOS開發使用MQTT協議實現遠程通訊

lis height msg PE contex 特性 AC eva http p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px "PingFang SC" } p.p2 { margin: 0.0px 0.0px 0

IOS開發非同步載入網路圖片並快取本地實現瀑布流(

</pre><pre name="code" class="objc"></pre><pre name="code" class="objc">在前面的一篇部落格中,我寫了一個瀑布流照片牆的程式,由於之前的程式載入的圖片是本

iOS開發使用UICollectionView實現美團App的分類功能【偶現大眾點評App的一個小bug】

sso leg 一個 borde spa line 註意 oba alt 郝萌主傾心貢獻,尊重作者的勞動成果,請勿轉載。假設文章對您有所幫助,歡迎給作者捐贈,支持郝萌主,捐贈數額任意,重在心意^_^ 我要捐贈: 點擊捐贈Cocos2d-X源代碼下載:點我傳送遊戲官方下載

ios開發--UIDocumentInteractionController的使用(實現更多分享服務)

void cnblogs 實例 內容 main 華麗 例如 一個 img 最近在做項目的時候,碰到這樣一個需求,就是本地生成pdf文件,然後本地打開,經過測試發現,pdf文件是無法保存到相冊裏面的,只能存到手機裏面,鑒於蘋果的存儲機制,需要取出來,進行本地展示,可以直接傳到

iOS開發使用fastlane工具實現自動化打包發布

TP ruby success 2.0 提交 gui ava 新的 unit test p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #000000; backgroun

iOS開發OC與swift開發混編教程,代理的相互呼叫,block的實現。OC呼叫Swift中的代理, OC呼叫Swift中的Block 閉包

  本文章將從兩個方向分別介紹 OC 與 swift 混編   1. 第一個方向從 swift工程 中引入 oc類    1. 1 如何在swift的類中使用oc類    1.2  如何在swift中實現oc的代理方法  &

iOS開發窺探UICollectionViewController(四) --款功能強大的自定義瀑布流

在上一篇部落格中,自定義瀑布流的列數,Cell的外邊距,Cell的最大以及最小高度是在我們的佈局檔案中是寫死的,換句話說也就是不可配置的。為了循序漸進,由淺入深呢,上篇部落格暫且那麼寫。不過那樣寫太過死板,本來使用起來比較靈活的自定義佈局,如果把其配置引數給寫死了,就相當於在籠

iOS開發窺探UICollectionViewController() :Ready Your CollectionViewController

之前用CollectionViewController只是皮毛,一些iOS從入門到精通的書上也是泛泛而談。這幾天好好的搞了搞蘋果的開發文件上CollectionViewController的內容,親身體驗了一下CollectionViewController的強大,之前一直認為

iOS開發runtime():runtime除錯環境搭建

本系列部落格是本人的原始碼閱讀筆記,如果有iOS開發者在看runtime的,歡迎大家多多交流。為了方便討論,本人新建了一個微信群(iOS技術討論群),想要加入的,請新增本人微信:zhujinhui207407,【加我前請備註:ios 】,本人部落格http://www.kyson.cn 也在不停的更新中,歡迎

iOS開發Weex爬坑路環境部署和Devtools Debug(

前言 不多說,直接開始Weex,算是記錄這段時間對新技術的學習積累。期間看了很多Vue.js和Node.js的基礎,順便捋了以下CSS的flex-box佈局等等前端的知識,太多了太雜了,還是用筆記記錄下。直接從官方介紹,開始 補充一個傳送門:和文章沒什麼關係 JS中的async和await

iOS開發蝦米音樂頻道選擇切換效果分析與實現

今天部落格的內容比較簡單,就是看一下蝦米音樂首頁中頻道選擇的一個動畫效果的實現。之前用mask寫過另外一種Tab切換的一種效果,網易雲音樂裡邊的一種Tab切換效果,詳情請移步於""。,下面會對效果進行分析,並且根據自己的理解去實現一個類似的頻道選擇切換效果。程式碼會在Github上進行分享,Demo實現時依然

iOS開發執行緒間的MachPort通訊與子執行緒中的Notification轉發

如題,今天的部落格我們就來記錄一下iOS開發中使用MachPort來實現執行緒間的通訊,然後使用該知識點來轉發子執行緒中所發出的Notification。簡單的說,MachPort的工作方式其實是將NSMachPort的物件新增到一個執行緒所對應的RunLoop中,並給NSMachPort物件設定相應的代理。

iOS開發資訊類App常用分類控制元件的封裝與實現(CollectionView+Swift3.0+)

今天部落格中,我們就來實現一下一些常用資訊類App中常用的分類選擇的控制元件的封裝。本篇部落格中沒有使用到什麼新的技術點,如果非得說用到了什麼新的技術點的話,那麼勉強的說,用到了一些iOS9以後UICollectionView新增的一些新的特性。本篇部落格所涉及的技術點主要有UICollectionView的

iOS開發多種Cell高度自適應實現方案的UI流暢度分析

本篇部落格的主題是關於UI操作流暢度優化的一篇部落格,我們以TableView中填充多個根據內容自適應高度的Cell來作為本篇部落格的使用場景。當然Cell高度的自適應網上的解決方案是鋪天蓋地呢,今天我們的重點不是如何討論Cell高度的自適應,而是給出幾種Cell高度自適應的解決方案,然後對比起UI流暢度,從

iOS開發UITableView中計時器的幾種實現方式(NSTimer、DispatchSource、CADisplayLink)

最近工作比較忙,但是還是出來更新部落格了。今天部落格中所涉及的內容並不複雜,都是一些平時常見的一些問題,通過這篇部落格算是對UITableView中使用定時器的幾種方式進行總結。本篇部落格會給出在TableView中使用NSTimer或者DispatchSourcer中常見的五種方式。當然下方第一種方式是常規