消息表态
功能简介
消息表态,是指用户对消息的反应。一般可用于对单聊或群聊的消息添加或删除表情,也可用于发起群组投票、确认群组结果等操作。
以上仅为表态消息的 UI 示意图,ZIM SDK 不提供相关表态的美术资源,需要由您自行实现。
实现流程
ZIM SDK 支持对单聊或群聊会话中的指定消息进行表态。以客户端 B 对来自客户端 A 的消息增删表态为例:
- 客户端 A 和 客户端 B 分别创建自己的 ZIM 实例,并注册 ZIMEventHandler 监听的 messageReactionsChanged 回调接口,监听消息表态的相关通知。
- 客户端 A 和 客户端 B 分别登录 ZIM SDK。
- 客户端 A 向 客户端 B 发送单聊消息后,客户端 B 对该消息进行表态时:
- 客户端 B 调用 addMessageReaction 接口,传入参数 reactionType 和 message ,表态指定的消息。
- 客户端 B 通过 ZIMMessageReactionAddedCallback 回调接口得知表态操作的结果。
- 客户端 A 通过 messageReactionsChanged 回调得知消息表态的相关通知。
- 客户端 B 删除上述表态时:
- 客户端 B 调用 deleteMessageReaction 接口,传入参数 reactionType 和 message ,表态指定的消息。
- 客户端 B 通过 ZIMMessageReactionDeletedCallback 回调接口得知表态操作的结果。
- 客户端 A 通过 messageReactionsChanged 回调得知消息表态的相关通知。
1 监听消息表态
用户创建 ZIM 示例后,需要注册 ZIMEventHandler 监听的 messageReactionsChanged 回调接口,监听消息表态的相关通知。当其他用户增加或删除对某条消息的表态后,可以直接获取表态的相关信息,包括表态的类型和人数等。通过此回调可获取的用户信息有限,一般为 5 名用户,如需了解表态相关的更多用户信息,请参考 查询表态详情。
// 收到消息表态回调
- (void)zim:(ZIM *)zim messageReactionsChanged:(NSArray<ZIMMessageReaction *> *)reactions;
2 新增消息表态
在单聊或群聊会话发送消息后,您可以调用 addMessageReaction 对任意消息进行表态。增加表态操作的结果将通过 ZIMMessageReactionAddedCallback 返回。通过此 callback
可获取的用户信息有限,一般为 5 名用户,如需了解表态相关的更多用户信息,请参考 查询表态详情。
- 重复调用本接口,对同一条消息进行相同类型的表态会报错。
- 一条消息默认表态类型上限为 100,如需调整,请联系 ZEGO 技术支持。
// 新增消息表态
NSString* reactionType = @"key";
[zim addMessageReaction:reactionType message:message callback:^(ZIMMessageReaction * _Nonnull reaction, ZIMError * _Nonnull errorInfo) {
if(errorInfo.code == 0){
// 操作成功
}
else{
// 操作失败
}
}];
3 删除消息表态
对消息表态后,您可以调用 deleteMessageReaction 删除该表态。删除操作的结果将通过 ZIMMessageReactionDeletedCallback 返回。通过此 callback
可获取的用户信息有限,一般为 5 名用户,如需了解表态相关的更多用户信息,请参考 查询表态详情。
调用本接口只能删除自己所作的表态。
// 删除消息表态
NSString* reactionType = @"key";
[zim deleteMessageReaction:reactionType message:message callback:^(ZIMMessageReaction * _Nonnull reaction, ZIMError * _Nonnull errorInfo) {
if(errorInfo.code == 0){
// 操作成功
}
else{
// 操作失败
}
}];
更多功能
查询表态详情
表态操作(监听、增加以及删除表态)只会返回概要用户信息,默认是 5 个,如需调整,请联系 ZEGO 技术支持。因此,当需要查询有哪些用户对某条消息作出了指定类型表态时,可以通过调用 queryMessageReactionUserListByMessage 进行查询。操作的结果将通过 ZIMMessageReactionUserListQueriedCallback 返回,可知有哪些用户对这条消息增加了这种类型的表态。
// 查询表态详情
ZIMMessageReactionUserQueryConfig *config = [[ZIMMessageReactionUserQueryConfig alloc] init];
config.nextFlag = 0;
config.reactionType = @"key";
// count 超过 100 条会返回报错
config.count = 20;
[zim queryMessageReactionUserListByMessage:message config:config callback:^(ZIMMessage * _Nonnull message, NSArray<ZIMMessageReactionUserInfo *> * _Nonnull userList, NSString * _Nonnull reactionType, long long nextFlag, int totalCount, ZIMError * _Nonnull errorInfo) {
if(errorInfo.code == 0){
// 操作成功
}
else{
// 操作失败
}
}];