收发消息
本文介绍了如何使用 IMLib SDK 接收跟发送超级群消息,超级群收发消息需要使用 RCCoreClient
类下的方法。
前置条件
建议您先阅读超级群概述和超级群私有频道概述,了解在 App 业务中如何使用频道和超级群频道功能特性。
- 通过服务端 API 创建超级群
- 通过服务端 API 创建频道,或使用默认频道 channelId
RCDefault
- 通过服务端 API 将发送方用户加入超级群
- 如不确定发送方是否在超级群中,请通过服务端 API 查询用户是否为群成员
- 如向超级群私有频道中发送消息,请确认已通过服务端 API 添加私有频道成员
当用户在当前频道聊天页面发送与接收消息时,需要同时检查超级群 targetId 和频道 channelId。如果超级群 targetId 和频道 channelId 和当前频道聊天页面对应,才能在当前频道页面进行展示处理,否则就不处理。如果消息出现在其他聊天页面,一般是因为超级群 ID 或者频道 ID 发生错误。
接收消息
超级群会话消息的接收方法跟单群聊会话的消息接口方法一致,具体如何使用请参考接收消息。
超级群会话没有离线消息,如果想获取用户离线时候的消息需要您根据超级群会话最后一条消息去获取历史消息。
构造消息对象
在发送消息前,需要构造 RCMessage 对象。消息的 conversationType
字段必须填写超级群业务的会话类型 ConversationType_ULTRAGROUP
。消息的 targetId
字段表示超级群 ID,channelId
表示超级群频道 ID。
IMLib SDK 定义的 RCMessage 对象的 content
属性中可包含两大类消息内容:普通消息内容和媒体消息内容。普通消息内容父类是 RCMessageContent,媒体消息内容父类是 RCMediaMessageContent。发送媒体消息和普通消息的接口是不一样的,本质的区别为是否有上传媒体数据的过程。
功能 | 消息内容的类型 | 父类 | 描述 |
---|---|---|---|
文本消息 | RCTextMessage | RCMessageContent | 文本消息的内容。 |
引用回复 | RCReferenceMessage | RCMessageContent | 引用消息的内容,用于实现引用回复功能。 |
图片消息 | RCImageMessage | RCMediaMessageContent | 图片消息的内容,支持发送原图。 |
GIF 消息 | RCGIFMessage | RCMediaMessageContent | GIF 消息的内容。 |
文件消息 | RCFileMessage | RCMediaMessageContent | 文件消息的内容。 |
语音消息 | RCHQVoiceMessage | RCMediaMessageContent | 高清语音消息的内容。 |
提及他人(@ 消息) | 不适用 | 不适用 | @消息并非预定义的消息类型。详见如何发送 @ 消息。 |
以上为 IMLib SDK 内置的部分消息内容类型。您还可以创建自定义的消息内容类型,如果您创建的自定义消息是普通消息类型请选择使用 sendMessage
方法,如果您创建的是媒体消息类型请选择使用 sendMediaMessage
方法发送。详见自定义消息类型。
- 发送普通消息请使用
sendMessage
方法,发送媒体消息请使用sendMediaMessage
方法。 - 客户端 SDK 发送消息存在频率限制,每秒最多只能发送 5 条消息。
- 如果您的应用/环境在 2022.10.13 日及以后开通超级群服务,超级群业务中会包含一个 ID 为
RCDefault
的默认频道。如果发消息时不指定频道 ID,则该消息会发送到RCDefault
频道中。 - 如果您的应用/环境在 2022.10.13 日前已开通超级群服务,在发送消息时如果不指定频道 ID,则该消息不属于任何频道。融云支持客户调整服务至最新行为。该行为调整将影响客户端、服务端收发消息、获取会话、清除历史消息、禁言等多个功能。如有需要,请提交工单咨询详细方案。
普通消息
普通消息指文本消息、引用消息等不涉及媒体文件上传的消息。普通消息的消息内容为 RCMessageContent
的子类的消息,例如文本消息内容(RCTextMessage),或自定义类型的普通消息内容。
构造普通消息
您在发送超级群普通消息前,需要先通过设置会话类型为超级群、超级群会话的 targetId、超级群频道的 channelId、 消息方向(发送或接收),消息内容来构造 RCMessage 对象。以下示例中构造了一条包含文本消息内容(RCTextMessage)的消息对象。
RCMessaage
的disableUpdateLastMessage
属性,可以控制是否将该消息更新到会话最新一 条消息,默认 NO: 会更新到会话最后一条消息中,YES: 不更新到会话的最后一条消息中。
RCTextMessage *messageContent = [RCTextMessage messageWithContent:@"测试文本消息"];
RCMessage *message = [[RCMessage alloc] initWithType:ConversationType_ULTRAGROUP targetId:@"超级群 id" channelId:@"频道 id" direction:MessageDirection_SEND content:messageContent];
发送普通消息
如果 RCMessage 对象中的消息内容是普通消息内容,请使用 IMLib SDK 核心类 RCCoreClient
的 sendMessage
方法发送消息。
接口原型
- (void)sendMessage:(RCMessage *)message
pushContent:(nullable NSString *)pushContent
pushData:(nullable NSString *)pushData
attached:(nullable void(^)(RCMessage *_Nullable message))attachedBlock
successBlock:(nullable void (^)(RCMessage *successMessage))successBlock
errorBlock:(nullable void (^)(RCErrorCode nErrorCode, RCMessage *errorMessage))errorBlock;
sendMessage 方法中直接提供了用于控制消息推送通知内容(pushContent