ios objective-c xmpp xmppframework

XMPPFramework-¿Cómo crear una sala MUC e invitar a los usuarios?



objective-c (3)

Después de explorar varias soluciones, he decidido compilar y compartir mi implementación aquí:

  1. Crear una sala 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];

  2. Compruebe si la sala se ha creado correctamente en este delegado:

    - (void)xmppRoomDidCreate:(XMPPRoom *)sender

  3. Compruebe si se ha unido a la sala en este delegado:

    - (void)xmppRoomDidJoin:(XMPPRoom *)sender

  4. Después de crear la sala, busque el formulario de configuración de la sala:

    - (void)xmppRoomDidJoin:(XMPPRoom *)sender { [sender fetchConfigurationForm]; }

  5. Configura tu habitación

    /** * 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]; }

    Referencias: XEP-0045: chat multiusuario , implementar chat grupal

  6. Invitar a los usuarios

    - (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!"]; }

Allí, ha creado una sala de chat grupal / multiusuario XMPP e ha invitado a un usuario. :)

Estoy usando el XMPPFramework de Robbiehanson para iOS. Estoy intentando crear una sala MUC e invitar a un usuario a la sala de chat grupal, pero no funciona.

Estoy usando el siguiente código:

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"];

El usuario [email protected] debe recibir el mensaje de invitación, pero no pasa nada.

Cualquier ayuda será apreciada. :)


Tengo la sensación de que lo primero que debe hacer después de alloc-init es adjuntarlo a su xmppStream, para que pueda usar xmppStream para enviar / recibir mensajes.

Más exactamente:

XMPPRoom *room = [[XMPPRoom alloc] initWithRoomName:@"[email protected]/room" nickName:@"room"]; [room activate:[self xmppStream]]; //other things (create/config/...)


Ver la última versión de XMPPMUCLight y XMPPRoomLight es similar a Whatsapp y otras salas de aplicaciones sociales con tendencias actuales que no se destruyen o que los miembros son expulsados ​​cuando están desconectados o no hay nadie en la habitación.

Consulte esta documentation y mod de MongooseIM