ios - XMPPFramework - 实现群聊 (MUC)

标签 ios objective-c xmpp xmppframework

我正在开发 iOS 聊天客户端。谁能帮我解决多用户聊天问题?

我已经实现了 Robbiehanson 的 XMPPFramework。

谁能告诉我如何使用此框架获取组列表并在服务器中创建组?

提前致谢。

最佳答案

获取房间列表:

NSString* server = @"chat.shakespeare.lit"; //or whatever the server address for muc is
XMPPJID *servrJID = [XMPPJID jidWithString:server];
XMPPIQ *iq = [XMPPIQ iqWithType:@"get" to:servJID];
[iq addAttributeWithName:@"from" stringValue:[xmppStream myJID].full];
NSXMLElement *query = [NSXMLElement elementWithName:@"query"];
[query addAttributeWithName:@"xmlns" stringValue:@"http://jabber.org/protocol/disco#items"];
[iq addChild:query];
[xmppStream sendElement:iq];

检查委托(delegate)方法中的响应:

- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq{
    DDLogVerbose(@"%@", [iq description]);
    return NO;
}

加入或创建房间

XMPPRoomMemoryStorage * _roomMemory = [[XMPPRoomMemoryStorage alloc]init];
NSString* roomID = @"roomExample@chat.shakespeare.lit";
XMPPJID * roomJID = [XMPPJID jidWithString:roomID];
XMPPRoom* xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:_roomMemory
                                             jid:roomJID
                                   dispatchQueue:dispatch_get_main_queue()];
[xmppRoom activate:self.xmppStream];
[xmppRoom addDelegate:self delegateQueue:dispatch_get_main_queue()];
[xmppRoom joinRoomUsingNickname:@"myNickname"
                        history:nil
                       password:nil];

检查 XMPPRoom 委托(delegate)方法中的响应:

- (void)xmppRoomDidCreate:(XMPPRoom *)sender{
    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
}

- (void)xmppRoomDidJoin:(XMPPRoom *)sender{
    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
}

更新

配置房间:

之后:

[xmppRoom joinRoomUsingNickname:self.xmppStream.myJID.user
                        history:history
                       password:nil];

添加:

[xmppRoom fetchConfigurationForm];

并检查响应:

- (void)xmppRoom:(XMPPRoom *)sender didFetchConfigurationForm:(NSXMLElement *)configForm{
    DDLogVerbose(@"%@: %@ -> %@", THIS_FILE, THIS_METHOD, sender.roomJID.user);
}

查看 configForm 对象,并根据需要进行更改,然后使用 [sender configureRoomUsingOptions:newConfig]; 发送它

示例: 要更改配置以使房间持久化,您可以添加如下内容:

NSXMLElement *newConfig = [configForm copy];
NSArray* fields = [newConfig elementsForName:@"field"];
for (NSXMLElement *field in fields) {
    NSString *var = [field attributeStringValueForName:@"var"];
    if ([var isEqualToString:@"muc#roomconfig_persistentroom"]) {
        [field removeChildAtIndex:0];
        [field addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1"]];
    }
}
[sender configureRoomUsingOptions:newConfig];

(我不熟悉 NSXMLElement,所以也许有更好的方法来更改值)

关于ios - XMPPFramework - 实现群聊 (MUC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19268629/

相关文章:

objective-c - 到底是什么触发了 AVPlayerItemDidPlayToEndTimeNotification?

android - 删除或更新 pubsub 中的有效负载项

ios - 使用自动布局自动旋转时如何重新排列 View ?

ios - PeerId(MCPeerID)定制

ios - 在 objective-c 中单击表格单元格外部的按钮时展开表格单元格

ios - XMPPFramework : Only occupants are allowed to send messages to the conference xmpp ios

java - roster.getPresence 给出不可用

ios - Cocoapods 总是安装旧的 React (0.11.0)

ios - 数据未传递到 Storyboard 中的详细 View Controller

iphone - 核心数据获取非常慢