消息扩展

更新时间: 2024/05/23 19:27:45

NetEase IM SDK(以下简称 NIM SDK)支持多种消息扩展功能,助您快速实现多样化的消息业务场景。

本文介绍通过 NIM SDK 实现消息扩展功能,包括消息回复、Pin 消息、消息快捷评论、消息收藏功能。

开通消息扩展相关功能

  1. 在控制台首页应用管理中选择应用,然后单击 IM 即时通讯下的功能配置按钮进入功能配置页。

    image.png
  2. 在顶部选择全局功能页签,开启对应的消息扩展功能。需要开通以下功能:

    • 会话消息标记(Pin 消息)
    • 会话消息回复
    • 消息快捷评论

实现消息回复

消息回复指,引用收到的某条消息并进行针对性的回复,形成以该消息为根消息的 Thread 树状结构。通过该功能,用户可针对某一条消息进行提问、反馈或补充相关背景信息,且不会对会话造成干扰。

Thread 消息树状结构示例见下图:

Thread消息.png

上图中:

  • 消息 A 是消息 B 的父消息,消息 B1 是消息 C 的父消息
  • 消息 C 是消息 B1 的子消息
  • 消息 A 是消息 B 和消息 C 的根消息
  • 消息 A、B、C 统称为 Threaded Message(串联起来的消息)

一条 Threaded Message 必须有一条父消息或至少一条子消息。如果一条消息既没有父消息,也没有子消息,则为普通消息。

回复一条消息

调用 replyMessage 方法发送一条回复消息。

  • 参数说明

    Android
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 发送的消息对象,通过调用 V2NIMMessageCreator 中的接口创建。如果为空或不存在则返回 191004 参数错误。
    replyMessage V2NIMMessage - 被回复的消息对象,如果为空或不存在则返回 191004 参数错误。
    params V2NIMSendMessageParams null 消息发送配置参数,包括发送、推送、抄送、反垃圾等配置。
    success V2NIMSuccessCallback - 消息发送成功回调,返回 V2NIMSendMessageResult
    failure V2NIMFailureCallback - 消息发送失败回调,返回错误码
    progress V2NIMProgressCallback null 附件上传进度回调,用于图片、语音、视频、文件类型消息。
    iOS
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 发送的消息对象,通过调用 V2NIMMessageCreator 中的接口创建。如果为空或不存在则返回 191004 参数错误。
    replyMessage V2NIMMessage - 被回复的消息对象,如果为空或不存在则返回 191004 参数错误。
    params V2NIMSendMessageParams null 消息发送配置参数,包括发送、推送、抄送、反垃圾等配置。
    success V2NIMSuccessCallback - 消息发送成功回调,返回 V2NIMSendMessageResult
    failure V2NIMFailureCallback - 消息发送失败回调,返回错误码
    progress V2NIMProgressCallback null 附件上传进度回调,用于图片、语音、视频、文件类型消息。
    macOS/Windows
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 发送的消息对象,通过调用 V2NIMMessageCreator 中的接口创建。如果为空或不存在则返回 191004 参数错误。
    replyMessage V2NIMMessage - 被回复的消息对象,如果为空或不存在则返回 191004 参数错误。
    params V2NIMSendMessageParams null 消息发送配置参数,包括发送、推送、抄送、反垃圾等配置。
    success V2NIMSuccessCallback - 消息发送成功回调,返回 V2NIMSendMessageResult
    failure V2NIMFailureCallback - 消息发送失败回调,返回错误码
    progress V2NIMProgressCallback null 附件上传进度回调,用于图片、语音、视频、文件类型消息。
    Web/uni-app/小程序
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 发送的消息对象,通过调用 V2NIMMessageCreator 中的接口创建。如果为空或不存在则返回 191004 参数错误。
    replyMessage V2NIMMessage - 被回复的消息对象,如果为空或不存在则返回 191004 参数错误。
    params V2NIMSendMessageParams null 消息发送配置参数,包括发送、推送、抄送、反垃圾等配置。
    progress number null 附件上传进度回调,用于图片、语音、视频、文件类型消息。
    Harmony
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 发送的消息对象,通过调用 V2NIMMessageCreator 中的接口创建。如果为空或不存在则返回 191004 参数错误。
    replyMessage V2NIMMessage - 被回复的消息对象,如果为空或不存在则返回 191004 参数错误。
    params V2NIMSendMessageParams null 消息发送配置参数,包括发送、推送、抄送、反垃圾等配置。
    progress number null 附件上传进度回调,用于图片、语音、视频、文件类型消息。
  • 示例代码

    Android
    javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);
    // 以文本消息为例,构建文本消息
    V2NIMMessage v2Message = V2NIMMessageCreator.createTextMessage("xxx");
    // V2NIMMessage replyMessage = ; // 被回复的消息
    
    // 根据实际情况配置
    V2NIMMessageAntispamConfig antispamConfig = V2NIMMessageAntispamConfig.V2NIMMessageAntispamConfigBuilder.builder()
    .withAntispamBusinessId()
    .withAntispamCheating()
    .withAntispamCustomMessage()
    .withAntispamEnabled()
    .withAntispamExtension()
    .build();
    
    // 根据实际情况配置
    V2NIMMessageConfig messageConfig = V2NIMMessageConfig.V2NIMMessageConfigBuilder.builder()
    .withConversationUpdateEnabled()
    .withHistoryEnabled()
    .withOfflineEnabled()
    .withOnlineSyncEnabled()
    .withReadReceiptEnabled()
    .withRoamingEnabled()
    .withUnreadEnabled()
    .build();
    
    // 根据实际情况配置
    V2NIMMessagePushConfig pushConfig = V2NIMMessagePushConfig.V2NIMMessagePushConfigBuilder.builder()
    .withContent()
    .withForcePush()
    .withForcePushAccountIds()
    .withForcePushContent()
    .withPayload()
    .withPushEnabled()
    .withPushNickEnabled()
    .build();
    
    // 根据实际情况配置
    V2NIMMessageRobotConfig robotConfig = V2NIMMessageRobotConfig.V2NIMMessageRobotConfigBuilder.builder()
    .withAccountId()
    .withCustomContent()
    .withFunction()
    .withTopic()
    .build();
    
    // 根据实际情况配置
    V2NIMMessageRouteConfig routeConfig = V2NIMMessageRouteConfig.V2NIMMessageRouteConfigBuilder.builder()
    .withRouteEnabled()
    .withRouteEnvironment()
    .build();
    
    // 根据实际情况配置
    V2NIMSendMessageParams sendMessageParams = V2NIMSendMessageParams.V2NIMSendMessageParamsBuilder.builder()
    .withAntispamConfig(antispamConfig)
    .withClientAntispamEnabled()
    .withClientAntispamReplace()
    .withMessageConfig(messageConfig)
    .withPushConfig(pushConfig)
    .withRobotConfig(robotConfig)
    .withRouteConfig(routeConfig)
    .build();
    
    // 发送回复消息
    v2MessageService.replyMessage(v2Message, replyMessage, sendMessageParams,
        new V2NIMSuccessCallback<V2NIMSendMessageResult>() {
            @Override
            public void onSuccess(V2NIMSendMessageResult v2NIMSendMessageResult) {
                // TODO: 发送成功
            }
        },
        new V2NIMFailureCallback() {
            @Override
            public void onFailure(V2NIMError error) {
                // TODO: 发送失败
            }
        },
        new V2NIMProgressCallback() {
            @Override
            public void onProgress(int progress) {
                // TODO: 发送进度
            }
        });
    
    iOS
    objective-c// 以文本消息为例,构建文本消息
    V2NIMMessage *replyMessage = [V2NIMMessageCreator createTextMessage:@"reply message"];
    // 消息见参数设置文档
    V2NIMSendMessageParams *params = [[V2NIMSendMessageParams alloc] init];
    
    [[[NIMSDK sharedSDK] v2MessageService] sendMessage:replyMessage
                                        conversationId:@"conversationId"
                                                params:params
                                            success:^(V2NIMSendMessageResult * _Nonull result) {
                                                // 发送成功回调
                                                }
                                            failure:^(V2NIMError * _Nonnull error) {
                                                // 发送失败回调, error 包含错误原因
                                                }
                                            progress:^(NSUInteger progress) {
                                                // 发送进行
    }];
    
    V2NIMMessage *message = [V2NIMMessageCreator createTextMessage:@"message"];
    
    // 发送回复消息
    [[[NIMSDK sharedSDK] v2MessageService] replyMessage:message
                                        replyMessage:replyMessage
                                                params:params
                                                success:^(V2NIMSendMessageResult * _Nonnull result) {
                                                // 发送成功回调
                                                }
                                                failure:^(V2NIMError * _Nonnull error) {
                                                // 发送失败回调, error 包含错误原因
                                                }
                                            progress:^(NSUInteger progress) {
                                            // 发送进行
    }];
    
    macOS/Windows
    cpp// 以文本消息为例,构建文本消息
    auto message = V2NIMMessageCreator::createTextMessage("hello world");
    auto params = V2NIMSendMessageParams();
    // 发送回复消息
    messageService.replyMessage(
        message,
        replyMessage,
        params,
        [](V2NIMSendMessageResult result) {
            // reply message succeeded
        },
        [](V2NIMError error) {
            // reply message failed, handle error
        },
        [](uint32_t progress) {
            // upload progress
        });
    
    Web/uni-app/小程序
    typescripttry {
    // 以文本消息为例,构建文本消息
    const message: V2NIMMessage = nim.V2NIMMessageCreator.createTextMessage("reply text")
    const result: V2NIMSendMessageResult = await nim.V2NIMMessageService.replyMessage(message, repliedMessage)
    // todo Success
    } catch (err) {
    // todo error
    }
    
    Harmony
    typescripttry {
    const message: V2NIMMessage = nim.messageCreator.createTextMessage("reply text")
    const result: V2NIMSendMessageResult = await nim.messageService.replyMessage(message, repliedMessage)
    // todo Success
    } catch (err) {
    // todo error
    }
    

