【问题标题】:How to check the presence of Particular user online/offline status through XMPP server如何通过 XMPP 服务器检查特定用户在线/离线状态的存在
【发布时间】:2016-07-09 15:14:26
【问题描述】:

我正在构建一个应用程序,我需要在其中仅查找与我过去交换过消息的用户的在线/离线状态。并非服务器上的所有用户都可用。提前致谢。

【问题讨论】:

  • 嗨,我想实现同样的事情。 Didi你有任何解决方案吗?如果是,请告诉我。谢谢。
  • @nikBhosale 我没有获得特定用户的在线/离线状态。所以我正在做的是将所有用户的在线/离线状态存储在一个数组中,并根据 Jabber Id 为我想要显示状态的用户过滤该数组。
  • 好的,但我想这会降低效率,因为您需要将阵列保持在连续收听和编辑模式。相反,也许您可​​以使用 XMPPIQ 查看我的答案。如果您认为这是正确的方法,也请点赞。谢谢。

标签: ios xmpp chat xmppframework


【解决方案1】:

-您可以使用 XMPPIQ 获取特定用户的在线/离线状态 您需要使用 'type get' 创建 XMPPIQ,如下所示

let query = XMLElement(name: "query", xmlns: "jabber:iq:last")
        let streamUUID = self.xmppStream.generateUUID()
        let iq = XMPPIQ(type: "get", to: XMPPJID(string: jid) , elementID: streamUUID , child: query)
        self.xmppStream.send(iq)
        return streamUUID!

那么XMPPStreamDelegate协议中有一个名为'didReceive iq:'的委托方法,你需要在这个方法中提供处理IQ结果如下,

 func xmppStream(_ sender: XMPPStream!, didReceive iq: XMPPIQ!) -> Bool {
        if iq.isResultIQ() {
            iq.lastActivitySeconds() == 0{
               print("user is online")
            }else{
               print("user is offline") 
            }
        }
        return false
    }

【讨论】:

    【解决方案2】:

    存在是广播的,因此您只需在“发生”时收到它们。在远程服务器(S2S,服务器到服务器)的上下文中存在存在探测。但是没有投票。

    【讨论】:

      【解决方案3】:

      要将出席信息(由 Nyco 提到)推送到客户端,您必须订阅其他用户的出席信息。这里有描述:http://xmpp.org/rfcs/rfc6121.html#sub

      【讨论】:

        猜你喜欢
        • 2015-05-13
        • 1970-01-01
        • 2015-04-03
        • 1970-01-01
        • 2013-01-05
        • 1970-01-01
        • 2012-03-20
        • 2011-05-01
        • 1970-01-01
        相关资源
        最近更新 更多