首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何判断聊天消息的状态(已读/未读)?

如何判断聊天消息的状态(已读/未读)?
EN

Stack Overflow用户
提问于 2011-09-13 12:41:06
回答 4查看 8.7K关注 0票数 12

如何确定消息状态(已读/未读)。聊天是用XMPP协议实现的。

EN

回答 4

Stack Overflow用户

发布于 2011-09-13 23:22:03

XEP-0184:消息投递回执支持通知发件人消息已经投递完毕。只要您不期望现有客户机发送这些回执,您就可以将其用作构建块-- XEP目前还没有得到广泛实现。

票数 6
EN

Stack Overflow用户

发布于 2015-02-18 00:16:13

我认为您需要根据http://xmpp.org/extensions/xep-0333.html使用显示的聊天标记

票数 2
EN

Stack Overflow用户

发布于 2016-02-17 06:51:38

如果你想获得已读回执,那么不是发送自动消息传递回执,而是在用户阅读该消息时发送它。每条消息都有其对应的message_id。使用该message_id发送已读取的特定邮件的送达回执。在建立连接时添加以下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//message delivery
    XMPPMessageDeliveryReceipts* xmppMessageDeliveryRecipts = [[XMPPMessageDeliveryReceipts alloc] initWithDispatchQueue:dispatch_get_main_queue()];
//don't write this line as it will send auto receipts whenever message will be delivered
    //xmppMessageDeliveryRecipts.autoSendMessageDeliveryReceipts = YES;
    xmppMessageDeliveryRecipts.autoSendMessageDeliveryRequests = YES;
    [xmppMessageDeliveryRecipts activate:self.xmppStream];

我通过在消息实体中添加'chatStatus‘属性解决了这个问题。对于发送者,我将chatStatus的值保留为已发送、未发送或已接收(由另一方接收或未接收)。对于接收方,我将值保持为已读或未读(我是否已读消息,以便对于未读消息,我可以发送已读回执)。

单击发送按钮时:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//Save to your Message Entity 

NSMutableDictionary *m = [[NSMutableDictionary alloc] init];
[m setObject: message_body forKey:@"message_body"];
[m setObject:messageID forKey:@"message_id"];
[m setObject:@"yes" forKey:@"isOutgoing"];
[m setObject:dateString forKey:@"date"];
[m setObject:timeString forKey:@"time"];
[m setObject:[NSDate date] forKey:@"timeStamp"];
[m setObject:yourId forKey:@"from"];
[m setObject:toId forKey:@"to"];

if (!Is_InternetAvailable]) {
 [m setObject:unsent forKey:@"chatStatus"];
}
else{
 [m setObject:sent forKey:@"chatStatus"];
}
[[CoreDataMethods sharedCoreDataMethods] saveUserMessage:m];
}

在cellForRowAtIndexPath中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ([message isoutGoing]) {//If I have sent the message

        // Mine bubble
        if ([[messageDict valueForKey:@"chatStatus"] isEqualToString:unsent]) {
            //set unsent image
        }
        else if ([[messageDict valueForKey:@"chatStatus"] isEqualToString:sent]){
            //set sent image
        }
        else if ([[messageDict valueForKey:@"chatStatus"] isEqualToString:received]){
          //set Received Image
        }
    }
    else{
        // Other Bubble , Notify them that you have read the message if it is unread/new message

        if ([[messageDict valueForKey:@"chatStatus"] isEqualToString:unread]) {

            //send read receipt
                NSXMLElement *receivedelement = [NSXMLElement elementWithName:@"received" xmlns:@"urn:xmpp:receipts"];

                NSXMLElement *message = [NSXMLElement elementWithName:@"message" xmlns:@"jabber:client"];
                [message addAttributeWithName:@"to" stringValue:toId];
                [message addAttributeWithName:@"from" stringValue:fromID];
                [receivedelement addAttributeWithName:@"id" stringValue:[messageDict valueForKey:@"message_id"]];
                [message addChild:receivedelement];

                //XMPPMessage *generatedReceiptResponse = [[messageDict valueForKey:@"xmppMessage"] generateReceiptResponse];
                [[[kAppDelegate xmppHandler] xmppStream] sendElement:message];

                // update message entity
                [self updateChatStatus:read withMessageID:[messageDict valueForKey:@"message_id"]];
        }
    }

