2012-01-27 96 views
0

我正在使用Java中的Google App Engine发送XMPP消息。检测用户登录/注销xmpp谷歌应用引擎

我想知道是否有方法检查用户是否登录到系统或注销。所以,当用户登录时,我想向他发送一个欢迎聊天消息,当他注销时,我想通知我的服务器代码相同。

我已经尝试了API,但没有运气到目前为止。

回答

0

假设你指的是通过XMPP查询用户的存在,请记住,这将如果仅仅工作您的App Engine帐户授权该用户。如果你已经有这么多,查询存在(用户登录/注销)很简单(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., [email protected]) 
    // 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路径接收自动存在通知

  • POST到/_ah/xmpp/presence/available/表示用户是可用并提供用户的聊天状态。
  • POST到/_ah/xmpp/presence/unavailable/表示用户为不可用
  • POST到/_ah/xmpp/presence/probe/请求用户的当前状态。

举个例子,当用户莎莉日志中,你会得到一个POST请求/_ah/xmpp/presence/available/您的服务器,然后必须处理。然后当sally注销时,您将收到一个单独的POST请求/_ah/xmpp/presence/unavailable/

+0

我正在尝试这个。 GTalk说,当用户注销时,我是否会收到状态通知? – Jayesh 2012-01-27 13:57:59

+0

@Joy我已经更新了我的答案,现在有意义吗? – 2012-01-27 14:07:16

+1

如果用户的状态在所有IM客户端_上发生变化,您将收到状态通知。因此,如果用户通过gmail和他们的android手机登录,并且他们关闭了他们的gmail窗口,那么您将不会(必然会出现与功能相关的一些警告)获得状态通知。 – 2012-01-27 14:08:11