更新时间: 2021-04-16

# 属性描述

消息属性 描述
消息类名 各端消息名
存储属性 存储 / 不存储
离线属性 缓存 / 不缓存
推送属性 是/否
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
                   success:(void (^)(long messageId))successBlock
                     error:(void (^)(RCErrorCode nErrorCode, long messageId))errorBlock;
已复制
1
2
3
4
5
6
7

输入参数说明

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

返回参数说明

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

回调参数说明

success 说明:

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

error 说明:

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

4.0.1 版本之后 SDK 新增发送消息传参为 message 的接口,并增加是否发送推送的配置

4.0.4 版本开始支持单条消息推送配置功能

接口原型:

- (RCMessage *)sendMessage:(RCMessage *)message
               pushContent:(NSString *)pushContent
                  pushData:(NSString *)pushData
              successBlock:(void (^)(RCMessage *successMessage))successBlock
                errorBlock:(void (^)(RCErrorCode nErrorCode, RCMessage *errorMessage))errorBlock;
已复制
1
2
3
4
5

RCMessage 添加消息配置的对象

/*!
  消息配置,可用来设置静默消息(不进行通知提醒)
 */
@property (nonatomic, strong) RCMessageConfig *messageConfig;

/*!
 消息推送配置,详细查看 配置消息推送
 */
@property (nonatomic, strong) RCMessagePushConfig *messagePushConfig;

已复制
1
2
3
4
5
6
7
8
9
10

RCMessagePushConfig 详细说明请查看 配置消息推送

输入参数说明

参数 类型 必填 说明
message RCMessage 消息对象
pushContent NSString 接收方离线时需要显示的远程推送内容
pushData NSString 接收方离线时需要在远程推送中携带的非显示数据
success Block - 消息发送成功的回调
error Block - 消息发送失败的回调

返回参数说明

返回值 返回类型 说明
textMsg RCMessage 发送的消息实体

回调参数说明

success 说明:

回调参数 回调类型 说明
successMessage RCMessage 消息实体

error 说明:

回调参数 回调类型 说明
nErrorCode RCErrorCode 发送失败的错误码
errorMessage RCMessage 消息实体

代码示例:

RCMessage *message = [[RCMessage alloc] initWithType:conversationType targetId:targetId direction:MessageDirection_SEND messageId:0 content:messageContent];
message.messageConfig.disableNotification = disableNotification; // disableNotificatio 为 NO 或者 YES
message.messagePushConfig = pushConfig; // pushConfig 为构建的 RCMessagePushConfig 对象
[[RCIM sharedRCIM] sendMessage:message pushContent:pushContent pushData:nil successBlock:nil errorBlock:nil];
已复制
1
2
3
4

注意 messageid 无特殊情况应传 0

# 文本消息

消息说明

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

属性说明

构建参数说明:

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

代码示例

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

[[RCIM sharedRCIM] sendMessage:ConversationType_GROUP targetId:@"群组 ID" content:textMessage pushContent:nil pushData:nil success:^(long messageId) {
    
} error:^(RCErrorCode nErrorCode, long messageId) {
    
}];
已复制
1
2
3
4
5
6
7
# 位置消息

消息说明

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

属性说明

构建参数说明:

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

代码示例

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

[[RCIM sharedRCIM] sendMessage:ConversationType_GROUP targetId:@"群组 ID" content:locationMessage pushContent:nil pushData: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_GROUP
targetId NSString 群组 ID
content RCMessageContent 消息的内容
pushContent NSString 接收方离线时需要显示的远程推送内容
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
# 通过消息对象发送

4.0.1 版本之后 SDK 新增发送消息传参为 message 的接口,并增加是否发送推送的配置

4.0.4 版本开始支持单条消息推送配置功能

接口原型:

- (RCMessage *)sendMediaMessage:(RCMessage *)message
                    pushContent:(NSString *)pushContent
                       pushData:(NSString *)pushData
                       progress:(void (^)(int progress, RCMessage *progressMessage))progressBlock
                   successBlock:(void (^)(RCMessage *successMessage))successBlock
                     errorBlock:(void (^)(RCErrorCode nErrorCode, RCMessage *errorMessage))errorBlock
                         cancel:(void (^)(RCMessage *cancelMessage))cancelBlock;
已复制
1
2
3
4
5
6
7

RCMessage 添加消息配置的对象

/*!
 消息配置,可用来设置静默消息(不进行通知提醒)
 */
@property (nonatomic, strong) RCMessageConfig *messageConfig;

/*!
 消息推送配置,详细查看 配置消息推送
 */
@property (nonatomic, strong) RCMessagePushConfig *messagePushConfig;
已复制
1
2
3
4
5
6
7
8
9

RCMessagePushConfig 详细说明请查看 配置消息推送

输入参数说明

参数 类型 必填 说明
message RCMessage 消息实体
pushData NSString 接收方离线时需要在远程推送中携带的非显示数据
progress Block - 消息发送进度更新的回调
success Block - 消息发送成功的回调
error Block - 消息发送失败的回调
cancel Block - 用户取消了消息发送的回调

返回参数说明

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

回调参数说明

progress 说明:

回调参数 回调类型 说明
progress int 当前的发送进度, 0 <= progress <= 100
progressMessage RCMessage 消息实体

success 说明:

回调参数 回调类型 说明
successMessage RCMessage 消息实体

error 说明:

回调参数 回调类型 说明
nErrorCode RCErrorCode 发送失败的错误码
errorMessage RCMessage 消息实体

cancel 说明:

回调参数 回调类型 说明
cancelMessage RCMessage 消息实体

代码示例:

RCMessage *message = [[RCMessage alloc] initWithType:conversationType targetId:targetId direction:MessageDirection_SEND messageId:0 content:messageContent];
message.messageConfig.disableNotification = disableNotification; // disableNotificatio 为 NO 或者 YES
message.messagePushConfig = pushConfig; // pushConfig 为构建的 RCMessagePushConfig 对象
[[RCIM sharedRCIM] sendMediaMessage:message pushContent:pushContent pushData:nil progress:nil successBlock:nil errorBlock:nil cancel:nil];
已复制
1
2
3
4

注意 messageid 无特殊情况应传 0

# 图片消息

消息说明

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

属性说明

构建参数说明:

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

如果想发送原图,请设置属性 full 为 YES。

代码示例

RCImageMessage *message = [RCImageMessage messageWithImageData:data];

[[RCIM sharedRCIM] 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) {
    
}];
已复制
1
2
3
4
5
6
7
8
9
10
11
# 语音消息
消息类名 父类名称 ObjectName 存储属性 计数属性 离线属性 推送属性 推送内容
RCHQVoiceMessage RCMediaMessageContent RC:HQVCMsg 存储 计数 存储 推送 消息内容

