跳转至

消息

接收消息

设置了 IMKit 消息监听之后,SDK 在接收到消息时候会执行此方法(无论 App 处于前台或者后台)。

注意

  1. 拦截到此监听的时候,消息已经被存入了 SDK 内置数据库中,在此处对消息体内容进行修改是不会保存到数据库中的。
  2. 使用 IMLib,请使用 RCIMClient 中的 RCIMClientReceiveMessageDelegate 监听消息接收,而不要使用此方法。

image


/*!
 IMKit消息接收的监听器
 */
@protocol RCIMReceiveMessageDelegate <NSObject>
/*!
 IMKit消息接收的监听器

 @warning 如果您使用IMKit,可以设置并实现此Delegate监听消息接收;
 如果您使用IMLib,请使用RCIMClient中的RCIMClientReceiveMessageDelegate监听消息接收,而不要使用此方法。
 */
@property(nonatomic, weak) id<RCIMReceiveMessageDelegate> receiveMessageDelegate;
参数 类型 说明
message RCMessage 当前接收到的消息
left int 还剩余的未接收的消息数,left>=0
/*!
 接收消息的回调方法

 其中,left为还剩余的、还未接收的消息数量。比如刚上线一口气收到多条消息时,
 通过此方法,您可以获取到每条消息,left会依次递减直到0。
 您可以根据left数量来优化您的App体验和性能,比如收到大量消息时等待left为0再刷新UI。
 */
- (void)onRCIMReceiveMessage:(RCMessage *)message left:(int)left;

示例代码:

//设置接收消息代理
[RCIM sharedRCIM].receiveMessageDelegate = self;
//自定义操作
- (void)onRCIMReceiveMessage:(RCMessage *)message left:(int)left {

    if ([message.content isMemberOfClass:[RCInformationNotificationMessage class]]) {
        RCInformationNotificationMessage *msg = (RCInformationNotificationMessage *)message.content;
        // NSString *str = [NSString stringWithFormat:@"%@",msg.message];
        if ([msg.message rangeOfString:@"你已添加了"].location != NSNotFound) {
            [RCDDataSource syncFriendList:[RCIM sharedRCIM].currentUserInfo.userId
                                 complete:^(NSMutableArray *friends){
                                 }];
        }
    }
}

发送消息

消息发送监听器,可以监听消息发送前以及消息发送后的结果。

使用 IMKit,可以设置并实现此 Delegate 监听消息发送;


@protocol RCIMSendMessageDelegate <NSObject>

@property(nonatomic, weak) id<RCIMSendMessageDelegate> sendMessageDelegate;

准备发送消息

此方法在消息准备向外发送时会执行,开发者可以在此方法中对消息内容进行过滤和修改等操作。如果此方法的返回值不为 nil,SDK 会对外发送返回的消息内容。

注意

当使用了 RCConversationViewController 中的 willSendMessage:方法时,请不要重复使用此方法。选择其中一种方式实现需求即可。

参数 类型 说明
messageContent RCMessageContent 消息内容
返回值 RCMessageContent 修改后的消息内容
- (RCMessageContent *)willSendIMMessage:(RCMessageContent *)messageContent;

发送消息完成

此方法在消息向外发送结束之后会执行。您可以通过此方法监听消息发送情况。

注意

当使用了 RCConversationViewController 中的 didSendMessage:content: 方法,请不要重复使用此方法。选择其中一种方式实现需求即可。

参数 类型 说明
messageContent RCMessageContent 消息内容
status NSInteger 发送状态,0表示成功,非0表示失败的错误码
- (void)didSendIMMessage:(RCMessageContent *)messageContent status:(NSInteger)status;