【问题标题】:Get full JID from xmpp server or client for IQ Request从 xmpp 服务器或客户端获取 IQ 请求的完整 JID
【发布时间】:2012-03-27 21:42:13
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: xmpp ejabberd openfire xmppframework


    【解决方案1】:

    订阅您想要发送 IQ 的人在场:

    <presence type='subscribe' from='me@example.com' to='contact@example.com'/>
    

    他们必须接受您的订阅:

    <presence type='subscribed' to='me@example.com' from='contact@example.com'/>
    

    然后,您将开始从所有客户那里获得包含完整 JID 的存在:

    <presence to='me@example.com' from='contact@example.com/home'/>
    

    如果他们有一个功能齐全的客户端,他们会向您发送带有XEP-0115 标记的状态,因此您可以在发送给他们之前判断他们的客户端是否支持您的 IQ 协议:

    <presence to='me@example.com' from='contact@example.com/home'>
      <c xmlns='http://jabber.org/protocol/caps' 
         hash='sha-1'
         node='http://code.google.com/p/exodus'
         ver='QgayPKawpkPSDYmwT/WM94uAlu0='/>
    </presence>
    

    【讨论】:

    • 是否有我可以调用的 api 直接从我的 XMPP openfire 或 XMPPFramework 客户端获取用户的完整 JID?我正在编写一个需要向完整 JID 发送 IQ 请求的应用程序,但我不知道我可以调用哪些函数来从用户名/裸 JID 获取完整 JID。我对此还是有点陌生​​,我可以访问我的服务器或我的 iOS 应用程序的后端。
    • 嗯,所以你提出的方法是从我的后端服务器,我告诉我的插件发送一个出席信息订阅,以便从 iOS 应用程序返回完整的 JID?获得完整的 JID 后,我可以发送 iq 请求吗?有点多余?我的插件拥有完整的后端访问权限,但我还需要发送在线状态订阅请求吗?
    • @user1157352 如果您正在编写客户端,并且您的服务器组件有一个固定地址,您可以跳过订阅并让客户端在登录时向组件发送定向出席信息 - 从而显示其完整的 JID。 Presence 是在 XMPP 中执行所需操作的标准方式。您似乎建议的替代方法是编写一个特定于服务器的插件来获取完整的 JID,但这是一个不同的问题,因为它取决于您服务器的内部 API。
    • 谢谢大家,我认为存在解决了我的问题。我似乎能够通过使用状态接收完整的 JID。我将让我的服务器向我的 iOS 应用客户端发送 Presence 请求,并让应用响应它是完整的 JID。然后使用完整的 JID,我会让我的服务器向我的应用发送一组 IQ。
    猜你喜欢
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    相关资源
    最近更新 更多