XMPPFramework - Retrieve Archived Messages From Openfire Server

后端 未结 5 1430
故里飘歌
故里飘歌 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:37

    Swift version of fetch archive messages from openfire server Request:

    func getArchieveMessages(){
            let iQ = DDXMLElement.elementWithName("iq")
            iQ.addAttributeWithName("type", stringValue: "get")
            iQ.addAttributeWithName("id", stringValue: "page1")
            let list = DDXMLElement.elementWithName("retrieve")
            list.addAttributeWithName("xmlns", stringValue: "urn:xmpp:archive")
            list.addAttributeWithName("with", stringValue: "partner@domain")
            let set = DDXMLElement.elementWithName("set")
            set.addAttributeWithName("xmlns", stringValue: "http://jabber.org/protocol/rsm")
            let max = DDXMLElement.elementWithName("max")
            max.addAttributeWithName("xmlns", stringValue: "http://jabber.org/protocol/rsm")
            //(max as! DDXMLElement).setStringValue("30")
            (set as! DDXMLElement).addChild(max as! DDXMLNode)
            list.addChild(set as! DDXMLNode)
            iQ.addChild(list as! DDXMLNode)
            xmppStream.sendElement(iQ as! DDXMLElement)
        }
    

    Response:

    func xmppStream(sender: XMPPStream!, didReceiveIQ iq: XMPPIQ!) -> Bool {
            let chat = iq.elementForName("chat")
            let chats = (chat as DDXMLElement).children()
            for chat in chats{
                let msg = chat
                let body = (msg as! DDXMLElement).elementForName("body")
                if body != nil{
                    if body.stringValue() != nil{
                        //print(body.stringValue()!)
                        chatMessages.append(body.stringValue()!)
                        if msg.attributeForName("jid") == nil{
                            type.append("Send")
                        }
                        else{
                            type.append("Receive")
                        }
                    }
                }
            }
            print("Did receive IQ")
            return false
        }
    

    *with is the jid of the person whose archive messages you want to fetch

提交回复
热议问题