无法获取组成员(XMPP)

时间:2018-11-14 06:20:54

标签: ios swift xmpp chat

当我创建一个特定的会议室时,我可以获取该组中的成员。但是当该组由其他人创建时,我无法获取该组中的成员。

首先调用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)")

  }

第一个打印语句给出房间名称,第二个打印语句给出房间成员。但这仅在房间由我创建的情况下有效。如果房间是由其他人创建的,那么我将无法获得成员...

1 个答案:

答案 0 :(得分:0)

获取成员列表(以及管理员和所有者列表)通常需要所有者权限,因为这会在匿名房间泄漏Jabber ID。一些现代服务器(例如最近的ejabberd版本)将非匿名服务器作为例外,还允许常规参与者获取该列表。