如何使用 smack 库将自定义 IQ 节发送给另一个用户?

How to send Custom IQ stanzas to another user using smack library?

这是获取花名册的示例 IQ 节

<iq from="alice@wonderland.lit/pda" id="rr82a1z7"
type="get">
    <query xmlns="jabber:iq:roster"/>
</iq>

由此standard specification, Iq stanzas can be directed to certain user by setting the "TO" attribute so that xmpp server will forward the IQ stanza to the JID(Full Jabber ID) specified in the "TO" attribute, check specification

但是当我查询 IQ 节以满足我的需要时

<iq from="alice@wonderland.lit/pda" id="rr82a1z7"
to="alice@wonderland.lit/Smack"
type="get">
    <UserDetails xmlns="http://www.test.org/User/">
        <userName>username</username>
    </UserDetails>
</iq>

Stanza 被转发到“alice@wonderland.lit”,但我从 Openfire 服务器收到错误条件为“feature-not-implemented”的 IQ Stanzs。

有什么方法可以消除这个错误并得到结果吗?

我按照这个 tutorial 生成了客户。

我可以看到正在接收自定义节的 wireshark 跟踪,但看不到正在调用“myIQListener”?

问题:

您需要发送自己的 <presence type="subscribe" to="alice@wonderland.lit"/> 或需要在其他用户的花名册列表中:

参考:here

这就是我解决自己问题的方法。

  • 使用完整的 jabber ID(包括资源)

  • 因为 smack 库不理解 Custom IQ Stanzas 工具 拥有 IQProvider ,过滤并将其添加到您的连接中 解释 here