iOS: XMPP: Message Archiving for Group Chat Message

前端 未结 2 1718
深忆病人
深忆病人 2021-01-14 09:53

All one-one chat is send with Message Type as Chat. Thus the Message Archiving technique (shown below) worked fine for me to save/retrieve chat history.

// S         


        
相关标签:
2条回答
  • 2021-01-14 10:32

    You can easily get archive messages from xmpp core database. Use Below code.

    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];
    
    0 讨论(0)
  • 2021-01-14 10:52

    This is the Series of Stanza that you will need to send to get Archived Messages. For more detail you can checkout http://xmpp.org/extensions/xep-0136.html

    REQ

    <iq type='get' id='mrug_sender@staging.openfire.com'>
           <list xmlns='urn:xmpp:archive'
                   with='mrug_target_155@staging.openfire.com'>
            <set xmlns='http://jabber.org/protocol/rsm'>
                <max>6900</max>
            </set>
          </list>
       </iq>
    

    RES

    <iq type="result" id="mrug_sender@staging.openfire.com" to="mrug_sender@staging.openfire.com/Psi">
    <list xmlns="urn:xmpp:archive">
    <chat with="mrug_target_155@staging.openfire.com" start="2014-06-07T06:52:26.041Z"/>
    <chat with="mrug_target_155@staging.openfire.com" 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>
    

    REQ

    <iq type='get' id='mrug_sender@staging.openfire.com'>
        <retrieve xmlns='urn:xmpp:archive'  with='mrug_target_155@staging.openfire.com'  start='2014-06-07T06:52:26.041Z'>
         <set xmlns='http://jabber.org/protocol/rsm'>
           <max>8000</max>
         </set>
        </retrieve>
     </iq>
    

    RES

     <iq type="result" id="mrug_sender@staging.openfire.com" to="mrug_sender@staging.openfire.com/Psi">
        <chat xmlns="urn:xmpp:archive" with="mrug_target_155@staging.openfire.com" start="2014-06-07T06:52:26.041Z">
        <from secs="0" jid="mrug_target_155@staging.openfire.com">
        <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>
    

    To Fetch List of all Conversations

    <iq type='get' id='mrug_sender@staging.openfire.com'>
           <list xmlns='urn:xmpp:archive'>
            <set xmlns='http://jabber.org/protocol/rsm'>
                <max>6900</max>
            </set>
          </list>
    </iq>
    
    0 讨论(0)
提交回复
热议问题