消息回应
消息回应用于为消息添加表情回应。IMLib 提供添加或移除回应、批量获 取回应摘要、分页查询回应列表、分页查询回应用户列表和监听回应变更等接口。
- 从 5.42.0 版本开始,IMLib 支持消息回应能力。
- 消息必须拥有有效的
messageUId,才可以添加、移除或查询回应。
消息模型
RCMessage 增加了以下消息回应相关属性:
| 属性 | 类型 | 说明 |
|---|---|---|
hasReactions | BOOL | 消息是否存在回应。 |
当消息的 hasReactions == YES 时,可以通过批量查询接口获取回应摘要数据。
添加或移除回应
调用 addMessageReaction:success:error: 可以为指定消息添加回应。
一条消息最多支持添加 50 个回应信息。超过上限时,接口返回错误码 RC_MSG_REACTION_LIMIT_REACHED。
接口原型
- (void)addMessageReaction:(RCUpdateMessageReactionParam *)param
success:(nullable void (^)(void))successBlock
error:(nullable void (^)(RCErrorCode errorCode))errorBlock;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
param | RCUpdateMessageReactionParam | 消息回应参数 |
successBlock | Block | 添加成功回调 |
errorBlock | Block | 添加失败回调 |
param 是对消息回应信息的封装,类型为 RCUpdateMessageReactionParam。其属性说明如下:
| 参数 | 类型 | 说明 |
|---|---|---|
messageUId | NSString | 消息唯一 ID,必填 |
reactionId | NSString | 回应 ID,必填,长度不能超过 16 个字符 |
pushConfig | RCMessagePushConfig | 推送配置 |
示例代码
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: 可以移除指定消息的回应。
接口原型
- (void)removeMessageReaction:(RCUpdateMessageReactionParam *)param
success:(nullable void (^)(void))successBlock
error:(nullable void (^)(RCErrorCode errorCode))errorBlock;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
param | RCUpdateMessageReactionParam | 消息回应参数 |
successBlock | Block | 移除成功回调 |
errorBlock | Block | 移除失败回调 |
param 的属性说明见上文 RCUpdateMessageReactionParam。
示例代码
RCUpdateMessageReactionParam *param = [[RCUpdateMessageReactionParam alloc] init];
param.messageUId = message.messageUId;
param.reactionId = @"👍";
[[RCCoreClient sharedCoreClient] removeMessageReaction:param
success:^{
// 移除成功
} error:^(RCErrorCode errorCode) {
// 移除失败
}];
批量查询回应摘要
获取消息列表后,如果其中部分消息的 hasReactions == YES,可调用 batchGetMessageReactionSummaries:messageUIds:completion: 一次性查询这些消息的回应摘要。
接口原型
- (void)batchGetMessageReactionSummaries:(RCConversationIdentifier *)conversationIdentifier
messageUIds:(NSArray<NSString *> *)messageUIds
completion:(nullable void (^)(NSDictionary<NSString *, NSArray<RCMessageReaction *> *> *reactionsMap,
RCErrorCode errorCode))completion;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
conversationIdentifier | RCConversationIdentifier | 会话标识 |
messageUIds | NSArray<NSString *> | 消息唯一 ID 列表,有效长度 [1, 100] |
completion | Block | 查询完成回调 |
示例代码
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: 分页查询该消息的回应摘要列表。
接口原型
- (void)getMessageReactions:(RCGetMessageReactionsParam *)param
success:(nullable void (^)(RCPagingQueryResult<RCMessageReaction *> *result))successBlock
error:(nullable void (^)(RCErrorCode errorCode))errorBlock;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
param | RCGetMessageReactionsParam | 分页查询参数 |
successBlock | Block | 查询成功回调 |
errorBlock | Block | 查询失败回调 |
param 是对分页查询信息的封装,类型为 RCGetMessageReactionsParam。其属性说明如下:
| 参数 | 类型 | 说明 |
|---|---|---|
messageUId | NSString | 消息唯一 ID,必填 |
count | NSInteger | 查询数量,有效范围 [1, 50] |
pageToken | NSString | 分页标记 |