如何在XMPP中实现“最后看到”功能(如whatsapp)?

时间:2014-06-27 10:47:20

标签: xmpp

我正在开发一个聊天应用程序,并希望添加"最后一次见到"功能。我试图通过使用存在节来实现它,但是遇到一个问题,请查看以下链接

Not getting unavailable presence of User A when User B is also unavailable

有没有其他方法可以实现上次见到的功能

请建议

3 个答案:

答案 0 :(得分:6)

" xmpp上次发布的第一个Google结果"是XEP-0012: Last Activity,这是一个协议扩展,可用于查明用户上次何时在线。

您发送的请求如下:

<iq from='romeo@montague.net/orchard' 
    id='last1'
    to='juliet@capulet.com'
    type='get'>
  <query xmlns='jabber:iq:last'/>
</iq>

得到这样的回复:

<iq from='juliet@capulet.com' 
    id='last1'
    to='romeo@montague.net/orchard'
    type='result'>
  <query xmlns='jabber:iq:last' seconds='903'/>
</iq>

这意味着该联系人最后一次在线903秒前。从当前时间减去这个以获得最后一次看到&#34;时间戳。

答案 1 :(得分:0)

上次看到和上次活动是两种不同的情况。

Last Activity是用户上次离线时,但最后一次看到的是当用户从应用程序进入后台时,如果应用程序未被杀死,则用户将可用。您必须在服务器端创建新的插件才能看到

答案 2 :(得分:-1)

@legoscia解决方案将返回上次活动时间,这是您的上次注销时间(而不是用户在线的最后时间),请检查此https://github.com/processone/ejabberd/issues/2265

  

如果服务器收到请求时用户具有至少一个连接的资源或可用资源,则响应必须(取决于本地安全策略)包含一个空元素,其“秒”属性设置为值“ 0”。

一种解决方案是在应用程序进入后台时终止会话,并在应用程序进入前台时重新连接