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