消息管理
消息概述
环信即时通讯 IM 支持多种消息类型,开发者可以方便地对本地会话、消息进行管理,可以从服务端获取历史会话和消息,提供送达回执和已读回执能力。
消息:环信即时通讯 IM 中消息(Message)表示发送方给接收方发送的内容,消息包括多种类型,如:文本、图片、语音等。
会话:环信即时通讯 IM 中会话(Conversation)分为 3 种,单聊、群聊、聊天室会话。单聊是指 2 个用户建立的会话,双方可以在会话中收发消息。群聊会话是由群成员发送消息所组成的,群成员可以在群会话中收发消息。聊天室会话与群聊会话类似。
消息类型
类型 | 描述 |
---|---|
文本消息 | 文本消息的内容是文本,包含超链接和表情符号等。表情消息基于文本消息实现。 文本消息大小限制为 3 KB。 |
图片消息 | 图片消息是附件消息,需要先将图片上传至消息服务器。接收方收到图片时自动下载图片缩略图。 图片不能超过 10 MB,图片消息大小限制为 3 KB。 |
语音消息 | 语音消息是附件消息,需要先将语音上传至消息服务器。接收方收到语音时自动下载语音。 音频文件不能超过 10 MB,音频消息大小限制为 3 KB。 |
视频消息 | 视频消息是附件消息,需要先将视频上传至消息服务器。接收方收到视频时自动下载视频缩略图,点击下载视频消息。对于 Web 端,视频消息没有缩略图。 视频文件不能超过 10 MB,视频消息大小限制为 3 KB。 |
文件消息 | 文件消息是附件消息,需要先将文件上传至消息服务器。 附件大小不能超过 10 MB,文件消息大小限制为 3 KB。 |
位置消息 | 位置消息需要第三方的地图服务提供经纬度信息。接收方接收到位置消息,通过经纬度信息可以在第三方的地图服务中显示位置。 |
透传消息 | 透传消息可视为命令消息。通过发送这条命令给对方,通知对方要执行的操作,对方收到消息后系统可以自定义处理。透传消息不会在 UI 上展示。 消息大小限制为 3 KB。 你可以使用透传消息更新头像和昵称以及进行状态同步等。 透传消息不会存入本地数据库。 |
消息自定义扩展 | 当基础的消息类型不满足需求时,可以使用消息自定义扩展增强基础消息类型。 使用扩展后,消息大小不能超过原类型消息的大小。 典型的用例是发送引用较早文本或图像消息的消息。 |
自定义消息 | 开发者自定义的消息类型。自定义消息支持设置类型名称,开发者可以添加多种自定义消息。 自定义消息大小限制为 3 KB。 自定义消息的使用场景:红包消息、模板消息等。 |
消息功能
管理本地消息数据
使用环信即时通讯 IM 发送和接收到的消息会存储在本地数据库,消息以会话为单位进行管理。用户可基于会话获取、删除、导入和插入消息。
提示
Web 和小程序端无本地消息存储。
功能 | 描述 |
---|---|
获取本地会话列表 | 获取本地所有的会话。本地存储的消息有已读和未读状态,获取时包含未读消息数。 |
从数据库中读取指定会话的消息 | 从本地数据库获取指定会话的消息,进入会话时,获取会话内容。 |
获取指定会话的未读消息数量 | 从本地数据库获取指定会话的未读消息数,显示指定会话的未读消息数。 |
获取所有会话的未读消息数量 | 从本地数据库获取所有会话的未读消息数,显示整个应用的未读消息数。 |
会话的未读消息数清零 | 查看未读消息后,未读消息数清零。可对指定会话和所有会话进行未读消息数清零。 |
删除会话及历史消息 | 删除本地会话,可选择是否删除会话里的历史消息。 |
根据消息 ID 搜索消息 | 根据消息 ID 搜索指定的消息。 |
获取指定会话中特定类型的消息 | 获取指定会话中特定类型的消息。 |
获取指定会话中一定时间段内的消息 | 获取指定会话中一定时间段内发送和接收的消息。 |
根据关键字搜索会话消息 | 根据关键字对会话里的消息内容进行搜索。 |
导入消息到数据库 | 将外部消息批量导入本地数据库。需构造消息对象。 |
插入消息 | 模拟收到某些消息通知,可以构造一条消息并写入会话。 |
除此之外,对于 Android、iOS 和 Web 平台,用户可以获取本地消息的流量统计信息。
功能 | 描述 |
---|---|
根据消息 ID 获取消息流量统计信息 | 你可以根据消息 ID 获取指定消息的统计信息。该方法返回的消息流量统计信息包括消息 ID、消息的发送方和接收方、消息体类型、会话类型、消息方向、消息流量大小(单位为字节)以及服务器收到该消息的 Unix 时间戳。 |
获取一定时间段内发送和/或接收的消息条数 | 你可以统计一定时间段内发送和/或接收的指定或全部类型的消息。 |
获取一定时间段内发送和/或接收的消息的总流量 | 你可以统计一定时间段内发送和/或接收的指定或全部类型的消息的总流量,流量单位为字节。 |
从服务器获取消息
环信即时通讯 IM 在消息服务器保存历史消息,方便用户在新设备上获取历史消息。
私有部署历史消息存储时间支持自定义,请在部署服务前约定存储时间。
功能 | 描述 | 适用的平台/框架 |
---|---|---|
从服务端分页获取会话列表 | 从服务端分页获取会话列表。 | 所有平台/框架 |
分页获取指定会话的历史消息 | 从服务端分页获取会话的历史消息。 | 所有平台/框架 |
单向删除服务端的历史消息 | 当前用户单向删除服务端的历史消息。消息删除后,当前用户无法从服务端拉取到该消息,其他用户不受影响。 | 所有平台/框架 |
单向删除服务端会话及其历史消息 | 删除服务端会话及其历史消息。会话和消息删除后,当前用户无法从服务器获取该会话和消息,对本地的会话无影响,但会删除本地消息(Web 和小程序端不涉及本地会话和消息),其他用户不受影响。 | 所有平台/框架 |
获取消息的已读回执和送达回执
环信即时通讯 IM 消息投递成功会返回送达回执,而且提供消息已读功能,接收方查看消息后会返回已读回执。
功能 | 描述 |
---|---|
单聊消息送达回执 | 消息下发成功后,返回消息送达回执。 |
单聊消息已读回执 | 接收方查看消息后,返回消息已读回执。 |
单聊会话已读回执 | 接收方查看单聊会话后,返回会话已读回执。 |
群组消息已读回执 | 提供群组消息已读回执能力。 |
消息重发机制
- 对于 Android、iOS 、Windows 端和三个跨平台框架 Unity、React Native 和 Flutter 来说,消息重发机制如下:
客户端调用发送消息的方法后,会等待服务器返回响应,超时时间为 10 秒。若因响应超时导致发送失败,客户端会再次尝试发送消息,即通过长连接重连服务器,然后发送消息。如果再次失败,SDK 认为消息发送失败,返回服务器不可达的错误消息,即错误码 300,Android 为 EMErrorServerNotReachable
,iOS 和 Windows 为 SERVER_NOT_REACHABLE
。
- 对于 Web 来说,消息重发机制如下:
发送消息时如果 WebSocket 已经断开正在进行重连时,重新连接后会重新发送消息;若 WebSocket 断开时发送消息,SDK 会提示网络断开连接导致消息发送失败的错误,即错误码 510 MESSAGE_WEBSOCKET_DISCONNECTED
。