0

我正在使用 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 实施的限制。

4

1 回答 1

1

我认为状态更新会有延迟。也许您可以检查一下,要求您的朋友不要发送消息并等待状态发生变化。从 facebook 聊天开发者页面 [1] 看来,当您更改它时,状态会在之后更新。

此外,从同一页面来看,限制之一是 facebook 聊天服务器不支持存在探测。如果 XMPP 服务器在用户登录并发送初始状态后还没有联系人的状态信息,则向联系人发送状态探测(参见 RFC 3921 [2] 的 5.1.1 节和 RFC 3921 [2] 的第 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

于 2012-11-17T09:54:04.970 回答