IOS使用XMPP做即时聊天,服务器会在一定的时间间隔内(默认是300S)想客户端发送一个IQ,如何客户端不做出响应,服务器则会默认在客户端的连接是断开的。
需要实现xmpp代理- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq ;
处理代码如下
- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq {
PPRSLog(@"----------------------%@",iq);
if (iq.isGetIQ) {
//解析iq 是ping类型则给openfier 响应一个IQ
NSXMLElement *query = iq.childElement;
if ([@"ping" isEqualToString:query.name]) {
//服务器会在给定的时间内向客户端发送ping包(用来确认客户端用户是否在线),当第二次发送bing包时,如果客户端无响应则会T用户下线
NSXMLElement *ping = [NSXMLElement elementWithName:@"ping" xmlns:@"jabber:client"];
NSXMLElement *iq = [NSXMLElement elementWithName:@"iq"];
XMPPJID *myJID = self.xmppStream.myJID;
[iq addAttributeWithName:@"from" stringValue:myJID.description];
[iq addAttributeWithName:@"to" stringValue:myJID.domain];
[iq addAttributeWithName:@"type" stringValue:@"get"];
[iq addChild:ping];
//发送的iq可以不做任何的设置
[self.xmppStream sendElement:iq];
}
}
return YES;
}