我们正在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];
答案 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
: