5

この問題を解決するために何時間も費やしましたが、私は困惑しています!

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 管理者経由で) チャット メッセージを検索して成功した結果を得ることができるため、機能してメッセージを保存しているように見えます。

どんな助けでも大歓迎です。ありがとう!

4

4 に答える 4

0

XMPPFramework は XEP-0136 を実装しています。XMPPMessageArchivingを使用して環境設定を設定したり、サーバーのアーカイブをクライアントに同期したりしましたか?

于 2013-01-23T15:18:08.367 に答える