Ios XMPPFramework-如何创建MUC室并邀请用户?

Ios XMPPFramework-如何创建MUC室并邀请用户?,ios,objective-c,xmpp,xmppframework,Ios,Objective C,Xmpp,Xmppframework,我正在使用Robbiehanson的iOS XMPPFramework。我正在尝试创建一个MUC聊天室,并邀请一个用户到群组聊天室,但它不起作用 我正在使用以下代码: XMPPRoom *room = [[XMPPRoom alloc] initWithRoomName:@"user101@conference.jabber.org/room" nickName:@"room"]; [room createOrJoinRoom]; [room sendInstantRoomConfig]; [r

我正在使用Robbiehanson的iOS XMPPFramework。我正在尝试创建一个MUC聊天室,并邀请一个用户到群组聊天室,但它不起作用

我正在使用以下代码:

XMPPRoom *room = [[XMPPRoom alloc] initWithRoomName:@"user101@conference.jabber.org/room" nickName:@"room"];
[room createOrJoinRoom];
[room sendInstantRoomConfig];
[room setInvitedUser:@"ABC@jabber.org"];
[room activate:[self xmppStream]];    
[room inviteUser:jid1 withMessage:@"hello please join."];
[room sendMessage:@"HELLO"];
用户ABC@jabber.org应收到邀请消息,但未发生任何事情


任何帮助都将不胜感激。:)

我觉得alloc init之后要做的第一件事是将它附加到您的xmppStream,以便它可以使用xmppStream发送/接收消息

更确切地说:

XMPPRoom *room = [[XMPPRoom alloc] initWithRoomName:@"user101@conference.jabber.org/room" nickName:@"room"];
[room activate:[self xmppStream]];

//other things (create/config/...)

在探索了各种解决方案之后,我决定在这里编译并分享我的实现:

  • 创建一个XMPP文件室:

    XMPPRoomMemoryStorage *roomStorage = [[XMPPRoomMemoryStorage alloc] init];
    
    /** 
     * Remember to add 'conference' in your JID like this:
     * e.g. uniqueRoomJID@conference.yourserverdomain
     */
    
    XMPPJID *roomJID = [XMPPJID jidWithString:@"chat@conference.shakespeare"];
    XMPPRoom *xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:roomStorage
                                                           jid:roomJID
                                                 dispatchQueue:dispatch_get_main_queue()];
    
    [xmppRoom activate:[self appDelegate].xmppStream];
    [xmppRoom addDelegate:self 
            delegateQueue:dispatch_get_main_queue()];
    
    [xmppRoom joinRoomUsingNickname:[self appDelegate].xmppStream.myJID.user 
                            history:nil 
                           password:nil];
    
  • 检查是否在此代理中成功创建了文件室:

    - (void)xmppRoomDidCreate:(XMPPRoom *)sender
    
    - (void)xmppRoomDidJoin:(XMPPRoom *)sender
    
  • 检查您是否已加入此会议室代表:

    - (void)xmppRoomDidCreate:(XMPPRoom *)sender
    
    - (void)xmppRoomDidJoin:(XMPPRoom *)sender
    
  • 创建文件室后,获取文件室配置表单:

    - (void)xmppRoomDidJoin:(XMPPRoom *)sender {
        [sender fetchConfigurationForm];
    }
    
  • 配置您的房间

    /**
     * Necessary to prevent this message: 
     * "This room is locked from entry until configuration is confirmed."
     */
    
    - (void)xmppRoom:(XMPPRoom *)sender didFetchConfigurationForm:(NSXMLElement *)configForm 
    {
        NSXMLElement *newConfig = [configForm copy];
        NSArray *fields = [newConfig elementsForName:@"field"];
    
        for (NSXMLElement *field in fields) 
        {
            NSString *var = [field attributeStringValueForName:@"var"];
            // Make Room Persistent
            if ([var isEqualToString:@"muc#roomconfig_persistentroom"]) {
                [field removeChildAtIndex:0];
                [field addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1"]];
            }
        }
    
        [sender configureRoomUsingOptions:newConfig];
    }
    
    参考文献:

  • 邀请用户

    - (void)xmppRoomDidJoin:(XMPPRoom *)sender 
    {
        /** 
         * You can read from an array containing participants in a for-loop 
         * and send multiple invites in the same way here
         */
    
        [sender inviteUser:[XMPPJID jidWithString:@"keithoys"] withMessage:@"Greetings!"];
    }
    

  • 在这里,您创建了一个XMPP多用户/群聊天室,并邀请了一个用户。:)

    查看最新的XMPPMUCLight&XMPPRoomLight,它类似于Whatsapp和其他当今趋势的社交应用程序室,在离线时不会被破坏或被成员踢出,也不会无人进入


    请参阅此&

    @navederafi,您当然非常受欢迎。我希望这也能帮助其他XMPP用户。:-)谢谢有没有办法设置房间密码?我想租一间私人房间。@rohitmandiwal,我的荣幸!如上图所示,您可以通过此行创建一个受密码保护的MUC房间-
    [xmppRoom joinroomusing昵称:[self-appDelegate].xmppStream.myJID.user history:nil password:@“myPassword”]大家好,谢谢大家和starckoverflow,我可以通过两种存储(核心数据和内存存储)创建组并向其他组发送邀请。问题是,当我创建第二个组时,它会从核心数据存储中删除第一个组的数据,我们如何才能自动加入其他用户?@KeithOYS-非常感谢这段代码。我无法理解用户加入房间的步骤3。我如何知道用户是否已加入房间。此外,如果您能帮助我们了解我们如何接收和发送消息,一旦我们实现了这一点。非常感谢你的帮助。你能帮我解决这个问题吗?