关于前端:融云-Web-SDK-删除历史消息

3次阅读

共计 2090 个字符,预计需要花费 6 分钟才能阅读完成。

融云 Web SDK 删除历史音讯

前提: 已通过融云 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('革除历史音讯胜利');
});

综上, 本公司要求删除会话所有音讯, 所以按工夫戳删除更合乎本公司产品逻辑

<font color=”red”> 此处遇到两个问题:</font>

<font color=”red”>1、依照工夫戳删除会话的历史音讯后. 刷新会话列表, 发现会话列表中仍然蕴含刚刚清空音讯的会话 </font>

<font color=”red”>2、删除时传入了以后工夫, 后果却返回了 33007 (解释为未开明历史音讯服务, 但开发者后盾却早已开明)</font>

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

删除会话列表

针对问题: 依照工夫戳删除会话的历史音讯后. 刷新会话列表, 发现会话列表中仍然蕴含刚刚清空音讯的会话

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

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

删除会话文档: 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('革除历史音讯胜利');
});
正文完
 0