全部文档

更新时间: 2020-11-12

# 发送普通消息

# 通过消息体发送

接口原型:

- (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_PRIVATE
targetId NSString 接收方的 userId
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
# 通过消息发送

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 对象
[[RCIMClient sharedRCIMClient] 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:@"消息内容"];

[[RCIMClient sharedRCIMClient] sendMessage:ConversationType_PRIVATE targetId:@"接收方的 userId" 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_PRIVATE targetId:@"接收方的 userId" content:locationMessage pushContent:nil pushData:nil option:nil success:^(long messageId) {
    
} error:^(RCErrorCode nErrorCode, long messageId) {
    
}];
已复制
1
2
3
4
5
6
7
# 正在输入状态消息

消息说明

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

属性说明

参数说明:

参数 类型 说明
typingContentType NSString 输入类型,传消息的objectName ,比如正在输入文字,传"RC:TxtMsg"

代码示例

RCTypingStatusMessage *typingMessage = [[RCTypingStatusMessage alloc] init];
typingMessage.typingContentType = objectName;
[[RCIMClient sharedRCIMClient] sendMessage:ConversationType_PRIVATE targetId:@"接收方的 userId" content:typingMessage 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_PRIVATE
targetId NSString 接收方的 userId
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
# 通过消息发送

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 图片的原始数据

代码示例

RCImageMessage *message = [RCImageMessage messageWithImageData:data];

[[RCIMClient sharedRCIMClient] sendMediaMessage:ConversationType_PRIVATE targetId:@"接收方的 userId" 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_PRIVATE targetId:@"接收方的 userId" 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_PRIVATE targetId:@"接收方的 userId" 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_PRIVATE targetId:@"接收方的 userId" 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_PRIVATE targetId:@"接收方的 userId" 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,请使用 发送媒体消息 的接口进行发送。

# 配置消息推送

# RCMessagePushConfig 属性介绍

从 SDK 4.0.4 版本开始支持此功能,针对每条 Message 都可以设置此属性,详细查看以下参数说明。

参数 类型 说明
pushTitle NSString 推送标题,如果没有设置,会使用 SDK 默认的标题显示规则
pushContent NSString 推送内容,如果没有,则使用发送消息的 pushContent,最后则会使用 SDK 默认的标题显示规则
pushData NSString 远程推送附加信息,如果没有,则使用发送消息的 pushData
forceShowDetailContent BOOL 是否强制显示通知详情,当目标用户通过 RCPushProfile 中的 - (void)updateShowPushContentStatus:(BOOL)isShowPushContent success:(void (^)(void))successBlock error:(void (^)(RCErrorCode status))errorBlock; 设置推送不显示消息详情时,可通过此参数,强制设置该条消息显示推送详情
iOSConfig RCiOSConfig iOS 平台相关配置
androidConfig RCAndroidConfig Android 平台相关配置
# RCiOSConfig 属性介绍
参数 类型 说明
threadId NSString iOS 平台通知栏分组 ID,相同的 threadId 推送分为一组(iOS10 开始支持)
apnsCollapseId NSString iOS 平台通知覆盖 ID,apnsCollapseId 相同时,新收到的通知会覆盖老的通知,最大 64 字节(iOS10 开始支持)
# RCAndroidConfig 属性介绍
参数 类型 说明
notificationId NSString Android 平台 Push 唯一标识,目前支持小米、华为推送平台,默认开发者不需要进行设置,当消息产生推送时,消息的 messageUId 作为 notificationId 使用
channelIdMi NSString 小米的渠道 ID,该条消息针对小米使用的推送渠道,如开发者集成了小米推送,需要指定 channelId 时,可向 Android 端研发人员获取,channelId 由开发者自行创建
channelIdHW NSString 华为的渠道 ID,该条消息针对华为使用的推送渠道,如开发者集成了华为推送,需要指定 channelId 时,可向 Android 端研发人员获取,channelId 由开发者自行创建
channelIdOPPO NSString OPPO 的渠道 ID,该条消息针对 OPPO 使用的推送渠道,如开发者集成了 OPPO 推送,需要指定 channelId 时,可向 Android 端研发人员获取,channelId 由开发者自行创建
typeVivo NSString VIVO 推送通道类型,开发者集成了 VIVO 推送,需要指定推送类型时,可进行设置。 目前可选值 "0"(运营消息) 和 "1"(系统消息)

Channel ID 需要由开发者进行创建,创建方式如下:

推送通道 配置说明
华为 App 端,调用 Android SDK 创建 Channel ID 接口创建 Channel ID
小米 在小米开放平台管理台上创建 Channel ID 或通过小米服务端 API 创建
OPPO App 端,调用 Android SDK 创建 Channel ID;在 OPPO 管理台登记该 Channel ID,保持一致性
vivo 调用服务端 API 创建 Channel ID

示例代码

RCMessage *message = [[RCMessage alloc] initWithType:conversationType targetId:targetId direction:MessageDirection_SEND messageId:0 content:messageContent];
RCMessagePushConfig *pushConfig = [[RCMessagePushConfig alloc] init];
pushConfig.pushTitle = @"通知标题";
pushConfig.pushContent = @"通知内容";
pushConfig.pushData = @"通知的 pushData";
pushConfig.iosConfig.threadId = @"iOS 用于通知分组的 id";
pushConfig.iosConfig.apnsCollapseId = @"iOS 用于通知覆盖的 id";
pushConfig.androidConfig.notificationId = @"Android 的通知 id";
pushConfig.androidConfig.channelIdMi = @"小米的 channelId";
pushConfig.androidConfig.channelIdHW = @"华为的 channelId";
pushConfig.androidConfig.channelIdOPPO = @"OPPO 的 channelId";
pushConfig.androidConfig.typeVivo = @"vivo 的类型";
pushConfig.forceShowDetailContent = true;
message.messagePushConfig = pushConfig;
[[RCIMClient sharedRCIMClient] sendMessage:message pushContent:nil pushData:nil successBlock:nil errorBlock:nil];
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

文档是否解决您的问题 ?

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