2011-03-27 72 views
1

與服務器通信,當我面臨的一個問題網友:獲取使用Jabber(XMPP)

[request] <stream:stream to="chat.facebook.com" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" version="1.0"> 
[response] <?xml version="1.0"?><stream:stream id="0D752DF3" from="chat.facebook.com" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0" xml:lang="en"><stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-FACEBOOK-PLATFORM</mechanism><mechanism>DIGEST-MD5</mechanism></mechanisms></stream:features> 
[request] <auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="X-FACEBOOK-PLATFORM" /> 
[response] <challenge xmlns="urn:ietf:params:xml:ns:xmpp-sasl">[removed]</challenge> 
[request] <response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">[removed]</response> 
[response] <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/> 
[response] <?xml version="1.0"?><stream:stream id="4FC996C0" from="chat.facebook.com" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0" xml:lang="en"><stream:features><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></stream:features> 

[request] <iq type="set" id="1"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind" /></iq> 
[response] <iq id="1" type="result"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>-[removed]@chat.facebook.com/[removed]</jid></bind></iq> 
[request] <iq type="set" id="2" to="chat.facebook.com"><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></iq> 
[response] <iq type="result" from="chat.facebook.com" id="2"><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></iq> 
[request] <iq type="get" id="3" from="-[removed]@chat.facebook.com/[removed]"><query xmlns="jabber:iq:roster"/></iq> 

的問題是最後一個請求:

[request] <iq type="get" id="3" from="-[removed]@chat.facebook.com/[removed]"><query xmlns="jabber:iq:roster"/></iq> 

其中,根據文獻[ ?],應該只返回在線用戶。但是,它會返回所有用戶朋友。 如何獲取/過濾僅限在線用戶?

+0

你能告訴我使用哪一節你已經提取所有Facebook的在線用戶嗎? – Hunt 2012-01-28 12:44:46

回答

2

該文檔是在RFC 3921或更好的,RFC 3921bis,它應該很快就會得到一個RFC號碼。有關檢索名單的詳細信息,請參見部分2.1.3,該名單是所有聯繫人的列表,無論他們的狀態如何。爲了接收你訂閱的人的存在,你發送自己的存在來啓動流程。

您發送:

<presence/> 

,並從每個在線的聯繫人中的每個設備接收回來存在節:

<presence from='[email protected]/deviceID/> 
<presence from='[email protected]/deviceID/> 

等,當你收到你不知道「所有」的存在,因爲您的聯繫人可以在發生這種情況時改變他們的存在。相反,請考慮加入現場信息流,儘快將您的信息更新到最新狀態,然後通知您有任何進一步的變化。

0

花名冊或多或少是你的聯繫人列表(我不知道確切的定義),但在Facebook上它似乎與你的朋友列表非常相似。在Facebook上的聊天中,服務器在發送了Joe指示的初始狀態後,很快就會向您發送您的朋友的狀態信息。其實我並沒有質疑花名冊,因爲我對不在線的朋友不感興趣。