更新时间: 2021-03-08

# 属性描述

消息属性 描述
消息类名 各端消息名
存储属性 存储 / 不存储
离线属性 缓存 / 不缓存
推送属性 是/否
ObjectName 传输层名称,与消息类名一一对应
计数属性 计数 / 不计数
消息尺寸 128 KB
推送内容 详见各消息类送方式
# 存储属性
存储属性 存储分类 支持平台 详细描述
存储 客户端 Android、iOS 发送、接收该消息后,本地数据库存储
Web 端 和 小程序端因本地存储不可靠,不支持客户端消息存储,但可通过历史消息云存储服务获取历史记录
存储 云端 Android、iOS、Web 默认不在云端进行存储,需开通单群聊消息云存储 (opens new window)服务,开通后,可在融云服务端存储 6 个月的历史消息,供客户端按需拉取
不存储 客户端 Android、iOS 发送、接收该消息后,本地数据库不存储
不存储 云端 Android、iOS、Web 无论是否开通历史消息云存储服务,该消息均不存储
# 计数属性

接收收到消息时,会话是否累计未读数。

计数属性 支持平台 详细描述
计数 iOS、Android、Web 会话未读消息数 + 1,该属性只影响会话列表未读数计数,App 应用角标可根据每个会话列表未读数累加获得
不计数 iOS、Android、Web 会话未读消息数不变
# 离线属性

接收人当前不在线时,是否进行离线缓存。

离线属性 详细描述
存储 消息进行离线缓存,默认 7 天。接收人在 7 天内上线,均可接收到该消息。超过 7 天后,消息被离线缓存淘汰。如有需要,可通过云端存储拉取到该消息
不存储 消息不进行离线缓存,所以只有接收人在线时,才可收到该消息。该消息不进行历史消息云存储、不进入云端存储( Log 日志 )、不进行消息同步( 消息路由 )
# 推送属性

接收人是否接收推送,当离线属性为 存储 时,该属性生效。离线属性为 不存储 时属性无效。

由于 Web、小程序、PC 端没有推送平台,无法收到推送提醒。

推送属性 平台 推送方式 详细描述
​推送 iOS、Android APNs、华为、小米、魅族、OPPO、vivo、FCM、融云 当有离线缓存消息时,进行远程推送提醒,内容为该推送提醒显示的内容
​不推送 iOS、Android -- 当有离线缓存消息时,不进行远程推送提醒

# 发送普通消息

# 发送消息

接口原型:

- (RCMessage *)sendMessage:(RCConversationType)conversationType
                  targetId:(NSString *)targetId
                   content:(RCMessageContent *)content
               pushContent:(NSString *)pushContent
                  pushData:(NSString *)pushData
                    option:(RCSendMessageOption *)option
                   success:(void (^)(long messageId))successBlock
                     error:(void (^)(RCErrorCode nErrorCode, long messageId))errorBlock;
已复制
1
2
3
4
5
6
7
8

参数说明

输入参数说明

参数 类型 必填 说明
conversationType RCConversationType 会话类型,聊天室传入 ConversationType_CHATROOM
targetId NSString 聊天室 ID
content RCMessageContent 消息的内容
pushContent NSString 接收方离线时需要显示的远程推送内容
pushData NSString 接收方离线时需要在远程推送中携带的非显示数据
option RCSendMessageOption 消息的相关配置
success Block - 消息发送成功的回调
error Block - 消息发送失败的回调

返回参数说明

返回值 返回类型 说明
textMsg RCMessage (opens new window) 发送的消息实体

回调参数说明

success 说明:

回调参数 回调类型 说明
messageId long 消息的ID

error 说明:

回调参数 回调类型 说明
nErrorCode RCErrorCode 发送失败的错误码
messageId long 消息的ID
# 文本消息

消息说明

消息类名 父类名称 ObjectName 存储属性 计数属性 离线属性 推送属性 推送内容
RCTextMessage RCMessageContent RC:TxtMsg 存储 计数 存储 推送 消息内容

