# 实现IM即时消息

本章将介绍如何实现IM即时消息。

# IM即时消息介绍

IM即时消息主要涉及以下几个的类:

名称 描述
JCCloudManager (opens new window) 主要用于初始化、管理与cloud相关的所有回调和会话管理
JCCloudDatabase (opens new window) 会话信息的数据库操作(如打开/关闭数据库、获取会话相关的信息、查询、搜索、保存会话信息以及会话的管理等)
JCMessageWrapper (opens new window) 主要用于消息管理,包括发送消息,重发、转发、回复、消息已读、撤回、拉取消息

# 发送文本消息

调用方法:

JCMessageWrapper.sendText(
          type, serverUid, contentType,
          content, extraParams, atAll, atServerUidList);

输入参数:

参数 类型 必填 说明
type @JCMessageChannel.Type int,详细内容参阅JCMessageChannel 消息所属会话类型
serverUid String 会话服务器 id,一对一必须先获得对方 userId 的 serverUid
contentType @JCMessageChannel.Type String 消息类型
content String 消息内容
extraParams MapString, Object 额外信息
atAll boolean 是否@全体成员,针对群消息,true表示@全体,false表示不@全体
atServerUidList String @成员的serverUid列表 针对群消息

其中,JCMessageChannelType(消息类型)有:

/// 一对一消息
JCMessageChannelType1To1,
/// 群组消息
JCMessageChannelTypeGroup,

# 发送文件

文件消息包括文件、图片、视频、语音消息。均通过 sendFile 方法发送,并通过 contentType 参数进行不同消息类型的标识。具体如下

调用方法

JCMessageWrapper.sendFile(
              type, serverUid, contentType,
              filePath, thumbPath, size, duration,
              extraParams, expiredSeconds, atAll, atServerUidList);

输入参数

参数 类型 必填 说明
type @JCMessageChannel.Type int,详细内容参阅JCMessageChannel 消息所属会话类型
serverUid String 会话服务器 id,一对一必须先获得对方 userId 的 serverUid
contentType @JCMessageChannel.Type String,详细内容参阅JCMessageChannel 消息类型
filePath String 文件本地路径
thumbPath String 缩略图本地路径
size int 文件大小
duration int 时长
extraParams MapString, Object 额外信息
expiredSeconds MapString, Object 过期秒数,-1表示永久
atAll boolean 是否@全体成员,针对群消息,true表示@全体,false表示不@全体
atServerUidList String @成员的serverUid列表 针对群消息

# 删除消息

删除消息分为删除单条消息、删除多条消息,以及撤回消息。

# 删除单条消息

调用方法

JCCloudDatabase.getInstance().deleteMessage(messageId);

输入参数

参数 类型 必填 说明
messageId long 数据库消息 id

# 删除多条消息

调用方法

JCCloudDatabase.getInstance().deleteMessages(List`Long` messageIdList);

输入参数

参数 类型 必填 说明
messageIdList ListLong 本地消息id列表

# 删除会话所有消息

调用方法

JCCloudDatabase.getInstance().deleteMessagesByConversationId(long conversationId);

输入参数

参数 类型 必填 说明
conversationId long 本地会话id

# 更新消息状态

调用方法

JCCloudDatabase.getInstance().updateMessageState(messageId, state);

输入参数

参数 类型 必填 说明
messageId long 本地消息id
state @JCMessageChannel.ItemState int 消息状态,详细内容参阅JCMessageChannel.ItemState

# 查询单条消息

JCCloudDatabase.getInstance().queryMessages(messageId);

输入参数介绍:

参数 类型 说明
messageId long 消息数据库id

返回值介绍:

返回值类型 说明
JCConversationMessageData 消息对象, 没有则返回 nil

其中,JCConversationMessageData 对象原型请查看 API reference 中的 JCCloudDatabase 类。