xmpp 书签 xep-0048 -- 服务器未添加书签

Posted

技术标签:

【中文标题】xmpp 书签 xep-0048 -- 服务器未添加书签【英文标题】:xmpp bookmark xep-0048 -- server is not adding bookmark 【发布时间】:2013-12-17 08:51:13 【问题描述】:

我正在开发 MUC,为此我想为已加入的房间用户添加书签。为此,我使用了 xep-0048 扩展名,并且服务器文档显示我创建了相同的 iq 请求,但似乎书签不起作用。

以下是我的智商要求

 <iq type="set" id="pip1" from="jid@server.local">
 <pubsub xmlns="http://jabber.org/protocol/pubsub">
 <publish node="storage:bookmarks">
  <item id="current">
  <storage xmlns="storage:bookmarks">
  <conference name="roomExample1" autojoin="true" jid="roomExample1@conference.server.local">               
  <nick>satish</nick>
  </conference>
   </storage>
  </item>
  </publish>
 <publish-options>
  <x xmlns="jabber:x:data" type="submit">
  <field var="FORM_TYPE" type="hidden">
  <value>http://jabber.org/protocol/pubsub#publish-options</value>
  </field>
  <field var="pubsub#persist_items">
 <value>true</value>
  </field>
<field var="pubsub#access_model">
 <value>whitelist</value>
 </field>
 </x>
 </publish-options>
 </pubsub>
</iq>

当我将此请求发送到服务器时,我会从服务器收到以下响应。

  <iq xmlns="jabber:client" from="jid@server.local" to="jid@server.local/14748802401387269663600179" id="pip1" type="result">
  <pubsub xmlns="http://jabber.org/protocol/pubsub">
  <publish node="storage:bookmarks">
   <item id="current"/>
  </publish>
  </pubsub>
   </iq>

当我发送 iq 请求以检索书签时,我也得到了相同的响应。

如果我遗漏了什么,请告诉我。

提前致谢。

【问题讨论】:

你用的是什么服务器? 感谢您的评论 Joe,我使用的是 ejabberd-2.1.13 服务器,现在我终于开始将数据存储在 0049 的私有数据中,但仍然想知道原因。 嗨 Satish,我是 xmpp 的新手,我正在尝试为 xmpproom 添加书签,您能分享一下您为 xmpproom 添加书签的经验和步骤吗?我已阅读 XEP-0048,但不幸的是,它没有提供所有信息/步骤。 我尝试过添加书签,但它不适用于 48 扩展名,因此我使用了私有数据来存储和检索它...查看代码的答案 【参考方案1】:

使用此函数发送请求

   [xmppStream sendElement:iq];

并按如下方式创建您的 iqbookmark 对象

   NSString* server = @"test@pc"; //or whatever the server address for muc is
   XMPPJID *servrJID = [XMPPJID jidWithString:server];
   XMPPIQ *iq = [XMPPIQ iqWithType:@"set" to:servrJID];
//  [iq addAttributeWithName:@"from" stringValue:[xmppStream myJID].full];
[iq addAttributeWithName:@"id" stringValue:@"123"];
NSXMLElement *query = [NSXMLElement elementWithName:@"query"];
[query addAttributeWithName:@"xmlns" stringValue:@"jabber:iq:private"];
NSXMLElement *storage_q = [NSXMLElement elementWithName:@"storage"];
[storage_q addAttributeWithName:@"xmlns" stringValue:@"storage:bookmarks"];

NSXMLElement *conference_s = [NSXMLElement elementWithName:@"conference"];
[conference_s addAttributeWithName:@"name" stringValue:@"roomExample1_satish"];
[conference_s addAttributeWithName:@"autojoin" stringValue:@"true"];
[conference_s addAttributeWithName:@"jid" stringValue:@"roomExample1@conference.test@pc"];
[conference_s addAttributeWithName:@"nick" stringValue:@"satish"];
[storage_q addChild:conference_s];
[query addChild:storage_q];
[iq addChild:query];

【讨论】:

以上是关于xmpp 书签 xep-0048 -- 服务器未添加书签的主要内容,如果未能解决你的问题,请参考以下文章

在浏览器中使用 xmpp.js 连接到 XMPP 服务器

成功登录xmpp服务器后如何获取xmpp用户(iPhone SDK)?

如何检查服务器是不是支持 xmpp?

如何在Android中创建使Xmpp与XMPP服务器保持连接的服务?

XMPP 服务器名和 XMPP 服务名之间的区别?

谷歌浏览器同步书签,重装系统后,重新安装谷歌浏览器怎么找回书签啊