消息表态
功能简介
消息表态,是指用户对消息的反应。一般可用于对单聊或群聊的消息添加或删除表情,也可用于发起群组投票、确认群组结果等操作。

以上仅为表态消息的 UI 示意图,ZIM SDK 不提供相关表态的美术资源,需要由您自行实现。
实现流程
ZIM SDK 支持对单聊或群聊会话中的指定消息进行表态。以客户端 B 对来自客户端 A 的消息增删表态为例:

- 客户端 A 和 客户端 B 分别创建自己的 ZIM 实例,并注册 on 监听的 messageReactionsChanged 回调接口,监听消息表态的相关通知。
- 客户端 A 和 客户端 B 分别创建自己的 ZIM 实例,监听 messageReactionsChanged 回调接口,监听消息表态的相关通知。
- 客户端 A 和 客户端 B 分别登录 ZIM SDK。
- 客户端 A 向 客户端 B 发送单聊消息后,客户端 B 对该消息进行表态时:
- 客户端 B 调用 addMessageReaction 接口,传入参数 reactionType 和 message ,表态指定的消息。
- 客户端 B 通过 ZIMMessageReactionAddedResult 回调接口得知表态操作的结果。
- 客户端 A 通过 messageReactionsChanged 回调得知消息表态的相关通知。
- 客户端 B 删除上述表态时:
- 客户端 B 调用 deleteMessageReaction 接口,传入参数 reactionType 和 message ,表态指定的消息。
- 客户端 B 通过 ZIMMessageReactionDeletedResult 回调接口得知表态操作的结果。
- 客户端 A 通过 messageReactionsChanged 回调得知消息表态的相关通知。
1 监听消息表态
用户创建 ZIM 示例后,需要注册 on 监听的 messageReactionsChanged 回调接口,监听消息表态的相关通知。
用户创建 ZIM 示例后,需要通过 messageReactionsChanged 回调接口监听消息表态的相关通知。
当其他用户增加或删除对某条消息的表态后,可以直接获取表态的相关信息,包括表态的类型和人数等。通过此回调可获取的用户信息有限,一般为 5 名用户,如需了解表态相关的更多用户信息,请参考 更多功能。
// 收到消息表态回调
public void onMessageReactionsChanged(ZIM zim, ZIMMessageReactionsChangedEventResult result) {
}// 收到消息表态回调
public void onMessageReactionsChanged(ZIM zim, ZIMMessageReactionsChangedEventResult result) {
}// 收到消息表态回调
- (void)zim:(ZIM *)zim messageReactionsChangedWithResult:(ZIMMessageReactionsChangedEventResult *)result;// 收到消息表态回调
- (void)zim:(ZIM *)zim messageReactionsChangedWithResult:(ZIMMessageReactionsChangedEventResult *)result;// 收到消息表态回调
virtual void onMessageReactionsChanged(ZIM * /*zim*/, const ZIMMessageReactionsChangedEventResult & /*result*/) {}// 收到消息表态回调
virtual void onMessageReactionsChanged(ZIM * /*zim*/, const ZIMMessageReactionsChangedEventResult & /*result*/) {}// 收到消息表态回调
ZIM.GetInstance().onMessageReactionsChanged += (
ZIM zim,
List<ZIMMessageReaction> reactionList) =>
{
};// 收到消息表态回调
ZIM.GetInstance().onMessageReactionsChanged += (
ZIM zim,
List<ZIMMessageReaction> reactionList) =>
{
};// 收到消息表态回调
ZIMEventHandler.onMessageReactionsChanged = (ZIM zim, ZIMMessageReactionsChangedEventResult result){
};// 收到消息表态回调
ZIMEventHandler.onMessageReactionsChanged = (ZIM zim, ZIMMessageReactionsChangedEventResult result){
};// 收到消息表态回调
zim.on('messageReactionsChanged', (zim: ZIM, data: ZIMEventOfMessageReactionsChangedResult) => {
});// 收到消息表态回调
zim.on('messageReactionsChanged', (zim: ZIM, data: ZIMEventOfMessageReactionsChangedResult) => {
});UTS 插件
// 收到消息表态回调
zim.onMessageReactionsChanged((data) => {
});// 收到消息表态回调
zim.onMessageReactionsChanged((data) => {
});2 新增消息表态 & 重复表态计数
在单聊或群聊会话发送消息后,您可以调用 addMessageReaction 对任意消息进行表态。增加表态操作的结果将通过 ZIMMessageReactionAddedResult 返回。通过此 callback 可获取的用户信息有限,一般为 5 名用户,如需了解表态相关的更多用户信息,请参考 更多功能。
- 在 2.28.0 之前的版本,重复调用本接口对同一条消息进行相同类型的表态会抛出错误信息。
- 在 2.28.0 以及之后的版本,通过配置
config参数对同一条消息进行相同类型的表态,可实现重复表态和计数功能。 - 一条消息默认表态类型上限为 100,如需调整,请联系 ZEGO 技术支持。
示例代码
String reactionType = "key";
// 添加消息表态
zim.addMessageReaction(reactionType, message, new ZIMMessageReactionAddedCallback() {
@Override
public void onMessageReactionAdded(ZIMMessageReaction reaction, ZIMError error) {
if (error.code == ZIMErrorCode.SUCCESS){
// 操作成功
}else {
// 操作失败
}
}
});
// 2.28.0 开始支持:重复表态-计数
ZIMMessageReactionAddConfig config = new ZIMMessageReactionAddConfig();
// 表态计数增量值,要求正整数。
// 当高频表态时,开发者可聚合增量值,只调用一次该接口:比如短时间表态 10 次,可设置为 10,然后只调用一次(避免高频调用影响服务端性能)
config.increaseCount = 1;
zim.addMessageReaction(reactionType, message, config, new ZIMMessageReactionAddedCallback() {
@Override
public void onMessageReactionAdded(ZIMMessageReaction reaction, ZIMError error) {
if (error.code == ZIMErrorCode.SUCCESS){
// 操作成功
}else {
// 操作失败
}
}
});String reactionType = "key";
// 添加消息表态
zim.addMessageReaction(reactionType, message, new ZIMMessageReactionAddedCallback() {
@Override
public void onMessageReactionAdded(ZIMMessageReaction reaction, ZIMError error) {
if (error.code == ZIMErrorCode.SUCCESS){
// 操作成功
}else {
// 操作失败
}
}
});
// 2.28.0 开始支持:重复表态-计数
ZIMMessageReactionAddConfig config = new ZIMMessageReactionAddConfig();
// 表态计数增量值,要求正整数。
// 当高频表态时,开发者可聚合增量值,只调用一次该接口:比如短时间表态 10 次,可设置为 10,然后只调用一次(避免高频调用影响服务端性能)
config.increaseCount = 1;
zim.addMessageReaction(reactionType, message, config, new ZIMMessageReactionAddedCallback() {
@Override
public void onMessageReactionAdded(ZIMMessageReaction reaction, ZIMError error) {
if (error.code == ZIMErrorCode.SUCCESS){
// 操作成功
}else {
// 操作失败
}
}
});示例代码
NSString* reactionType = @"key";
// 新增消息表态
[zim addMessageReaction:reactionType message:message callback:^(ZIMMessageReaction * _Nonnull reaction, ZIMError * _Nonnull errorInfo) {
if(errorInfo.code == 0){
// 操作成功
}
else{
// 操作失败
}
}];
// 2.28.0 开始支持:重复表态-计数
ZIMMessageReactionAddConfig *config = [[ZIMMessageReactionAddConfig alloc] init];
// 表态计数增量值,要求正整数。
// 当高频表态时,开发者可聚合增量值,只调用一次该接口:比如短时间表态 10 次,可设置为 10,然后只调用一次(避免高频调用影响服务端性能)
config.increaseCount = 1;
[zim addMessageReaction:reactionType message:message config:config callback:^(ZIMMessageReaction * _Nonnull reaction, ZIMError * _Nonnull errorInfo) {
if(errorInfo.code == 0){
// 操作成功
}
else{
// 操作失败
}
}];NSString* reactionType = @"key";
// 新增消息表态
[zim addMessageReaction:reactionType message:message callback:^(ZIMMessageReaction * _Nonnull reaction, ZIMError * _Nonnull errorInfo) {
if(errorInfo.code == 0){
// 操作成功
}
else{
// 操作失败
}
}];
// 2.28.0 开始支持:重复表态-计数
ZIMMessageReactionAddConfig *config = [[ZIMMessageReactionAddConfig alloc] init];
// 表态计数增量值,要求正整数。
// 当高频表态时,开发者可聚合增量值,只调用一次该接口:比如短时间表态 10 次,可设置为 10,然后只调用一次(避免高频调用影响服务端性能)
config.increaseCount = 1;
[zim addMessageReaction:reactionType message:message config:config callback:^(ZIMMessageReaction * _Nonnull reaction, ZIMError * _Nonnull errorInfo) {
if(errorInfo.code == 0){
// 操作成功
}
else{
// 操作失败
}
}];title ="示例代码"
auto reactionType = "key";
// 添加消息表态
zim->addMessageReaction(reactionType,messagePtr, [=](const ZIMMessageReaction &reaction, const ZIMError &errorInfo) {
if (errorInfo.code == 0) {
// 操作成功
}
else {
// 操作失败
}
});
// 2.28.0 开始支持:重复表态-计数
zim::ZIMMessageReactionAddConfig config;
// 表态计数增量值,要求正整数。
// 当高频表态时,开发者可聚合增量值,只调用一次该接口:比如短时间表态 10 次,可设置为 10,然后只调用一次(避免高频调用影响服务端性能)
config.increaseCount = 1;
zim->addMessageReaction(reactionType,messagePtr,config, [=](const ZIMMessageReaction &reaction, const ZIMError &errorInfo) {
if (errorInfo.code == 0) {
// 操作成功
}
else {
// 操作失败
}
});auto reactionType = "key";
// 添加消息表态
zim->addMessageReaction(reactionType,messagePtr, [=](const ZIMMessageReaction &reaction, const ZIMError &errorInfo) {
if (errorInfo.code == 0) {
// 操作成功
}
else {
// 操作失败
}
});
// 2.28.0 开始支持:重复表态-计数
zim::ZIMMessageReactionAddConfig config;
// 表态计数增量值,要求正整数。
// 当高频表态时,开发者可聚合增量值,只调用一次该接口:比如短时间表态 10 次,可设置为 10,然后只调用一次(避免高频调用影响服务端性能)
config.increaseCount = 1;
zim->addMessageReaction(reactionType,messagePtr,config, [=](const ZIMMessageReaction &reaction, const ZIMError &errorInfo) {
if (errorInfo.code == 0) {
// 操作成功
}
else {
// 操作失败
}
});示例代码
// 添加消息表态
string reactionType = "key";
ZIM.GetInstance().AddMessageReaction(reactionType, message, (ZIMMessageReaction reaction, ZIMError errorInfo) =>
{
if (errorInfo.code == ZIMErrorCode.Success){
// 操作成功
}else {
// 操作失败
}
});// 添加消息表态
string reactionType = "key";
ZIM.GetInstance().AddMessageReaction(reactionType, message, (ZIMMessageReaction reaction, ZIMError errorInfo) =>
{
if (errorInfo.code == ZIMErrorCode.Success){
// 操作成功
}else {
// 操作失败
}
});示例代码
// 添加消息表态
ZIM.getInstance()!.addMessageReaction(reactionType: 'key', message: ZIMTextMessage(message: 'message')).then((value) => {
//添加消息表态成功
}).catchError((onError){
//添加消息表态失败
});
// 2.28.0 开始支持:重复表态-计数
ZIMMessageReactionAddConfig config = ZIMMessageReactionAddConfig();
// 表态计数增量值,要求正整数。
// 当高频表态时,开发者可聚合增量值,只调用一次该接口:比如短时间表态 10 次,可设置为 10,然后只调用一次(避免高频调用影响服务端性能)
config.increaseCount = 1;
zim.addMessageReaction(reactionType: 'key', message: ZIMTextMessage(message: 'message'), config: config).then((value) => {
//添加消息表态成功
}).catchError((onError){
//添加消息表态失败
});// 添加消息表态
ZIM.getInstance()!.addMessageReaction(reactionType: 'key', message: ZIMTextMessage(message: 'message')).then((value) => {
//添加消息表态成功
}).catchError((onError){
//添加消息表态失败
});
// 2.28.0 开始支持:重复表态-计数
ZIMMessageReactionAddConfig config = ZIMMessageReactionAddConfig();
// 表态计数增量值,要求正整数。
// 当高频表态时,开发者可聚合增量值,只调用一次该接口:比如短时间表态 10 次,可设置为 10,然后只调用一次(避免高频调用影响服务端性能)
config.increaseCount = 1;
zim.addMessageReaction(reactionType: 'key', message: ZIMTextMessage(message: 'message'), config: config).then((value) => {
//添加消息表态成功
}).catchError((onError){
//添加消息表态失败
});示例代码
const reactionType = "key";
const messageObj: ZIMMessage = {};
// 添加消息表态
zim.addMessageReaction(reactionType, messageObj)
.then((res: ZIMMessageReactionAddedResult) => {
// 操作成功,在 UI 上更新该消息的表态列表
})
.catch((err: ZIMError) => {
// 操作失败
});
// 2.28.0 开始支持:重复表态-计数
const config: ZIMMessageReactionAddConfig = {
// 表态计数增量值,要求正整数。
// 当高频表态时,开发者可聚合增量值,只调用一次该接口:比如短时间表态 10 次,可设置为 10,然后只调用一次(避免高频调用影响服务端性能)
increaseCount: 1
};
zim.addMessageReaction(reactionType, messageObj, config)
.then((res: ZIMMessageReactionAddedResult) => {
// 操作成功,在 UI 上更新该消息的表态列表
})
.catch((err: ZIMError) => {
// 操作失败
}); const reactionType = "key";
const messageObj: ZIMMessage = {};
// 添加消息表态
zim.addMessageReaction(reactionType, messageObj)
.then((res: ZIMMessageReactionAddedResult) => {
// 操作成功,在 UI 上更新该消息的表态列表
})
.catch((err: ZIMError) => {
// 操作失败
});
// 2.28.0 开始支持:重复表态-计数
const config: ZIMMessageReactionAddConfig = {
// 表态计数增量值,要求正整数。
// 当高频表态时,开发者可聚合增量值,只调用一次该接口:比如短时间表态 10 次,可设置为 10,然后只调用一次(避免高频调用影响服务端性能)
increaseCount: 1
};
zim.addMessageReaction(reactionType, messageObj, config)
.then((res: ZIMMessageReactionAddedResult) => {
// 操作成功,在 UI 上更新该消息的表态列表
})
.catch((err: ZIMError) => {
// 操作失败
}); 3 删除消息某个表态 & 删除消息全部表态
对消息表态后,您可以调用 deleteMessageReaction 删除该表态。删除操作的结果将通过 ZIMMessageReactionDeletedResult 返回。通过此 callback 可获取的用户信息有限,一般为 5 名用户,如需了解表态相关的更多用户信息,请参考 更多功能。
在 2.28.0 以及之后的版本,支持调用 deleteMessageAllReactions 删除消息的全部表态。
调用本接口只能删除自己所作的表态。如果是重复表态,调用本接口会将自己的重复表态数量清零,且不会影响其他用户的重复表态数量。
示例代码
String reactionType = "key";
// 删除某个表态
zim.deleteMessageReaction(reactionType, message, new ZIMMessageReactionDeletedCallback() {
@Override
public void onMessageReactionDeleted(ZIMMessageReaction reaction, ZIMError error) {
if (error.code == ZIMErrorCode.SUCCESS){
// 操作成功
}else {
// 操作失败
}
}
});
// 2.28.0 开始支持:删除全部表态
zim.deleteMessageAllReactions(message, new ZIMMessageReactionsAllDeletedCallback() {
@Override
public void onMessageReactionsAllDeleted(ZIMError error) {
if (error.code == ZIMErrorCode.SUCCESS){
// 操作成功
}else {
// 操作失败
}
}
});String reactionType = "key";
// 删除某个表态
zim.deleteMessageReaction(reactionType, message, new ZIMMessageReactionDeletedCallback() {
@Override
public void onMessageReactionDeleted(ZIMMessageReaction reaction, ZIMError error) {
if (error.code == ZIMErrorCode.SUCCESS){
// 操作成功
}else {
// 操作失败
}
}
});
// 2.28.0 开始支持:删除全部表态
zim.deleteMessageAllReactions(message, new ZIMMessageReactionsAllDeletedCallback() {
@Override
public void onMessageReactionsAllDeleted(ZIMError error) {
if (error.code == ZIMErrorCode.SUCCESS){
// 操作成功
}else {
// 操作失败
}
}
});示例代码
// 删除某个表态
NSString* reactionType = @"key";
[zim deleteMessageReaction:reactionType message:message callback:^(ZIMMessageReaction * _Nonnull reaction, ZIMError * _Nonnull errorInfo) {
if(errorInfo.code == 0){
// 操作成功
}
else{
// 操作失败
}
}];
// 2.28.0 开始支持:删除全部表态
[zim deleteMessageAllReactionsByMessage:message callback:^(ZIMError * _Nonnull errorInfo) {
if(errorInfo.code == 0){
// 操作成功
}
else{
// 操作失败
}
}];// 删除某个表态
NSString* reactionType = @"key";
[zim deleteMessageReaction:reactionType message:message callback:^(ZIMMessageReaction * _Nonnull reaction, ZIMError * _Nonnull errorInfo) {
if(errorInfo.code == 0){
// 操作成功
}
else{
// 操作失败
}
}];
// 2.28.0 开始支持:删除全部表态
[zim deleteMessageAllReactionsByMessage:message callback:^(ZIMError * _Nonnull errorInfo) {
if(errorInfo.code == 0){
// 操作成功
}
else{
// 操作失败
}
}];示例代码
// 删除某个表态
auto reactionType = "key";
zim->deleteMessageReaction(reactionType,messagePtr, [=](const ZIMMessageReaction &reaction, const ZIMError &errorInfo) {
if (errorInfo.code == 0) {
// 操作成功
}
else {
// 操作失败
}
});
// 2.28.0 开始支持:删除全部表态
zim->deleteMessageAllReactions(messagePtr, [=](const ZIMError &errorInfo) {
if (errorInfo.code == 0) {
// 操作成功
}
else {
// 操作失败
}
});// 删除某个表态
auto reactionType = "key";
zim->deleteMessageReaction(reactionType,messagePtr, [=](const ZIMMessageReaction &reaction, const ZIMError &errorInfo) {
if (errorInfo.code == 0) {
// 操作成功
}
else {
// 操作失败
}
});
// 2.28.0 开始支持:删除全部表态
zim->deleteMessageAllReactions(messagePtr, [=](const ZIMError &errorInfo) {
if (errorInfo.code == 0) {
// 操作成功
}
else {
// 操作失败
}
});示例代码
// 删除消息表态
string reactionType = "key";
ZIM.GetInstance().DeleteMessageReaction(reactionType, message, (ZIMMessageReaction reaction, ZIMError errorInfo) =>
{
if (errorInfo.code == ZIMErrorCode.Success){
// 操作成功
}else {
// 操作失败
}
});// 删除消息表态
string reactionType = "key";
ZIM.GetInstance().DeleteMessageReaction(reactionType, message, (ZIMMessageReaction reaction, ZIMError errorInfo) =>
{
if (errorInfo.code == ZIMErrorCode.Success){
// 操作成功
}else {
// 操作失败
}
});示例代码
// 删除某个表态
ZIM.getInstance()!.deleteMessageReaction('Key', ZIMTextMessage(message: 'message')).then((value) => {
// 删除消息表态成功
}).catchError((onError){
// 删除消息表态失败
});
// 2.28.0 开始支持:删除全部表态
ZIM.getInstance()!.deleteMessageAllReactions(message: ZIMTextMessage(message: 'message')).then(() => {
// 删除消息表态成功
}).catchError((onError){
// 删除消息表态失败
});// 删除某个表态
ZIM.getInstance()!.deleteMessageReaction('Key', ZIMTextMessage(message: 'message')).then((value) => {
// 删除消息表态成功
}).catchError((onError){
// 删除消息表态失败
});
// 2.28.0 开始支持:删除全部表态
ZIM.getInstance()!.deleteMessageAllReactions(message: ZIMTextMessage(message: 'message')).then(() => {
// 删除消息表态成功
}).catchError((onError){
// 删除消息表态失败
});示例代码
// 删除某个表态
const reactionType = "key";
const messageObj: ZIMMessage = {};
zim.deleteMessageReaction(reactionType, messageObj)
.then((res: ZIMMessageReactionDeletedResult) => {
// 操作成功,在 UI 上更新该消息的表态列表
})
.catch((err: ZIMError) => {
// 操作失败
});
// 2.28.0 开始支持:删除全部表态
zim.deleteMessageAllReactions(messageObj)
.then(() => {
// 操作成功,在 UI 上更新该消息的表态列表
})
.catch((err: ZIMError) => {
// 操作失败
}); // 删除某个表态
const reactionType = "key";
const messageObj: ZIMMessage = {};
zim.deleteMessageReaction(reactionType, messageObj)
.then((res: ZIMMessageReactionDeletedResult) => {
// 操作成功,在 UI 上更新该消息的表态列表
})
.catch((err: ZIMError) => {
// 操作失败
});
// 2.28.0 开始支持:删除全部表态
zim.deleteMessageAllReactions(messageObj)
.then(() => {
// 操作成功,在 UI 上更新该消息的表态列表
})
.catch((err: ZIMError) => {
// 操作失败
}); 更多功能
查询某个表态的用户列表 & 按用户维度查询所有表态计数
表态操作(监听、增加以及删除表态)只会返回概要用户信息,默认是 5 个,如需调整,请联系 ZEGO 技术支持。因此,当需要查询有哪些用户对某条消息作出了指定类型表态时,可以通过调用 queryMessageReactionUserList 进行查询。操作的结果将通过 ZIMMessageReactionUserListQueriedResult 返回,可知有哪些用户对这条消息增加了这种类型的表态。
如果实现了重复表态计数功能,也可通过该接口查询用户的所有表态计数,返回的列表按用户的总表态数量倒序排序。
示例代码
// 查询某个表态的用户列表
ZIMMessageReactionUserQueryConfig config = new ZIMMessageReactionUserQueryConfig();
config.reactionType = "key";
// count 超过 100 条会返回报错
config.count = 10;
config.nextFlag = 0;
zim.queryMessageReactionUserList(message, config,new ZIMMessageReactionUserListQueriedCallback() {
@Override
public void onMessageReactionUserListQueried(ZIMMessage message, ArrayList<ZIMMessageReactionUserFullInfo> userInfoList,
String reactionType, long nextFlag, int totalCount,
ZIMError error) {
if (error.code == ZIMErrorCode.SUCCESS){
// 操作成功
// 遍历 userInfoList,从中获取 userID
}else {
// 操作失败
}
}
});
// 2.28.0 开始支持:按用户维度查询所有表态计数
ZIMMessageReactionUserQueryConfig config = new ZIMMessageReactionUserQueryConfig();
config.reactionType = ""; // 表态类型需要为空
// count 超过 100 条会返回报错
config.count = 10;
config.nextFlag = 0;
zim.queryMessageReactionUserList(message, config,new ZIMMessageReactionUserListQueriedCallback() {
@Override
public void onMessageReactionUserListQueried(ZIMMessage message, ArrayList<ZIMMessageReactionUserFullInfo> userInfoList,
String reactionType, long nextFlag, int totalCount,
ZIMError error) {
if (error.code == ZIMErrorCode.SUCCESS){
// 操作成功
// 遍历 userInfoList,从中获取 userID 和 reactions(表态类型和计数)
}else {
// 操作失败
}
}
});// 查询某个表态的用户列表
ZIMMessageReactionUserQueryConfig config = new ZIMMessageReactionUserQueryConfig();
config.reactionType = "key";
// count 超过 100 条会返回报错
config.count = 10;
config.nextFlag = 0;
zim.queryMessageReactionUserList(message, config,new ZIMMessageReactionUserListQueriedCallback() {
@Override
public void onMessageReactionUserListQueried(ZIMMessage message, ArrayList<ZIMMessageReactionUserFullInfo> userInfoList,
String reactionType, long nextFlag, int totalCount,
ZIMError error) {
if (error.code == ZIMErrorCode.SUCCESS){
// 操作成功
// 遍历 userInfoList,从中获取 userID
}else {
// 操作失败
}
}
});
// 2.28.0 开始支持:按用户维度查询所有表态计数
ZIMMessageReactionUserQueryConfig config = new ZIMMessageReactionUserQueryConfig();
config.reactionType = ""; // 表态类型需要为空
// count 超过 100 条会返回报错
config.count = 10;
config.nextFlag = 0;
zim.queryMessageReactionUserList(message, config,new ZIMMessageReactionUserListQueriedCallback() {
@Override
public void onMessageReactionUserListQueried(ZIMMessage message, ArrayList<ZIMMessageReactionUserFullInfo> userInfoList,
String reactionType, long nextFlag, int totalCount,
ZIMError error) {
if (error.code == ZIMErrorCode.SUCCESS){
// 操作成功
// 遍历 userInfoList,从中获取 userID 和 reactions(表态类型和计数)
}else {
// 操作失败
}
}
});示例代码
// 查询某个表态的用户列表
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<ZIMMessageReactionUserFullInfo *> * _Nonnull userInfoList, NSString * _Nonnull reactionType, long long nextFlag, int totalCount, ZIMError * _Nonnull errorInfo) {
if(errorInfo.code == 0){
// 操作成功
// 遍历 userInfoList,从中获取 userID
}
else{
// 操作失败
}
}];
// 2.28.0 开始支持:按用户维度查询所有表态计数
ZIMMessageReactionUserQueryConfig *config = [[ZIMMessageReactionUserQueryConfig alloc] init];
config.reactionType = ""; // 表态类型需要为空
// count 超过 100 条会返回报错
config.count = 10;
config.nextFlag = 0;
[zim queryMessageReactionUserListByMessage:message config:config callback:^(ZIMMessage * _Nonnull message, NSArray<ZIMMessageReactionUserFullInfo *> * _Nonnull userInfoList, NSString * _Nonnull reactionType, long long nextFlag, int totalCount, ZIMError * _Nonnull errorInfo) {
if(errorInfo.code == 0){
// 操作成功
// 遍历 userInfoList,从中获取 userID 和 reactions(表态类型和计数)
}
else{
// 操作失败
}
}];// 查询某个表态的用户列表
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<ZIMMessageReactionUserFullInfo *> * _Nonnull userInfoList, NSString * _Nonnull reactionType, long long nextFlag, int totalCount, ZIMError * _Nonnull errorInfo) {
if(errorInfo.code == 0){
// 操作成功
// 遍历 userInfoList,从中获取 userID
}
else{
// 操作失败
}
}];
// 2.28.0 开始支持:按用户维度查询所有表态计数
ZIMMessageReactionUserQueryConfig *config = [[ZIMMessageReactionUserQueryConfig alloc] init];
config.reactionType = ""; // 表态类型需要为空
// count 超过 100 条会返回报错
config.count = 10;
config.nextFlag = 0;
[zim queryMessageReactionUserListByMessage:message config:config callback:^(ZIMMessage * _Nonnull message, NSArray<ZIMMessageReactionUserFullInfo *> * _Nonnull userInfoList, NSString * _Nonnull reactionType, long long nextFlag, int totalCount, ZIMError * _Nonnull errorInfo) {
if(errorInfo.code == 0){
// 操作成功
// 遍历 userInfoList,从中获取 userID 和 reactions(表态类型和计数)
}
else{
// 操作失败
}
}];示例代码
// 查询某个表态的用户列表
ZIMMessageReactionUserQueryConfig config;
config.nextFlag = 0;
// count 超过 100 条会返回报错
config.count = 10;
config.reactionType = "key";
zim->queryMessageReactionUserList(messagePtr,config, [=](const std::shared_ptr<ZIMMessage> &message,
const std::vector<ZIMMessageReactionUserFullInfo> &userInfoList, const std::string &reactionType,
const long long nextFlag, const unsigned int totalCount, const ZIMError &errorInfo) {
if (errorInfo.code == 0) {
// 操作成功
// 遍历 userInfoList,从中获取 userID
}
else {
// 操作失败
}
});
// 2.28.0 开始支持:按用户维度查询所有表态计数
ZIMMessageReactionUserQueryConfig config;
config.reactionType = ""; // 表态类型需要为空
config.nextFlag = 0;
// count 超过 100 条会返回报错
config.count = 10;
zim->queryMessageReactionUserList(messagePtr,config, [=](const std::shared_ptr<ZIMMessage> &message,
const std::vector<ZIMMessageReactionUserFullInfo> &userInfoList, const std::string &reactionType,
const long long nextFlag, const unsigned int totalCount, const ZIMError &errorInfo) {
if (errorInfo.code == 0) {
// 操作成功
// 遍历 userInfoList,从中获取 userID 和 reactions(表态类型和计数)
}
else {
// 操作失败
}
}); // 查询某个表态的用户列表
ZIMMessageReactionUserQueryConfig config;
config.nextFlag = 0;
// count 超过 100 条会返回报错
config.count = 10;
config.reactionType = "key";
zim->queryMessageReactionUserList(messagePtr,config, [=](const std::shared_ptr<ZIMMessage> &message,
const std::vector<ZIMMessageReactionUserFullInfo> &userInfoList, const std::string &reactionType,
const long long nextFlag, const unsigned int totalCount, const ZIMError &errorInfo) {
if (errorInfo.code == 0) {
// 操作成功
// 遍历 userInfoList,从中获取 userID
}
else {
// 操作失败
}
});
// 2.28.0 开始支持:按用户维度查询所有表态计数
ZIMMessageReactionUserQueryConfig config;
config.reactionType = ""; // 表态类型需要为空
config.nextFlag = 0;
// count 超过 100 条会返回报错
config.count = 10;
zim->queryMessageReactionUserList(messagePtr,config, [=](const std::shared_ptr<ZIMMessage> &message,
const std::vector<ZIMMessageReactionUserFullInfo> &userInfoList, const std::string &reactionType,
const long long nextFlag, const unsigned int totalCount, const ZIMError &errorInfo) {
if (errorInfo.code == 0) {
// 操作成功
// 遍历 userInfoList,从中获取 userID 和 reactions(表态类型和计数)
}
else {
// 操作失败
}
}); 示例代码
// 查询某个表态的用户列表
ZIMMessageReactionUserQueryConfig config =new ZIMMessageReactionUserQueryConfig();
config.reactionType = "key";
// count 超过 100 条会返回报错
config.count = 10;
config.nextFlag = 0;
ZIM.GetInstance().QueryConversationList(config , (List<ZIMConversation> conversationList, ZIMError errorInfo) =>
{
if (errorInfo.code == ZIMErrorCode.SUCCESS){
// 操作成功
}else {
// 操作失败
}
});// 查询某个表态的用户列表
ZIMMessageReactionUserQueryConfig config =new ZIMMessageReactionUserQueryConfig();
config.reactionType = "key";
// count 超过 100 条会返回报错
config.count = 10;
config.nextFlag = 0;
ZIM.GetInstance().QueryConversationList(config , (List<ZIMConversation> conversationList, ZIMError errorInfo) =>
{
if (errorInfo.code == ZIMErrorCode.SUCCESS){
// 操作成功
}else {
// 操作失败
}
});示例代码
// 查询某个表态的用户列表
ZIMMessageReactionUserQueryConfig config = ZIMMessageReactionUserQueryConfig(reactionType: "key");
// count 超过 100 条会返回报错
config.count = 20;
config.nextFlag = 0;
ZIM.getInstance()!.queryMessageReactionUserList(ZIMTextMessage(message: 'message'), config).then((value) => {
// 操作成功
// 遍历 userInfoList,从中获取 userID
}).catchError((onError){
// 操作失败
});
// 2.28.0 开始支持:按用户维度查询所有表态计数
ZIMMessageReactionUserQueryConfig config = ZIMMessageReactionUserQueryConfig(reactionType: ""); // 表态类型需要为空
// count 超过 100 条会返回报错
config.count = 20;
config.nextFlag = 0;
ZIM.getInstance()!.queryMessageReactionUserList(ZIMTextMessage(message: 'message'), config).then((value) => {
// 操作成功
// 遍历 userInfoList,从中获取 userID 和 reactions(表态类型和计数)
}).catchError((onError){
// 操作失败
});// 查询某个表态的用户列表
ZIMMessageReactionUserQueryConfig config = ZIMMessageReactionUserQueryConfig(reactionType: "key");
// count 超过 100 条会返回报错
config.count = 20;
config.nextFlag = 0;
ZIM.getInstance()!.queryMessageReactionUserList(ZIMTextMessage(message: 'message'), config).then((value) => {
// 操作成功
// 遍历 userInfoList,从中获取 userID
}).catchError((onError){
// 操作失败
});
// 2.28.0 开始支持:按用户维度查询所有表态计数
ZIMMessageReactionUserQueryConfig config = ZIMMessageReactionUserQueryConfig(reactionType: ""); // 表态类型需要为空
// count 超过 100 条会返回报错
config.count = 20;
config.nextFlag = 0;
ZIM.getInstance()!.queryMessageReactionUserList(ZIMTextMessage(message: 'message'), config).then((value) => {
// 操作成功
// 遍历 userInfoList,从中获取 userID 和 reactions(表态类型和计数)
}).catchError((onError){
// 操作失败
});示例代码
// 查询某个表态的用户列表
const config: ZIMMessageReactionUserQueryConfig = {
reactionType: "key",
// count 超过 100 条会返回报错
count: 20,
nextFlag: 0,
};
const messageObj: ZIMMessage = {};
zim.queryMessageReactionUserList(messageObj, config)
.then((res: ZIMMessageReactionUserListQueriedResult) => {
// 操作成功
// 遍历 res.userInfoList,从中获取 userID
})
.catch((err: ZIMError) => {
// 操作失败
});
// 2.28.0 开始支持:按用户维度查询所有表态计数
const config: ZIMMessageReactionUserQueryConfig = {
reactionType: "", // 表态类型需要为空
// count 超过 100 条会返回报错
count: 20,
nextFlag: 0,
};
const messageObj: ZIMMessage = {};
zim.queryMessageReactionUserList(messageObj, config)
.then((res: ZIMMessageReactionUserListQueriedResult) => {
// 操作成功
// 遍历 res.userInfoList,从中获取 userID 和 reactions(表态类型和计数)
})
.catch((err: ZIMError) => {
// 操作失败
}); // 查询某个表态的用户列表
const config: ZIMMessageReactionUserQueryConfig = {
reactionType: "key",
// count 超过 100 条会返回报错
count: 20,
nextFlag: 0,
};
const messageObj: ZIMMessage = {};
zim.queryMessageReactionUserList(messageObj, config)
.then((res: ZIMMessageReactionUserListQueriedResult) => {
// 操作成功
// 遍历 res.userInfoList,从中获取 userID
})
.catch((err: ZIMError) => {
// 操作失败
});
// 2.28.0 开始支持:按用户维度查询所有表态计数
const config: ZIMMessageReactionUserQueryConfig = {
reactionType: "", // 表态类型需要为空
// count 超过 100 条会返回报错
count: 20,
nextFlag: 0,
};
const messageObj: ZIMMessage = {};
zim.queryMessageReactionUserList(messageObj, config)
.then((res: ZIMMessageReactionUserListQueriedResult) => {
// 操作成功
// 遍历 res.userInfoList,从中获取 userID 和 reactions(表态类型和计数)
})
.catch((err: ZIMError) => {
// 操作失败
}); 