【问题标题】:IOS XMPPFramework and Joining RoomsIOS XMPPFramework 和 Joining Rooms
【发布时间】:2017-03-23 01:33:34
【问题描述】:

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

在群聊中,我们正在创建一个群组,然后加入该群组并邀请其他用户加入我们的群组。并且每次有新的受邀用户加入群组时,我们都会通知所有参与者该新用户加入了群组。

但是,当我们重新启动应用程序(杀死并重新启动)时,我们会存储该组的用户名并再次重新加入它(您可以找到下面的示例),但在这种情况下,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];

【问题讨论】:

    标签: objective-c xmpp ejabberd xmppframework


    【解决方案1】:

    在 Xmpp MUC 中:

    离开 != Not group member anymore

    加入!= Become group member from now on

    但简单的意思是:

    离开 == Presence unavailable

    加入 == Presence available.


    而且在线状态在群聊中没有那么有用。

    相比之下,我认为您正在寻找类似MUCLight

    【讨论】:

      【解决方案2】:

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

      我猜根本原因是您将加入与会员资格混为一谈。

      我建议你看看 ejabberd 中的 MUC/Sub 协议。它旨在将房间中的存在与房间成员资格和订阅消息分开。 协议在此处描述:https://docs.ejabberd.im/developer/xmpp-clients-bots/proposed-extensions/muc-sub/

      【讨论】:

        猜你喜欢
        • 2014-08-05
        • 2016-02-06
        • 1970-01-01
        • 2013-12-02
        • 1970-01-01
        • 2013-05-06
        • 2014-05-28
        • 2014-09-23
        • 1970-01-01
        相关资源
        最近更新 更多