属性说明

构建参数说明:

参数 类型 说明
content NSString 文本消息的内容

代码示例

RCTextMessage *textMessage = [RCTextMessage messageWithContent:@"消息内容"];

[[RCIMClient sharedRCIMClient] sendMessage:ConversationType_CHATROOM targetId:@"聊天室 ID" content:textMessage pushContent:nil pushData:nil option:nil success:^(long messageId) {
    
} error:^(RCErrorCode nErrorCode, long messageId) {
    
}];
已复制
1
2
3
4
5
6
7
# Emoji 消息

iOS 端发送 Emoji 消息,开发者直接使用 文本消息 发送即可。如有特殊需求需要开发者自己 自定义消息 实现。

# 位置消息

消息说明

消息类名 父类名称 ObjectName 存储属性 计数属性 离线属性 推送属性 推送内容
RCLocationMessage RCMessageContent RC:LBSMsg 存储 计数 存储 推送 [位置]

属性说明

构建参数说明:

参数 类型 说明
image UIImage 地理位置的缩略图
location CLLocationCoordinate2D 地理位置的二维坐标
locationName NSString 地理位置的名称

代码示例

RCLocationMessage *locationMessage = [RCLocationMessage messageWithLocationImage:image location:location locationName:locationName];

[[RCIMClient sharedRCIMClient] sendMessage:ConversationType_CHATROOM targetId:@"聊天室 ID" content:locationMessage pushContent:nil pushData:nil option:nil success:^(long messageId) {
    
} error:^(RCErrorCode nErrorCode, long messageId) {
    
}];
已复制
1
2
3
4
5
6
7

# 发送媒体消息

# 发送媒体消息

接口原型:

- (RCMessage *)sendMediaMessage:(RCConversationType)conversationType
                       targetId:(NSString *)targetId
                        content:(RCMessageContent *)content
                    pushContent:(NSString *)pushContent
                       pushData:(NSString *)pushData
                       progress:(void (^)(int progress, long messageId))progressBlock
                        success:(void (^)(long messageId))successBlock
                          error:(void (^)(RCErrorCode errorCode, long messageId))errorBlock
                         cancel:(void (^)(long messageId))cancelBlock;
已复制
1
2
3
4
5
6
7
8
9

输入参数说明

参数 类型 必填 说明
conversationType RCConversationType 会话类型,聊天室传入 ConversationType_CHATROOM
targetId NSString 聊天室 ID
content RCMessageContent 消息的内容要显示的远程推送内容
pushData NSString 接收方离线时需要在远程推送中携带的非显示数据
progress Block - 消息发送进度更新的回调
success Block - 消息发送成功的回调
error Block - 消息发送失败的回调
cancel Block - 用户取消了消息发送的回调

返回参数说明

返回值 返回类型 说明
imgMsg RCMessage (opens new window) 发送的消息实体

回调参数说明

progress 说明:

回调参数 回调类型 说明
progress int 当前的发送进度, 0 <= progress <= 100
messageId long 消息的ID

success 说明:

回调参数 回调类型 说明
messageId long 消息的ID

error 说明:

回调参数 回调类型 说明
nErrorCode RCErrorCode 发送失败的错误码
messageId long 消息的ID

cancel 说明:

回调参数 回调类型 说明
messageId long 消息的ID
# 图片消息

消息说明

消息类名 父类名称 ObjectName 存储属性 计数属性 离线属性 推送属性 推送内容
RCImageMessage (opens new window) RCMediaMessageContent RC:ImgMsg 存储 计数 存储 推送 [图片]

属性说明

构建参数说明:

参数 类型 说明
imageData NSData 图片的原始数据

代码示例

RCImageMessage *message = [RCImageMessage messageWithImageData:data];

[[RCIMClient sharedRCIMClient] sendMediaMessage:ConversationType_CHATROOM targetId:@"聊天室 ID" content:message pushContent:nil pushData:nil progress:^(int progress, long messageId) {
    
} success:^(long messageId) {
    
} error:^(RCErrorCode errorCode, long messageId) {
    
} cancel:^(long messageId) {
    
}];
已复制
1
2
3
4
5
6
7
8
9
10
11
# 语音消息

