获取 Facebook Chat 的在线状态
Posted
技术标签:
【中文标题】获取 Facebook Chat 的在线状态【英文标题】:Getting online presences for Facebook Chat 【发布时间】:2012-11-15 14:24:06 【问题描述】:我正在使用 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 实施的限制。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于获取 Facebook Chat 的在线状态的主要内容,如果未能解决你的问题,请参考以下文章
photon chat unity plugin - 如何知道朋友是不是在线
云原生之Docker实战使用Docker部署Web在线聊天室Rocket.Chat