【发布时间】:2018-03-21 21:25:36
【问题描述】:
我正在开发一个聊天应用程序,因为我需要像 WhatsApp 应用程序一样显示消息状态,因为我已经尝试过 XEP-0333(聊天标记),但面临类似问题。
1) 从另一端 XMPPMessage Archive 获取 Received Marker 后,未使用 Received Marker 更新消息(在核心数据中,消息聊天标记状态未更新)。
2) 如何实现显示标记逻辑? (意味着对于每条消息,我们需要发送显示的标记或一次只发送一个对话框。)
XEP 链接:XEP-0333
代码:
//(Sender Part)
let completeMessage = DDXMLElement.element(withName: "message") as! DDXMLElement //(In that i have set id,body,to and type as chat)
let msgObj = XMPPMessage(from: completeMessage)
msgObj?.addMarkableChatMarker()
xmppStream?.send(msgObj)
//(Receiver Part)
didReceivedMessage - Method
//*Check One condition*
if message.isChatMessageWithBody() && message.isErrorMessage() == false {
if (message.hasChatMarker() == true){
printLog("Message ID\(message.elementID())")
let msgElement = XMPPMessageMng.getChatMessageElement(recipient: message.from().bare(), thread: "")
let threadElement = DDXMLElement.element(withName: "thread") as! DDXMLElement
threadElement.stringValue = "Thread"
msgElement.addChild(threadElement)
let msgReceived = XMPPMessage(from: msgElement)
msgReceived?.addReceivedChatMarker(withID: message.elementID())
xmppStream.send(msgReceived)
}
}
else{
if (message.hasMarkableChatMarker() == true){
printLog("Chat Marker ID\(message.chatMarkerID())")
}else if (message.hasReceivedChatMarker() == true){
printLog("Chat Marker ID\(message.chatMarkerID())")
}
}
//对于显示标记我做了下面的事情。 - 当您使用 JID 从消息存档加载消息时。 loadArchivedMessagesFromJID - 方法
//message as XMPPMessageArchiving_Message_CoreDataObject
let msgReceived = XMPPMessage(from: msgElement)
msgReceived?.addDisplayedChatMarker(withID: message.message.elementID())
xmppStream.send(msgReceived)
让我知道我们可以用哪种正确的方式实现聊天标记协议。
开发工具:Xcode 8.3(Swift 3.0), 服务器:ejabberd
【问题讨论】:
-
嗨,@Jay Mehta,你解决了吗?请帮助我实现相同的功能。
标签: swift xmpp chat ejabberd xmppframework