2012-11-15 55 views
0

我正在使用libpurple連接到FB聊天室。問題是,我沒有通過手機Facebook應用程序在線獲得在線朋友的在線狀態。Facebook聊天室在線狀態

但是,如果這樣的朋友給我發送了一條消息,我同時得到了他的消息和在線狀態。

它看起來像這樣:

(14:23:08) jabber: Recv (ssl)(191): <message from="[email protected]"  to="[email protected]/b94353f3_4CE87B53BB319" type="chat"><composing xmlns="http://jabber.org/protocol/chatstates"/></message> 

(14:23:10) jabber: Recv (ssl)(188): <message from="[email protected]" to="[email protected]/b94353f3_4CE87B53BB319" type="chat"><active xmlns="http://jabber.org/protocol/chatstates"/></message> 

(14:23:11) jabber: Recv (ssl)(166): <presence from="[email protected]" to="[email protected]/b94353f3_4CE87B53BB319"><x xmlns="vcard-temp:x:update"><photo/></x></presence> 

所以我想知道是否是我的錯或限制的Facebook聊天的實施。

回答

1

我認爲存在更新會有延遲。也許你可以檢查一下,讓你的朋友不要發送消息並等待存在改變。從臉書聊天開發者頁面[1]看​​來,當你改變它的時候,會有一個延遲,在這之後你的狀態會被更新。

此外,從同一頁面,其中一個限制是,Facebook聊天服務器不支持存在探測。如果XMPP服務器在用戶登錄併發送初始狀態後尚未具有聯繫人的狀態信息,則會向聯繫人發送狀態探測(請參閱RFC 3921 [2]的第5.1.1節和第4.3.1節)。 RFC 6121 [3])。

如果服務器不能發送狀態探測,它可能沒有聯繫人的狀態信息。我不知道Facebook聊天服務器是如何實現的,但我猜測當聯繫人做某事(如發送消息/更新狀態)時,服務器會假定該聯繫人在線併發送狀態。 (我可能是錯在這裏,有人糾正我,如果我!)

參考文獻:

[1] http://developers.facebook.com/docs/chat/

[2] http://xmpp.org/rfcs/rfc3921.html

[3] http://xmpp.org/rfcs/rfc6121.html