我正在使用libpurple连接到FB聊天。问题是,我没有从在线移动Facebook应用程序的朋友那里获得在线状态。
但是,如果这样的朋友给我发了一条消息,我会同时为他提供消息和在线状态。
看起来像这样:
(14:23:08) jabber: Recv (ssl)(191): <message from="-mybyddyid@chat.facebook.com" to="myownid@chat.facebook.com/b94353f3_4CE87B53BB319" type="chat"><composing xmlns="http://jabber.org/protocol/chatstates"/></message>
(14:23:10) jabber: Recv (ssl)(188): <message from="-mybyddyid@chat.facebook.com" to="myownid@chat.facebook.com/b94353f3_4CE87B53BB319" type="chat"><active xmlns="http://jabber.org/protocol/chatstates"/></message>
(14:23:11) jabber: Recv (ssl)(166): <presence from="-mybyddyid@chat.facebook.com" to="myownid@chat.facebook.com/b94353f3_4CE87B53BB319"><x xmlns="vcard-temp:x:update"><photo/></x></presence>
所以我想知道这是我的错还是Facebook Chat实施的限制。
答案 0 :(得分:1)
我认为在线更新会有延迟。也许你可以检查一下,要求你的朋友不要发送消息并等待在场改变。在Facebook聊天开发者页面[1]中,似乎会有一个延迟,在此之后,当您更改它时,状态将会更新。
此外,在同一页面上,其中一个限制是Facebook聊天服务器不支持在线探测。如果联系人在用户登录后尚未拥有联系人的状态信息并发送初始状态,则XMPP服务器会向联系人发送状态探测(参见RFC 3921 [2]第5.1.1节和第4.3.1节) RFC 6121 [3])。
如果服务器无法发送状态探测,则可能没有联系人的状态信息。我不知道facebook聊天服务器是如何实现的,但我猜测当联系人做某事时(比如发送消息/更新状态),服务器会认为联系人在线并发送状态。 (我可能在这里错了,如果我有人纠正我的话!)
参考文献:
[1] http://developers.facebook.com/docs/chat/