融云 Web SDK 删除历史消息_融云如何覆盖聊天记录内容_融云的博客-程序员秘密

技术标签: RTC  场景化 SDK  IM  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('清除历史消息成功');
});

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

此处遇到两个问题:

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('清除历史消息成功');
});
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44764152/article/details/114915720

智能推荐

BZOJ1003: [ZJOI2006]物流运输(洛谷P1772)_forezxl的博客-程序员秘密

最短路 DPBZOJ题目传送门 洛谷题目传送门首先spfa预处理从i'>iii到j'>jjj天用同一路线的最短路,记为w[i][j]'>w[i][j]w[i][j]w[i][j]。 dp[i]'>dp[i]dp[i]dp[i]表示前i'>iii天的最小代价。 那么有转移方程dp[i]=min(dp[i],dp[j]+w[j+1][i]+k) 代码:#include#inclu

OpenCV环境变量配置_opencv环境变量的作用_风吹夏天的博客-程序员秘密

使用C/C++等语言,需要使用第三方程序库,这些函数通常会提供Lib,和Dll,比如说使用OpenCV开发图像处理,视觉软件,除了配置头文件目录(Include),和库文件目录(Lib)。程序运行时候,还需要提供动态链接库,否则,程序提示找不到dll错误。下面以OpenCV的配置说明。

Android.mk prebuild_huangqbio2的博客-程序员秘密

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)#include $(SDK_DIR)/Android.defdefine hisdk_check_file_print$(foreach var,$(1),\  $(shell test ! -f $(LOCAL_PATH)/$(var).so || echo $

VLC-3.0.6添加录像与停止录像的功能_巴特勒20120801的博客-程序员秘密

VLC-3.0.6添加录像与停止录像的功能提示:①前提是你已经在ubuntu中编译完成vlc-3.0.6版本。②vlc本身不带录像接口,需要我们手动添加,实现步骤如下:1.vlc-3.0.6/lib/video.c文件中添加//开始录制函数libvlc_media_player_record_start( libvlc_media_player_t *p_mi, const char *psz_filepath, const char *psz_filename );建议放在libvlc_vi

UVA 10158 - War(并查集)_lab104_yifan的博客-程序员秘密

Problem B: War      A war is being lead between two countries, A and B. As a loyal citizen of C, you decide to help your country’s espionage by attending the peace-talks taking place these day

【教程】使用S3fs让ECS虚拟机直接挂载OBS对象存储桶_s3fs 挂载对象存储非常慢_colorfulyan的博客-程序员秘密

S3fs是一款基于FUSE的文件系统适配器,通过S3fs能够使对象存储直接挂载到ECS虚拟机,如云硬盘一般使用,非常的方便。本教程教你如何在Linux系统上使用S3fs首先需要在操作系统上装好S3fs需要的依赖包。对于Ubuntu 14.04,执行:sudo apt-get install automake autotools-dev fuse g++ git libcurl4-gnutls-dev libfuse-dev libssl-dev libxml2-dev make pkg-config

随便推点

俞敏洪:我让女儿主动学习的秘密_weixin_34010566的博客-程序员秘密

来源于网络 我之所以能够在这谈谈家庭教育的心得,确实是因为我接触的孩子太多了。从我在北大开始教书,一直到后来办新东方,到现在从新东方走出去的700多万学生。我看到过很多幸福的学生,也看到了很多被耽误的学生;看到了很多家长因为孩子的成功感到无比的幸福,也看到了很多家长因为孩子的不成功而痛不欲生;我看到很多贫困家庭最后因为孩子有出息而生活的满心幸福;我也看到很多亿万富翁的家庭,...

移植zlib到hi3516cv300_qiaoliang328的博客-程序员秘密

1. 找源码,在hisdk 里面就有zlib 的源码:zlib-1.2.8.tar.gz2. 解压,然后:cd zlib-1.2.8 3. ./configure --prefix=/work/opensource/zlib/zlib-1.2.8/_install ,然后修改MakefileCROSS=arm-hisiv500-linux-CC=$(CROSS)gccL

laravel的DB类数据库操作_你华还是你华的博客-程序员秘密

本文目录一、DB类操作数据库(重点)1.1、数据表的创建与配置1.2、数据库在laravel框架中的配置1.3、在Test控制器中引入DB门面1.3.1、定义增删改查需要的路由:一、DB类操作数据库(重点)按照MVC的架构,对数据的操作应该放在Model中完成,但如果不使用Model,我们也可以用laravel框架提供的DB类操作数据库,而且,对于某些极其复杂的sql,用Model已经很难完成,需要开发者自己手写sql语句,使用DB类去执行原生sql。laravel中DB类的基本用法DB::table[

黑马程序员-C语言中static、extern、typedef、enum使用的注意事项_extern typedef enum_FlyWithDe的博客-程序员秘密

static:    作用:1)用static修饰的变量、函数只有在定义该函数或变量的文件中可以使用,是一个内部变量              2)static修饰的局部变量只会被定义一次,并且作用域会延长,在整个程序中都有效。                    即程序会公用static修饰的变量extern:    作用:1)用extern修饰的变量或函数在声明后可以

spring的annotation-driven_weixin_34080903的博客-程序员秘密

为什么80%的码农都做不了架构师?>>> ...