如何通过XMPP服务器检查特定用户的在线/离线状态

8
我正在开发一个应用程序,需要查找我过去与之交流信息的用户的在线/离线状态,而不是服务器上所有可用的用户。谢谢。

1
嗨,我想要实现同样的东西。你有找到解决方案吗?如果有,请告诉我。谢谢。 - nikBhosale
@nikBhosale 我无法获取特定用户的在线/离线状态。因此,我正在将所有用户的在线/离线状态存储在一个数组中,并根据Jabber Id过滤该数组以显示我想要查看状态的用户。 - manishsharma93
好的,但我猜这样做可能不太高效,因为你需要将数组保持在连续监听和编辑模式下。相反,也许你可以看一下我的使用XMPPIQ的答案。如果你认为这是正确的方法,请点赞。谢谢。 - nikBhosale
3个回答

3
-你可以使用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
    }

0

存在状态是广播的,因此只有在其“发生”时才会接收到它们。在远程服务器(S2S,即服务器对服务器)的上下文中存在存在状态探针。但是没有轮询。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接