我可以使用XMPPFramework创建一个MUC,并使用下面的代码发送用户加入该房间的邀请请求。
// Creating
AppDelegate *dele =(AppDelegate *) [[UIApplication sharedApplication]delegate];
xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:dele jid:[XMPPJID jidWithString:self.roomName] dispatchQueue:dispatch_get_main_queue()];
[xmppRoom addDelegate:dele delegateQueue:dispatch_get_main_queue()];
[xmppRoom activate:dele.xmppStream];
[xmppRoom joinRoomUsingNickname:self.myNick history:nil];
// Inviting
[xmppRoom inviteUser:[XMPPJID jidWithString:@"abc@host"] withMessage:@"Come Join me"];用户"abc“如何知道他收到了邀请,以及他如何通过接受或拒绝来对此做出反应?
我在XMPPFramework中找不到任何直接处理聊天室邀请的类。我的研究表明,每当用户收到聊天室邀请时,都会调用xmmppStream的委托方法:
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message在该消息中,我检查它是否包含名为"invite“的NSXMLElement,如果包含,则向用户发送一个回调。然后创建与用户收到邀请的聊天室同名的聊天室,并进入新创建的聊天室。它工作得很好,但是很安静,很长,而且效率不高。我想知道在XMPPFramework available here中是否有一个类可以单独处理聊天室邀请。例如,检测、接受和拒绝房间邀请。
我提取房间名称的代码:
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
{
NSXMLElement * x = [message elementForName:@"x" xmlns:XMPPMUCUserNamespace];
NSXMLElement * invite = [x elementForName:@"invite"];
NSXMLElement * decline = [x elementForName:@"decline"];
NSXMLElement * directInvite = [message elementForName:@"x" xmlns:@"jabber:x:conference"];
NSString *msg = [[message elementForName:@"body"]stringValue];
NSString *from = [[[message attributeForName:@"from"]stringValue];
if (invite || directInvite)
{
[self createAndEnterRoom:from Message:msg];
return;
}
[self.delegate newMessageRecieved:msg];
}发布于 2013-02-03 03:42:46
对于房间邀请和拒绝,实现XMPPMUCDelegate及其方法-xmppMUC:didReceiveRoomInvitation:和-xmppMUC:didReceiveRoomInvitationDecline:。
获取房间的JID,调用[message from];
要加入房间,需要实例化一个XMPPRoom并调用-joinRoomUsingNickname:history:。
然后让您的房间委托类实现XMPPRoomDelegate,并实现一些delegate methods来处理房间中的消息接收。
看起来目前还没有一种更自动的方式来回复邀请。
更新:委托回调现在接收房间JID作为参数,稍微澄清了一些语义。
- (void)xmppMUC:(XMPPMUC *)sender roomJID:(XMPPJID *) roomJID didReceiveInvitation:(XMPPMessage *)message;
- (void)xmppMUC:(XMPPMUC *)sender roomJID:(XMPPJID *) roomJID didReceiveInvitationDecline:(XMPPMessage *)message;发布于 2014-04-10 21:05:31
只需添加以下代码
if ([presenceType isEqualToString:@"subscribe"]) {
[_chatDelegate newBuddyOnline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, @"localhost"]];
NSLog(@"presence user wants to subscribe %@",presenceFromUser);
[xmppRoster acceptPresenceSubscriptionRequestFrom:[presence from] andAddToRoster:YES];
//For reject button
// [xmppRoster rejectPresenceSubscriptionRequestFrom:[tmpPresence from]];
}在方法内部
- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence ;
methodhttps://stackoverflow.com/questions/14665654
复制相似问题