实现消息快捷评论

支持针对某条消息进行快捷评论,评论内容通常为表情、短文本,由应用层定义评论内容与 UI 展示之间的映射关系。

注册消息监听器

Android/iOS/Windows/macOS

调用 addMessageListener 方法注册消息监听器,监听消息快捷评论通知回调 onMessageQuickCommentNotification

Android
javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);

V2NIMMessageListener messageListener = new V2NIMMessageListener() {

    @Override
    public void onMessageQuickCommentNotification(V2NIMMessageQuickCommentNotification quickCommentNotification) {
    // receive message quick comment notification
    }
};
v2MessageService.addMessageListener(messageListener);
iOS
objective-c[[[NIMSDK sharedSDK] v2MessageService] addMessageListener:listener];
macOS/Windows
cppV2NIMMessageListener listener;
listener.onMessageQuickCommentNotification = [](V2NIMMessageQuickCommentNotification quickCommentNotification) {
    // receive message quick comment notification
};
messageService.addMessageListener(listener);

Web/uni-app/小程序/Harmony

调用 on("EventName") 方法注册消息监听器,监听消息接收回调事件 onMessageQuickCommentNotification

Web/uni-app/小程序
typescriptnim.V2NIMMessageService.on("onMessageQuickCommentNotification", function (quickCommentNotification: V2NIMMessageQuickCommentNotification) {})
Harmony
typescriptnim.messageService.on("onMessageQuickCommentNotification", function (quickCommentNotification: V2NIMMessageQuickCommentNotification) {})

添加快捷评论

调用 addQuickComment 方法针对指定消息添加一条快捷评论。添加成功后,消息发送方和消息接收方均会收到消息快捷评论操作通知回调 onMessageQuickCommentNotification 并通知 UI 界面更新。

  • 参数说明

    Android
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 被快捷评论的消息对象。如果为空或不存在则返回 191004 参数错误。
    index Long - 自定义快捷评论索引,必须大于 0。可在本地自定义映射关系,例如:
  • 表情回复:1:笑脸;2:大笑。UI 层根据 index 展示对应的表情。
  • 文本快捷回复等其他回复场景。
  • serverExtension String null 评论服务端扩展字段。必须为 JSON 格式封装,长度上限为 8 字符,多端同步。
    pushConfig V2NIMMessageQuickCommentPushConfig null 快捷评论推送配置
    success V2NIMSuccessCallback - 评论成功回调
    failure V2NIMFailureCallback - 评论失败回调,返回错误码
    iOS
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 被快捷评论的消息对象。如果为空或不存在则返回 191004 参数错误。
    index NSInteger - 自定义快捷评论索引,必须大于 0。可在本地自定义映射关系,例如:
  • 表情回复:1:笑脸;2:大笑。UI 层根据 index 展示对应的表情。
  • 文本快捷回复等其他回复场景。
  • serverExtension NSString * null 评论服务端扩展字段。必须为 JSON 格式封装,长度上限为 8 字符,多端同步。
    pushConfig V2NIMMessageQuickCommentPushConfig null 快捷评论推送配置
    success V2NIMSuccessCallback - 评论成功回调
    failure V2NIMFailureCallback - 评论失败回调,返回错误码
    macOS/Windows
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 被快捷评论的消息对象。如果为空或不存在则返回 191004 参数错误。
    index uint64_t - 自定义快捷评论索引,必须大于 0。可在本地自定义映射关系,例如:
  • 表情回复:1:笑脸;2:大笑。UI 层根据 index 展示对应的表情。
  • 文本快捷回复等其他回复场景。
  • serverExtension nstd::optionalnstd::string null 评论服务端扩展字段。必须为 JSON 格式封装,长度上限为 8 字符,多端同步。
    pushConfig V2NIMMessageQuickCommentPushConfig null 快捷评论推送配置
    success V2NIMSuccessCallback - 评论成功回调
    failure V2NIMFailureCallback - 评论失败回调,返回错误码
    Web/uni-app/小程序
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 被快捷评论的消息对象。如果为空或不存在则返回 191004 参数错误。
    index number - 自定义快捷评论索引,必须大于 0。可在本地自定义映射关系,例如:
  • 表情回复:1:笑脸;2:大笑。UI 层根据 index 展示对应的表情。
  • 文本快捷回复等其他回复场景。
  • serverExtension String null 评论服务端扩展字段。必须为 JSON 格式封装,长度上限为 8 字符,多端同步。
    pushConfig V2NIMMessageQuickCommentPushConfig null 快捷评论推送配置
    Harmony
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 被快捷评论的消息对象。如果为空或不存在则返回 191004 参数错误。
    index number - 自定义快捷评论索引,必须大于 0。可在本地自定义映射关系,例如:
  • 表情回复:1:笑脸;2:大笑。UI 层根据 index 展示对应的表情。
  • 文本快捷回复等其他回复场景。
  • serverExtension String null 评论服务端扩展字段。必须为 JSON 格式封装,长度上限为 8 字符,多端同步。
    pushConfig V2NIMMessageQuickCommentPushConfig null 快捷评论推送配置
  • 示例代码

    Android
    javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);
    
    V2NIMMessageQuickCommentPushConfig quickCommentPushConfig = V2NIMMessageQuickCommentPushConfig.V2NIMMessageQuickCommentPushConfigBuilder.builder()
    // 根据实际情况设置
    .withNeedBadge()
    .withPushContent()
    .withPushEnabled()
    .withPushPayload()
    .withPushTitle()
    .build();
    
    // V2NIMMessage quickCommentMessage = ; //  添加快捷评论的消息
    // int quickCommentIndex = ; // 快捷评论的序号
    
    // 添加快捷评论
    v2MessageService.addQuickComment(quickCommentMessage, quickCommentIndex, "xxx", quickCommentPushConfig,
            new V2NIMSuccessCallback<Void>() {
                @Override
                public void onSuccess(Void unused) {
    
                }
            },
            new V2NIMFailureCallback() {
                @Override
                public void onFailure(V2NIMError error) {
                    
                }
            });
    
    iOS
    objective-cV2NIMMessageQuickCommentPushConfig *quickCommentPushConfig = [[V2NIMMessageQuickCommentPushConfig alloc] init];
    // 添加快捷评论
    [[[NIMSDK sharedSDK] v2MessageService] addQuickComment:message
                                                    index:1
                                        serverExtension:@"serverExtension"
                                            pushConfig:quickCommentPushConfig
                                                success:^{
        // success
    } failure:^(V2NIMError * _Nonnull error) {
        // error 包含错误原因
    }];
    
    macOS/Windows
    cppV2NIMMessage message;
    
    V2NIMMessageQuickCommentPushConfig pushConfig;
    // 添加快捷评论
    messageService.addQuickComment(
        message,
        1,
        "serverExtension",
        pushConfig,
        []() {
            // add quick comment succeeded
        },
        [](V2NIMError error) {
            // add quick comment failed, handle error
        });
    
    Web/uni-app/小程序
    typescripttry {
    // 添加快捷评论
    await nim.V2NIMMessageService.addQuickComment(message, 1, 'serverExtension')
    // todo Success
    } catch (err) {
    // todo error
    }
    
    Harmony
    typescripttry {
    await nim.messageService.addQuickComment(message, 1, 'serverExtension')
    // todo Success
    } catch (err) {
    // todo error
    }
    