最后,当您在didReceiveMessage中收到交货收据时,将chatStatus更新为received

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message{

if ([message hasReceiptResponse]) {//message read
//Update database message entity
 [self updateChatStatus:@"received" withMessageID:[message receiptResponseID]];
}
}

您可以根据需要设置chatStatus的值。对于未发送的消息,我在didSendMessage委托中将其设置为已发送。

注意:在我的应用程序中,我只能显示已读、已发送和未设置状态,而不是已发送状态。如果您还想显示发送状态,那么不要评论autoSendMessageDeliveryReceipts,只要消息被读取,就将IQ节发送给发件人,而不是发送回执,并相应地更改chatStatus。

这只是一个基本的想法,你可以根据你的需要来使用它。

希望它能有所帮助!!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7402027

复制
相关文章
Redis实现信息已读未读状态提示
假如现在有2个模块需要提示消息:只要存在用户在上个时间点之后没有看过的信息就提示用户有新的信息
MonroeCode
2018/01/10
2.5K0
Redis实现信息已读未读状态提示
前提: 假如现在有2个模块需要提示消息:只要存在用户在上个时间点之后没有看过的信息就提示用户有新的信息 思路如下: 使用hash存储用户上次看过的时间,使用sortedset存储每个模块的每个信息产生的时间 上代码: Map<String, String> dataMap = new HashMap<>(); Jedis jedis=null; String uid="1";//用户id //分类数组 String []cagoryArray={"c1","c2"}; try {     //连接池获取连
MonroeCode
2018/02/09
3.2K0
面试题:群聊消息的已读未读设计
对于每一个messageid,存当前readids + unreadids,当群成员A已读某一条消息时,把A userid从unreadids移除写到readids上就好了,客户端更新到messageid对应的详情列表,就可以展示m人已读,n人未读
Java旅途
2022/03/04
2K0
面试题:群聊消息的已读未读设计
钉钉消息已读、未读咋实现的嘞?
一款app,消息页面有:钱包通知、最近访客等各种通知类别,每个类别可能有新的通知消息,实现已读、未读功能,包括多少个未读,这个是怎么实现的呢?比如用户A访问了用户B的主页,难道用rabitmq给B发通知消息吗?量大了成本受得了吗?有没有成本低的方案呢
JavaEdge
2023/09/01
5360
钉钉消息已读、未读咋实现的嘞?
群聊消息“已读”/“未读” 功能解决方案!
一朋友和我讨论他前段时间面试某大公司的一题目: 企业IM比如企业微信、钉钉里面的群消息的有个已读未读的功能,发送者刚发出消息时,当前群里其他群成员都是未读状态,陆陆续续有人看了这个消息,这时候消息的详情变成x人已读,y人未读,如下图所示,有具体的已读未读列表(万恶的功能,看到同事or老板的消息不能假装没看到了),每条消息对应一个唯一的messageid(uint64_t),每个用户对应一个唯一的userid(uint64_t),应该如何保存这个消息对应的已读未读详情呢? 我第一时间给出一个很简单粗暴的方案
java思维导图
2022/04/25
3.2K0
群聊消息“已读”/“未读” 功能解决方案!
面试官:群聊消息的已读未读功能,你来设计一个?
作者 | 小猿学习笔记 来源 | https://www.toutiao.com/i6686735232772604429 一朋友和我讨论他前段时间面试某大公司的一题目 : 企业IM比如企业微信、钉钉里面的群消息的有个已读未读的功能,发送者刚发出消息时,当前群里其他群成员都是未读状态,陆陆续续有人看了这个消息,这时候消息的详情变成x人已读,y人未读,如下图所示,有具体的已读未读列表(万恶的功能,看到同事or老板的消息不能假装没看到了),每条消息对应一个唯一的messageid(uint64_t),每个用户
程序猿DD
2023/04/04
1.6K1
面试官:群聊消息的已读未读功能,你来设计一个?
IM群聊消息的已读未读功能在存储空间方面的实现思路探讨
以阿里的钉钉为例,钉钉的产品定位是用于商务交流,其“强制已读回执”功能,让职场人无法再“假装不在线”、“假装没收到”。更有甚者,钉钉的群聊“强制已读回执”功能,甚至能够知道谁读了消息,谁没有读消息(老板的福音啊)。
JackJiang
2020/07/02
5.9K2
Node + WebSocket + Vue 一对一、一对多聊天室消息已读未读 – 第四章
由UI界面的代码可以看出,我们调用了一个getMsgNum方法来展示未读消息数量。所以我们客户端只需要在原来的基础上,添加一个获取未读消息数量的方法即可。
Javanx
2019/09/04
1.8K0
Node + WebSocket + Vue 一对一、一对多聊天室消息已读未读 – 第四章
飞书开放平台-查询已读消息示例
本文我们基于飞书开放平台提供的服务端SDK,展示下如何查询一个消息有哪些人已读了。
加多
2023/01/15
9760
Google Gmail邮箱一次性标记所有未读邮件为已读
和许多 Gmail 用户一样,您的收件箱中也可能塞满了数百甚至数千封未读电子邮件,有时很难知道您何时收到新邮件,
晓得博客
2021/08/05
4.7K0
Android 在应用图标上设置未读消息数量
1.在使用之前首先 初始化 ,三个方法的参数分别是 应用包名/启动页的Activity及Context,四个参数的构造方法第三个是notification
黄林晴
2019/07/02
7.3K3
WEBIM未读计数不对?
ALL ON ONE 的原则,一开始登录的第一条最近联系人的会话是不显示未读计数的
hhualiu
2019/03/22
1.5K0
WEBIM未读计数不对?
IM群聊消息的已读回执功能该怎么实现?
我们平时在使用即时通讯应用时候,每当发出一条聊天消息,都希望对方尽快看到,并尽快回复,但对方到底有没有真的看到?我却并不知道。
JackJiang
2018/08/29
5K0
Python小程序,你有TA的一条未读消息
Python作为一个功能强大的编程语言,能用到的场景十分之多。这个系列旨在抓住奇思妙想,和严谨的代码结合,碰撞出火花。
HuangWeiAI
2019/08/06
1.2K0
Python小程序,你有TA的一条未读消息
史上最详细仿QQ未读消息拖拽粘性效果的实现
好久没写文章了,前段时间由于项目代码重构忙了一段时间,现在终于有点时间了就为大家带来一篇关于动画学习的自定义View:类似QQ消息拖拽的效果。
Android技术干货分享
2019/08/21
8350
史上最详细仿QQ未读消息拖拽粘性效果的实现
消息未读之点不完的小红点(Node+Websocket)
这个项目本来是我学生时代为了找工作的一个练手项目,但是没想到受到了很多的关注,star也快要破K了,这也激励着我不断去完善他,一方面是得对得起关注学习的人,另一方面也是想让自己能过通过慢慢完善一个项目来让自己提高。
秋风的笔记
2020/10/27
2.3K0
消息未读之点不完的小红点(Node+Websocket)
别人读没读你的消息,你如何知道?
如果使用过钉钉,会发现你发出一条消息,消息下方会显示有几人未读(如下图),而且这个数字数字随着群里成员阅读消息会不断变化(减少),点击能够查看具体哪些人读了消息,哪些人未读消息。
普通程序员
2019/10/23
1.9K0
别人读没读你的消息,你如何知道?
未读消息(小红点),前端与 RabbitMQ实时消息推送实践,贼简单~
前几天粉丝群里有个小伙伴问过:web 页面的未读消息(小红点)怎么实现比较简单,刚好本周手头有类似的开发任务,索性就整理出来供小伙伴们参考,没准哪天就能用得上呢。
程序员小富
2020/09/08
3K0
未读消息(小红点),前端与 RabbitMQ实时消息推送实践,贼简单~
未读消息(小红点),前端 与 RabbitMQ 实时消息推送实践,贼简单~
前几天粉丝群里有个小伙伴问过:web 页面的未读消息(小红点)怎么实现比较简单,刚好本周手头有类似的开发任务,索性就整理出来供小伙伴们参考,没准哪天就能用得上呢。
程序员小富
2020/09/10
2.1K0
点击加载更多

相似问题

如何正确处理聊天消息应用的“已读”-“未读”状态?

22

react聊天应用程序中的已读和未读消息状态

182

php mysql的已读或未读消息状态

11

如何区分已读消息和未读消息

22

消息已读或未读iphone

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文