我正在使用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)。
如上所示,线程ID相同,传出为0,1表示传入(已接收)和传出(已发送)消息。
问题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>
感谢任何帮助。
答案 0 :(得分:1)
首先,对于MUC重复消息。你应该去XMPPRoomCoreDataStorage
而不是XMPPMessageArchiving
。就个人而言,我不喜欢XMPPMessageArchiving
也处理MUC消息的行为。
其次,默认情况下,MUCRoom会向新加入的用户发送一些历史记录,该号码由mod_muc: history_size:
下的配置决定。您可以将其设置为0以禁用此功能。