SDK 从 2.9.19 版本开始支持发送 RCHQVoiceMessage

消息类名 父类名称 ObjectName 存储属性 计数属性 离线属性 推送属性 推送内容
RCHQVoiceMessage RCMediaMessageContent RC:HQVCMsg 存储 计数 存储 推送 [语音]

构建参数说明:

参数 类型 说明
localPath NSString 语音的本地路径
duration long 语音消息的时长,单位为秒

示例代码

RCHQVoiceMessage *hqVoiceMsg = [RCHQVoiceMessage messageWithPath:path duration:duration];

[[RCIMClient sharedRCIMClient] sendMediaMessage:ConversationType_CHATROOM targetId:@"聊天室 ID" content:hqVoiceMsg pushContent:nil pushData:nil progress:^(int progress, long messageId) {
    
} success:^(long messageId) {
    
} error:^(RCErrorCode errorCode, long messageId) {
    
} cancel:^(long messageId) {
    
}];
已复制
1
2
3
4
5
6
7
8
9
10
11
# 文件消息
消息类名 父类名称 ObjectName 存储属性 计数属性 离线属性 推送属性 推送内容
RCFileMessage RCMediaMessageContent RC:FileMsg 存储 计数 存储 推送 [文件] + 文件名,如:[文件] 123.txt

构建参数说明:

参数 类型 说明
localPath NSString 文件的本地路径

代码示例

RCFileMessage *fileMessage = [RCFileMessage messageWithFile:path]

[[RCIMClient sharedRCIMClient] sendMediaMessage:ConversationType_CHATROOM targetId:@"聊天室 ID" content:fileMessage pushContent:nil pushData:nil progress:^(int progress, long messageId) {
    
} success:^(long messageId) {
    
} error:^(RCErrorCode errorCode, long messageId) {
    
} cancel:^(long messageId) {
    
}];
已复制
1
2
3
4
5
6
7
8
9
10
11
# 小视频消息

融云提供了小视频功能,开发者可通过下面方法发送小视频消息,小视频消息默认存储 6 个月,小视频文件格式为 MP4。

开通方式:

使用此功能需要开发者在 开发者后台 (opens new window) 选择对应项目开通。

消息说明

消息类名 父类名称 ObjectName 存储属性 计数属性 离线属性 推送属性 推送内容
RCSightMessage RCMediaMessageContent RC:SightMsg 存储 计数 存储 推送 [小视频]

属性说明

构建参数说明:

参数 类型 说明
path NSData 视频文件本地路径
image UIImage 视频首帧缩略图
duration NSUInteger 视频时长, 单位为秒

代码示例

RCSightMessage *sightMessage = [RCSightMessage messageWithLocalPath:url thumbnail:image duration:duration];

[[RCIMClient sharedRCIMClient] sendMediaMessage:ConversationType_CHATROOM targetId:@"聊天室 ID" content:sightMessage pushContent:nil pushData:nil progress:^(int progress, long messageId) {
    
} success:^(long messageId) {
    
} error:^(RCErrorCode errorCode, long messageId) {
    
} cancel:^(long messageId) {
    
}];
已复制
1
2
3
4
5
6
7
8
9
10
11
# GIF 消息

从 SDK 2.9.21 版本开始支持发送 GIF 图片消息,默认可选择发送的 GIF 图片大小为 2M。

消息说明

消息类名 父类名称 ObjectName 存储属性 计数属性 离线属性 推送属性 推送内容
RCGIFMessage RCMediaMessageContent RC:GIFMsg 存储 计数 存储 推送 [图片]

属性说明

构建参数说明:

参数 类型 说明
gifImageData NSData GIF 图的数据
width long GIF 图的宽
height long GIF 图的高

代码示例

RCGIFMessage *gifMsg = [RCGIFMessage messageWithGIFImageData:gifImageData
                                                       width:gifImage.size.width
                                                      height:gifImage.size.height];

