【问题标题】:XMPP Getting Room Configuration Change Messages While OfflineXMPP 在离线时获取房间配置更改消息
【发布时间】:2017-04-02 09:38:25
【问题描述】:

我们正在使用 XMPPFramework for IOS 来为我们的移动应用程序实现聊天功能。 我们更改了房间名称功能,当管理员更改房间名称时,服务器会向所有群组接收者发送消息,当所有接收者都在线时没有问题但是当用户未加入群组时(当时未连接) 即使他重新上线,他也无法收到消息。

我们正在使用历史参数来检索组中的旧消息,但我们无法接收这些配置更改(以及添加或禁止服务器的用户信息)消息。 你知道我们该如何解决吗?

NSXMLElement *history = [NSXMLElement elementWithName:@"history"];
[history addAttributeWithName:@"seconds" stringValue:[NSString stringWithFormat:@"%.0f",disconnetSecond]];
[xmppRoom joinRoomUsingNickname:cusername history:history];

谢谢

【问题讨论】:

    标签: ios objective-c xmpp ejabberd xmppframework


    【解决方案1】:

    如果您使用Room Subject 作为房间名称,那么 XMPP 会自动支持它。还支持changing room subject,并在用户加入房间时发送给用户。因此,最终无论何时加入房间,您都会获得更新的主题,您可以在 UI 上显示它,甚至可以向用户显示名称已更改。

    您只需要按照XEP-0045: Multi-User Chat 中定义的说明进行操作即可

    【讨论】:

    • 不,我使用的是房间配置中的实际房间名称。当有人从群组中被禁止或添加到群组时,也会存在同样的问题。如果在禁止用户期间所有成员都在线,则通知每个人,但如果某些参与者离线,即使他们从一开始就获取消息,他们也不会收到禁止用户信息
    • 使用房间主题可以解决您的问题。否则,房间配置更改将不会传递给离线用户。
    • 假设我们解决了主题的名称更改问题,但我们将如何解决被禁止和添加的用户信息以接收所有离线参与者
    • 这不是 MUC XEP 的一部分,这是自定义要求。当用户离线时,他不属于任何房间。因此,如果此时有新用户加入房间,它的通知将发送给在线用户。群聊消息也没有离线消息存储。现在,如果您使用的是 Ejabberd,您应该检查此实现:docs.ejabberd.im/developer/xmpp-clients-bots/… 有一些功能可以克服 MUC XEP 的一些限制。
    • 但是 ejabberd 以某种方式存储群聊消息。因为当我加入一个请求 3 小时消息历史记录的组时。它从 3 小时前返回给我的消息,所以我可以在离线时收到消息。历史记录中唯一我无法获得的是成员添加和禁止消息以及房间配置消息
    【解决方案2】:

    使用 ejabberd,您可以使用新的 MUC/Sub 方法并订阅节点“urn:xmpp:mucsub:nodes:config”上的配置更改。 规范在这里描述:https://docs.ejabberd.im/developer/xmpp-clients-bots/proposed-extensions/muc-sub/ 您必须在 XMPPFramework 中添加支持,因为它尚不受支持,但这应该可以满足您的需要。您可以将配置更改放在离线商店中。

    【讨论】:

    • 我已经添加了订阅 mucsub 的功能。但是,从 mucsub 接收的只有加入和离开状态消息,而不是配置消息
    • 需要订阅节点:urn:xmpp:mucsub:nodes:config
    猜你喜欢
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 2017-03-19
    • 2012-04-21
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多