检测用户登录/注销 xmpp google app engine

Posted

技术标签:

【中文标题】检测用户登录/注销 xmpp google app engine【英文标题】:Detect user login/logout xmpp google app engine 【发布时间】:2012-01-27 11:42:40 【问题描述】:

我正在使用 Java 中的 Google App Engine 来发送 XMPP 消息。

我想知道是否有办法检查用户是否已登录系统或已注销。因此,当用户登录时,我想向他发送 欢迎 聊天消息,而当他退出时,我想通知我的服务器代码。

我已经尝试过在线状态 API,但到目前为止还没有成功。

【问题讨论】:

【参考方案1】:

假设您指的是通过 XMPP 查询用户的状态,请记住,这只有在您的 App Engine 帐户获得授权的情况下才有效 em> 由该用户。如果您已经做到了这一点,那么查询状态(用户登录/注销)非常简单 (source)。

如果 Google Talk 用户订阅了某个应用(已接受邀请或已邀请该应用聊天),该应用可以通过查找 /_ah/xmpp/presence/available 的 POST 来发现用户的空闲状态。如果用户已订阅且可用,您可以向他们发送您的应用程序的存在和状态:

// In the handler for _ah/xmpp/presence/available
XMPPService xmppService = XMPPServiceFactory.getXMPPService();
Presence presence = xmppService.parsePresence(req);

// Split the XMPP address (e.g., user@gmail.com)
// from the resource (e.g., gmail.CD6EBC4A)
String from = presence.getFromJid().getId().split("/")[0];

// Mirror the contact's presence back to them
xmppService.sendPresence(from, PresenceType.AVAILABLE, presence.getPresenceShow(), presence.getStatus());

进一步澄清,您的应用通过以下 POST URL 路径接收自动状态通知:

发帖到/_ah/xmpp/presence/available/ 表示用户有空,并提供用户的聊天状态。 POST 到 /_ah/xmpp/presence/unavailable/ 表示用户不可用。 发帖到/_ah/xmpp/presence/probe/请求用户当前的状态。

例如,当用户 sally 登录时,您将收到一个发往 /_ah/xmpp/presence/available/ 的 POST 请求,然后您的服务器必须处理该请求。然后,当 sally 注销时,您将收到一个单独的 POST 请求到/_ah/xmpp/presence/unavailable/

【讨论】:

我正在尝试这个。当用户退出(例如 GTalk)时,我会收到在线通知吗? 如果用户的状态发生变化在其所有 IM 客户端,您将收到状态通知。因此,如果用户从 gmail 和他们的 android 手机登录,例如,他们关闭了他们的 gmail 窗口,您将不会(必然地,有一些与功能相关的警告)收到存在通知。 好的。现在对我来说更有意义了。谢谢。此外,GTalk 客户端是否会持续向 /_ah/xmpp/presence/available 发送可用通知?我看到它每 6 分钟发送一次。 @Joy 试验一下,让我们知道 :) 好的。这是因为客户端可以向任意数量的主题服务器发布存在吗?参考:adarshr.com/papers/xmpp2

以上是关于检测用户登录/注销 xmpp google app engine的主要内容,如果未能解决你的问题,请参考以下文章

Google+ 登录将用户注销

XMPP 注销(Smack API),无需断开与服务器的连接

XMPP Google Talk X-OAUTH2 登录需要用户名

如何让 .NET Windows 服务检测登录、注销和切换用户事件?

如果用户从 IdentityServer4 中的另一个浏览器/设备登录,如何检测并从应用程序中注销用户?

如何在php中检测用户是不是已注销?