聊天室标签管理

更新时间: 2024/11/20 14:47:21

网易云信 IM 支持聊天室标签功能,通过在登录时聊天室时设置标签信息,发送消息时通知指定标签下的聊天室成员,来达到个性化的消息收发效果。

本文内容适用的开发平台或框架如下表所示:

Android iOS macOS/Windows Web/uni-app/小程序 Node.js/Electron HarmonyOS Flutter
✔️️️️ ✔️️️️ ✔️️️️ ✔️️️️ ✔️️️️ ✔️️️️ -

技术原理

  • 查询某个标签下的在线用户数,相同账号登录多端的情况下,在线用户数算 1 个。
  • 查询某个标签下的在线成员列表,对于多端登录的用户,会返回多条记录。
  • 修改聊天室用户的标签,修改 tag 后会通知被修改人的所有在线端,并广播通知聊天室内所有用户。
  • 查询标签下的聊天室历史消息,可传多个标签。

前提条件

  • 实现聊天室登录
  • 在使用聊天室服务中的 API 前,需要先调用 getChatroomService 方法获取聊天室服务类。

聊天室相关事件监听

在进行聊天室相关操作前,您可以先注册监听聊天室相关事件。监听后,在进行聊天室管理操作后,会收到对应的通知。

  • 相关回调:onChatroomTagsUpdated:聊天室标签信息变更回调,返回标签列表。聊天室内所有成员均会收到该回调。

  • 示例代码如下:

    Android
    javaV2NIMChatroomClient v2ChatroomClient = V2NIMChatroomClient.getInstance(instanceId);
    V2NIMChatroomService v2ChatroomService = v2ChatroomClient.getChatroomService();
    
    V2NIMChatroomListener listener = new V2NIMChatroomListener() {
    
        @Override
        public void onChatroomTagsUpdated(List<String> tags) {
    
        }
    };
    
    v2ChatroomService.addChatroomListener(listener);
    
    iOS
    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
    
    macOS/Windows
    cppV2NIMChatroomListener listener;
    listener.onChatroomTagsUpdated = [](nstd::vector<nstd::string> tags) {
        // handle chatroom tags updated
    };
    chatroomService.addChatroomListener(listener);
    
    Web/uni-app/小程序
    typescriptchatroom.V2NIMChatroomService.on('onChatroomTagsUpdated', function (tags: Array<string>){})
    
    Node.js/Electron
    typescriptchatroom.chatroomService.on('chatroomTagsUpdated', function (tags: Array<string>){})
    
    HarmonyOS
    typescriptchatroom.chatroomService.on('onChatroomTagsUpdated', (tags: Array<string>) => {})
    

实现标签功能

登录时设置标签信息

调用 enter 方法登录聊天室时,通过配置 tagConfig 来设置以下标签相关参数:

  • tags:用于标识本次登录所属标签,同一个长连接最多支持设置 10 个标签,每个标签最多 32 个字符,例如:["abc", "def"]。
  • notifyTargetTags:指定登录/登出聊天室通知广播的标签用户,具体请参考 标签表达式。若缺省则服务器会根据 tags 自动自动生成一个标签表达式。

登录聊天室具体实现请参考 聊天室登录文档

发送消息时指定通知标签

调用 sendMessage 方法发送聊天室消息时,设置以下标签相关参数:

notifyTargetTags:指定聊天室消息投递的标签对象,具体请参考 标签表达式。若缺省则服务器会使用登录时设置的 notifyTargetTags

消息发送具体实现请参考 聊天室消息管理

标签管理

更新聊天室标签

调用 updateChatroomTags 方法批量更新聊天室标签信息。

更新后,聊天室内所有成员会收到聊天室标签信息变更回调 onChatroomTagsUpdated,以及聊类型为 TAGS_UPDATE 的通知消息。

tagsnotifyTargetTags 必须设置其一,否则返回参数错误。

示例代码如下:

Android
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) {
        // 更新失败
    }
});
iOS
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)
            {
                // 更新失败
            }];
macOS/Windows
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
    });
Web/uni-app/小程序
typescriptawait chatroomV2.V2NIMChatroomService.updateChatroomTags(
  {
    "tags": [
      "tag1",
      "tag2"
    ],
    "notifyTargetTags": "{tag: \"tag1\"}",
    "notificationEnabled": true,
    "notificationExtension": "notificationExtension"
  }
)
Node.js/Electron
typescriptawait chatroomService.updateChatroomTags({
    tags: ['tag1', 'tag2']
})
HarmonyOS
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"})

参考文档

涉及接口

Android/iOS/macOS/Windows
API 说明
V2NIMChatroomClient.getChatroomService 获取聊天室服务类
addChatroomListener 注册聊天室监听器
removeChatroomListener 取消注册聊天室监听器
enter 进入聊天室
V2NIMChatroomEnterParams.tagConfig 聊天室标签相关配置
sendMessage 发送聊天室消息
V2NIMSendChatroomMessageParams 发送消息的配置参数
updateChatroomTags 更新聊天室标签
Web/uni-app/小程序/Node.js/Electron/HarmonyOS
API 说明
V2NIMChatroomClient.getChatroomService 获取聊天室服务类
on("EventName") 注册聊天室监听器
off("EventName") 取消注册聊天室监听器
enter 进入聊天室
V2NIMChatroomEnterParams.tagConfig 聊天室标签相关配置
sendMessage 发送聊天室消息
V2NIMSendChatroomMessageParams 发送消息的配置参数
updateChatroomTags 更新聊天室标签
此文档是否对你有帮助?
有帮助
去反馈
  • 技术原理
  • 前提条件
  • 聊天室相关事件监听
  • 实现标签功能
  • 登录时设置标签信息
  • 发送消息时指定通知标签
  • 标签管理
  • 更新聊天室标签
  • 相关信息
  • 标签表达式
  • 参考文档
  • 涉及接口