发送消息
IMKit 内置会话页面已实现了发送各类型消息的功能和 UI(部分消息类型需要插件支持)。当您在自定义页面需要发送消息时,可使用 IMKit 核心类 RCIM 下发送消息的方法。这些方法除了提供发送消息的功能外,还会触发 IMKit 内置页面的更新。
IMKit 支持发送普通消息和媒体类消息(参考消息介绍),普通消息父类是 RCMessageContent,媒体消息父类是 RCMediaMessageContent。发送媒体消息和普通消息本质的区别为是否有上传数据过程。
- 请务必使用 IMKit 核心类
RCIM下发送消息的方法,否则不会触发页面刷新。 - 发送普通消息使用
sendMessage方法,发送媒体消息使用sendMediaMessage方法。 - IMKit SDK 发送消息存在频率限制,每秒最多只能发送 5 条消息。
如果您在自定义页面中发送带引用关系信息的消息,请在实际发送的 RCMessage 上设置 RCQuoteInfo,并继续按消息内容类型调用 RCIM 的 sendMessage 或 sendMediaMessage。引用关系保存在 RCMessage.quoteInfo 中,消息本身仍保持文本、图片、GIF、小视频、普通语音、高清语音、文件、位置、自定义消息等实际消息类型。
发送普通消息
在发送消息前,需要构造 RCMessage 对象。RCMessage 对象中包含要发送的普通消息内容,即 RCMessageContent 的子类,例如文本消息(RCTextMessage)。
当您调用 RCIM 的发送消息方法时,SDK 会触发内置的会话列表和会话页面的更新。
接口说明
- (RCMessage *)sendMessage:(RCMessage *)message
pushContent:(nullable NSString *)pushContent
pushData:(nullable NSString *)pushData
successBlock:(nullable void (^)(RCMessage *successMessage))successBlock
errorBlock:(nullable void (^)(RCErrorCode nErrorCode, RCMessage *errorMessage))errorBlock;
sendMessage 中直接提供了用于控制推送通知内容(pushContent)和推送附加信息(pushData)的参数。不过,如果您需要更精细地控制离线推送通知,例如标题、内容、图标、或其他第三方厂商个性化配置,请使用消息推送属性进行配置,详见自定义消息推送通知。请注意,聊天室会话不支持离线消息机制,因此也不支持离线消息转推送。
- 如果发送的消息属于 SDK 内置消 息类型,例如
RCTextMessage,这两个参数可设置为nil。一旦消息触发离线推送通知时,融云服务端会使用各个内置消息类型默认的pushContent值。关于各类型消息的默认推送通知内容,详见用户内容类消息格式。 - 如果消息类型为自定义消息类型,且需要支持离线推送通知,则必须向融云提供
pushContent字段,否则用户无法收到离线推送通知。 - 如果消息类型为自定义消息类型,但不需要支持远程推送通知(例如通过自定义消息类型实现的 App 业务层操作指令),可将
pushContent字段留空。 RCMessage的推送属性配置MessagePushConfig的pushContent和pushData会覆盖此处配置,并提供更多配置能力,例如自定义推送通知的标题。详见自定义消息推送通知。
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
message | RCMessage | 要发送的消息体。必填属性包括会 话类型(conversationType),会话 ID(targetId),消息内容(content)。详见消息介绍 中对 RCMessage 的结构说明。 |
pushContent | NSString | 修改或指定远程消息推送通知栏显示的内容。您也可以在 RCMessage 的推送属性(RCMessagePushConfig)中配置,会覆盖此处配置,详见配置消息的推送属性。
|
pushData | NSString | Push 附加信息。可设置为 nil。您也可以在 RCMessage 的推送属性(RCMessagePushConfig)中配置,会覆盖此处配置,详见配置消息的推送属性。 |
successBlock | Block | 消息发送成功回调。 |
errorBlock | Block | 消息发送失败回调。 |
示例代码
RCTextMessage *messageContent = [RCTextMessage messageWithContent:@"测试文本消息"];
RCMessage *message = [[RCMessage alloc]
initWithType:ConversationType_PRIVATE
targetId:@"targetId"
direction:MessageDirection_SEND
content:messageContent];
[[RCIM sharedRCIM]
sendMessage:message
pushContent:nil
pushData:nil
successBlock:^(RCMessage *successMessage) {
//成功
}
errorBlock:^(RCErrorCode nErrorCode, RCMessage *errorMessage) {
//失 败
}];
发送媒体消息
媒体消息 RCMessage 对象的 content 字段必须传入 RCMediaMessageContent 的子类对象,表示媒体消息内容。例如图片消息(RCImageMessage)、GIF 消息(RCGIFMessage)等。其他内置媒体消息类型包括文件消息(RCFileMessage)、位置消息(RCLocationMessage)、高清语音消息(RCHQVoiceMessage)、小视频消息(RCSightMessage),建议先集成相应的 IMKit 插件。
图片消息内容(RCImageMessage)支持设置为发送原图。
发送媒体消息需要使用 sendMediaMessage 方法。SDK 会为图片、小视频等生成缩略图,根据默认压缩配置进行压缩,再将图片、小视频等媒体文件上传到融云默认的文件服务器(文件存储时长),上传成功之后会更新消息的远端的媒体地址后再发送消息。图片消息如已设置为发送原图,则不会进行压缩。
当您调用 RCIM 的发送消息方法时,SDK 会触发内置的会话列表和会话页面的更新。