( 最近更新时间:2020-04-28 19:00:00 )
# 功能描述
消息属性 | 消息描述 | 消息属性 | 消息描述 |
---|---|---|---|
消息类名 | 各端消息名 | 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;
已复制
2
3
4
5
6
7
8
参数说明
输入参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
conversationType | RCConversationType | 是 | 会话类型,群聊传入 ConversationType_GROUP |
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_GROUP targetId:@"群组 ID" content:textMessage pushContent:nil pushData:nil option:nil success:^(long messageId) { } error:^(RCErrorCode nErrorCode, long messageId) { }];
已复制
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_GROUP targetId:@"群组 ID" content:locationMessage pushContent:nil pushData:nil option:nil success:^(long messageId) { } error:^(RCErrorCode nErrorCode, long messageId) { }];
已复制
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;
已复制
2
3
4
5
6
7
8
9
输入参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
conversationType | RCConversationType | 是 | 会话类型,群聊传入 ConversationType_GROUP |
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_GROUP targetId:@"群组 ID" content:message pushContent:nil pushData:nil progress:^(int progress, long messageId) { } success:^(long messageId) { } error:^(RCErrorCode errorCode, long messageId) { } cancel:^(long messageId) { }];
已复制
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_GROUP targetId:@"群组 ID" content:hqVoiceMsg pushContent:nil pushData:nil progress:^(int progress, long messageId) { } success:^(long messageId) { } error:^(RCErrorCode errorCode, long messageId) { } cancel:^(long messageId) { }];
已复制
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_GROUP targetId:@"群组 ID" content:fileMessage pushContent:nil pushData:nil progress:^(int progress, long messageId) { } success:^(long messageId) { } error:^(RCErrorCode errorCode, long messageId) { } cancel:^(long messageId) { }];
已复制
2
3
4
5
6
7
8
9
10
11
# 小视频消息
融云提供了小视频功能,开发者可通过下面方法发送小视频消息,小视频消息默认存储 6 个月。
开通方式:
使用此功能需要开发者在 开发者后台 (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_GROUP targetId:@"群组 ID" content:sightMessage pushContent:nil pushData:nil progress:^(int progress, long messageId) { } success:^(long messageId) { } error:^(RCErrorCode errorCode, long messageId) { } cancel:^(long messageId) { }];
已复制
2
3
4
5
6
7
8
9
10
11
# GIF 消息
消息说明
消息类名 | 父类名称 | 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_GROUP targetId:@"群组 ID" content:gifMsg pushContent:nil pushData:nil progress:^(int progress, long messageId) { } success:^(long messageId) { } error:^(RCErrorCode errorCode, long messageId) { } cancel:^(long messageId) { }];
已复制
2
3
4
5
6
7
8
9
10
11
12
13
# 发送自定义消息
除了使用 SDK 内置消息外,开发者可根据自己的业务需求来自定义消息。
# 注册消息
注册消息共分为两步。
- 定义消息类型
- 注册消息类型
定义消息类型
开发者可根据业务需求来选择继承消息基类 RCMessageContent
或者 RCMediaMessageContent
,两者之前的区别可参考下图:

