花了几个小时试图解决这个问题,我很难过!
试图在我的 OpenFire 服务器上获取 2 个用户之间的聊天历史记录,我读到需要我的插件来执行此操作。
因此,我在我的 OpenFire 服务器上安装了“Open Archive”插件并发送以下 XML(根据 XMPP-0136 协议文档):
<iq type="get" id="page1">
<retrieve xmlns="urn:xmpp:archive" with="username@server.com" start="1469-07-21T02:56:15Z">
<set xmlns="http://jabber.org/protocol/rsm">
<max>100</max>
</set>
</retrieve>
</iq>
在代码中,这是通过以下方式实现的:
NSXMLElement *iQ = [NSXMLElement elementWithName:@"iq"];
[iQ addAttributeWithName:@"type" stringValue:@"get"];
[iQ addAttributeWithName:@"id" stringValue:@"page1"];
NSXMLElement *retrieve = [NSXMLElement elementWithName:@"retrieve"];
[retrieve addAttributeWithName:@"xmlns" stringValue:@"urn:xmpp:archive"];
[retrieve addAttributeWithName:@"with" stringValue:@"username@server.com"];
[retrieve addAttributeWithName:@"start" stringValue:@"1469-07-21T02:56:15Z"];
NSXMLElement *set = [NSXMLElement elementWithName:@"set"];
[set addAttributeWithName:@"xmlns" stringValue:@"http://jabber.org/protocol/rsm"];
NSXMLElement *max = [NSXMLElement elementWithName:@"max"];
max.stringValue = @"100";
[set addChild:max];
[retrieve addChild:set];
[iQ addChild:retrieve];
[[[self appDelegate] xmppStream] sendElement:iQ];
返回以下错误:
<iq xmlns="jabber:client" type="error" id="page1" to="username@server.com">
<error code="404" type="cancel">
<item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>
我的 Xcode 项目可以成功地向我尝试接收聊天记录的用户发送/接收消息,所以我真的不知道我做错了什么。此外,该插件使我能够搜索聊天消息(通过 OpenFire 管理员)并获得成功的结果,因此它似乎正在工作并存储消息。
任何帮助,将不胜感激。谢谢!