xmpp - 从 xmpp 服务器或客户端获取 IQ 请求的完整 JID

标签 xmpp ejabberd openfire xmppframework

我正在开发一个使用 XMPPFramework 和 openfire xmpp 服务器的 iOS 应用程序。我快完成了,但仍坚持让我的 iOS 接收 IQ 请求。我能够接收消息并发送 IQ 请求,但无法接收 IQ 请求。

我尝试从 iOS 客户端和 XMPP 服务器发送 IQ 请求,但 iOS 应用程序只是忽略了 IQ 请求。经过长时间的研究,我缩小了问题范围。事实证明,我正在向裸 JID 发送 IQ 请求。 Bare JID 被路由到服务器,而不是直接路由到客户端。

我找到的解决方案是获取完整的 JID 并将“to”IQ 消息设置为完整的 JID 而不是裸 JID。我很难弄清楚如何获取资源,或将裸 JID 转换为完整 JID。

有人可以给我一些建议吗?我希望能够获得完整的 JID,以便我可以向我的 iOS 客户端发送 IQ 请求。

最佳答案

订阅您想要将 IQ 发送给的人的状态:

<presence type='subscribe' from='<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="117c74517469707c617d743f727e7c" rel="noreferrer noopener nofollow">[email protected]</a>' to='<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fa9995948e9b998eba9f829b978a969fd4999597" rel="noreferrer noopener nofollow">[email protected]</a>'/>

他们必须接受您的订阅:

<presence type='subscribed' to='<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="acc1c9ecc9d4cdc1dcc0c982cfc3c1" rel="noreferrer noopener nofollow">[email protected]</a>' from='<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="096a66677d686a7d496c71686479656c276a6664" rel="noreferrer noopener nofollow">[email protected]</a>'/>

然后,您将开始获得包含所有客户的完整 JID 的状态:

<presence to='<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="95f8f0d5f0edf4f8e5f9f0bbf6faf8" rel="noreferrer noopener nofollow">[email protected]</a>' from='<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d1b2bebfa5b0b2a591b4a9b0bca1bdb4ffb2bebc" rel="noreferrer noopener nofollow">[email protected]</a>/home'/>

如果他们有全功能的客户端,他们会向您发送标有 XEP-0115 的状态信息。 ,这样您就可以在将其发送给他们之前判断他们的客户端是否支持您的 IQ 协议(protocol):

<presence to='<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9df0f8ddf8e5fcf0edf1f8b3fef2f0" rel="noreferrer noopener nofollow">[email protected]</a>' from='<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d5b6babba1b4b6a195b0adb4b8a5b9b0fbb6bab8" rel="noreferrer noopener nofollow">[email protected]</a>/home'>
  <c xmlns='http://jabber.org/protocol/caps' 
     hash='sha-1'
     node='http://code.google.com/p/exodus'
     ver='QgayPKawpkPSDYmwT/WM94uAlu0='/>
</presence>

关于xmpp - 从 xmpp 服务器或客户端获取 IQ 请求的完整 JID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9651005/

相关文章:

java - 使用 XMPP 构建聊天应用程序的模式

java - 在 XMPP 中向 MUC 添加成员(SMACK)

linux - sendxmpp 未授权失败(Error AuthSend)

mysql - 无法将 Mysql 与 Ejabberd 连接 - 无法启动应用程序 'p1_mysql'

xmpp - openfire 是否支持用户/联系人阻止?

Ejabberd 用户注册命令失败,出现 {error,access_rules_unauthorized}

ejabberd xmlrpc配置错误

xmpp - 适合即时通讯的协议(protocol)

ssl - ejabberd s2s 到 GTalk/Hangout with TLS

xmpp - 从 ejabberd 模块访问 muc 名册(disco_items?)