XMPPFramework - Как создать комнату MUC и пригласить пользователей?
Я использую 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 должен получить приглашение, но ничего не происходит.
Любая помощь будет оценена.:)
3 ответа
Изучив различные решения, я решил скомпилировать и поделиться своей реализацией здесь:
Создать комнату 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)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 и пригласили пользователя.:)
Проверьте последние версии XMPPMUCLight & XMPPRoomLight, аналогичные Whatsapp и другим комнатам социальных приложений, которые не разрушаются или не вышибают членов, когда они находятся в автономном режиме или в комнате никого нет.
См. Эту документацию и мод от MongooseIM
У меня такое ощущение, что первое, что нужно сделать после alloc-init, это присоединить его к вашему xmppStream, чтобы он мог использовать xmppStream для отправки / получения сообщений.
Точнее:
XMPPRoom *room = [[XMPPRoom alloc] initWithRoomName:@"user101@conference.jabber.org/room" nickName:@"room"];
[room activate:[self xmppStream]];
//other things (create/config/...)