Подтвердить что ты не робот

XMPPFramework - Как создать комнату MUC и пригласить пользователей?

Я использую XMPPFramework от Robbiehanson iOS. Я пытаюсь создать комнату MUC и пригласить пользователя в комнату групповой чаты, но он не работает.

Я использую следующий код:

XMPPRoom *room = [[XMPPRoom alloc] initWithRoomName:@"[email protected]/room" nickName:@"room"];
[room createOrJoinRoom];
[room sendInstantRoomConfig];
[room setInvitedUser:@"[email protected]"];
[room activate:[self xmppStream]];    
[room inviteUser:jid1 withMessage:@"hello please join."];
[room sendMessage:@"HELLO"];

Пользователь [email protected] должен получить сообщение приглашения, но ничего не происходит.

Любая помощь будет оценена.:)

4b9b3361

Ответ 1

После изучения различных решений я решил скомпилировать и поделиться своей реализацией здесь:

  • Создать комнату XMPP:

    XMPPRoomMemoryStorage *roomStorage = [[XMPPRoomMemoryStorage alloc] init];
    
    /** 
     * Remember to add 'conference' in your JID like this:
     * e.g. [email protected]
     */
    
    XMPPJID *roomJID = [XMPPJID jidWithString:@"[email protected]"];
    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)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];
    }
    

    Ссылки: XEP-0045: Многопользовательский чат, Реализовать групповой чат

  • Пригласите пользователей

    - (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 и пригласили пользователя.:)

Ответ 2

У меня такое ощущение, что первое, что нужно сделать после alloc-init, это привязать его к вашему xmppStream, чтобы он мог использовать xmppStream для отправки/получения сообщений.

Точнее:

XMPPRoom *room = [[XMPPRoom alloc] initWithRoomName:@"[email protected]/room" nickName:@"room"];
[room activate:[self xmppStream]];

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

Ответ 3

Проверьте последние XMPPMUCLight и XMPPRoomLight, похожие на Whatsapp и другие сегодняшние тенденции в социальных приложениях, которые не уничтожаются, или участники пинаются в автономном режиме или нет в комнате.

Обратитесь к документации и mod от MongooseIM