說明:在做以下連接膏斤,登陸徐绑,注銷,注冊等操作之前掸绞,建議把XMPPStream對象寫成一個單例對象泵三,整個程序運行過程中進行隨時調(diào)用
1,socket 連接
- 1.1, 創(chuàng)建連接衔掸,設(shè)置連接條件烫幕,并進行連接
//首先需要創(chuàng)建XMPPStream對象,在實際操作中建議把這個對象寫成單例敞映,方便后期的其他操作
//因為任何有關(guān)xmpp的操作都是在XMPPStream的基礎(chǔ)上執(zhí)行的
//1,初始化
_xmppStream = [[XMPPStream alloc] init];
//2较曼,設(shè)置用戶名和域名等(密碼需要再連接建立之后再進行二次發(fā)送)
NSString *account = [[NSUserDefaults standardUserDefaults] objectForKey:@"account"];
self.xmppStream.myJID = [XMPPJID jidWithUser:account domain:@"localhost" resource:@"Apple Device"];
self.xmppStream.hostName = @"192.168.0.2";//192.168.0.2
self.xmppStream.hostPort = 5222;//這個端口號在不設(shè)置hostName情況下貌似不設(shè)置或者設(shè)置成其他的好像也不會報錯
//3,進行連接
[_xmppStream connectWithTimeout:5 error:&error];
if (error) {
NSLog(@"連接失敗振愿,失敗原因:%@",error);
}
- 1.2, 監(jiān)聽結(jié)果進行監(jiān)聽捷犹,默認(rèn)是遵守<XMPPStreamDelegate>協(xié)議的,所以可以直接敲出方法
//連接成功
- (void)xmppStreamDidConnect:(XMPPStream *)sender{
NSLog(@"---連接成功冕末,可以進行下一步密碼驗證---");
}
//連接斷開或者未連接上(主動斷開連接或者網(wǎng)絡(luò)錯誤斷開連接等)
- (void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error{
NSLog(@"-------斷開連接或者連接失敗---%@",error);
}
2萍歉,進行密碼驗證后登陸(此步驟建立在連接上基礎(chǔ)上)
- 2.1, 連接上之后可以發(fā)送密碼進行授權(quán)登陸
[_xmppStream authenticateWithPassword:pwd error:&error];
- 2.2, 用代理方法進行監(jiān)聽授權(quán)情況:在接收到通知的時候需要把登陸狀態(tài)發(fā)送給服務(wù)器
//密碼驗證正確
- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender{
NSLog(@"驗證過程順利档桃,且密碼正確枪孩,可以進行頁面跳轉(zhuǎn),并發(fā)送在線狀態(tài)更改信息藻肄!");
//密碼驗證之后就可以進行發(fā)送在線狀態(tài)更改情況蔑舞,這一步是可以更改你的在線狀態(tài)
XMPPPresence *online = [XMPPPresence presence];
[_xmppStream sendElement:online];
}
//密碼錯誤
- (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLElement *)error{
//因為默認(rèn)離線,所以這里狀態(tài)不必發(fā)送
}
3嘹屯,登陸之后進行注銷操作
- 3.1,注銷操作:
[_xmppStream disconnect];
*3.2,注銷的結(jié)果監(jiān)聽方法:如果注銷成功攻询,調(diào)用的是上面斷開連接方法
//連接斷開或者未連接上(主動斷開連接或者網(wǎng)絡(luò)錯誤斷開連接等)
- (void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error{
NSLog(@"-------斷開連接或者連接失敗---%@",error);
if(!error){//如果沒有錯誤,說明是主動調(diào)用斷開連接方法斷開了連接
//主動斷開連接后需要發(fā)送離線狀態(tài)更改請求
XMPPPresence *offline = [XMPPPresence presenceWithType:@"unavailable"];
[_xmppStream sendElement:offline];
}
}
***4州弟, 注冊操作(這一步同登陸一樣钧栖,是在連接成功的基礎(chǔ)上進行的)
- 4.1, 注冊
[_xmppStream registerWithPassword:pwd error:&error];
- 4.2, 注冊結(jié)果監(jiān)聽方法
//注冊成功
-(void)xmppStreamDidRegister:(XMPPStream *)sender{
NSLog(@"注冊成功婆翔!");
}
//注冊失敗
- (void)xmppStream:(XMPPStream *)sender didNotRegister:(DDXMLElement *)error{
NSLog(@"注冊失敗");
}