XMPPMessageArchivingCoreDataStorage重复条目 - XMPP MUC

时间:2016-11-05 12:07:53

标签: ios sqlite core-data xmpp xmppframework

我正在使用iOS的XMPPFramework来实现默认核心数据(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)。

Outgoing Message

如上所示,线程ID相同,传出为0,1表示传入(已接收)和传出(已发送)消息。

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

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

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

Duplication

如果我收到来自其他用户的消息,它将被添加到此数据库中,传出为“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>

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

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

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