【问题标题】:XMPPMessageArchivingCoreDataStorage duplicate entry - XMPP MUCXMPPMessageArchivingCoreDataStorage 重复条目 - XMPP MUC
【发布时间】:2017-03-19 04:42:45
【问题描述】:

我正在使用 XMPPFramework for iOS 来实现具有默认核心数据 (XMPPMessageArchivingCoreDataStorage) 的群聊 (MUC)。

我能够在两台设备之间发送和接收消息。

self.xmppRoom = //Get room instance;
[message addAttributeWithName:@"id" stringValue:[self.xmppStream generateUUID]];
[self.xmppRoom sendMessage:message];

XML 格式:

<message><request xmlns="urn:xmpp:receipts"></request><body>{
  "mediaItem" : "0",
  "body" : "Sending Message 1"
}</body><thread>2012C10A-6CAD-4C29-86BD-D93334FA74C8</thread></message>

当我发送消息时,在 XMPPMessageArchiving.sqlite 数据库中,我可以看到相同消息的两个条目(传出 1 - 和传出 0)。

如上所示,thread id 相同,outgoing 为 0,1 表示传入(received)和传出(sent)消息。

问题 1: 这是 XMPPMessageArchiving 核心数据保存传入和传出消息的预期行为吗?

如果是,那么我认为我必须从该数据库中仅获取传出消息 (ZOUTGOING = 1) 并显示在屏幕上。这是正确的吗?


每当我退出并重新打开应用程序或重新建立连接 (XMPPStream) 并进入房间 ([self.xmppRoom joinRoomUsingNickname:[self.myJID user] history:nil];) 时,我都会收到我之前发送的相同消息,传入值为 0。这将发生在每个时间我重新建立连接。怎样才能避免呢。

如果我收到来自另一个用户的消息,它将被添加到此数据库中,外发为“0”。我如何过滤另一个用户发送的传入消息和我发送的消息(图 1)。

消息节:

<message id="5CF46E24-BF92-48AC-B13D-A1D7B4B45942" to="hmgroup@conference.local0094.local" type="groupchat"><request xmlns="urn:xmpp:receipts"/><body>{
  "mediaItem" : "0",
  "body" : "Sending Message 1"
}</body><thread>2012C10A-6CAD-4C29-86BD-D93334FA74C8</thread></message>

感谢任何帮助。

【问题讨论】:

    标签: ios sqlite core-data xmpp xmppframework


    【解决方案1】:

    首先,对于 MUC 重复消息。你应该选择XMPPRoomCoreDataStorage,而不是XMPPMessageArchiving。我个人不喜欢XMPPMessageArchiving 也处理 MUC 消息的行为。

    其次,默认情况下,MUCRoom 会向新加入的用户发送一些历史记录,数量由配置确定,在mod_muc: history_size: 下。您可以将其设置为 0 以禁用此功能。

    【讨论】:

    • 谢谢。现在我正在使用 XMPPRoom 存储来获取房间的消息。但是在这里有一段时间(一次)我收到了重复的消息。
    猜你喜欢
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    相关资源
    最近更新 更多