IOS XMPPFramework和加入会议室

时间:2016-11-09 09:30:27

标签: objective-c xmpp ejabberd xmppframework

我们正在IOS上创建一个聊天应用程序,在客户端(https://github.com/robbiehanson/XMPPFramework)和服务器端的Ejabberd上使用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];

2 个答案:

答案 0 :(得分:2)

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

我认为根本原因是你正在混合加入与成员资格。

我建议您查看ejabberd中的MUC / Sub协议。设计是将房间成员和订阅消息分成房间。 该协议在此处描述:https://docs.ejabberd.im/developer/xmpp-clients-bots/proposed-extensions/muc-sub/

答案 1 :(得分:2)

在Xmpp MUC中:

离开!= Not group member anymore

加入!= Become group member from now on

但仅仅意味着:

离开== Presence unavailable

加入== Presence available

Presence在群聊中没有那么有用。

相反,我认为您正在寻找像MUCLight

这样的东西