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 );
【讨论】:
对不起,马克,但它似乎不起作用。我已经发送'<iq from='me@myhost' to='him@myhost' type='get'> <query xmlns='jabber:iq:roster'/> </iq>'
但是服务器没有给出任何响应
您的替代方法是遍历名册并以这种方式进行。
这是我想象出来的,但我认为它效率不高,我希望通过节来检索它。不过谢谢你的建议:)
如果您使用 Strophe 的名册插件,一旦您获取名册,您只需调用 connection.roster.findItem(jid)。 “items”数组在您更改页面(以及更改名册)之前可用。
好的,马克,我以前从不知道 Strophe 有插件。我试试,谢谢 :) 这是插件github.com/metajack/strophejs-plugins/tree/master/roster 对吧?以上是关于XMPP:如何通过 Jabber Id 查询特定的名册信息的主要内容,如果未能解决你的问题,请参考以下文章
如何将 custon xmpp/jabber 请求发送到服务器