移除快捷评论

调用 removeQuickComment 方法移除一条快捷评论。移除成功后,消息发送方和消息接收方均会收到消息快捷评论操作通知回调 onMessageQuickCommentNotification

  • 参数说明

    Android
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 被快捷评论的消息对象。如果为空或不存在则返回 191004 参数错误。
    index Long - 快捷评论索引,必须大于 0。
    serverExtension String null 服务端扩展字段。长度上限为 8 字符,多端同步。
    success V2NIMSuccessCallback - 移除评论成功回调
    failure V2NIMFailureCallback - 移除评论失败回调,返回错误码
    iOS
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 被快捷评论的消息对象。如果为空或不存在则返回 191004 参数错误。
    index NSInteger - 快捷评论索引,必须大于 0。
    serverExtension NSString * null 服务端扩展字段。长度上限为 8 字符,多端同步。
    success V2NIMSuccessCallback - 移除评论成功回调
    failure V2NIMFailureCallback - 移除评论失败回调,返回错误码
    macOS/Windows
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 被快捷评论的消息对象。如果为空或不存在则返回 191004 参数错误。
    index uint32_t - 快捷评论索引,必须大于 0。
    serverExtension nstd::optionalnstd::string null 服务端扩展字段。长度上限为 8 字符,多端同步。
    success V2NIMSuccessCallback - 移除评论成功回调
    failure V2NIMFailureCallback - 移除评论失败回调,返回错误码
    Web/uni-app/小程序
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 被快捷评论的消息对象。如果为空或不存在则返回 191004 参数错误。
    index number - 快捷评论索引,必须大于 0。
    serverExtension String null 服务端扩展字段。长度上限为 8 字符,多端同步。
    Harmony
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 被快捷评论的消息对象。如果为空或不存在则返回 191004 参数错误。
    index number - 快捷评论索引,必须大于 0。
    serverExtension String null 服务端扩展字段。长度上限为 8 字符,多端同步。
  • 示例代码

    Android
    javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);
    
    // V2NIMMessageRefer quickCommentMessageRefer  // 移除快捷评论的消息引用
    // int quickCommentIndex  // 快捷评论的序号
    
    // 移除快捷评论
    v2MessageService.removeQuickComment(quickCommentMessageRefer, quickCommentIndex, "xxx",
            new V2NIMSuccessCallback<Void>() {
                @Override
                public void onSuccess(Void unused) {
                // success
                }
            },
            new V2NIMFailureCallback() {
                @Override
                public void onFailure(V2NIMError error) {
                // failed, handle error
                }
            });
    
    iOS
    objective-cV2NIMMessageRefer *refer = [[V2NIMMessageRefer alloc] init];
    // 移除快捷评论
    [[[NIMSDK sharedSDK] v2MessageService] removeQuickComment:refer index:1 serverExtension:@"serverExtension" success:^{
        // success
    } failure:^(V2NIMError * _Nonnull error) {
        // error 包含错误原因
    }];
    
    macOS/Windows
    cppV2NIMMessageRefer messageRefer;
    
    // 移除快捷评论
    messageService.removeQuickComment(
        messageRefer,
        1,
        "serverExtension",
        []() {
            // remove quick comment succeeded
        },
        [](V2NIMError error) {
            // remove quick comment failed, handle error
        });
    
    Web/uni-app/小程序
    typescripttry {
    // 移除快捷评论
    await nim.V2NIMMessageService.removeQuickComment(messageRefer, 1, 'serverExtension')
    // todo success
    } catch (err) {
    // todo error
    }
    
    Harmony
    typescripttry {
    await nim.messageService.removeQuickComment(messageRefer, 1, 'serverExtension')
    // todo Success
    } catch (err) {
    // todo error
    }
    

获取快捷评论列表

调用 getQuickCommentList 获取指定消息的所有快捷评论。获取结果不包含已删除消息的快捷评论,按照评论时间排序。

  • 参数说明

    Android
    参数名称 类型 是否必填 默认值 描述
    message List<V2NIMMessage> - 被快捷评论的消息对象。如果为空或不存在则返回 191004 参数错误。
    success V2NIMSuccessCallback - 获取成功回调,返回按照评论时间排序的 V2NIMMessageQuickComment 列表。
    failure V2NIMFailureCallback - 获取失败回调,返回错误码
    iOS
    参数名称 类型 是否必填 默认值 描述
    message NSArray <V2NIMMessage*> * - 被快捷评论的消息对象。如果为空或不存在则返回 191004 参数错误。
    success V2NIMGetQuickCommentListSuccess - 获取成功回调,可自定义设置。
    failure V2NIMFailureCallback - 获取失败回调,返回错误码
    macOS/Windows
    参数名称 类型 是否必填 默认值 描述
    message std::vector<V2NIMMessage> - 被快捷评论的消息对象。如果为空或不存在则返回 191004 参数错误。
    success V2NIMSuccessCallback - 获取成功回调,返回按照评论时间排序的 V2NIMMessageQuickComment 列表。
    failure V2NIMFailureCallback - 获取失败回调,返回错误码
    Web/uni-app/小程序
    参数名称 类型 是否必填 默认值 描述
    messages V2NIMMessage[] - 被快捷评论的消息对象。如果为空或不存在则返回 191004 参数错误。
    Harmony
    参数名称 类型 是否必填 默认值 描述
    messages V2NIMMessage[] - 被快捷评论的消息对象。如果为空或不存在则返回 191004 参数错误。
  • 示例代码

    Android
    javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);
    
    // List<V2NIMMessage> messages // 需要查询快捷评论的消息列表
    
    v2MessageService.getQuickCommentList(messages,
            new V2NIMSuccessCallback<Map<String, List<V2NIMMessageQuickComment>>>() {
                @Override
                public void onSuccess(Map<String, List<V2NIMMessageQuickComment>> stringListMap) {
                // success
                }
            },
            new V2NIMFailureCallback() {
                @Override
                public void onFailure(V2NIMError error) {
                // failed, handle error
                }
            });
    
    iOS
    objective-c[[[NIMSDK sharedSDK] v2MessageService] getQuickCommentList:@[message1, message2]
                                                    success:^(NSDictionary<NSString *,NSArray<V2NIMMessageQuickComment *> *> * _Nonnull result) {
        // 返回 Dictionary 被快捷评论的消息
    }
                                                    failure:^(V2NIMError * _Nonnull error) {
        // error 包含错误原因
    }];
    
    macOS/Windows
    cppnstd::vector<V2NIMMessage> messages
    // ...
    messageService.getQuickCommentList(
        messages,
        [](nstd::map<nstd::string, nstd::vector<V2NIMMessageQuickComment>> quiments) {
            for (auto&& quickComment : quickComments) {
                // do something
            }
        },
        [](V2NIMError error) {
            // get quick comment list failed, handle error
        });
    
    Web/uni-app/小程序
    typescripttry {
    const quickCommentList = await nim.V2NIMMessageService.getQuickCommentList(messages)
    // todo success
    } catch (err) {
    // todo error
    }
    
    Harmony
    typescripttry {
    const quickCommentList = await nim.messageService.getQuickCommentList(messages)
    // todo Success
    } catch (err) {
    // todo error
    }
    