构建参数说明:

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

示例代码

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

[[RCIM sharedRCIM] 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) {
    
}];
已复制
1
2
3
4
5
6
7
8
9
10
11
# 文件消息
消息类名 父类名称 ObjectName 存储属性 计数属性 离线属性 推送属性 推送内容
RCFileMessage RCMediaMessageContent RC:FileMsg 存储 计数 存储 推送 消息内容

构建参数说明:

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

代码示例

RCFileMessage *fileMessage = [RCFileMessage messageWithFile:path]

[[RCIM sharedRCIM] 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) {
    
}];
已复制
1
2
3
4
5
6
7
8
9
10
11
# 小视频消息

融云提供了小视频功能. 可拍摄生成 10 秒小视频消息功能及在本地相册中选择视频文件发送功能,小视频消息默认存储 6 个月。 使用此功能需要开发者在 开发者后台 (opens new window) 选择对应项目开通。

集成方式

请您参考 全局配置- 引入 SDK - 导入 Podfile 文件中新增下面内容

pod 'RongCloudIM/Sight', '~> 2.10.4'
已复制
1

必须保持 RongCloudIM 所有导入的模块版本号一致。

发送本地视频

开启小视频服务后,SDK 支持从本地相册中选择视频文件发送,需要开发者设置选择媒体资源是否包含视频文件,默认为不包含,设为后支持发送本地视频文件,时长上限为 2 分钟,设置方法如下:

属性所属类为 RCIM,默认为 NO

@property(nonatomic, assign) BOOL isMediaSelectorContainVideo;
已复制
1

发送小视频消息

消息说明

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

属性说明

构建参数说明:

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

代码示例

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

[[RCIM sharedRCIM] 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) {
    
}];
已复制
1
2
3
4
5
6
7
8
9
10
11
# GIF 消息

从 SDK 2.9.21 版本开始支持发送 GIF 图片消息,默认可选择发送的 GIF 图片大小为 2M,接收于小于 1M 的消息时自动下载显示,大于 1M 时需要手动点击下载。

消息说明

消息类名 父类名称 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];

[[RCIM sharedRCIM] 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) {
    
}];
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13

# 发送自定义消息

除了使用 SDK 内置消息外,开发者可根据自己的业务需求来自定义消息。

# 注册消息

注册消息共分为四步。

  1. 定义消息类型
  2. 注册消息类型
  3. 定义消息 Cell
  4. 注册消息 Cell

定义消息类型

开发者可根据业务需求来选择继承消息基类 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. 定义的消息类型名,需要在各个平台上保持一致,否则消息无法互通
  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

注册消息类型

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

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

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

# 显示消息

定义消息 Cell

开发者可根据自己的业务需求是否需要显示用户信息来选择继承消息 Cell。

  1. 不包含用户头像和昵称

类名:

RCMessageBaseCell
已复制
1

结构图:


控件需要添加在 baseContentView 上,建议在 baseContentView 上方预留 10

  1. 含用户头像和昵称

类名:

RCMessageCell
已复制
1

结构图:


控件需要添加在 messageContentView 上,根据需求在画 Cell 视图布局的时候调整 messageContentView 的 frame ,如果是接收方,只需要修改 messageContentViewwidthheight,如果是发送方,需要修改 messageContentViewxwidthheight

开发者需要在 Cell 的初始化中布局,并重写下面方法来返回 Cell 的 Size。当显示自定义消息时,必须实现该方法来返回 Cell 的 Size

参数说明:

参数 类型 说明
model RCMessageModel (opens new window) 要显示的消息 model
collectionViewWidth CGFloat Cell 所在的 collectionView 的宽度
extraHeight CGFloat Cell 内容区域之外的高度

方法原型:

+ (CGSize)sizeForMessageModel:(RCMessageModel *)model
      withCollectionViewWidth:(CGFloat)collectionViewWidth
         referenceExtraHeight:(CGFloat)extraHeight;
已复制
1
2
3

注:extraHeight 就是上面 Cell 结构图中红色箭头的总高度, 返回的 cell 的 size 的高 等于 图中标注的 height + extraHeight ,size 的宽就是 collectionViewWidth

注册消息 Cell

SDK 需要开发者在会话页面注册您定义的消息 Cell 并绑定您的消息类型

- (void)registerClass:(Class)cellClass forMessageClass:(Class)messageClass;
已复制
1
# 发送消息

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

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

文档是否解决您的问题 ?

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