聊天室标签管理

更新时间: 2024/06/12 17:25:18

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

技术原理

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

聊天室相关事件监听

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

  • 相关回调

    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>){})
Harmony
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) 的通知消息。

  • 参数说明
Android
参数名称 类型 是否必填 默认值 描述
updateParams V2NIMChatroomTagsUpdateParams - 聊天室标签信息更新参数
success V2NIMSuccessCallback - 更新成功回调
failure V2NIMFailureCallback - 更新失败回调,返回错误码
iOS
参数名称 类型 是否必填 默认值 描述
updateParams V2NIMChatroomTagsUpdateParams - 聊天室标签信息更新参数
success V2NIMSuccessCallback - 更新成功回调
failure V2NIMFailureCallback - 更新失败回调,返回错误码
macOS/Windows
参数名称 类型 是否必填 默认值 描述
updateParams V2NIMChatroomTagsUpdateParams - 聊天室标签信息更新参数
success V2NIMSuccessCallback - 更新成功回调
failure V2NIMFailureCallback - 更新失败回调,返回错误码
Web/uni-app/小程序
参数名称 类型 是否必填 默认值 描述
updateParams V2NIMChatroomTagsUpdateParams - 聊天室标签信息更新参数
Harmony
参数名称 类型 是否必填 默认值 描述
updateParams V2NIMChatroomTagsUpdateParams - 聊天室标签信息更新参数

V2NIMChatroomTagsUpdateParams 参数说明:

  • tagsnotifyTargetTags 必须设置其一,否则返回参数错误。
  • 如果您的应用平台为 Android,则需要调用对应的成员函数获取对应参数。
名称 类型 是否必填 描述
tags List<String> 聊天室标签信息。
设置为空表示不更新,设置为 [] 表示清空原有标签
notifyTargetTags String 操作后通知的标签信息,参见 标签表达式
设置为空表示不更新,设置为 "" 表示清空原有通知标签信息
notificationEnabled boolean 否,默认 true 操作后是否需要通知
notificationExtension String 操作后通知的扩展字段
  • 示例代码
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"
  }
)
Harmony
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"})

参考文档

此文档是否对你有帮助?
有帮助
去反馈
  • 技术原理
  • 聊天室相关事件监听
  • 实现标签功能
  • 登录时设置标签信息
  • 发送消息时指定通知标签
  • 标签管理
  • 更新聊天室标签
  • 相关信息
  • 标签表达式
  • 参考文档