与服务器通信时遇到问题:
[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 :(得分:2)
文档在RFC 3921或更好,RFC 3921bis,它应该很快得到一个RFC编号。有关检索名单的详细信息,请参阅2.1.3部分,该名单是所有联系人的列表,无论他们的状态如何。为了接收您订阅的人的存在,您可以自己发送以启动流程。
您发送:
<presence/>
并将从每个在线联系人的每个设备收到一个在线节目:
<presence from='friend1@example.com/deviceID/>
<presence from='friend2@example.com/deviceID/>
等。您不知道何时收到“全部”状态,因为您的联系人可能会在此过程中改变他们的状态。相反,可以考虑进入状态信息流,尽可能快地获取最新信息,然后通知任何进一步的变化。
答案 1 :(得分:0)
花名册或多或少是您的联系人列表(我不知道确切的定义),但在Facebook上它似乎与您的朋友列表完全相同。在Facebook聊天中,服务器在发送Joe指示的初始状态后非常快速地为您的朋友发送状态信息。实际上我根本没有查询名单,因为我对不在线的朋友不感兴趣。