从ejabberd服务器检索XMPP存档消息的问题(聊天记录) [英] Issue on retrieve the XMPP archived message from ejabberd server(Chat history)
问题描述
我使用以下方法检索聊天记录.
I used the following method to retrieve the chat history.
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)方法.
After call this function I received the two delegates. i.e. if give 20 messages in XMPPResultSet I received 20 times xmppStreamDidFilterStanza(_ sender: XMPPStream) method.
func xmppMessageArchiveManagement(_ xmppMessageArchiveManagement: XMPPMessageArchiveManagement, didFinishReceivingMessagesWith resultSet: XMPPResultSet) {
print("didFinishReceivingMessagesWith", resultSet)
}
func xmppStreamDidFilterStanza(_ sender: XMPPStream) {
debugPrint("xmppStreamDidFilterStanza")
}
func xmppMessageArchiveManagement(_ xmppMessageArchiveManagement:XMPPMessageArchiveManagement,didFinishReceivingMessagesWith resultSet:XMPPResultSet)中的响应
Response in func xmppMessageArchiveManagement(_ xmppMessageArchiveManagement: XMPPMessageArchiveManagement, didFinishReceivingMessagesWith resultSet: XMPPResultSet)
didFinishReceivingMessagesWith <set xmlns="http://jabber.org/protocol/rsm"><count>364</count><first>1603801030936227</first><last>1603948285226175</last></set>
但是永远不会调用此方法.
But this method is never called.
func xmppMessageArchiveManagement(_ xmppMessageArchiveManagement: XMPPMessageArchiveManagement, didReceiveMAMMessage message: XMPPMessage) {
if let body = message.mamResult?.forwardedMessage{
print("didReceiveMAMMessage", body)
}
print("didReceiveMAMMessage", message)
}
如果有人遇到此问题并已解决,或者有任何已知的问题要解决,请分享您的答案.
if anyone face this issue and resolved or any known the issue to solve please share your answer.
推荐答案
根据您的代码,我看到您没有在任何地方保存xmppMAM.试试这个:
Based on your code I see that you don't save xmppMAM anywhere. Try this:
private var xmppMAM: XMPPMessageArchiveManagement?
func getArchieveMessages(forUser user:String){
xmppMAM = XMPPMessageArchiveManagement.init()
// Your code
}
这篇关于从ejabberd服务器检索XMPP存档消息的问题(聊天记录)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!