定义消息类型需要该类遵守下面三个协议
一. 编解码协议
协议原型:
@protocol RCMessageCoding <NSObject>
已复制
RCMessageCoding
主要有三个功能:
- 提供消息唯一标识符
- 消息发送时将消息中的所有信息编码为 JSON 数据传输
- 消息接收时将 JSON 数据解码还原为消息对象。
该协议为必须遵守的协议,遵守该协议需实现下面三个方法。
序列化:
消息内容通过此方法,将消息中的所有数据,编码成为 JSON 数据,返回的 JSON 数据将用于网络传输。
- (NSData *)encode;
已复制
反序列化:
网络传输的 JSON 数据,会通过此方法解码,获取消息内容中的所有数据,生成有效的消息内容。
- (void)decodeWithData:(NSData *)data;
已复制
定义消息类型名:
+ (NSString *)getObjectName;
已复制
- 定义的消息类型名,需要在各个平台上保持一致,否则消息无法互通
- 请勿使用
RC:
开头的类型名,以免和SDK默认的消息名称冲突 - 所有自定义消息必须实现此协议,否则将无法正常传输和使用。
二. 存储协议
协议原型:
@protocol RCMessagePersistentCompatible <NSObject>
已复制
RCMessageCoding
主要有两个功能:
- 指明此消息类型在本地和服务端是否存储
- 指明此消息类是否计入未读消息数
该协议为必须遵守的协议,遵守该协议需实现下面方法:
消息的存储计数策略:
+ (RCMessagePersistent)persistentFlag;
已复制
RCMessagePersistent 说明:
类型 | 存储类型 | 计数类型 | 展示方式 |
---|---|---|---|
MessagePersistent_NONE | 不存储 | 不计数 | 不显示 |
MessagePersistent_ISCOUNTED | 存储 | 计数 | 显示 |
MessagePersistent_ISPERSISTED | 存储 | 不计数 | 显示 |
MessagePersistent_NONE | 不存储 | 不计数 | 不显示 |
三. 内容摘要协议
协议原型:
@protocol RCMessageContentView
已复制
RCMessageContentView
主要有一个功能:
- 设置此消息在会话列表和本地通知中显示消息的摘要
该协议为非必须遵守的协议,遵守该协议需实现下面方法。
设置消息摘要:
- (NSString *)conversationDigest;
已复制
注册消息类型
开发者在进行完自定义消息类后,需要在 SDK 初始化之后,注册此自定义消息类。
- (void)registerMessageType:(Class)messageClass;
已复制
只有注册了该消息类型之后,SDK 才能正确识别和编码、解码该类型的消息。
# 发送消息
继承 RCMessageContent,请使用 发送普通消息 的接口进行发送。
继承 RCMediaMessageContent,请使用 发送媒体消息 的接口进行发送。
# 发送 @ 消息
# 发送消息
在发送消息的时候如果需要 @ 提示,可以给 RCMessageContent 的 mentionedInfo
赋值。
代码示例:
RCTextMessage *rcTextMessage = [RCTextMessage messageWithContent:@“Test”]; rcTextMessage.mentionedInfo = [[RCMentionedInfo alloc] initWithMentionedType:RC_Mentioned_Users userIdList:mentionedUserIdList mentionedContent:nil]; [self sendMessage:rcTextMessage pushContent:nil];
已复制
2
3
4
5
# 接收消息
收到 @ 消息时,SDK 会在 RCConversation 修改 hasUnreadMentioned 的值。
@ 消息推送会越过所有免打扰逻辑,给用户推送 Push 通知。 如果是自定义消息,在使用 @ 功能时,发送消息必须设置 pushContent ,否则不会发送 Push 。
# 发送定向消息
# 普通消息
参数说明
输入参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
conversationType | RCConversationType | 是 | 发送消息的会话类型 |
targetId | NSString | 是 | 发送消息的目标会话 ID |
userIdList | NSArray | 是 | 接收消息的用户 ID 列表 |
content | RCMessageContent | 是 | 消息的内容 |
pushContent | NSString | 否 | 接收方离线时需要显示的远程推送内容 |
pushData | NSString | 否 | 接收方离线时需要在远程推送中携带的非显示数据 |
success | Block | - | 消息发送成功的回调 |
error | Block | - | 消息发送失败的回调 |
返回参数说明
返回值 | 返回类型 | 说明 |
---|---|---|
msg | RCMessage (opens new window) | 发送的消息实体 |
回调参数说明
success 说明:
回调参数 | 回调类型 | 说明 |
---|---|---|
messageId | long | 消息的ID |
error 说明:
回调参数 | 回调类型 | 说明 |
---|---|---|
nErrorCode | RCErrorCode | 发送失败的错误码 |
messageId | long | 消息的ID |
代码示例
RCMessage *msg = [[RCIMClient sharedRCIMClient] sendDirectionalMessage:ConversationType_GROUP targetId:@"targetId" toUserIdList:userList content:content pushContent:nil pushData:nil success:^(long messageId) { } error:^(RCErrorCode nErrorCode, long messageId) { }];
已复制
2
3
4
5
6
7
8
9
10
11
12
# 媒体消息
SDK iOS 端暂未开放定向发送媒体消息的接口。