iOS: XMPP: архивация сообщений для сообщений группового чата

Все чаты один-один отправляются с типом сообщения как чат. Таким образом, метод архивации сообщений (показанный ниже) отлично сработал для сохранения/получения истории чата.

// Setup message archiving
xmppMessageArchivingStorage = [XMPPMessageArchivingCoreDataStorage sharedInstance];
xmppMessageArchiving = [[XMPPMessageArchiving alloc] initWithMessageArchivingStorage:xmppMessageArchivingStorage];
[xmppMessageArchiving setClientSideMessageArchivingOnly:YES];

// Activate xmpp modules
[xmppMessageArchiving   activate:xmppStream];
// Add delegate
[xmppMessageArchiving  addDelegate:self delegateQueue:dispatch_get_main_queue()];

Однако для группового чата отправляется тип сообщения «групповой чат». Это не будет архивироваться хранилищем XMPPMessageArchivingCoreDataStorage.


Может кто-нибудь, пожалуйста, подскажите, как мне добиться архивации сообщений для сообщений группового чата.


person Community    schedule 08.08.2014    source источник
comment
Y вам нужен архив сообщений комнаты. Если вы присоединились к новой комнате, вы можете получить все сообщения, которые уже есть в этой комнате.   -  person Suhail kalathil    schedule 08.08.2014
comment
Но я бы хотел, чтобы все сообщения сохранялись даже после того, как я к ним присоединился. Чтобы я мог показывать все сообщения прямо из архива.   -  person    schedule 08.08.2014
comment
если у вас есть пример кода или проекта для получения истории чата с сервера ejbberd в iOS swift.   -  person Abishek Thangaraj    schedule 09.11.2020


Ответы (2)


Это серия строф, которую вам нужно будет отправить, чтобы получить архивные сообщения. Для получения более подробной информации вы можете проверить http://xmpp.org/extensions/xep-0136.html

ЗАПРОС

<iq type='get' id='[email protected]'>
       <list xmlns='urn:xmpp:archive'
               with='[email protected]'>
        <set xmlns='http://jabber.org/protocol/rsm'>
            <max>6900</max>
        </set>
      </list>
   </iq>

ВИЭ

<iq type="result" id="[email protected]" to="[email protected]/Psi">
<list xmlns="urn:xmpp:archive">
<chat with="[email protected]" start="2014-06-07T06:52:26.041Z"/>
<chat with="[email protected]" start="2014-06-07T07:06:53.372Z"/>
<set xmlns="http://jabber.org/protocol/rsm">
<first index="0">866</first>
<last>867</last>
<count>2</count>
</set>
</list>
</iq>

ЗАПРОС

<iq type='get' id='[email protected]'>
    <retrieve xmlns='urn:xmpp:archive'  with='[email protected]'  start='2014-06-07T06:52:26.041Z'>
     <set xmlns='http://jabber.org/protocol/rsm'>
       <max>8000</max>
     </set>
    </retrieve>
 </iq>

ВИЭ

 <iq type="result" id="[email protected]" to="[email protected]/Psi">
    <chat xmlns="urn:xmpp:archive" with="[email protected]" start="2014-06-07T06:52:26.041Z">
    <from secs="0" jid="[email protected]">
    <body>Wow !! This is Archived Message</body>
    </from>
    <set xmlns="http://jabber.org/protocol/rsm">
    <first index="0">0</first>
    <last>0</last>
    <count>1</count>
    </set>
    </chat>
    </iq>

Чтобы получить список всех разговоров

<iq type='get' id='[email protected]'>
       <list xmlns='urn:xmpp:archive'>
        <set xmlns='http://jabber.org/protocol/rsm'>
            <max>6900</max>
        </set>
      </list>
</iq>
person Mrug    schedule 17.03.2015
comment
Здравствуйте, @Mrug, я использовал github.com/robbiehanson/XMPPFramework. Я не знаю, как сохранить эти полученные сообщения, пожалуйста, помогите мне с этим. - person sohan vanani; 22.11.2017
comment
Просто следуйте приведенной выше серии Stanza, и вы получите ответ в формате XML, который вам нужно будет проанализировать и сохранить либо в SQLite, либо в Coredata. - person Mrug; 23.11.2017
comment
Я использовал XMPPFramework, и эта структура автоматически сохраняет сообщения, и я хочу хранить эти заархивированные сообщения с базой данных основных данных, созданной XMPPFramework, поэтому проблема в том, что я не могу хранить эти сообщения @Mrug - person sohan vanani; 23.11.2017

Вы можете легко получить архивные сообщения из основной базы данных xmpp. Используйте приведенный ниже код.

XMPPMessageArchivingCoreDataStorage *_xmppMsgStorage = [XMPPMessageArchivingCoreDataStorage sharedInstance];
NSManagedObjectContext *moc = [_xmppMsgStorage mainThreadManagedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"XMPPMessageArchiving_Message_CoreDataObject"
                                                     inManagedObjectContext:moc];
NSFetchRequest *request = [[NSFetchRequest alloc]init];
[request setEntity:entityDescription];
//[request setFetchLimit:20];

NSError *error;
NSString *predicateFrmt = @"bareJidStr == %@";

NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateFrmt, [NSString stringWithFormat:@"%@%@",GroupName,GROUP_CHAT_DOMAIN]];
request.predicate = predicate;
NSArray *messages = [moc executeFetchRequest:request error:&error];
person Parthpatel1105    schedule 04.06.2015