聊天室标签管理
更新时间: 2024/11/20 14:47:21
网易云信 IM 支持聊天室标签功能,通过在登录时聊天室时设置标签信息,发送消息时通知指定标签下的聊天室成员,来达到个性化的消息收发效果。
本文内容适用的开发平台或框架如下表所示:
Android | iOS | macOS/Windows | Web/uni-app/小程序 | Node.js/Electron | HarmonyOS | Flutter |
---|---|---|---|---|---|---|
✔️️️️ | ✔️️️️ | ✔️️️️ | ✔️️️️ | ✔️️️️ | ✔️️️️ | - |
技术原理
- 查询某个标签下的在线用户数,相同账号登录多端的情况下,在线用户数算 1 个。
- 查询某个标签下的在线成员列表,对于多端登录的用户,会返回多条记录。
- 修改聊天室用户的标签,修改 tag 后会通知被修改人的所有在线端,并广播通知聊天室内所有用户。
- 查询标签下的聊天室历史消息,可传多个标签。
前提条件
- 已 实现聊天室登录。
- 在使用聊天室服务中的 API 前,需要先调用
getChatroomService
方法获取聊天室服务类。
聊天室相关事件监听
在进行聊天室相关操作前,您可以先注册监听聊天室相关事件。监听后,在进行聊天室管理操作后,会收到对应的通知。
-
相关回调:
onChatroomTagsUpdated
:聊天室标签信息变更回调,返回标签列表。聊天室内所有成员均会收到该回调。 -
示例代码如下:
Androidjava
V2NIMChatroomClient v2ChatroomClient = V2NIMChatroomClient.getInstance(instanceId); V2NIMChatroomService v2ChatroomService = v2ChatroomClient.getChatroomService(); V2NIMChatroomListener listener = new V2NIMChatroomListener() { @Override public void onChatroomTagsUpdated(List<String> tags) { } }; v2ChatroomService.addChatroomListener(listener);
iOSobjective-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
macOS/Windowscpp
V2NIMChatroomListener listener; listener.onChatroomTagsUpdated = [](nstd::vector<nstd::string> tags) { // handle chatroom tags updated }; chatroomService.addChatroomListener(listener);
Web/uni-app/小程序typescript
chatroom.V2NIMChatroomService.on('onChatroomTagsUpdated', function (tags: Array<string>){})
Node.js/Electrontypescript
chatroom.chatroomService.on('chatroomTagsUpdated', function (tags: Array<string>){})
HarmonyOStypescript
chatroom.chatroomService.on('onChatroomTagsUpdated', (tags: Array<string>) => {})
实现标签功能
登录时设置标签信息
调用 enter
方法登录聊天室时,通过配置 tagConfig
来设置以下标签相关参数:
tags
:用于标识本次登录所属标签,同一个长连接最多支持设置 10 个标签,每个标签最多 32 个字符,例如:["abc", "def"]。notifyTargetTags
:指定登录/登出聊天室通知广播的标签用户,具体请参考 标签表达式。若缺省则服务器会根据tags
自动自动生成一个标签表达式。
登录聊天室具体实现请参考 聊天室登录文档。
发送消息时指定通知标签
调用 sendMessage
方法发送聊天室消息时,设置以下标签相关参数:
notifyTargetTags
:指定聊天室消息投递的标签对象,具体请参考 标签表达式。若缺省则服务器会使用登录时设置的 notifyTargetTags
。
消息发送具体实现请参考 聊天室消息管理。
标签管理
更新聊天室标签
调用 updateChatroomTags
方法批量更新聊天室标签信息。
更新后,聊天室内所有成员会收到聊天室标签信息变更回调 onChatroomTagsUpdated
,以及聊类型为 TAGS_UPDATE
的通知消息。
tags
和 notifyTargetTags
必须设置其一,否则返回参数错误。
示例代码如下:
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 chatroomService.updateChatroomTags({
tags: ['tag1', 'tag2']
})
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"})
参考文档
涉及接口
API | 说明 |
---|---|
V2NIMChatroomClient.getChatroomService |
获取聊天室服务类 |
addChatroomListener |
注册聊天室监听器 |
removeChatroomListener |
取消注册聊天室监听器 |
enter |
进入聊天室 |
V2NIMChatroomEnterParams.tagConfig |
聊天室标签相关配置 |
sendMessage |
发送聊天室消息 |
V2NIMSendChatroomMessageParams |
发送消息的配置参数 |
updateChatroomTags |
更新聊天室标签 |
API | 说明 |
---|---|
V2NIMChatroomClient.getChatroomService |
获取聊天室服务类 |
on("EventName") |
注册聊天室监听器 |
off("EventName") |
取消注册聊天室监听器 |
enter |
进入聊天室 |
V2NIMChatroomEnterParams.tagConfig |
聊天室标签相关配置 |
sendMessage |
发送聊天室消息 |
V2NIMSendChatroomMessageParams |
发送消息的配置参数 |
updateChatroomTags |
更新聊天室标签 |