一个 presence 标签的格式一般如下:

presence 的状态:
available 上线 away 离开 do not disturb 忙碌 unavailable 下线
- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence {
NSString *presenceType = [presence type];
NSString *presenceFromUser = [[presence from] user];
if (![presenceFromUser isEqualToString:[[sender myJID] user]]) {
if ([presenceType isEqualToString:@"available"]) {
//
} else if ([presenceType isEqualToString:@"unavailable"]) {
//
}
}
}
2. 接收消息和发送消息
2.1接收消息
当接收到 message 标签的内容时,XMPPFramework 框架回调该方法
根据 XMPP 协议,消息体的内容存储在标签 body 内
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message {
NSString *messageBody = [[message elementForName:@"body"] stringValue];
}
2.2发送消息
发送消息,我们需要根据 XMPP 协议,将数据放到标签内,例如:
- (void)sendMessage:(NSString *) message toUser:(NSString *) user {
NSXMLElement *body = [NSXMLElement elementWithName:@"body"];
[body setStringValue:message];
NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
[message addAttributeWithName:@"type" stringValue:@"chat"];
NSString *to = [NSString stringWithFormat:@"%@@example.com", user];
[message addAttributeWithName:@"to" stringValue:to];
[message addChild:body];
[self.xmppStream sendElement:message];
}
3. 获取好友信息和删除好友
3.1好友列表和好友名片
[_xmppRoster fetchRoster];//获取好友列表
//获取到一个好友节点
- (void)xmppRoster:(XMPPRoster *)sender didRecieveRosterItem:(NSXMLElement *)item
//获取完好友列表
- (void)xmppRosterDidEndPopulating:(XMPPRoster *)sender
//到服务器上请求联系人名片信息
- (void)fetchvCardTempForJID:(XMPPJID *)jid;
//请求联系人的名片,如果数据库有就不请求,没有就发送名片请求
- (void)fetchvCardTempForJID:(XMPPJID *)jid ignoreStorage:(BOOL)ignoreStorage;
//获取联系人的名片,如果数据库有就返回,没有返回空,并到服务器上抓取
- (XMPPvCardTemp *)vCardTempForJID:(XMPPJID *)jid shouldFetch:(BOOL)shouldFetch;
//更新自己的名片信息
- (void)updateMyvCardTemp:(XMPPvCardTemp *)vCardTemp;
//获取到一盒联系人的名片信息的回调
- (void)xmppvCardTempModule:(XMPPvCardTempModule *)vCardTempModule
didReceivevCardTemp:(XMPPvCardTemp *)vCardTemp
forJID:(XMPPJID *)jid










