聊天室标签管理
更新时间: 2024/06/12 17:25:18
网易云信 IM 支持聊天室标签功能,通过在登录时聊天室时设置标签信息,发送消息时通知指定标签下的聊天室成员,来达到个性化的消息收发效果。
技术原理
- 查询某个标签下的在线用户数,相同账号登录多端的情况下,在线用户数算 1 个。
- 查询某个标签下的在线成员列表,对于多端登录的用户,会返回多条记录。
- 修改聊天室用户的标签,修改 tag 后会通知被修改人的所有在线端,并广播通知聊天室内所有用户。
- 查询标签下的聊天室历史消息,可传多个标签。
聊天室相关事件监听
在进行聊天室相关操作前,您可以先注册监听聊天室相关事件。监听后,在进行聊天室管理操作后,会收到对应的通知。
-
相关回调
onChatroomTagsUpdated
:聊天室标签信息变更回调,返回标签列表。聊天室内所有成员均会收到该回调。 -
示例代码
javaV2NIMChatroomClient v2ChatroomClient = V2NIMChatroomClient.getInstance(instanceId);
V2NIMChatroomService v2ChatroomService = v2ChatroomClient.getChatroomService();
V2NIMChatroomListener listener = new V2NIMChatroomListener() {
@Override
public void onChatroomTagsUpdated(List<String> tags) {
}
};
v2ChatroomService.addChatroomListener(listener);
objective-c@interface Listener: NSObject<V2NIMChatroomListener>
- (void)addToService;
@end
@implementation Listener
- (void)addToService
{
id <V2NIMChatroomService> service = [[V2NIMChatroomClient getInstance:1] getChatroomService];
[service addChatroomListener:self];
}
- (void)onChatroomTagsUpdated:(NSArray<NSString *> *)tags
{
}
@end
cppV2NIMChatroomListener listener;
listener.onChatroomTagsUpdated = [](nstd::vector<nstd::string> tags) {
// handle chatroom tags updated
};
chatroomService.addChatroomListener(listener);
typescriptchatroom.V2NIMChatroomService.on('onChatroomTagsUpdated', function (tags: Array<string>){})
typescriptchatroom.chatroomService.on('onChatroomTagsUpdated', (tags: Array<string>) => {})
实现标签功能
登录时设置标签信息
调用 enter
方法登录聊天室时,通过配置 V2NIMChatroomEnterParams.tagConfig
来设置以下标签相关参数:
tags
:用于标识本次登录所属标签,同一个长连接最多支持设置 10 个标签,每个标签最多 32 个字符,例如:["abc", "def"]。notifyTargetTags
:指定登录/登出聊天室通知广播的标签用户,具体请参见标签表达式。若缺省则服务器会根据tags
自动自动生成一个标签表达式。
登录聊天室具体实现请参见 聊天室登录文档。
发送消息时指定通知标签
调用 sendMessage
方法发送聊天室消息时,通过配置 V2NIMSendChatroomMessageParams
来设置以下标签相关参数:
notifyTargetTags
:指定聊天室消息投递的标签对象,具体请参见 标签表达式。若缺省则服务器会使用登录时设置的 notifyTargetTags
。
消息发送具体实现请参见 聊天室消息管理。
标签管理
更新聊天室标签
调用 updateChatroomTags
方法批量更新聊天室标签信息。
更新后,聊天室内所有成员会收到聊天室标签信息变更回调 onChatroomTagsUpdated
,以及聊类型为 V2NIMChatroomMessageNotificationType.V2NIM_CHATROOM_MESSAGE_NOTIFICATION_TYPE_TAGS_UPDATE(17)
的通知消息。
- 参数说明
参数名称 | 类型 | 是否必填 | 默认值 | 描述 |
---|---|---|---|---|
updateParams |
V2NIMChatroomTagsUpdateParams |
是 | - | 聊天室标签信息更新参数 |
success |
V2NIMSuccessCallback |
是 | - | 更新成功回调 |
failure |
V2NIMFailureCallback |
是 | - | 更新失败回调,返回错误码 |
参数名称 | 类型 | 是否必填 | 默认值 | 描述 |
---|---|---|---|---|
updateParams |
V2NIMChatroomTagsUpdateParams |
是 | - | 聊天室标签信息更新参数 |
success |
V2NIMSuccessCallback |
是 | - | 更新成功回调 |
failure |
V2NIMFailureCallback |
是 | - | 更新失败回调,返回错误码 |
参数名称 | 类型 | 是否必填 | 默认值 | 描述 |
---|---|---|---|---|
updateParams |
V2NIMChatroomTagsUpdateParams |
是 | - | 聊天室标签信息更新参数 |
success |
V2NIMSuccessCallback |
是 | - | 更新成功回调 |
failure |
V2NIMFailureCallback |
是 | - | 更新失败回调,返回错误码 |
参数名称 | 类型 | 是否必填 | 默认值 | 描述 |
---|---|---|---|---|
updateParams |
V2NIMChatroomTagsUpdateParams |
是 | - | 聊天室标签信息更新参数 |
参数名称 | 类型 | 是否必填 | 默认值 | 描述 |
---|---|---|---|---|
updateParams |
V2NIMChatroomTagsUpdateParams |
是 | - | 聊天室标签信息更新参数 |
V2NIMChatroomTagsUpdateParams
参数说明:
tags
和notifyTargetTags
必须设置其一,否则返回参数错误。- 如果您的应用平台为 Android,则需要调用对应的成员函数获取对应参数。
名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
tags |
List<String> | 否 | 聊天室标签信息。 设置为空表示不更新,设置为 [] 表示清空原有标签 |
notifyTargetTags |
String | 否 | 操作后通知的标签信息,参见 标签表达式 设置为空表示不更新,设置为 "" 表示清空原有通知标签信息 |
notificationEnabled |
boolean | 否,默认 true | 操作后是否需要通知 |
notificationExtension |
String | 否 | 操作后通知的扩展字段 |
- 示例代码
javaV2NIMChatroomClient v2ChatroomClient = V2NIMChatroomClient.getInstance(instanceId);
V2NIMChatroomService v2ChatroomService = v2ChatroomClient.getChatroomService();
V2NIMChatroomTagsUpdateParams updateParams = new V2NIMChatroomTagsUpdateParams();
// tag 列表
List<String> tags = getTags();
updateParams.setTags(tags);
updateParams.setNotifyTargetTags("xxx");
// 以上两个字段至少需要设置一个,否则会返回参数错误
v2ChatroomService.updateChatroomTags(updateParams, new V2NIMSuccessCallback<Void>() {
@Override
public void onSuccess(Void unused) {
// 更新成功
}
}, new V2NIMFailureCallback() {
@Override
public void onFailure(V2NIMError error) {
// 更新失败
}
});
objective-c// 通过实例 ID 获取聊天室实例
id <V2NIMChatroomService> service = [[V2NIMChatroomClient getInstance:1] getChatroomService];
V2NIMChatroomTagsUpdateParams *updateParams = [[V2NIMChatroomTagsUpdateParams alloc] init];
// tag 列表
NSArray<NSString *> *tags = @[ @"tag0", @"tag1" ]];
updateParams.tags = tags;
updateParams.notifyTargetTags = @"xxx";
// 以上两个字段至少需要设置一个,否则会返回参数错误
[service updateChatroomTags:updateParams
success:^()
{
// 更新成功
}
failure:^(V2NIMError *error)
{
// 更新失败
}];
cppV2NIMChatroomTagsUpdateParams updateParams;
updateParams.tags = {"tag1", "tag2"};
updateParams.notifyTargetTags = R"({"tag": "tag1"})";
chatroomService.updateChatroomTags(
updateParams,
[]() {
// update chatroom tags succeeded
},
[](V2NIMError error) {
// update chatroom tags failed, handle error
});
typescriptawait chatroomV2.V2NIMChatroomService.updateChatroomTags(
{
"tags": [
"tag1",
"tag2"
],
"notifyTargetTags": "{tag: \"tag1\"}",
"notificationEnabled": true,
"notificationExtension": "notificationExtension"
}
)
typescriptawait this.chatroomClient.chatroomService.updateChatroomTags(
{
"tags": [
"tag1",
"tag2"
],
"notifyTargetTags": "{tag: \"tag1\"}",
"notificationEnabled": true,
"notificationExtension": "notificationExtension"
}
)
相关信息
标签表达式
标签表达式用于设置进出聊天室通知和消息的投递对象,表达式支持设置交并集,也支持设置正则匹配,并且可以使用括号来设置表达式中的优先级(类似于加减乘除四则运算中的括号),每个标签表达式限制最多 128 个字符。
以下是一些标签表达式的示例:
1)匹配标签abc
{"tag": "abc"}
2)匹配标签abc或者def
{"tag": "abc"} or {"tag": "def"}
3)匹配标签abc且def
{"tag": "abc"} and {"tag": "def"}
4)使用正则匹配标签abc
{"tag": "abc.*", "matchType": "regex"}
5)匹配标签abc或者def,并且,同时正则匹配标签123或456
({"tag": "abc"} or {"tag": "def"}) and ({"tag": ".*123", "matchType": "regex"} or {"tag": "456.*", "matchType": "regex"})