2016-11-09 53 views
1

我们正在IOS上使用客户端的XMPPFramework(https://github.com/robbiehanson/XMPPFramework)和服务器端的Ejabberd创建聊天应用程序。IOS XMPPFramework和连接客房

在群组聊天中,我们正在创建群组,然后加入该群组并邀请其他用户加入我们的群组。每当新受邀用户加入小组时,我们都会通知所有参与者新用户加入小组。然后当我们重新启动应用程序(kill并重新启动)时,我们存储该组的用户名并重新加入(您可以在下面找到示例),但在这种情况下,ejabberd将发送新用户加入的所有客户端小组,但我已经在这个小组中,唯一的区别是我重新启动了应用程序。 我如何区分这两件事?

NSString *nickName = [[NSUserDefaults standardUserDefaults]objectForKey:userNickName]; 

XMPPRoomMemoryStorage *roomStorage = [[XMPPRoomMemoryStorage alloc] init]; 

XMPPJID *roomJID = [XMPPJID jidWithString:uniqId]; 
XMPPRoom *xmppRoom = [[XMPPRoom alloc]initWithRoomStorage:roomStorage 
                 jid:roomJID 
              dispatchQueue:dispatch_get_main_queue()]; 
[xmppRoom activate:xmppStream]; 
[xmppRoom addDelegate:self delegateQueue:dispatch_get_main_queue()]; 
[xmppRoom joinRoomUsingNickname:nickName history:nil]; 

回答

1

实际上加入了XMPP MUC意味着你现在在房间里。当你离线时,你可能是该组的成员,但你不在组中。当您在登录时再次发送表示时,您将再次出现。

我想根本原因是你混合加入vs会员。

我建议你看看ejabberd中的MUC/Sub协议。这是设计从房间成员和消息订阅拆分在房间的存在。 该协议描述如下:https://docs.ejabberd.im/developer/xmpp-clients-bots/proposed-extensions/muc-sub/

相关问题