当我终止应用程序时,MUC 群聊成员将被删除

When i terminate app MUC group chat members are getting removed

当我终止应用程序时,MUC 群聊成员被删除,我必须在从书签返回应用程序时再次加入他们吗?我们不想一次又一次地重新加入。有人可以建议如何避免重新加入。

在 Android smack 中有自动重新加入的规定。

即使是从 Openfire 后端,我们也设法不删除代码。

所以 Android 工作正常,iOS 正在删除用户。

请提出建议。

不要每次都重新加入房间,而是在用户重新启动应用程序时设置群组的存在。

使用以下代码函数设置在线状态遍历所有群组名称并设置在线状态:

    for group in chatListModel ?? []{            
            if(group.opponent_type == "2"){
                print("Group Name: \(group.opponent_uuid ?? "")")                
XMPPGlobal.sharedIntanceXMPP.xmppController.updatePresence(roomJID: XMPPJID(string: "\(group.opponent_uuid ?? "")@\(groupServerName)"))
            }
        }

在您的 XMPPController 中定义以下函数 class:

func updatePresence(roomJID : XMPPJID?) {
                        
        let presence = XMPPPresence(type: "presence")
        presence.addAttribute(withName: "from", stringValue: self.xmppStream.myJID?.user ?? "")
        presence.addAttribute(withName: "to", stringValue: "\(roomJID?.full ?? "")/\(self.xmppStream.myJID?.user ?? "")")
        
        let element = DDXMLElement.init(name: "x", xmlns: XMPPMUCNamespace)
        presence.addChild(element)
        self.xmppStream.send(presence)
        
    }

希望对你有用。

尽管有答案。 我想详细说明一下:)

如果是 MUC 房间:存在从属关系,即长期角色(管理员、所有者等)和“订阅”角色(访客、会员等)。

您所问的内容本身在 XMPP MUC. 7.1 Order of Events

中有描述

您发送出席信息以加入房间,并接收其他参与者的出席信息,如果您的 XMPP 后端配置正确,您还可以获得一些缓存消息。

例如对于 ejabberd(进程一):mod_muc: history_size settings 定义内存缓存。

您可能不想获取房间事件集,如上文 7.1 所述。

可能有一些服务器的扩展。在 ejabberd 的情况下,MUCPubSub 您发送订阅(不存在)并收到以下消息,此外您还可以获得成员列表或跟踪其更改等:

 <subscribe xmlns='urn:xmpp:mucsub:0'
         nick='mynick'
         password='roompassword'>
<event node='urn:xmpp:mucsub:nodes:messages' />