当我创建一个特定的会议室时,我可以获取该组中的成员。但是当该组由其他人创建时,我无法获取该组中的成员。
首先调用didDiscoverRooms
方法,然后在其中像这样提取成员...
func xmppMUC(_ sender: XMPPMUC, didDiscoverRooms rooms: [Any], forServiceNamed serviceName: String) {
print("XMPPRoom: didDiscoverRooms: \(rooms)")
if let elements = rooms as? [DDXMLElement] {
for element in elements {
print("Name: \(String(describing: element.attributeStringValue(forName: "name")))")
print("JID: \(String(describing: element.attributeStringValue(forName: "jid")))")
if let name = element.attributeStringValue(forName: "jid"), let roomJID = XMPPJID(string: name) {
let roomStorage = XMPPRoomMemoryStorage()
let room = XMPPRoom(roomStorage: roomStorage!, jid: roomJID, dispatchQueue: DispatchQueue.main)
room.addDelegate(self, delegateQueue: DispatchQueue.main)
room.activate(self.xmppStream)
room.fetchConfigurationForm()
room.fetchMembersList()
}
}
}
}
room.fetchMembersList()
依次调用此委托方法。
func xmppRoom(_ sender: XMPPRoom, didFetchMembersList items: [Any]) {
print("XMPPRoom: \(sender.roomJID)")
print("XMPPRoom: didFetchMembersList: \(items)")
}
第一个打印语句给出房间名称,第二个打印语句给出房间成员。但这仅在房间由我创建的情况下有效。如果房间是由其他人创建的,那么我将无法获得成员...
答案 0 :(得分:0)
获取成员列表(以及管理员和所有者列表)通常需要所有者权限,因为这会在匿名房间泄漏Jabber ID。一些现代服务器(例如最近的ejabberd版本)将非匿名服务器作为例外,还允许常规参与者获取该列表。