如何判断聊天中的消息状态(已读/未读)?
如何确定消息状态(已读/未读)。聊天是通过XMPP协议实现的。
How to determine the message status (read/unread). Chat is realized with the XMPP protocol.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
Xmpp 没有已读/未读收据。虽然收到的是 XEP-0184 中实现的东西。
Xmpp does not have a read/unread receipt. While received is something that was implemented in XEP-0184.
XEP-0184:消息传递收据支持在消息已传递时通知发件人。只要您不希望现有客户发送这些收据,您就可以将其用作构建块 - XEP 目前尚未广泛实施。
XEP-0184: Message Delivery Receipts supports notifying senders when their message has been delivered. You might be able to use that as a building block, as long as you don't expect existing clients to send these receipts -- the XEP is not widely-implemented today.
如果您想获取已读回执,则不要发送自动消息传递回执,而是在用户阅读该消息时发送它。每条消息都有其对应的message_id。使用该 message_id 发送已阅读的特定消息的送达回执。在建立连接时添加以下代码
我通过在消息实体中添加“chatStatus”属性解决了这个问题。对于发件人,我将 chatStatus 的值保留为已发送、未发送或已接收(是否由另一方接收)。对于接收方,我将值保留为已读或未读(我是否已阅读消息,以便对于未读消息我可以发送已读收据)。
单击发送按钮时:
在 cellForRowAtIndexPath 中:
最后,当您在 didReceiveMessage 中收到交货收据时,将 chatStatus 更新为已接收
您可以根据您的要求设置 chatStatus 的值。至于未发送的消息,我已将其设置为在 didSendMessage 委托中发送。
注意:在我的应用程序中,我必须只显示已读、已发送和未设置状态,而不是已发送状态。如果您还想显示递送状态,则不要注释 autoSendMessageDeliveryReceipts,并且每当读取消息时,将 IQ 节发送给发件人而不是递送收据,并相应地更改 chatStatus。
这只是基本想法,您可以根据您的要求使用它。
希望有帮助!
If you want to get the read receipts then instead of sending auto message delivery receipts, send it whenever user reads that message. Each message has it's corresponding message_id. Use that message_id to send the delivery receipt for the particular message that has been read. Add following code while making connection
I solved this problem by adding 'chatStatus' attribute in my message entity. For sender I have kept value of chatStatus as sent, unsent, or received(received by other side or not). For Receiver Side I have kept the Values as read or unread(Have I read message or not, So that for unread message I could send read Receipts).
On Click Of send Button:
In cellForRowAtIndexPath:
And finally when you receive the delivery Receipt in didReceiveMessage, update the chatStatus to received
You could set the values of chatStatus as per your requirement. As for unsent messages I have set it as sent in didSendMessage delegate.
Note: In my app I had to just show the read, sent and unset status, not the delivered status. If you also wanna show delivery status, then don't comment autoSendMessageDeliveryReceipts and whenever messages are read send the IQ stanza to sender instead of delivery receipt and change the chatStatus accordingly.
This is just the basic idea, you could use it as per your requirement.
Hope it Helps!!
我认为您需要使用显示的聊天标记,按照 http://xmpp.org/extensions/xep -0333.html
I think you need to use the Displayed Chat Marker, per http://xmpp.org/extensions/xep-0333.html