XMPP:如何通过 Jabber Id 查询特定的名册信息

Posted

技术标签:

【中文标题】XMPP:如何通过 Jabber Id 查询特定的名册信息【英文标题】:XMPP: How to query specific roster information by Jabber Id 【发布时间】:2013-12-18 11:09:05 【问题描述】:

我是 XMPP 的初学者。我正在使用 Strophe js 库。

现在我想通过它的 jabber id 获得一个特定的名册项目

但我对需要发送什么样的节和属性感到困惑。

我有办法通过发送这样的 IQ 节来检索我的名单:

<iq from='juliet@example.com/balcony'
       id='bv1bs71f'
       type='get'>
    <query xmlns='jabber:iq:roster'/>
</iq>

但我得到所有这样的联系人列表:

<iq id='bv1bs71f'
       to='juliet@example.com/chamber'
       type='result'>
    <query xmlns='jabber:iq:roster' ver='ver7'>
      <item jid='nurse@example.com' name='Nurse'/>
      <item jid='romeo@example.net' name='Romeo'/>
      <item jid='abc@example.net' name='Abc'/>
      ....
    </query>
</iq>

我的问题是如何通过发送我的联系人JID作为参数来获取特定项目(只有一个项目结果)?

如果我可以用 SQL 来解释,语句是这样的:

SELECT * FROM roster WHERE jabberID = ....

而不是这样:

SELECT * FROM roster

我想通过其 JID 获取我的联系人昵称

提前致谢:)

【问题讨论】:

这是给用户在 muc 中的房间还是在 muc 中的房间或...? 这是针对一般情况下的用户,我的联系人列表中的用户 :) 【参考方案1】:

只需在您的 iq 中添加一个“to”属性。如果您是共同订阅的,则应返回名称。

$iq( type: 'get', from: myjid, to: jid ).c('query', xmlns: Strophe.NS.ROSTER );

【讨论】:

对不起,马克,但它似乎不起作用。我已经发送'&lt;iq from='me@myhost' to='him@myhost' type='get'&gt; &lt;query xmlns='jabber:iq:roster'/&gt; &lt;/iq&gt;'但是服务器没有给出任何响应 您的替代方法是遍历名册并以这种方式进行。 这是我想象出来的,但我认为它效率不高,我希望通过节来检索它。不过谢谢你的建议:) 如果您使用 Strophe 的名册插件,一旦您获取名册,您只需调用 connection.roster.findItem(jid)。 “items”数组在您更改页面(以及更改名册)之前可用。 好的,马克,我以前从不知道 Strophe 有插件。我试试,谢谢 :) 这是插件github.com/metajack/strophejs-plugins/tree/master/roster 对吧?

以上是关于XMPP:如何通过 Jabber Id 查询特定的名册信息的主要内容,如果未能解决你的问题,请参考以下文章

XMPP的总体架构和Jabber ID

在公共 XMPP 服务器上创建 jabber id

如何将 custon xmpp/jabber 请求发送到服务器

需要帮助了解聊天、XMPP、jabber id 等

检查在xmpp服务器中注册的jid(jabber id) - iOS xmpp框架

xmpp(jabber) 协议中发送者的标识