说明:在做以下连接,登陆,注销,注册等操作之前,建议把XMPPStream对象写成一个单例对象,整个程序运行过程中进行随时调用
1,socket 连接
- 1.1, 创建连接,设置连接条件,并进行连接
//首先需要创建XMPPStream对象,在实际操作中建议把这个对象写成单例,方便后期的其他操作
//因为任何有关xmpp的操作都是在XMPPStream的基础上执行的
//1,初始化
_xmppStream = [[XMPPStream alloc] init];
//2,设置用户名和域名等(密码需要再连接建立之后再进行二次发送)
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;//这个端口号在不设置hostName情况下貌似不设置或者设置成其他的好像也不会报错
//3,进行连接
[_xmppStream connectWithTimeout:5 error:&error];
if (error) {
NSLog(@"连接失败,失败原因:%@",error);
}
- 1.2, 监听结果进行监听,默认是遵守<XMPPStreamDelegate>协议的,所以可以直接敲出方法
//连接成功
- (void)xmppStreamDidConnect:(XMPPStream *)sender{
NSLog(@"---连接成功,可以进行下一步密码验证---");
}
//连接断开或者未连接上(主动断开连接或者网络错误断开连接等)
- (void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error{
NSLog(@"-------断开连接或者连接失败---%@",error);
}
2,进行密码验证后登陆(此步骤建立在连接上基础上)
- 2.1, 连接上之后可以发送密码进行授权登陆
[_xmppStream authenticateWithPassword:pwd error:&error];
- 2.2, 用代理方法进行监听授权情况:在接收到通知的时候需要把登陆状态发送给服务器
//密码验证正确
- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender{
NSLog(@"验证过程顺利,且密码正确,可以进行页面跳转,并发送在线状态更改信息!");
//密码验证之后就可以进行发送在线状态更改情况,这一步是可以更改你的在线状态
XMPPPresence *online = [XMPPPresence presence];
[_xmppStream sendElement:online];
}
//密码错误
- (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLElement *)error{
//因为默认离线,所以这里状态不必发送
}
3,登陆之后进行注销操作
- 3.1,注销操作:
[_xmppStream disconnect];
*3.2,注销的结果监听方法:如果注销成功,调用的是上面断开连接方法
//连接断开或者未连接上(主动断开连接或者网络错误断开连接等)
- (void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error{
NSLog(@"-------断开连接或者连接失败---%@",error);
if(!error){//如果没有错误,说明是主动调用断开连接方法断开了连接
//主动断开连接后需要发送离线状态更改请求
XMPPPresence *offline = [XMPPPresence presenceWithType:@"unavailable"];
[_xmppStream sendElement:offline];
}
}
***4, 注册操作(这一步同登陆一样,是在连接成功的基础上进行的)
- 4.1, 注册
[_xmppStream registerWithPassword:pwd error:&error];
- 4.2, 注册结果监听方法
//注册成功
-(void)xmppStreamDidRegister:(XMPPStream *)sender{
NSLog(@"注册成功!");
}
//注册失败
- (void)xmppStream:(XMPPStream *)sender didNotRegister:(DDXMLElement *)error{
NSLog(@"注册失败");
}