我使用XMPP成功实现了使用Openfire的群聊。
现在,当用户A向离线的用户B发送消息时,那么当用户B在线时,我如何从服务器检索所有未读/离线消息。
我做这些事情是为了加入会议室,但它从服务器获取所有消息:
- (void) getJoinRoom
{
XMPPRoomMemoryStorage *roomStorage = [[XMPPRoomMemoryStorage alloc] init];
XMPPJID *roomJID = [XMPPJID jidWithString:chatWithUser];
xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:roomStorage
jid:roomJID
dispatchQueue:dispatch_get_main_queue()];
[xmppRoom activate:self.xmppStream];
[xmppRoom addDelegate:self
delegateQueue:dispatch_get_main_queue()];
[xmppRoom joinRoomUsingNickname:self.xmppStream.myJID.user
history:nil
password:nil];
}
如何获取这些脱机消息?
根据XMPP标准,只有一条单聊天消息符合离线存储条件,因此类型="groupchat"的消息永远不会存储在XMPP服务器的离线存储中。
根据MUC XEP,如果用户离线,则不再算作房间的参与者。因此,当用户联机时,他将不得不通过向房间发送呈现数据包来加入房间。