我在Openfire&中创建了群组聊天XMPP。
我在加入会议室时使用“since”从Openfire服务器获取历史记录。 这是我的代码:
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()];
NSXMLElement *history = [NSXMLElement elementWithName:@"history"];
[history addAttributeWithName:@"since" stringValue:finalDate];
[xmppRoom joinRoomUsingNickname:self.xmppStream.myJID.user
history:history
password:nil];
我将消息存储在本地,因此下次用户在登录时从本地获取最后一条消息日期并将其发送到服务器以在该日期之后获取所有消息。
finalDate is date from that i fetch from local and send it to server.
但是,当我向服务器发送finalDate
时它会获取最后一条消息,即我已经存储在本地数据库中。
如果我来自localDB的最后一条消息是'嗨'并且日期'2016-08-08T04:52:42.347Z'而不是从服务器获取'Hi'。
为什么会这样?我希望日期之后来自服务器的消息。
答案 0 :(得分:1)
XMPP MUC规范的问题是 - 历史消息标有服务器时间,而您询问since
当地时间。 XMPPFramework中有一个XMPPAutoTime
模块,它试图跟踪时差,您应该为任何基于时间戳的查询添加该差异。查看详细说明here