从历史记录

时间:2016-08-08 05:16:26

标签: ios objective-c xmpp openfire

我在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'。

为什么会这样?我希望日期之后来自服务器的消息。

1 个答案:

答案 0 :(得分:1)

XMPP MUC规范的问题是 - 历史消息标有服务器时间,而您询问since当地时间。 XMPPFramework中有一个XMPPAutoTime模块,它试图跟踪时差,您应该为任何基于时间戳的查询添加该差异。查看详细说明here