实现收藏功能

支持收藏已发送成功的消息或其他自定义内容。

添加一条收藏

调用 addCollection 方法添加一条收藏。

  • 参数说明

    Android
    参数名称 类型 是否必填 默认值 描述
    params V2NIMAddCollectionParams - 收藏配置参数
    success V2NIMSuccessCallback - 收藏成功回调,返回收藏对象 V2NIMCollection
    failure V2NIMFailureCallback - 收藏失败回调,返回错误码
    iOS
    参数名称 类型 是否必填 默认值 描述
    params V2NIMAddCollectionParams - 收藏配置参数
    success V2NIMSuccessCallback - 收藏成功回调,返回收藏对象 V2NIMCollection
    failure V2NIMFailureCallback - 收藏失败回调,返回错误码
    macOS/Windows
    参数名称 类型 是否必填 默认值 描述
    params V2NIMAddCollectionParams - 收藏配置参数
    success V2NIMSuccessCallback - 收藏成功回调,返回收藏对象 V2NIMCollection
    failure V2NIMFailureCallback - 收藏失败回调,返回错误码
    Web/uni-app/小程序
    参数名称 类型 是否必填 默认值 描述
    params V2NIMAddCollectionParams - 收藏配置参数
    Harmony
    参数名称 类型 是否必填 默认值 描述
    params V2NIMAddCollectionParams - 收藏配置参数
  • 示例代码

    Android
    javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);
    
    // int collectionType = ;
    // String collectionData = ;
    
    V2NIMAddCollectionParams addCollectionParams = V2NIMAddCollectionParams.V2NIMAddCollectionParamsBuilder
    // 必填
    .builder(collectionType, collectionData)
    // 根据实际情况配置
    .withServerExtension()
    .build();
    
    v2MessageService.addCollection(addCollectionParams,
            new V2NIMSuccessCallback<V2NIMCollection>() {
                @Override
                public void onSuccess(V2NIMCollection v2NIMCollection) {
                // success
                }
            },
            new V2NIMFailureCallback() {
                @Override
                public void onFailure(V2NIMError error) {
                // failed, handle error
                }
            });
    
    iOS
    objective-cV2NIMAddCollectionParams *addCollectionParams = [[V2NIMAddCollectionParams alloc] init];
    [[[NIMSDK sharedSDK] v2MessageService] addCollection:addCollectionParams
                                                success:^(V2NIMCollection * _Nonnull result) {
        // V2NIMCollection
    }
                                                failure:^(V2NIMError * _Nonnull error) {
        // error 包含错误原因
    }];
    
    macOS/Windows
    cppV2NIMAddCollectionParams params;
    params.collectionClientId = "id1";
    params.collectionType = 1;
    params.collectionData = "data";
    params.serverExtension = "serverExtension";
    messageService.addCollection(
        params,
        [](V2NIMCollection collection) {
            // add collection succeeded
        },
        [](V2NIMError error) {
            // add collection failed, handle error
        });
    
    Web/uni-app/小程序
    typescripttry {
    const res: V2NIMCollection = await nim.V2NIMMessageService.addCollection({
        collectionType: 1,
        collectionData: 'data',
        serverExtension: 'serverExtension'
    })
    // todo Success
    } catch (err) {
    // todo error
    }
    
    Harmony
    typescripttry {
    const res: V2NIMCollection = await nim.messageService.addCollection({
        collectionType: 1,
        collectionData: 'data',
        serverExtension: 'serverExtension'
    })
    // todo Success
    } catch (err) {
    // todo error
    }
    

批量移除收藏

调用 removeCollections 批量移除收藏列表。

  • 参数说明

    Android
    参数名称 类型 是否必填 默认值 描述
    collections List<V2NIMCollection> - 收藏对象列表。不可为空,否则返回 191004 参数错误。
    success V2NIMSuccessCallback - 移除成功回调
    failure V2NIMFailureCallback - 移除失败回调,返回错误码
    iOS
    参数名称 类型 是否必填 默认值 描述
    collections NSArray<V2NIMCollection *> * - 收藏对象列表。不可为空,否则返回 191004 参数错误。
    success V2NIMRemoveCollectionSuccess - 移除成功回调,可自定义设置。
    failure V2NIMFailureCallback - 移除失败回调,返回错误码
    macOS/Windows
    参数名称 类型 是否必填 默认值 描述
    collections nstd::vector<V2NIMCollection> - 收藏对象列表。不可为空,否则返回 191004 参数错误。
    success V2NIMSuccessCallback - 移除成功回调
    failure V2NIMFailureCallback - 移除失败回调,返回错误码
    Web/uni-app/小程序
    参数名称 类型 是否必填 默认值 描述
    collections V2NIMCollection[] - 收藏对象列表。不可为空,否则返回 191004 参数错误。
    Harmony
    参数名称 类型 是否必填 默认值 描述
    collections V2NIMCollection[] - 收藏对象列表。不可为空,否则返回 191004 参数错误。
  • 示例代码

    Android
    javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);
    
    // List<V2NIMCollection> collections = ; // 需要移除的相关收藏
    v2MessageService.removeCollections(collections,
        new V2NIMSuccessCallback<Void>() {
            @Override
            public void onSuccess(Void unused) {
                
            }
        },
        new V2NIMFailureCallback() {
            @Override
            public void onFailure(V2NIMError error) {
                
            }
        });
    
    iOS
    objective-cV2NIMCollection *collection = [[V2NIMCollection alloc] init];
    [[[NIMSDK sharedSDK] v2MessageService] removeCollections:@[collection]
                                                    success:^(int count) {
        // count
    }
                                                    failure:^(V2NIMError * _Nonnull error) {
        // error 包含错误原因
    }];
    
    macOS/Windows
    cppnstd::vector<V2NIMCollection> collections;
    // ...
    messageService.removeCollections(
        collections,
        []() {
            // remove collection succeeded
        },
        [](V2NIMError error) {
            // remove collection failed, handle error
        });
    
    Web/uni-app/小程序
    typescripttry {
    const res: number = await nim.V2NIMMessageService.removeCollections(collections)
    // todo Success
    } catch (err) {
    // todo error
    }
    
    Harmony
    typescripttry {
    const res: number = await nim.messageService.removeCollections(collections)
    // todo Success
    } catch (err) {
    // todo error
    }
    

