写点什么

融云 Web SDK 删除历史消息

发布于: 2021 年 03 月 16 日

前提: 已通过融云 SDK 实现单群聊聊天功能


需求: 在现有基础上, 完成删除历史消息的功能


先按照需求梳理需要完成的步骤:


1、根据融云文档删除历史消息


2、调用删除历史消息接口成功后. 界面同样做删除/跳转的渲染


3、调用获取会话列表界面


4、根据最新会话列表数据重新渲染会话列表


根据融云文档, 可知会话列表和历史消息的关系如下:


https://docs.rongcloud.cn/v4/views/im/ui/faq/glossary.html#conversation-history-msg


删除历史消息


根据融云文档, 发现融云包含两种删除消息方法, 分别为: 按消息 Id 删除按时间戳删除


按消息 Id 删除:


根据文档可知, 按消息 Id 删除其实就是传入单个 或 多个消息 messageUId, 删除传入的消息


适用场景: 1、右键删除单个消息 2、批量删除会话内消息


var conversation = im.Conversation.get({
复制代码


  targetId: '接收方的 userId',
复制代码


  type: RongIMLib.CONVERSATION_TYPE.PRIVATE
复制代码


});
复制代码


conversation.deleteMessages([
复制代码


  { messageUId: '2jJ9-KU1j-OLJG-29KL', sentTime: 1580869079801, messageDirection: 1 },
复制代码


  { messageUId: '8UJ9-JU9j-WSJG-92K0', sentTime: 1580869078886, messageDirection: 1 }
复制代码


]).then(function(){
复制代码


  console.log('删除历史消息成功');
复制代码


});
复制代码

按时间戳删除:


按时间戳删除即为传入时间戳, 将会删除此时间之前的所有消息


适用场景: 1、清空某会话所有消息 2、清除某会话某时间之前所有消息


var conversation = im.Conversation.get({
复制代码


  targetId: '接收方的 userId',
复制代码


  type: RongIMLib.CONVERSATION_TYPE.PRIVATE
复制代码


});
复制代码


conversation.clearMessages({
复制代码


  timestrap: +new Date()
复制代码


}).then(function(){
复制代码


  console.log('清除历史消息成功');
复制代码


});
复制代码

综上, 本公司要求删除会话所有消息, 所以按时间戳删除更符合本公司产品逻辑


此处遇到两个问题:


1、按照时间戳删除会话的历史消息后. 刷新会话列表, 发现会话列表中依然包含刚刚清空消息的会话


2、删除时传入了当前时间, 结果却返回了 33007 (解释为未开通历史消息服务, 但开发者后台却早已开通)


于是到融云官网提出工单, 得到了这两个问题的解决方案. 以下依次说明


删除会话列表


针对问题: 按照时间戳删除会话的历史消息后. 刷新会话列表, 发现会话列表中依然包含刚刚清空消息的会话


工单解释: 清空历史消息, 并不会删除会话. 因为某些客户是需要清空消息但保留会话的. 如果需要清空后同时删除会话, 需要再调用删除会话接口


于是根据文档调用删除会话, 再次重新获取会话列表数据, 问题已经解决了


删除会话文档: https://docs.rongcloud.cn/v4/views/im/noui/guide/private/conversation/clear/web.html


// conversation 会话实例
复制代码


var conversation = im.Conversation.get({
复制代码


  targetId: '接收方的 userId',
复制代码


  type: RongIMLib.CONVERSATION_TYPE.PRIVATE
复制代码


});
复制代码


conversation.destory().then(function(){
复制代码


  console.log('删除会话成功');
复制代码


});
复制代码

删除历史消息时间参数


针对问题: 删除时传入了当前时间, 结果却返回了 33007 (解释为未开通历史消息服务, 但开发者后台却早已开通)


工单回复: 因传入了比融云服务器时间还要大的时间, 所以服务返回了此错误码. 如果要保证删除成功, 建议传入会话最后一条消息的 sentTime (发送时间)


这次解释比较牵强, 每个人本地时间都是不同的, 此问题应该融云服务端去解决才合理


但是为了解决项目需求, 还是采用融云提供的方法解决了此问题


var conversation = im.Conversation.get({
复制代码


  targetId: '接收方的 userId',
复制代码


  type: RongIMLib.CONVERSATION_TYPE.PRIVATE
复制代码


});
复制代码


var time = latestMessage.sentTime; // 此处时间戳传入当前会话的最后一条消息的 发送时间
复制代码


conversation.clearMessages({
复制代码


  timestrap: time
复制代码


}).then(function(){
复制代码


  console.log('清除历史消息成功');
复制代码


});
复制代码


用户头像

还未添加个人签名 2021.01.26 加入

还未添加个人简介

评论

发布
暂无评论
融云 Web SDK 删除历史消息