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

时间:2012-03-10 23:14:09

标签: xmpp ejabberd openfire xmppframework

我正在开发一款使用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请求。

1 个答案:

答案 0 :(得分:4)

订阅您要将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>