接收消息
您可通过设置代理监听或通知监听拦截 SDK 接收的消息,并进行相应的业务操作。
消息接收代理委托协议
IMKit SDK 提供了消息接收监听协议 RCIMReceiveMessageDelegate,可接收实时消息或离线消息。
提示
- 该协议提供两个代理方法,监听消息处理只需要在其中一个代理方法内实现。
- SDK 会通过此方法接收包含单聊、群聊、聊天室、系统类型的所有消息。
- 请在 SDK 初始化后,连接 IM 之前设置给单例对象。
接口原型
Objective C
/*!
接收消息的回调方法
@param message 当前接收到的消息
@param nLeft 还剩余的未接收的消息数,left≥0
*/
- (void)onRCIMReceiveMessage:(RCMessage *)message left:(int)left;
与第一个代理方法相比,第二个代理方法额外暴露了 offline
和 hasPackage
参数。如果您自定义了刷新逻辑,您可以根据 nLeft
、offline
、hasPackage
选择合适的时机刷新 UI。建议当 hasPackage
=0 并且 nLeft
=0 时刷新 UI。如果使用此方法,那么就不能再使用 RCIM 中的 - (void)onRCIMReceived:(RCMessage *)message left:(int)nLeft
,否则会出现重复操作的情形。
Objective C
/**
接收消息的回调方法
@param message 当前接收到的消息
@param nLeft 还剩余的未接收的消息数,left≥0
@param offline 是否是离线消息
@param hasPackage SDK 拉取服务器的消息以包(package)的形式批量拉取,有 package 存在就意味着远端服务器还有消息尚未被 SDK
拉取
*/
- (void)onRCIMReceived:(RCMessage *)message
left:(int)nLeft
offline:(BOOL)offline
hasPackage:(BOOL)hasPackage;
参数说明
参数 | 类型 | 说明 |
---|---|---|
message | RCMessage | 接收的消息对象。 |
nLeft | int | 当客户端连接成功后,服务端会将所有离线消息?以消息包(Package)的形式下发给客户端,每个 Package 中最多含 200 条消息。客户端会解析 Package 中的消息,逐条上抛并通知应用。nLeft 为当前正在解析的消息包(Package)中还剩余的消息条数。 |
offline | boolean | 当前消息是否离线消息。 |
hasPackage | boolean | 是否在服务端还存在未下发的消息包(Package)。 |
添加消息接收代理
SDK 支持设置多个消息接收代理,请在 SDK 初始化后,连接 IM 之前设置给单例对象。
Objective C
[[RCIM sharedRCIM] addReceiveMessageDelegate:self];
移除消息接收代理
SDK 支持移除监听器。为了避免内存泄露,请在不需要监听时将监听器移除。
Objective C
[[RCIM sharedRCIM] removeReceiveMessageDelegate:self];