flutter 即时通讯组件 , 调用 conversation.read() 后只更新了最后一条消息的已读状态,这个消息之前消息还是未读状态。另外A给B发送消息,A调用conversation.read() 后依然会将发送给B的消息置为已读状态,不应该是B调用conversation.read() 后才置为已读吗
建议您再阅读一下相关的文档:https://leancloud.cn/docs/realtime-guide-intermediate.html#hash751625554
当最新消息被标记为「已读」后,即意味着这个会话的所有历史消息都为「已读」了。
@pzheng 你好,感谢您的回复,我目前使用flutter开发leancloud的chat功能,您说的这个文档我已经阅读过了,还是无法解决我的问题。这个是leancloud的后台数据记录,发送内容顺序为 62 63 64 65 , 65是发送的最后一条数据,发送者为同一个人。
希望可以为我解答这个问题,谢谢。
你不能根据数据库中消息表中的 readAt 这个字段来判断已读未读。已读未读是与「ClientId」和「对话」的组合唯一对应的,也就是说一个多人参与的对话中,可能 A 将所有的消息都读过了,B 只读到了倒数第三条,C 读到了倒数第 7 条。。。已读的标识主要是用来控制服务端的消息主动下发的。
我通过message的status字段来判断消息的已读未读的,但是status也是有问题的
72 是最后一条消息,调用 read() 方法后,72对应的status是已读,71 和 70 对应的是未读,这个是不应该的,我不知道是怎么回事,已经试过了很多次了,也看了很多次文档依然不知道原因。
建议通过对比「会话的已读消息的时间戳」和「历史消息的时间戳」来判断消息是否已读。
@pzheng @jfeng 你好,我想咨询下,为啥我调用 conversation.read() 方法后会更新我发送的最后一条消息的readAt,不是应该更新对方最新一条消息的readAt吗 我用的flutter组件
我应该根据什么来判断已读和未读
您好,感觉您对 conversation.read() 有误解。conversation.read() 用于清除对话未读消息数,可以参考这部分文档: https://leancloud.cn/docs/realtime-guide-intermediate.html#hash1862532095
比如登录用户是 Tom。conversation.read() 的用处是 Tom 把当前会话标记为已读,未读消息数清零。Tom 只要调用了 conversation.read(),会话内全部消息对 Tom 都是已读,因为未读消息数量已经是0了,您可以在 conversation.read() 前后打印 conversation.unreadMessageCount 来检测未读消息数量。
一般来说开发者至少需要在下面两种情况下将对话标记为已读:
以上是 Tom 标记自己收到的消息是否已读(未读消息数量处理)。
然后想知道 Tom 发的消息其他用户是否已读,需要结合「已读回执」这个文档了: https://leancloud.cn/docs/realtime-guide-intermediate.html#hash751625554。
你说的我明白了,我现在还有一个问题,我用微信小程序api查询的conversation的lastReadAt是有值的,我用flutter查询的lastReadAt是空,这个你们有对flutter的sdk做过测试吗,是不是存在这个问题。 查询条件相同
这个问题我们调查下。
好的谢谢,希望尽快看下,我们项目要上线了
flutter 使用 fetchReceiptTimestamps 方法可以获取会话的 lastReadAt 。
https://pub.dev/documentation/leancloud_official_plugin/latest/leancloud_plugin/Conversation/fetchReceiptTimestamps.html
为什么不能像其他的api一样放在会话里面呢,而且需要调用一个单独的方法
由于历史原因,JS 的那种方式是有问题的,不推荐使用。之后我们会优化并修复该问题。
你们的这个插件不支持的这个方法,
请确保所有 SDK 都是最新版。
1.0.0-beta.9 我用的是这个版本,是最新版本
你说的sdk最新就是这个 leancloud_official_plugin吗这个就是最新的
你们flutter的这个已读未读功能有没有测试过,可以实现的吗,如果可以实现有demo吗。