更新收藏的服务端扩展字段

调用 updateCollectionExtension 更新收藏的服务端扩展字段。

  • 参数说明

    Android
    参数名称 类型 是否必填 默认值 描述
    collection V2NIMCollection - 收藏对象。如果为空或不存在则返回 191004 参数错误。
    serverExtension String 收藏的服务端扩展字段。必须为 JSON 格式封装,如果设置为空则表示取消现有的扩展字段。
    success V2NIMSuccessCallback - 更新成功回调,返回更新后的 V2NIMCollection
    failure V2NIMFailureCallback - 更新失败回调,返回错误码
    iOS
    参数名称 类型 是否必填 默认值 描述
    collection V2NIMCollection - 收藏对象。如果为空或不存在则返回 191004 参数错误。
    serverExtension NSString * 收藏的服务端扩展字段。必须为 JSON 格式封装,如果设置为空则表示取消现有的扩展字段。
    success V2NIMCollectionSuccess - 更新成功回调,可自定义设置。
    failure V2NIMFailureCallback - 更新失败回调,返回错误码
    macOS/Windows
    参数名称 类型 是否必填 默认值 描述
    collection V2NIMCollection - 收藏对象。如果为空或不存在则返回 191004 参数错误。
    serverExtension nstd::optionalnstd::string 收藏的服务端扩展字段。必须为 JSON 格式封装,如果设置为空则表示取消现有的扩展字段。
    success V2NIMSuccessCallback - 更新成功回调,返回更新后的 V2NIMCollection
    failure V2NIMFailureCallback - 更新失败回调,返回错误码
    Web/uni-app/小程序
    参数名称 类型 是否必填 默认值 描述
    collection V2NIMCollection - 收藏对象。如果为空或不存在则返回 191004 参数错误。
    serverExtension string 收藏的服务端扩展字段。必须为 JSON 格式封装,如果设置为空则表示取消现有的扩展字段。
    Harmony
    参数名称 类型 是否必填 默认值 描述
    collection V2NIMCollection - 收藏对象。如果为空或不存在则返回 191004 参数错误。
    serverExtension string 收藏的服务端扩展字段。必须为 JSON 格式封装,如果设置为空则表示取消现有的扩展字段。
  • 示例代码

    Android
    javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);
    
    //V2NIMCollection collection = ; // 需要更新的收藏信息
    v2MessageService.updateCollectionExtension(collection, "xxx",
    new V2NIMSuccessCallback<V2NIMCollection>() {
        @Override
        public void onSuccess(V2NIMCollection v2NIMCollection) {
        // success
        }
    },
        new V2NIMFailureCallback() {
        @Override
        public void onFailure(V2NIMError error) {
        // failed, handle error                       
        }
    });
    
    iOS
    objective-c[[[NIMSDK sharedSDK] v2MessageService] updateCollectionExtension:collection
                                                serverExtension:@"serverExtension"
                                                            success:^(V2NIMCollection * _Nonnull result) {
            // result 更新后的 collection
        }
                                                            failure:^(V2NIMError * _Nonnull error) {
            // error 包含错误原因
        }];
    
    macOS/Windows
    cppV2NIMCollection collection
    // ...
    messageService.updateCollectionExtension(
        collection,
        "serverExtension",
        [](V2NIMCollection collection) {
            // update collection succeeded
        },
        [](V2NIMError error) {
            // update collection failed, handle error
        });
    
    Web/uni-app/小程序
    typescripttry {
    const collection: V2NIMCollection = await nim.V2NIMMessageService.updateCollectionExtension(collection, 'newExtension')
    // todo Success
    } catch (err) {
    // todo error
    }
    
    Harmony
    typescripttry {
    const collection: V2NIMCollection = await nim.messageService.updateCollectionExtension(collection, 'newExtension')
    // todo Success
    } catch (err) {
    // todo error
    }
    

按照查询条件分页获取收藏列表

调用 getCollectionListByOption 方法按照查询条件分页获取收藏列表。

  • 参数说明

    Android
    参数名称 类型 是否必填 默认值 描述
    option V2NIMCollectionOption - 收藏查询选项
    success V2NIMSuccessCallback - 获取成功回调,返回按照收藏时间排序的 V2NIMCollection 列表。
    failure V2NIMFailureCallback - 获取失败回调,返回错误码
    iOS
    参数名称 类型 是否必填 默认值 描述
    option V2NIMCollectionOption - 收藏查询选项
    success V2NIMSuccessCallback - 获取成功回调,返回按照收藏时间排序的 V2NIMCollection 列表。
    failure V2NIMFailureCallback - 获取失败回调,返回错误码
    macOS/Windows
    参数名称 类型 是否必填 默认值 描述
    option V2NIMCollectionOption - 收藏查询选项
    success V2NIMSuccessCallback - 获取成功回调,返回按照收藏时间排序的 V2NIMCollection 列表。
    failure V2NIMFailureCallback - 获取失败回调,返回错误码
    Web/uni-app/小程序
    参数名称 类型 是否必填 默认值 描述
    option V2NIMCollectionOption - 收藏查询选项
    Harmony
    参数名称 类型 是否必填 默认值 描述
    option V2NIMCollectionOption - 收藏查询选项
  • 示例代码

    Android
    javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);
    // 根据实际情况配置
    V2NIMCollectionOption option = V2NIMCollectionOption.V2NIMCollectionOptionBuilder.builder()
    .withAnchorCollection()
    .withBeginTime()
    .withCollectionType()
    .withDirection()
    .withEndTime()
    .withLimit()
    .build();
    
    v2MessageService.getCollectionListByOption(option,
            new V2NIMSuccessCallback<List<V2NIMCollection>>() {
                @Override
                public void onSuccess(List<V2NIMCollection> v2NIMCollections) {
                // success
                }
            },
            new V2NIMFailureCallback() {
                @Override
                public void onFailure(V2NIMError error) {
                // failed, handle error
                }
            });
    
    iOS
    objective-cV2NIMCollectionOption *collectionOption = [[V2NIMCollectionOption alloc] init];
    [[[NIMSDK sharedSDK] v2MessageService] getCollectionListByOption:collectionOption
                                                            success:^(NSArray<V2NIMCollection *> * _Nonnull result) {
        // result V2NIMCollection list
    }
                                                            failure:^(V2NIMError * _Nonnull error) {
        // error 包含错误原因
    }];
    
    macOS/Windows
    cppV2NIMCollectionOption option;
    option.collectionType = 1;
    option.limit = 10;
    messageService.getCollectionListByOption(
        option,
        [](nstd::vector<V2NIMCollection> collections) {
            for (auto&& collection : collections) {
                // do something
            }
        },
        [](V2NIMError error) {
            // get collection list failed, handle error
        });
    
    Web/uni-app/小程序
    typescripttry {
    const res: V2NIMCollection[] = await nim.V2NIMMessageService.getCollectionListByOption({
        beginTime: 0,
        endTime: 0,
        direction: 0,
        limit: 100,
        collectionType: 0
    })
    // todo Success
    } catch (err) {
    // todo error
    }
    
    Harmony
    typescripttry {
    const res: V2NIMCollection[] = await nim.messageService.getCollectionListByOption({
        beginTime: 0,
        endTime: 0,
        direction: 0,
        limit: 100,
        collectionType: 0
    })
    // todo Success
    } catch (err) {
    // todo error
    }
    

实现 PIN 消息