[[RCIMClient sharedRCIMClient] sendMediaMessage:ConversationType_CHATROOM targetId:@"聊天室 ID" content:gifMsg pushContent:nil pushData:nil progress:^(int progress, long messageId) {
    
} success:^(long messageId) {
    
} error:^(RCErrorCode errorCode, long messageId) {
    
} cancel:^(long messageId) {
    
}];
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13

# 发送自定义消息

除了使用 SDK 内置消息外,开发者可根据自己的业务需求来自定义消息,自定义消息的类型、消息结构需要确保多端一致,否则将出现无法互通的问题。

# 注册消息

注册消息共分为两步。

  1. 定义消息类型
  2. 注册消息类型

1.定义消息类型

开发者可根据业务需求来选择继承消息基类 RCMessageContent 或者 RCMediaMessageContent,两者之前的区别可参考下图:

定义消息类型需要该类遵守下面三个协议

一. 编解码协议

协议原型:

@protocol RCMessageCoding <NSObject>
已复制
1

RCMessageCoding 主要有三个功能:

  1. 提供消息唯一标识符
  2. 消息发送时将消息中的所有信息编码为 JSON 数据传输
  3. 消息接收时将 JSON 数据解码还原为消息对象。

该协议为必须遵守的协议,遵守该协议需实现下面三个方法。

序列化:

消息内容通过此方法,将消息中的所有数据,编码成为 JSON 数据,返回的 JSON 数据将用于网络传输。

- (NSData *)encode;
已复制
1

反序列化:

网络传输的 JSON 数据,会通过此方法解码,获取消息内容中的所有数据,生成有效的消息内容。

- (void)decodeWithData:(NSData *)data;
已复制
1

定义消息类型名:

+ (NSString *)getObjectName;
已复制
1
  1. 定义的消息类型名(objectname),需要在各个平台上保持一致,否则消息无法互通
  2. 请勿使用 RC: 开头的类型名,以免和SDK默认的消息名称冲突
  3. 所有自定义消息必须实现此协议,否则将无法正常传输和使用。

二. 存储协议

协议原型:

@protocol RCMessagePersistentCompatible <NSObject>
已复制
1

RCMessageCoding 主要有两个功能:

  1. 指明此消息类型在本地和服务端是否存储
  2. 指明此消息类是否计入未读消息数

该协议为必须遵守的协议,遵守该协议需实现下面方法:

消息的存储计数策略:

+ (RCMessagePersistent)persistentFlag;
已复制
1

RCMessagePersistent 说明:

类型 存储类型 计数类型 展示方式
MessagePersistent_NONE 不存储 不计数 不显示
MessagePersistent_ISCOUNTED 存储 计数 显示
MessagePersistent_ISPERSISTED 存储 不计数 显示
MessagePersistent_STATUS 不存储 不计数 不显示

MessagePersistent_NONE:在融云服务端,不存离线消息但是存储历史消息

MessagePersistent_STATUS:在融云服务端,离线消息历史记录都不存!

三. 内容摘要协议

协议原型:

@protocol RCMessageContentView
已复制
1

RCMessageContentView 主要有一个功能:

  1. 设置此消息在会话列表和本地通知中显示消息的摘要

该协议为非必须遵守的协议,遵守该协议需实现下面方法。

设置消息摘要:

- (NSString *)conversationDigest;
已复制
1

2.注册消息类型

开发者在进行完自定义消息类后,需要在 SDK 初始化之后,注册此自定义消息类。

- (void)registerMessageType:(Class)messageClass;
已复制
1

只有注册了该消息类型之后,SDK 才能正确识别和编码、解码该类型的消息。

# 发送消息

继承 RCMessageContent,请使用 发送普通消息 的接口进行发送。

继承 RCMediaMessageContent,请使用 发送媒体消息 的接口进行发送。

文档是否解决您的问题 ?

如果遇到产品相关问题,您可 提交工单 寻求帮助