2012-03-10 91 views
2

我正在使用XMPPFramework和openfire xmpp服務器的iOS應用程序。我差不多完成了,但我一直在讓我的iOS接收IQ請求。我能夠接收消息併發送IQ請求,但未收到IQ請求。從xmpp服務器或客戶端獲取IQ請求的完整JID

我試過從iOS客戶端和XMPP服務器發送IQ請求,但iOS應用程序忽略了IQ請求。經過長時間的研究,我縮小了我的問題範圍。事實證明,我正在向純粹的JID發送IQ請求。 Bare JID被路由到服務器,而不是直接發送到客戶端。

我找到的解決方案是獲取完整的JID並將「to」IQ消息設置爲完整的JID而不是純粹的JID。我很難理解如何獲得資源,或者將裸露的JID轉換爲完整的JID。

有人請給我一些建議嗎?我希望能夠獲得完整的JID,以便可以將IQ請求發送到我的iOS客戶端。

回答

4

訂閱者的存在要智商發送至:

<presence type='subscribe' from='[email protected]' to='[email protected]'/> 

他們不得不接受訂閱:

<presence type='subscribed' to='[email protected]' from='[email protected]'/> 

然後,您會開始得到在場,其中包括從他們的所有客戶全部JID:

<presence to='[email protected]' from='[email protected]/home'/> 

如果他們有一個全功能的客戶端,他們無線LL送你的存在與XEP-0115標記起來,這樣你就可以告訴我們,如果他們的客戶支持你的智商協議,您把它送到他們面前:

<presence to='[email protected]' from='[email protected]/home'> 
    <c xmlns='http://jabber.org/protocol/caps' 
    hash='sha-1' 
    node='http://code.google.com/p/exodus' 
    ver='QgayPKawpkPSDYmwT/WM94uAlu0='/> 
</presence> 
+0

有沒有辦法,我可以打電話直接獲取用戶的全JID的API從我的XMPP openfire或XMPPFramework客戶端?我正在編寫一個應用程序,需要將IQ請求發送到完整的JID,但我不知道可以調用哪些函數來從用戶名/裸JID獲取完整的JID。我對此還是有點新的,我可以訪問我的服務器或我的iOS應用程序的後端。 – user1157352 2012-03-11 16:23:19

+0

恩,所以你提出的方法是,從我的後端服務器,我告訴我的插件發送狀態訂閱,以便完整的JID從iOS應用程序返回?一旦我得到完整的JID,我可以發送iq請求?有點多餘?我的插件有完整的後端訪問,我仍然需要發送狀態訂閱請求? – user1157352 2012-03-11 16:36:28

+0

@ user1157352如果您正在編寫客戶端,並且您的服務器組件具有固定地址,那麼您可以跳過訂閱,並讓客戶端在登錄時向組件發送定向狀態 - 從而顯示其完整的JID。存在是在XMPP中執行所需操作的標準方式。你似乎建議的選擇是編寫一個特定於服務器的插件來獲取完整的JID,但這是一個不同的問題,因爲它取決於服務器的內部API。 – MattJ 2012-03-11 16:57:05

相關問題