接收消息
您可通过设置消息监听器拦截 SDK 接收的消息,并进行相应的业务操作 。
监听消息接收
设置消息接收监听
您可以通过 addReceiveMessageDelegate 方法设置多个消息接收代理。所有接收到的消息都会在此 RCIMClientReceiveMessageDelegate 协议的代理方法中回调。
提示
- 您需要将代理设置的时机放在调用 IMLib SDK 连接接口之前,初始化 IMLib SDK 之后,保证与融云服务端建立 IM 连接后的第一时间获取到离线的消息。
- 建议将代理设置给单例对象,保证整个 App 生命周期内代理的设置都是有效的。
Objective C
[[RCCoreClient sharedCoreClient] addReceiveMessageDelegate:self];
实现消息接收代理方法
RCIMClientReceiveMessageDelegate 可用于处理接收实时消息或离线消息。该协议提供两个代理方法,监听消息处理只需要在其中一个代理方法内实现。SDK 会通过此方法接收包含单聊、群聊、聊天室、系统类型的所有消息。
方法一提供了还剩余的未接收的消息数 nLeft 参数。您可以根据 nLeft 的数量来优化您的 App 体验和性能,比如收到大量消息时等待 nLeft 为 0 再刷新 UI。
Objective C
/*!
接收消息的回调方法
@param message 当前接收到的消息
@param nLeft 还剩余的未接收的消息数,left≥0
@param object 消息监听设置的 key 值
*/
- (void)onReceived:(RCMessage *)message left:(int)nLeft object:(id)object;
方法二额外暴露了 offline 和 hasPackage 参数。您可以根据 nLeft、offline、hasPackage 选择合适的时机刷新 UI。
Objective C
/**
接收消息的回调方法
@param message 当前接收到的消息
@param nLeft 还剩余的未接收的消息数,left≥0
@param object 消息监听设置的 key 值
@param offline 是否是离线消息
@param hasPackage SDK 拉取服务器的消息以包(package)的形式批量拉取,有 package 存在就意味着远端服务器还有消息尚未被 SDK
拉取
*/
- (void)onReceived:(RCMessage *)message
left:(int)nLeft
object:(id)object
offline:(BOOL)offline
hasPackage:(BOOL)hasPackage;
| 参数 | 类型 | 说明 |
|---|---|---|
message | RCMessage | 接收的消息对象。 |
nLeft | int | 当客户端连接成功后,服务端会将所有离线消息?以消息包(Package)的形式下发给客户端,每个 Package 中最多含 200 条消息。客户端会解析 Package 中的消息,逐条上抛并通知应用。nLeft 为当前正在解析的消息包(Package)中还剩余的消息条数。 |
offline | boolean | 当前消息是否离线消息。 |
hasPackage | boolean | 是否在服务端还存在未下发的消息包(Package)。 |
提示
同时满足以下条件,表示离线消息已收取完毕:
hasPackage为NO:表示当前正在解析最后一包消息。nLeft为 0:表示最后一个消息包中最后一条消息已接收完毕。