从ejabberd服务器检索XMPP存档消息的问题聊天记录

问题描述

我使用以下方法检索聊天记录。

func getArchieveMessages(forUser user:String){
    let xmppMAM = XMPPMessageArchiveManagement.init()
    xmppMAM.addDelegate(self,delegateQueue: .main)
    xmppMAM.activate(stream)
    let xmppDateString = NSDate().addingTimeInterval(-(3 * 24 * 60 * 60)).xmppDateTimeString
    var fields: [XMLElement] = []
    let start = XMPPMessageArchiveManagement.field(withVar: "end",type: nil,andValue: xmppDateString)
    fields.append(start)
     let value = DDXMLElement(name: "value",stringValue: user)
     let child = DDXMLElement(name: "field")
     child.addChild(value)
     child.addAttribute(withName: "var",stringValue: "with")
     let set = XMPPResultSet(max: 20,before: "")
    fields.append(child)
    xmppMAM.retrieveMessageArchive(at: nil,withFields: fields,with: set)
}

调用此函数后,我收到了两个代表。即如果在XMPPResultSet中给出20条消息,我会收到20次 xmppStreamDidFilterStanza(_ sender:XMPPStream)方法。

func xmppMessageArchiveManagement(_ xmppMessageArchiveManagement: XMPPMessageArchiveManagement,didFinishReceivingMessagesWith resultSet: XMPPResultSet) {
    print("didFinishReceivingMessagesWith",resultSet)
}
    func xmppStreamDidFilterStanza(_ sender: XMPPStream) {
    debugPrint("xmppStreamDidFilterStanza")
}

函数xmppMessageArchiveManagement中的响应(_ xmppMessageArchiveManagement:XMPPMessageArchiveManagement,didFinishReceivingMessagesWith resultSet:XMPPResultSet)

didFinishReceivingMessagesWith <set xmlns="http://jabber.org/protocol/rsm"><count>364</count><first>1603801030936227</first><last>1603948285226175</last></set>

但是永远不会调用此方法。

func xmppMessageArchiveManagement(_ xmppMessageArchiveManagement: XMPPMessageArchiveManagement,didReceiveMAMMessage message: XMPPMessage) {
  if let body = message.mamResult?.forwardedMessage{
    print("didReceiveMAMMessage",body)
  }
    print("didReceiveMAMMessage",message)
}

如果有人遇到此问题并已解决,或者有任何已知的问题要解决,请分享您的答案。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)