跳到主要内容

消息回应

消息回应用于为消息添加表情回应。IMLib 提供添加或移除回应、批量获取回应摘要、分页查询回应列表、分页查询回应用户列表和监听回应变更等接口。

提示
  • 从 5.42.0 版本开始,IMLib 支持消息回应能力。
  • 消息必须拥有有效的 messageUId,才可以添加、移除或查询回应。

消息模型

RCMessage 增加了以下消息回应相关属性:

属性类型说明
hasReactionsBOOL消息是否存在回应。

当消息的 hasReactions == YES 时,可以通过批量查询接口获取回应摘要数据。

添加或移除回应

调用 addMessageReaction:success:error: 可以为指定消息添加回应。

一条消息最多支持添加 50 个回应信息。超过上限时,接口返回错误码 RC_MSG_REACTION_LIMIT_REACHED

接口原型

Objective C
- (void)addMessageReaction:(RCUpdateMessageReactionParam *)param
success:(nullable void (^)(void))successBlock
error:(nullable void (^)(RCErrorCode errorCode))errorBlock;

参数说明

参数类型说明
paramRCUpdateMessageReactionParam消息回应参数
successBlockBlock添加成功回调
errorBlockBlock添加失败回调

param 是对消息回应信息的封装,类型为 RCUpdateMessageReactionParam。其属性说明如下:

参数类型说明
messageUIdNSString消息唯一 ID,必填
reactionIdNSString回应 ID,必填,长度不能超过 16 个字符
pushConfigRCMessagePushConfig推送配置

示例代码

Objective C
RCUpdateMessageReactionParam *param = [[RCUpdateMessageReactionParam alloc] init];
param.messageUId = message.messageUId;
param.reactionId = @"👍";

[[RCCoreClient sharedCoreClient] addMessageReaction:param
success:^{
// 添加成功
} error:^(RCErrorCode errorCode) {
// 添加失败
}];

当某个回应的用户数已达上限时,接口返回错误码 RC_MSG_REACTION_USER_LIMIT_REACHED

调用 removeMessageReaction:success:error: 可以移除指定消息的回应。

接口原型

Objective C
- (void)removeMessageReaction:(RCUpdateMessageReactionParam *)param
success:(nullable void (^)(void))successBlock
error:(nullable void (^)(RCErrorCode errorCode))errorBlock;

参数说明

参数类型说明
paramRCUpdateMessageReactionParam消息回应参数
successBlockBlock移除成功回调
errorBlockBlock移除失败回调

param 的属性说明见上文 RCUpdateMessageReactionParam

示例代码

Objective C
RCUpdateMessageReactionParam *param = [[RCUpdateMessageReactionParam alloc] init];
param.messageUId = message.messageUId;
param.reactionId = @"👍";

[[RCCoreClient sharedCoreClient] removeMessageReaction:param
success:^{
// 移除成功
} error:^(RCErrorCode errorCode) {
// 移除失败
}];

批量查询回应摘要

获取消息列表后,如果其中部分消息的 hasReactions == YES,可调用 batchGetMessageReactionSummaries:messageUIds:completion: 一次性查询这些消息的回应摘要。

接口原型

Objective C
- (void)batchGetMessageReactionSummaries:(RCConversationIdentifier *)conversationIdentifier
messageUIds:(NSArray<NSString *> *)messageUIds
completion:(nullable void (^)(NSDictionary<NSString *, NSArray<RCMessageReaction *> *> *reactionsMap,
RCErrorCode errorCode))completion;

参数说明

参数类型说明
conversationIdentifierRCConversationIdentifier会话标识
messageUIdsNSArray<NSString *>消息唯一 ID 列表,有效长度 [1, 100]
completionBlock查询完成回调

示例代码

Objective C
RCConversationIdentifier *identifier =
[[RCConversationIdentifier alloc] initWithConversationIdentifier:ConversationType_PRIVATE
targetId:@"targetId"];

[[RCCoreClient sharedCoreClient] batchGetMessageReactionSummaries:identifier
messageUIds:@[message.messageUId]
completion:^(NSDictionary<NSString *, NSArray<RCMessageReaction *> *> *reactionsMap,
RCErrorCode errorCode) {
NSArray<RCMessageReaction *> *reactions = reactionsMap[message.messageUId];
}];

RCMessageReaction 表示某个 reactionId 对应的回应摘要,包含当前用户是否已回应、回应总数、部分回应用户列表和回应时间。

分页查询回应列表

如果一条消息包含多个回应类型,可以调用 getMessageReactions:success:error: 分页查询该消息的回应摘要列表。

