ios - 获取花名册而不是组列表 XMPP iOS Swift

标签 ios objective-c swift xmpp xmppframework

我是 XMPP 的新手,我已经实现了 ejabberd。我的本地主机名是 'Orange.local' 有三个用户。一个从我的模拟器登录为 admin@orange.local,第二个 mihir@orange.local 来自 iMessanger。 我正在创建一个组作为

@IBAction func CreateGroupBtn(sender: UIButton)
{
     var roomJID = XMPPJID.jidWithString("testRoom@conference.orange.local")
     var roomMemoryStorage = XMPPRoomMemoryStorage()
     var xmppRoom = XMPPRoom(roomStorage: roomMemoryStorage, jid: roomJID, dispatchQueue: dispatch_get_main_queue())
     xmppRoom.activate(xmppStream())
     xmppRoom.addDelegate(self, delegateQueue: dispatch_get_main_queue())
     xmppRoom.joinRoomUsingNickname("admin", history: nil);
}

func xmppRoomDidCreate(sender: XMPPRoom!)
{
   println("room created \(sender.description)");
}

func xmppRoomDidJoin(sender: XMPPRoom!) {
        println("romm joined")
        sender.fetchConfigurationForm()
        sender.configureRoomUsingOptions(nil)
        sender.fetchMembersList();

        sender.sendMessageWithBody("null");
        var strInvitedUserName = XMPPJID.jidWithString("mihir@orange.local");
        sender.inviteUser(strInvitedUserName, withMessage: "greetings");

    }

房间已创建,我可以在群组中与 mihir@orange.local 聊天。 现在我想获取 admin@orange.local 的所有组名,我的意思是 admin@orange.local 是组成员的所有组(房间)。

我正在应用此代码来获取群组列表:

 override func viewDidLoad() 
 {
        super.viewDidLoad()

        var server = "conference.orange.local";
        var id = xmppStream().generateUUID();
        var serverJID = XMPPJID.jidWithString(server)
        var iq = XMPPIQ.iqWithType("get", to: serverJID, elementID: id)
        iq.addAttributeWithName("from", stringValue: "admin@orange.local")
        var query = DDXMLElement.elementWithName("query") as! DDXMLElement;
        query.addAttributeWithName("xmlns", stringValue: "http://jabber.org/protocol/disco#items" )
        iq.addChild(query);
        xmppStream().addDelegate(self, delegateQueue: dispatch_get_main_queue())
        xmppStream().sendElement(iq);
 }

但我收到这样的花名册回复:

    <iq xmlns="jabber:client" from="admin@orange.local" 
     to="admin@orange.local/35441594471443421711351344" 
     id="3F9B0234-0233-4DF0-9174-34CC82FF6B70" type="result">
       <query xmlns="jabber:iq:roster">
        <item subscription="both" jid="mihir@orange.local">
          <group>Buddies</group>
        </item>
        <item subscription="both" jid="kalpesh@orange.local">
        </item>
      </query>
    </iq>

我的第二个问题是,当我获取所有组成员时,它返回空数组这是代码:

func xmppRoom(sender: XMPPRoom!, didFetchMembersList items: [AnyObject]!) {
        println("members= \(items)");
    }

请帮助我获取所有组和特定组的成员。 提前致谢,抱歉我的英语不好。

最佳答案

XMPP MUC 中的成员列表不是当前可用用户的列表,它只是房间管理员用于区分房间权限/角色/从属关系的“访问控制列表”之一:房间所有者可以授予“成员”、“管理员” ”,特定 JID 的“所有者”特权,禁止他与“弃儿”从属关系等。 您需要跟踪发送到 session jid 的 presence 数据包,以便获得实际的用户列表:XMPPRoom 接口(interface)有 xmppRoomDidJoinxmppRoomDidLeave 方法。

关于ios - 获取花名册而不是组列表 XMPP iOS Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32817300/

相关文章:

iphone - 如何将两个数组加载到同一个 TableView 中?

objective-c - Objective C - "Duplicate declaration of method"编译错误

ios - Swift 类 : Property not initialized at super. init 调用中的错误 - 如何初始化需要在其初始化参数中使用 self 的属性

ios - 检测 UITextView 上的点击仅检测取消

ios - 如何在没有 Storyboard ID 的情况下快速设置导航 Controller 的 Root View Controller 。并仅使用 View Controller 名称导航到其他 View

ios - 以编程方式触发摇动事件iOS

javascript - iOS13 getUserMedia 不适用于 chrome 和 edge

ios - NSLocale 强制日历类型

ios - 循环遍历 NSAttributedString 属性以增加字体大小

java - 将 PEM 公钥读入 iOS