標籤:
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 //建立xmppstream6 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 }
iOS開發之使用XMPPFramework實現即時通訊