接口原型

Objective C
- (void)getMessageReactions:(RCGetMessageReactionsParam *)param
success:(nullable void (^)(RCPagingQueryResult<RCMessageReaction *> *result))successBlock
error:(nullable void (^)(RCErrorCode errorCode))errorBlock;

参数说明

参数类型说明
paramRCGetMessageReactionsParam分页查询参数
successBlockBlock查询成功回调
errorBlockBlock查询失败回调

param 是对分页查询信息的封装,类型为 RCGetMessageReactionsParam。其属性说明如下:

参数类型说明
messageUIdNSString消息唯一 ID,必填
countNSInteger查询数量,有效范围 [1, 50]
pageTokenNSString分页标记

示例代码

Objective C
RCGetMessageReactionsParam *param = [[RCGetMessageReactionsParam alloc] init];
param.messageUId = message.messageUId;
param.count = 50;
param.pageToken = nil;

[[RCCoreClient sharedCoreClient] getMessageReactions:param
success:^(RCPagingQueryResult<RCMessageReaction *> *result) {
NSArray<RCMessageReaction *> *reactions = result.data;
NSString *nextPageToken = result.pageToken;
} error:^(RCErrorCode errorCode) {
}];

分页查询回应用户列表

如需获取某个回应下的用户列表,可以调用 getMessageReactionUsers:success:error:reactionId 分页查询。

接口原型

Objective C
- (void)getMessageReactionUsers:(RCGetMessageReactionUsersParam *)param
success:(nullable void (^)(RCPagingQueryResult<RCMessageReactionUser *> *result))successBlock
error:(nullable void (^)(RCErrorCode errorCode))errorBlock;

参数说明

参数类型说明
paramRCGetMessageReactionUsersParam分页查询参数
successBlockBlock查询成功回调
errorBlockBlock查询失败回调

param 是对分页查询信息的封装,类型为 RCGetMessageReactionUsersParam。其属性说明如下:

参数类型说明
messageUIdNSString消息唯一 ID,必填
reactionIdNSString回应 ID,必填,长度不能超过 16 个字符
countNSInteger查询数量,有效范围 [1, 50]
pageTokenNSString分页标记

示例代码

Objective C
RCGetMessageReactionUsersParam *param = [[RCGetMessageReactionUsersParam alloc] init];
param.messageUId = message.messageUId;
param.reactionId = @"👍";
param.count = 50;
param.pageToken = nil;

[[RCCoreClient sharedCoreClient] getMessageReactionUsers:param
success:^(RCPagingQueryResult<RCMessageReactionUser *> *result) {
NSArray<RCMessageReactionUser *> *users = result.data;
NSString *nextPageToken = result.pageToken;
NSInteger totalCount = result.totalCount;
} error:^(RCErrorCode errorCode) {
}];

监听消息回应变更

消息回应发生变更后,IMLib 会通过 RCMessageReactionDelegate 回调通知注册方。建议在初始化 IMLib 后、连接 IM 前调用 addMessageReactionDelegate: 注册监听器。

接口原型

Objective C
- (void)addMessageReactionDelegate:(id<RCMessageReactionDelegate>)delegate;

- (void)removeMessageReactionDelegate:(id<RCMessageReactionDelegate>)delegate;

参数说明

参数类型说明
delegateRCMessageReactionDelegate消息回应变更监听器

示例代码

Objective C
@interface ReactionObserver : NSObject <RCMessageReactionDelegate>
@end

@implementation ReactionObserver

- (void)onMessageReactionChanged:(NSArray<RCMessageReactionEventData *> *)reactions {
for (RCMessageReactionEventData *event in reactions) {
NSLog(@"messageUId: %@, reactionId: %@, type: %ld",
event.messageUId,
event.reactionId,
(long)event.operationType);
}
}

@end

ReactionObserver *observer = [[ReactionObserver alloc] init];
[[RCCoreClient sharedCoreClient] addMessageReactionDelegate:observer];

不再需要监听消息回应变更时,请调用 removeMessageReactionDelegate: 移除监听器。

Objective C
[[RCCoreClient sharedCoreClient] removeMessageReactionDelegate:observer];

RCMessageReactionEventData.operationType 说明如下:

枚举值说明
RCMessageReactionOperationTypeAdded添加消息回应。
RCMessageReactionOperationTypeRemoved移除消息回应。
RCMessageReactionOperationTypeCleared清空该消息的全部回应。

operationTypeRCMessageReactionOperationTypeCleared 时,reactionId 为空字符串,users 为空数组。