支持将会话中的重要消息执行 PIN 操作,被 PIN 的消息会以列表形式展示在 UI 界面。

一条消息可以被所在会话内的所有用户 执行 PIN 操作,PIN 消息对会话内的所有成员可见。如果多个用户对同一条消息执行 PIN 操作,较晚的 PIN 会覆盖之前的 PIN。

注册消息监听器

Android/iOS/Windows/macOS

调用 addMessageListener 方法注册消息监听器,监听消息快捷评论通知回调 onMessagePinNotification

Android
javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);

V2NIMMessageListener messageListener = new V2NIMMessageListener() {

    @Override
    public void onMessagePinNotification(V2NIMMessagePinNotification pinNotification) {
    // receive message pin notification
    }
};
v2MessageService.addMessageListener(messageListener);
iOS
objective-c[[[NIMSDK sharedSDK] v2MessageService] addMessageListener:listener];
macOS/Windows
cppV2NIMMessageListener listener;
listener.onMessagePinNotification = [](V2NIMMessagePinNotification pinNotification) {
    // receive message pin notification
};
messageService.addMessageListener(listener);

Web/uni-app/小程序/Harmony

调用 on("EventName") 方法注册消息监听器,监听消息接收回调事件 onMessageQuickCommentNotification

Web/uni-app/小程序
typescriptnim.V2NIMMessageService.on("onMessagePinNotification", function (pinNotification: V2NIMMessagePinNotification) {})
Harmony
typescriptnim.messageService.on("onMessagePinNotification", function (pinNotification: V2NIMMessagePinNotification) {})

PIN 一条消息

调用 pinMessage 方法针对指定消息执行 PIN 操作。PIN 成功后,消息发送方和消息接收方均会收到 PIN 消息状态变化通知回调 onMessagePinNotification 并通知 UI 界面更新。

  • 参数说明

    Android
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 被 PIN 的消息对象。
  • 如果为空或不存在则返回 191004 参数错误。
  • 不能重复 Pin 相同的消息,否则返回 191007 资源已存在错误。
  • serverExtension String null 消息服务端扩展字段。必须为 JSON 格式封装,长度上限为 1024 字节,多端同步。
    success V2NIMSuccessCallback - PIN 成功回调
    failure V2NIMFailureCallback - PIN 失败回调,返回错误码
    iOS
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 被 PIN 的消息对象。
  • 如果为空或不存在则返回 191004 参数错误。
  • 不能重复 Pin 相同的消息,否则返回 191007 资源已存在错误。
  • serverExtension String null 消息服务端扩展字段。必须为 JSON 格式封装,长度上限为 1024 字节,多端同步。
    success V2NIMSuccessCallback - PIN 成功回调
    failure V2NIMFailureCallback - PIN 失败回调,返回错误码
    macOS/Windows
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 被 PIN 的消息对象。
  • 如果为空或不存在则返回 191004 参数错误。
  • 不能重复 Pin 相同的消息,否则返回 191007 资源已存在错误。
  • serverExtension String null 消息服务端扩展字段。必须为 JSON 格式封装,长度上限为 1024 字节,多端同步。
    success V2NIMSuccessCallback - PIN 成功回调
    failure V2NIMFailureCallback - PIN 失败回调,返回错误码
    Web/uni-app/小程序
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 被 PIN 的消息对象。
  • 如果为空或不存在则返回 191004 参数错误。
  • 不能重复 Pin 相同的消息,否则返回 191007 资源已存在错误。
  • serverExtension String null 消息服务端扩展字段。必须为 JSON 格式封装,长度上限为 1024 字节,多端同步。
    Harmony
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 被 PIN 的消息对象。
  • 如果为空或不存在则返回 191004 参数错误。
  • 不能重复 Pin 相同的消息,否则返回 191007 资源已存在错误。
  • serverExtension String null 消息服务端扩展字段。必须为 JSON 格式封装,长度上限为 1024 字节,多端同步。
  • 示例代码

    Android
    javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);
    
    // V2NIMMessage pinMessage = ; // 被 PIN 的消息
    // PIN 一条消息
    v2MessageService.pinMessage(pinMessage, "xxx",
            new V2NIMSuccessCallback<Void>() {
                @Override
                public void onSuccess(Void unused) {
                // success
                }
            },
            new V2NIMFailureCallback() {
                @Override
                public void onFailure(V2NIMError error) {
                // failed, handle error
                }
            });
    
    iOS
    objective-c// PIN 一条消息
    [[[NIMSDK sharedSDK] v2MessageService] pinMessage:message
                                    serverExtension:@"json string"
                                            success:^{
        // success
    }
                                            failure:^(V2NIMError * _Nonnull error) {
        // error 包含错误原因
    }];
    
    macOS/Windows
    cppV2NIMMessage message;
    
    // PIN 一条消息
    messageService.pinMessage(
        message,
        "serverExtension",
        []() {
            // pin message succeeded
        },
        [](V2NIMError error) {
            // pin message failed, handle error
        });
    
    Web/uni-app/小程序
    typescripttry {
    // PIN 一条消息
    await nim.V2NIMMessageService.pinMessage(message, 'serverExtension')
    // todo success
    } catch (err) {
    // todo error
    }
    
    Harmony
    typescripttry {
    await nim.messageService.pinMessage(message, 'serverExtension')
    // todo Success
    } catch (err) {
    // todo error
    }
    

更新 PIN 消息服务端扩展字段

调用 updatePinMessage 方法更新 PIN 消息服务端扩展字段。更新 PIN 消息成功后,消息发送方和消息接收方均会收到 PIN 消息状态变化通知回调 onMessagePinNotification 并通知 UI 界面更新。

如果更新 PIN 消息的操作人非当前登录账号,则 V2NIMMessagePin.operatorId 变更为更新 PIN 消息的实际操作人。

  • 参数说明

    Android
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 被 PIN 的消息对象。如果为空或不存在则返回 191004 参数错误。
    serverExtension String null PIN 消息的服务端扩展字段。必须为 JSON 格式封装,长度上限为 1024 字节,多端同步。
    success V2NIMSuccessCallback - 更新成功回调
    failure V2NIMFailureCallback - 更新失败回调,返回错误码
    iOS
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 被 PIN 的消息对象。如果为空或不存在则返回 191004 参数错误。
    serverExtension String null PIN 消息的服务端扩展字段。必须为 JSON 格式封装,长度上限为 1024 字节,多端同步。
    success V2NIMSuccessCallback - 更新成功回调
    failure V2NIMFailureCallback - 更新失败回调,返回错误码
    macOS/Windows
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 被 PIN 的消息对象。如果为空或不存在则返回 191004 参数错误。
    serverExtension String null PIN 消息的服务端扩展字段。必须为 JSON 格式封装,长度上限为 1024 字节,多端同步。
    success V2NIMSuccessCallback - 更新成功回调
    failure V2NIMFailureCallback - 更新失败回调,返回错误码
    Web/uni-app/小程序
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 被 PIN 的消息对象。如果为空或不存在则返回 191004 参数错误。
    serverExtension String null PIN 消息的服务端扩展字段。必须为 JSON 格式封装,长度上限为 1024 字节,多端同步。
    Harmony
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 被 PIN 的消息对象。如果为空或不存在则返回 191004 参数错误。
    serverExtension String null PIN 消息的服务端扩展字段。必须为 JSON 格式封装,长度上限为 1024 字节,多端同步。
  • 示例代码

    Android
    javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);
    
    // V2NIMMessage updateMessage = ; // 被更新的消息
    // 更新 PIN 消息服务端字段
    v2MessageService.updatePinMessage(updateMessage, "xxx",
        new V2NIMSuccessCallback<Void>() {
            @Override
            public void onSuccess(Void unused) {
    
            }
        },
        new V2NIMFailureCallback() {
            @Override
            public void onFailure(V2NIMError error) {
    
            }
        });
    
    iOS
    objective-c// 更新 PIN 消息服务端字段
    [[[NIMSDK sharedSDK] v2MessageService] updatePinMessage:message
                                            serverExtension:@"json string"
                                                    success:^{
        // success    
    } 
                                                    failure:^(V2NIMError * _Nonnull error) {
        //error 包含错误原因
    }];
    
    macOS/Windows
    cppV2NIMMessage message;
    
    // 更新 PIN 消息服务端字段
    messageService.updatePinMessage(
        message,
        // 服务端字段
        "serverExtension",
        []() {
            // update pin message succeeded
        },
        [](V2NIMError error) {
            // update pin message failed, handle error
        });
    
    Web/uni-app/小程序
    typescripttry {
    // 更新 PIN 消息服务端字段
    await nim.V2NIMMessageService.updatePinMessage(message, 'serverExtension')
    // todo success
    } catch (err) {
    // todo error
    }
    
    Harmony
    typescripttry {
    await nim.messageService.updatePinMessage(message, 'serverExtension')
    // todo Success
    } catch (err) {
    // todo error
    }
    

