【发布时间】:2018-07-07 11:39:54
【问题描述】:
我收到所有用户发送给我的所有消息。
当我得到结果是 XMPPMessage 类型时,我不知道如何从中提取正文
此问题与获取存档消息有关。
func getALLMessagesFromServerWithXML() {
let query = try? XMLElement(xmlString: "<query xmlns='urn:xmpp:mam:2'/>")
let iq = XMLElement.element(withName: "iq") as? XMLElement
iq?.addAttribute(withName: "type", stringValue: "set")
iq?.addAttribute(withName: "id", stringValue: "getAllMesseges")
if let aQuery = query {
iq?.addChild(aQuery)
}
xmppStream.send(iq!)
}
从这个方法得到结果:
func xmppStream(_ sender: XMPPStream, didReceive message: XMPPMessage) {
print(message)
}
输出
<message xmlns="jabber:client" to="f.talebi@x/1516292205485357040111042" from="f.talebi@x"><result xmlns="urn:xmpp:mam:2" id="1530957470465122"><forwarded xmlns="urn:xmpp:forward:0"><message xmlns="jabber:client" lang="en" to="a.mardani@xmpp.x.ir" from="f.talebi@x.ir/134788006381643425047394" type="chat"><archived xmlns="urn:xmpp:mam:tmp" by="f.talebi@x.ir" id="1530957470465122"></archived><stanza-id xmlns="urn:xmpp:sid:0" by="f.talebi@x.ir" id="1530957470465122"></stanza-id><body>hi 2018-07-07 09:57:49 +0000</body></message><delay xmlns="urn:xmpp:delay" from="x.ir" stamp="2018-07-07T09:57:50.465122Z"></delay></forwarded></result></message>
如何从该输出中提取正文?对于普通消息,我可以通过message.body 获取正文,但对于存档消息,我无法使用此代码获取正文。
根据@andesta.erfan 的回答,我添加了这些代码:
变量:
private var archiving = XMPPMessageArchiveManagement()
在初始化()中
archiving = XMPPMessageArchiveManagement(dispatchQueue: DispatchQueue.main)
archiving?.activate(xmppStream)
archiving?.addDelegate(self, delegateQueue: DispatchQueue.main)
扩展实现:
extension XMPPHelper: XMPPMessageArchiveManagementDelegate {
func xmppMessageArchiveManagement(_ xmppMessageArchiveManagement: XMPPMessageArchiveManagement, didReceiveMAMMessage message: XMPPMessage) {
print(message.body())
}
}
但是 xmppMessageArchiveManagement 永远不会被调用,xmppStream(_ sender: XMPPStream, didReceive message: XMPPMessage) 在这两种情况下都会被调用。当它是归档消息或普通消息时。
【问题讨论】:
-
尝试打印:message.body,不知道您访问的情况(message.body),因为它取决于代码。或者试试这个 - NSString *str = [[message elementForName:@"body"] stringValue];
-
使用
mam:1而不是mam:2
标签: swift xmppframework