XMPPFramework - Retrieve Archived Messages From Openfire Server

后端 未结 5 1429
故里飘歌
故里飘歌 2020-12-01 04:04

I am developing a chat app for iPhone using XMPP and openfire server,OpenFire server is storing all the chat history between users but When I try to retrieve the chat histor

5条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-01 04:32

    an example to get archived messages in Swift 4

    declares and initializes the variables XMPPMessageArchivingCoreDataStorage where I initialize the XMPPStream

    var xmppMessageStorage: XMPPMessageArchivingCoreDataStorage?
    var xmppMessageArchiving: XMPPMessageArchiving?
    
    xmppMessageStorage = XMPPMessageArchivingCoreDataStorage.sharedInstance()
        xmppMessageArchiving = XMPPMessageArchiving(messageArchivingStorage: xmppMessageStorage)
    
        xmppMessageArchiving?.clientSideMessageArchivingOnly = true
        xmppMessageArchiving?.activate(stream)
        xmppMessageArchiving?.addDelegate(self, delegateQueue: DispatchQueue.main)
    

    doing this, whenever a message arrives, this will cause it to be archived without needing to do anything else.

    then, to retrieve the archived message

    func RecibedMessageArchiving(idFriend: String) {
    
            let JabberIDFriend = idFriend   //id friend chat, example test1@example.com
    
    
            let moc = xmppMessageStorage?.mainThreadManagedObjectContext
            let entityDescription = NSEntityDescription.entity(forEntityName: "XMPPMessageArchiving_Message_CoreDataObject", in: moc!)
            let request = NSFetchRequest()
            let predicateFormat = "bareJidStr like %@ "
            let predicate = NSPredicate(format: predicateFormat, JabberIDFriend)
    
            request.predicate = predicate
            request.entity = entityDescription
    
            //jabberID id del usuario, cliente
            var jabberIDCliente = ""
            if let jabberj = globalChat.value(forKey: "jabberID"){
                jabberIDCliente = jabberj as! String
            }
    
    
            do {
                let results = try moc?.fetch(request)
    
                for message: XMPPMessageArchiving_Message_CoreDataObject? in results as? [XMPPMessageArchiving_Message_CoreDataObject?] ?? [] {
    
                    var element: DDXMLElement!
                    do {
                        element = try DDXMLElement(xmlString: (message as AnyObject).messageStr)
                    } catch _ {
                        element = nil
                    }
    
                    let body: String
                    let sender: String
                    let date: NSDate
                    let isIncomings: Bool
    

提交回复
热议问题