如何在XMPP iOS中获取消息传递,查看,失败和未读消息计数? (Swift 3.0)

我正在开发聊天应用程序,因为我陷入了两个场景。

1)如何获得交付,看到等消息状态。我做了以下事情:

self.xmppMessageDeliveryRecipts = XMPPMessageDeliveryReceipts(dispatchQueue: DispatchQueue.main) self.xmppMessageDeliveryRecipts!.autoSendMessageDeliveryReceipts = true self.xmppMessageDeliveryRecipts!.autoSendMessageDeliveryRequests = true 

但我没有进一步的想法,我如何进一步处理检查消息状态?

2)如何获取像whatsapp那样的未读消息计数? 为了获取我在核心数据对象XMPPMessageArchiving_Contact_CoreDataObject使用的最新消息

其他档案代码

 self.xmppMessageArchivingStorage = XMPPMessageArchivingCoreDataStorage.sharedInstance(); self.xmppMessageArchiving = XMPPMessageArchiving(messageArchivingStorage: xmppMessageArchivingStorage); self.xmppMessageArchiving!.clientSideMessageArchivingOnly = true; 

但是让我知道如何才能获得详细信息或帮助完整的代码片段?

我已经检查了下面的堆栈链接:

1) 如何使用XMPP框架获取消息传递状态

2) 需要有关使用xep-0184的帮助

3) 如何在xmpp框架中获取读/未读/报告的消息

服务器: ejabber

XMPP提供“ 流管理”以了解消息是否已传递到XMPP服务器。

为此,您必须注册并激活它。 这是代码。

 // Stream Management func configureStreamManagement() { let xmppSMMS = XMPPStreamManagementMemoryStorage() xmppStreamManagement = XMPPStreamManagement(storage: xmppSMMS, dispatchQueue: DispatchQueue.main) xmppStreamManagement.addDelegate(self, delegateQueue: DispatchQueue.main) xmppStreamManagement.activate(xmppStream) xmppStreamManagement.autoResume = true xmppStreamManagement.ackResponseDelay = 0.2 xmppStreamManagement.requestAck() xmppStreamManagement.automaticallyRequestAcks(afterStanzaCount: 1, orTimeout: 10) xmppStreamManagement.automaticallySendAcks(afterStanzaCount: 1, orTimeout: 10) xmppStreamManagement.enable(withResumption: true, maxTimeout: 0) xmppStreamManagement.sendAck() xmppStream.register(xmppStreamManagement) } 

身份validation成功后调用此方法。

 func xmppStreamDidAuthenticate(_ sender: XMPPStream!) { print("Stream: Authenticated") configureStreamManagement() } 

使用’ XMPPStreamManagementDelegate ‘,您可以获取传递给XMPP服务器的消息ID。

 func xmppStreamManagement(_ sender: XMPPStreamManagement!, didReceiveAckForStanzaIds stanzaIds: [Any]!) { if let messageIds = stanzaIds as? [String] { for id in messageIds { print("Message is delivered to xmpp server: \(id)") // TODO: Custom code goes here to change the message status } } } 

如上所述,下面的代码将自动发送客户端的已发送收据,这意味着邮件将传递给客户端。

 self.xmppMessageDeliveryRecipts = XMPPMessageDeliveryReceipts(dispatchQueue: DispatchQueue.main) self.xmppMessageDeliveryRecipts!.autoSendMessageDeliveryReceipts = true self.xmppMessageDeliveryRecipts!.autoSendMessageDeliveryRequests = true 

在’ XMPPStreamDelegate ‘中,当邮件将传递给客户端时,您将收到收据消息。

 func xmppStream(_ sender: XMPPStream!, didReceive message: XMPPMessage!) { print("Message From: \(message.from().user)") print("Message Body: \(message.body())") print("Message is delivered to client -: \(message.receiptResponseID())") // TODO: Compare receiptResponseID with sent message's id. }