花了幾小時試圖解決這個問題,我很難過!XMPPFramework - 檢索Openfire郵件歸檔文件
試圖抓住我的OpenFire服務器上的2個用戶之間的聊天記錄,我看到我需要插件來做到這一點。
所以,我安裝我的Openfire服務器上的「開放檔案」插件,併發送下面的XML(按照XMPP-0136協議文檔):
<iq type="get" id="page1">
<retrieve xmlns="urn:xmpp:archive" with="[email protected]" 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:@"[email protected]"];
[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="[email protected]">
<error code="404" type="cancel">
<item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>
我的Xcode項目可以成功地向用戶發送/接收消息我試圖接收聊天記錄,所以我真的不知道我在做什麼錯誤。此外,插件使我能夠通過聊天消息(通過OpenFire管理員)搜索成功的結果,因此它似乎在工作並存儲消息。
任何幫助,將不勝感激。謝謝!
這裏是解決方案。 http://stackoverflow.com/questions/11397172/xmpp-retrieve-archive-messages-from-openfire-server – Karun