Я использую XMPPFramework для iOS для реализации группового чата (MUC) с базовыми данными по умолчанию (XMPPMessageArchivingCoreDataStorage).XMPPMessageArchivingCoreDataStorage duplicate entry - XMPP 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).
Как видно выше, идентификатор потока является то же самое и исходящие равно 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="[email protected]" type="groupchat"><request xmlns="urn:xmpp:receipts"/><body>{
"mediaItem" : "0",
"body" : "Sending Message 1"
}</body><thread>2012C10A-6CAD-4C29-86BD-D93334FA74C8</thread></message>
Любая помощь приветствуется.
Спасибо. Теперь я использую хранилище XMPPRoom, чтобы получить сообщение комнаты. Но вот некоторое время (один раз) я получил дублирующее сообщение. –