取消 PIN 消息

调用 unpinMessage 方法取消 PIN 一条消息。取消 PIN 消息成功后,消息发送方和消息接收方均会收到 PIN 消息状态变化通知回调 onMessagePinNotification 并通知 UI 界面更新。

  • 参数说明

    Android
    参数名称 类型 是否必填 默认值 描述
    messageRefer V2NIMMessageRefer - 被取消 PIN 的消息参考信息。
  • 如果为空或不存在则返回 191004 参数错误。
  • 不能重复取消 PIN 相同的消息,否则返回 191006 资源不存在错误。
  • serverExtension String null 消息服务端扩展字段。必须为 JSON 格式封装,长度上限为 1024 字节,多端同步。
    success V2NIMSuccessCallback - 取消 PIN 成功回调
    failure V2NIMFailureCallback - 取消 PIN 失败回调,返回错误码
    iOS
    参数名称 类型 是否必填 默认值 描述
    messageRefer V2NIMMessageRefer - 被取消 PIN 的消息参考信息。
  • 如果为空或不存在则返回 191004 参数错误。
  • 不能重复取消 PIN 相同的消息,否则返回 191006 资源不存在错误。
  • serverExtension NSString * null 消息服务端扩展字段。必须为 JSON 格式封装,长度上限为 1024 字节,多端同步。
    success V2NIMSuccessCallback - 取消 PIN 成功回调
    failure V2NIMFailureCallback - 取消 PIN 失败回调,返回错误码
    macOS/Windows
    参数名称 类型 是否必填 默认值 描述
    messageRefer V2NIMMessageRefer - 被取消 PIN 的消息参考信息。
  • 如果为空或不存在则返回 191004 参数错误。
  • 不能重复取消 PIN 相同的消息,否则返回 191006 资源不存在错误。
  • serverExtension nstd::optionalnstd::string null 消息服务端扩展字段。必须为 JSON 格式封装,长度上限为 1024 字节,多端同步。
    success V2NIMSuccessCallback - 取消 PIN 成功回调
    failure V2NIMFailureCallback - 取消 PIN 失败回调,返回错误码
    Web/uni-app/小程序
    参数名称 类型 是否必填 默认值 描述
    messageRefer V2NIMMessageRefer - 被取消 PIN 的消息参考信息。
  • 如果为空或不存在则返回 191004 参数错误。
  • 不能重复取消 PIN 相同的消息,否则返回 191006 资源不存在错误。
  • serverExtension string null 消息服务端扩展字段。必须为 JSON 格式封装,长度上限为 1024 字节,多端同步。
    Harmony
    参数名称 类型 是否必填 默认值 描述
    messageRefer V2NIMMessageRefer - 被取消 PIN 的消息参考信息。
  • 如果为空或不存在则返回 191004 参数错误。
  • 不能重复取消 PIN 相同的消息,否则返回 191006 资源不存在错误。
  • serverExtension string null 消息服务端扩展字段。必须为 JSON 格式封装,长度上限为 1024 字节,多端同步。
  • 示例代码

    Android
    javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);
    
    // V2NIMMessageRefer unpinMessageRefer // 被取消 PIN 的消息参考信息
    v2MessageService.unpinMessage(unpinMessageRefer, "xxx",
            new V2NIMSuccessCallback<Void>() {
                @Override
                public void onSuccess(Void unused) {
                // success
                }
            },
            new V2NIMFailureCallback() {
                @Override
                public void onFailure(V2NIMError error) {
                // failed, handle error
                }
            });
    
    iOS
    objective-c// 取消 PIN,传入 PIN 消息参考信息
    [[[NIMSDK sharedSDK] v2MessageService] unpinMessage:messageRefer
                                        serverExtension:@"json string"
                                                success:^{
        // success
    }
                                                failure:^(V2NIMError * _Nonnull error) {
        // error 包含错误原因
    }];
    
    macOS/Windows
    cppV2NIMMessageRefer messageRefer;
    
    messageService.unpinMessage(
        // 被取消 PIN 的消息参考信息
        messageRefer,
        "serverExtension",
        []() {
            // unpin message succeeded
        },
        [](V2NIMError error) {
            // unpin message failed, handle error
        });
    
    Web/uni-app/小程序
    typescripttry {
    await nim.V2NIMMessageService.unpinMessage(messageRefer, 'serverExtension')
    // todo success
    } catch (err) {
    // todo error
    }
    
    Harmony
    typescripttry {
    await nim.messageService.unpinMessage(messageRefer, 'serverExtension')
    // todo Success
    } catch (err) {
    // todo error
    }
    

获取 PIN 消息列表

