login - 使用 XMPP 时,如何检测用户 (JID) 是否已在登录时登录?

标签 login xmpp

在我的聊天应用程序中,我想实现一个功能,只要用户已经登录,并且如果他/她想使用相同的用户名和密码再次登录其他设备,它应该将用户回复一条消息 - “你是已经在其他地方登录”

我只知道这种检查登录状态的方法 -

connection.isConnected();

但这不会达到我的目的。

最佳答案

Alex answer是正确的,但让我详细说明一下:

成功登录后,您的 XMPP-IM 客户端将向服务器发送一个出席信息节。然后,服务器以订阅状态“来自”和“两者”(RFC6121 XMPP-IM 4.2.2 和 4.4.2)回复您名册中的任何 JID 的出席信息。

Section 4.4.2还指出:

The user's server MUST also send the presence stanza to all of the user's 
available resources (including the resource that generated the presence
notification in the first place).

这意味着您将从 JID 的所有其他连接资源中获取在线状态信息。如果您在此处收到来自不同完整 JID 的出席信息节,那么您使用的是当前连接 您知道第二个(或第三个,...)客户端与您的 JID 连接 并且您显示“您已经在其他地方登录”消息。

请注意,这并不是您在使用 XMPP 时真正想要做的,因为使用相同的裸 JID 同时连接的多个客户端是 XMPP-IM 的核心功能。

使用 smack 时, Iterator<Presence> Roster.getPresences(String user) 可用于检索存在信息。调用看起来像这样 getPresences(XMPPConnection.getUser()) . (请注意,我还没有验证它是否真的有效)。

关于login - 使用 XMPP 时,如何检测用户 (JID) 是否已在登录时登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14620396/

相关文章:

java - 如何在 Mac OS X Mavericks 中获取 Java 32 位

grails - Grails Spring安全核心

Ruby 登录以使用 Mechanize 进行 Spotify

grails - 拦截grails中的springsecurity行为

javascript - 在XMPP MUC中是否可以发布地理位置信息?

在 GWT 中自动登录的 session 和 Cookie

ios - Ejabberd 推送通知配置

xmpp - Bosh 使用 openfire 设置

XMPP 持久 session 室状态