iOS的XMPPFramework简单介绍(实现及时通信)

2020-01-18 17:15:28于海丽

一个 presence 标签的格式一般如下:
xmppframework使用,xmppframework群聊,ios,xmppframework

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 协议,将数据放到标签内,例如:xmppframework使用,xmppframework群聊,ios,xmppframework


- (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