调用 getPinnedMessageList 获取会话内所有 PIN 消息。获取结果不包含已删除、已撤回的消息,结果按照更新时间排序。

  • 参数说明:

    Android
    参数名称 类型 是否必填 默认值 描述
    conversationId String - 会话 ID,通过调用 V2NIMConversationIdUtil 的对应函数创建。
  • 组成方式:用户账号(accountId)|会话类型( V2NIMConversationType)|聊天对象账号(accountId)或群组 ID。
  • 如果为空或不存在则返回 191004 参数错误。
  • success V2NIMSuccessCallback - 获取成功回调,返回按照更新时 间排序的 V2NIMMessagePin 列表。
    failure V2NIMFailureCallback - 获取失败回调,返回错误码
    iOS
    参数名称 类型 是否必填 默认值 描述
    conversationId String - 会话 ID,通过调用 V2NIMConversationIdUtil 的对应函数创建。
  • 组成方式:用户账号(accountId)|会话类型( V2NIMConversationType)|聊天对象账号(accountId)或群组 ID。
  • 如果为空或不存在则返回 191004 参数错误。
  • success V2NIMSuccessCallback - 获取成功回调,返回按照更新时 间排序的 V2NIMMessagePin 列表。
    failure V2NIMFailureCallback - 获取失败回调,返回错误码
    macOS/Windows
    参数名称 类型 是否必填 默认值 描述
    conversationId String - 会话 ID,通过调用 V2NIMConversationIdUtil 的对应函数创建。
  • 组成方式:用户账号(accountId)|会话类型( V2NIMConversationType)|聊天对象账号(accountId)或群组 ID。
  • 如果为空或不存在则返回 191004 参数错误。
  • success V2NIMSuccessCallback - 获取成功回调,返回按照更新时 间排序的 V2NIMMessagePin 列表。
    failure V2NIMFailureCallback - 获取失败回调,返回错误码
    Web/uni-app/小程序
    参数名称 类型 是否必填 默认值 描述
    conversationId String - 会话 ID,通过调用 V2NIMConversationIdUtil 的对应函数创建。
  • 组成方式:用户账号(accountId)|会话类型( V2NIMConversationType)|聊天对象账号(accountId)或群组 ID。
  • 如果为空或不存在则返回 191004 参数错误。
  • Harmony
    参数名称 类型 是否必填 默认值 描述
    conversationId String - 会话 ID,通过调用 V2NIMConversationIdUtil 的对应函数创建。
  • 组成方式:用户账号(accountId)|会话类型( V2NIMConversationType)|聊天对象账号(accountId)或群组 ID。
  • 如果为空或不存在则返回 191004 参数错误。
  • 示例代码

    Android
    javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);
    
    // 以单聊为例
    V2NIMConversationType conversationType = V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P;
    // 构建会话 ID
    String conversationId = V2NIMConversationIdUtil.conversationId("xxx", conversationType);
    
    v2MessageService.getPinnedMessageList(conversationId,
            new V2NIMSuccessCallback<List<V2NIMMessagePin>>() {
                @Override
                public void onSuccess(List<V2NIMMessagePin> v2NIMMessagePins) {
                // success, return V2NIMMessagePin list
                }
            },
            new V2NIMFailureCallback() {
                @Override
                public void onFailure(V2NIMError error) {
                // failed, handle error        
                }
            });
    
    iOS
    objective-c[[[NIMSDK sharedSDK] v2MessageService] getPinnedMessageList:@"conversationId"
                                                        success:^(NSArray<V2NIMMessagePin *> * _Nonnull result) {
        // success,返回 V2NIMMessagePin 数组
    }
                                                        failure:^(V2NIMError * _Nonnull error) {
        // error 包含错误原因
    }];
    
    macOS/Windows
    cpp// 构建会话 ID
    auto conversationId = V2NIMConversationIdUtil::p2pConversationId("target_account_id");
    messageService.getPinnedMessageList(
        conversationId,
        [](std::vector<V2NIMMessagePin> pins) {
            for (auto&& pin : pins) {
                // do something
            }
        },
        [](V2NIMError error) {
            // get pin message list failed, handle error
        });
    
    Web/uni-app/小程序
    typescripttry {
    const messagePinArr = await nim.V2NIMMessageService.getPinnedMessageList('me|1|another')
    // todo Success
    } catch (err) {
    // todo error
    }
    
    Harmony
    typescripttry {
    const messagePinArr = await nim.messageService.getPinnedMessageList('me|1|another')
    // todo Success
    } catch (err) {
    // todo error
    }
    

根据消息参考信息获取消息列表

当消息数据不明确时,可使用该接口获取消息。推荐回复消息、PIN 消息场景下使用。

调用 getMessageListByRefers 方法根据参考信息获取消息列表。

SDK 查询策略如下:

查询引用消息.drawio.png

  • 参数说明:

    Android
    参数名称 类型 是否必填 默认值 描述
    messageRefers List<V2NIMMessageRefer> - 消息参考信息对象。不能为空,否则返回 191004 参数错误。
    success V2NIMSuccessCallback - 查询成功回调,返回 V2NIMMessage 列表。
    failure V2NIMFailureCallback - 查询失败回调,返回错误码
    iOS
    参数名称 类型 是否必填 默认值 描述
    messageRefers NSArray<V2NIMMessageRefer*> * - 消息参考信息对象。不能为空,否则返回 191004 参数错误。
    success V2NIMGetMessageListSuccess - 查询成功回调,可自定义设置。
    failure V2NIMFailureCallback - 查询失败回调,返回错误码
    macOS/Windows
    参数名称 类型 是否必填 默认值 描述
    messageRefers nstd::vector<V2NIMMessageRefer> - 消息参考信息对象。不能为空,否则返回 191004 参数错误。
    success V2NIMSuccessCallback - 查询成功回调,返回 V2NIMMessage 列表。
    failure V2NIMFailureCallback - 查询失败回调,返回错误码
    Web/uni-app/小程序
    参数名称 类型 是否必填 默认值 描述
    messageRefers V2NIMMessageRefer[] - 消息参考信息对象。不能为空,否则返回 191004 参数错误。
    Harmony
    参数名称 类型 是否必填 默认值 描述
    messageRefers V2NIMMessageRefer[] - 消息参考信息对象。不能为空,否则返回 191004 参数错误。
  • 示例代码

javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);

List<V2NIMMessageRefer> messageRefers = new ArrayList<>();
// 根据实际情况增加
// messageRefers.add(messageRefer);
v2MessageService.getMessageListByRefers(messageRefers,
        new V2NIMSuccessCallback<List<V2NIMMessage>>() {
            @Override
            public void onSuccess(List<V2NIMMessage> v2NIMMessages) {
            // success, return V2NIMMessage list
            }
        },
        new V2NIMFailureCallback() {
            @Override
            public void onFailure(V2NIMError error) {
            // failed, handle error
            }
        });

:::

iOS
objective-cV2NIMMessageRefer *refer1 = [[V2NIMMessageRefer alloc] init];
V2NIMMessageRefer *refer2 = [[V2NIMMessageRefer alloc] init];
V2NIMMessageRefer *refern = [[V2NIMMessageRefer alloc] init];
NSArray *refers = @[refer1, refer2, refern];

[[[NIMSDK sharedSDK] v2MessageService] getMessageListByRefers:refers
                                                      success:^(NSArray<V2NIMMessage *> *result) {
    // result 返回消息数组
}
                                                      failure:^(V2NIMError *error) {
    // error 包含错误原因
}];
macOS/Windows
cppnstd::vector<V2NIMMessageRefer> messageRefers;

messageService.getMessageListByRefers(
    messageRefers,
    [](nstd::vector<V2NIMMessage> messages) {
        for (auto&& message : messages) {
            // do something
        }
    },
    [](V2NIMError error) {
        // get message list by refers failed, handle error
    });
Web/uni-app/小程序
typescripttry {
  const res: V2NIMMessage[] = await nim.V2NIMMessageService.getMessageListByRefers(
      [{
         senderId: 'me',
         receiverId: 'another',
         messageClientId: 'messageClientId',
         messageServerId: 'messageServerId',
         conversationType: 1,
         conversationId: 'me|1|another',
         createTime: 232312        
      }]  
  )
  // todo success
} catch (err) {
  // todo error
}
Harmony
typescripttry {
  const res: V2NIMMessage[] = await nim.messageService.getMessageListByRefers(
      [{
         senderId: 'me',
         receiverId: 'another',
         messageClientId: 'messageClientId',
         messageServerId: 'messageServerId',
         conversationType: 1,
         conversationId: 'me|1|another',
         createTime: 232312        
      }]  
  )
  // todo Success
} catch (err) {
  // todo error
}

相关信息

此文档是否对你有帮助?
有帮助
去反馈
  • 开通消息扩展相关功能
  • 实现消息回复
  • 回复一条消息
  • 实现消息快捷评论
  • 注册消息监听器
  • 添加快捷评论
  • 移除快捷评论
  • 获取快捷评论列表
  • 实现收藏功能
  • 添加一条收藏
  • 批量移除收藏
  • 更新收藏的服务端扩展字段
  • 按照查询条件分页获取收藏列表
  • 实现 PIN 消息
  • 注册消息监听器
  • PIN 一条消息
  • 更新 PIN 消息服务端扩展字段
  • 取消 PIN 消息
  • 获取 PIN 消息列表
  • 根据消息参考信息获取消息列表
  • 相关信息