历史消息

更新时间: 2024/10/09 17:02:21

云信 IM 支持对客户端本地和云信服务器存储历史消息进行查询、搜索以及删除操作。

本文介绍如何调用 NIM SDK 的接口实现历史消息管理。

前提条件

已在云信控制台开通历史消息功能,具体请参见配置基础功能/全局功能

云信 IM 支持云端历史消息,历史消息的存储时长在不同的套餐包中不同,各套餐包中的限制具体请参考 增值服务

监听消息相关事件

在进行历史消息相关操作前,您可以提前注册监听相关事件。注册成功后,当对应事件发生时,SDK 会触发对应回调通知。

Android/iOS/macOS/Windows

调用 addMessageListener 方法注册消息相关监听器,监听消息删除回调事件和消息清空回调事件。

  • 相关回调:

    • onMessageDeletedNotifications:消息删除成功回调。当本地端或多端同步删除消息成功时会触发该回调。
    • onClearHistoryNotifications:消息清空成功回调。当本地端或多端同步清空消息成功时会触发该回调。
  • 示例代码:

    Android
    javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);
    
    V2NIMMessageListener messageListener = new V2NIMMessageListener() {
    
        @Override
        public void onMessageDeletedNotifications(List<V2NIMMessageDeletedNotification> messageDeletedNotifications) {
    
        }
    
        @Override
        public void onClearHistoryNotifications(List<V2NIMClearHistoryNotification> clearHistoryNotifications) {
    
        }
    };
    v2MessageService.addMessageListener(messageListener);
    
    iOS
    objective-c[[[NIMSDK sharedSDK] v2MessageService] addMessageListener:listener];
    
    macOS/Windows
    cppV2NIMMessageListener listener;
    listener.onMessageDeletedNotifications = [](std::vector<V2NIMMessageDeletedNotification> messageDeletedNotification) {
        // receive message deleted notifications
    };
    listener.onClearHistoryNotifications = [](std::vector<V2NIMClearHistoryNotification> clearHistoryNotification) {
        // receive clear history notifications
    };   
    messageService.addMessageListener(listener);
    

    如需移除消息相关监听器,可调用 removeMessageListener

    Android
    javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);
                
    v2MessageService.removeMessageListener(messageListener);
    
    iOS
    objective-c[[[NIMSDK sharedSDK] v2MessageService] removeMessageListener:listener];
    
    macOS/Windows
    cppV2NIMMessageListener listener;
    // ...
    conversationService.addMessageListener(listener);
    // ...
    messageService.removeMessageListener(listener);
    

Web/uni-app/小程序/Harmony

调用 on("EventName") 方法注册消息相关监听器,监听消息删除回调事件和消息清空回调事件。

  • 相关回调:

    • onMessageDeletedNotifications:消息删除成功回调。当本地端或多端同步删除消息成功时会触发该回调。
    • onClearHistoryNotifications:消息清空成功回调。当本地端或多端同步清空消息成功时会触发该回调。
  • 示例代码:

    Web/uni-app/小程序
    typescriptnim.V2NIMMessageService.on("onMessageDeletedNotifications", function (messageDeletedNotifications: V2NIMMessageDeletedNotification[]) {})
    nim.V2NIMMessageService.on("onClearHistoryNotifications", function (clearHistoryNotifications: V2NIMClearHistoryNotification[]) {})
    

    如需移除消息相关监听,可调用 off("EventName")

    typescriptnim.V2NIMMessageService.off("onMessageDeletedNotifications", function (messageDeletedNotifications: V2NIMMessageDeletedNotification[]) {})
    nim.V2NIMMessageService.off("onClearHistoryNotifications", function (clearHistoryNotifications: V2NIMClearHistoryNotification[]) {})
    
    Harmony
    typescriptnim.messageService.on("onMessageDeletedNotifications", function (messageDeletedNotifications: V2NIMMessageDeletedNotification[]) {})
    nim.messageService.on("onClearHistoryNotifications", function (clearHistoryNotifications: V2NIMClearHistoryNotification[]) {})
    

    如需移除消息相关监听,可调用 off("EventName")

    typescriptnim.messageService.off("onMessageDeletedNotifications", function (messageDeletedNotifications: V2NIMMessageDeletedNotification[]) {})
    nim.messageService.off("onClearHistoryNotifications", function (clearHistoryNotifications: V2NIMClearHistoryNotification[]) {})
    

查询历史消息

分页查询会话内所有历史消息

调用 getMessageList 方法分页查询指定会话的所有历史消息数据。

可以通过设置查询条件查询指定时间范围内具体消息类型的历史消息数据。

  • 参数说明:

    Android
    参数名称 类型 是否必填 描述
    option V2NIMMessageListOption 查询消息条件配置。可设置查询的消息类型、时间范围、结果排列顺序、单次查询消息数量上限等信息。
    success V2NIMSuccessCallback 查询成功回调,返回 V2NIMMessage 列表。
    failure V2NIMFailureCallback 查询失败回调,返回错误码
    iOS
    参数名称 类型 是否必填 描述
    option V2NIMMessageListOption 查询消息条件配置。可设置查询的消息类型、时间范围、结果排列顺序、单次查询消息数量上限等信息。
    success V2NIMSuccessCallback 查询成功回调,返回 V2NIMMessage 列表。
    failure V2NIMFailureCallback 查询失败回调,返回错误码
    macOS/Windows
    参数名称 类型 是否必填 描述
    option V2NIMMessageListOption 查询消息条件配置。可设置查询的消息类型、时间范围、结果排列顺序、单次查询消息数量上限等信息。
    success V2NIMSuccessCallback 查询成功回调,返回 V2NIMMessage 列表。
    failure V2NIMFailureCallback 查询失败回调,返回错误码
    Web/uni-app/小程序
    参数名称 类型 是否必填 描述
    option V2NIMMessageListOption 查询消息条件配置。可设置查询的消息类型、时间范围、结果排列顺序、单次查询消息数量上限等信息。
    Harmony
    参数名称 类型 是否必填 描述
    option V2NIMMessageListOption 查询消息条件配置。可设置查询的消息类型、时间范围、结果排列顺序、单次查询消息数量上限等信息。
  • 示例代码:

    Android
    javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);
    
    V2NIMConversationType conversationType = V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P;
    String conversationId = V2NIMConversationIdUtil.conversationId("xxx", conversationType);
    
    // 根据实际情况配置
    V2NIMMessageListOption listOption = V2NIMMessageListOption.V2NIMMessageListOptionBuilder.builder(conversationId)
            .withAnchorMessage()
            .withBeginTime()
            .withDirection()
            .withEndTime()
            .withLimit()
            .withMessageTypes()
            .withStrictMode()
            .build();
    
    v2MessageService.getMessageList(listOption, new V2NIMSuccessCallback<List<V2NIMMessage>>() {
        @Override
        public void onSuccess(List<V2NIMMessage> v2NIMMessages) {
            // TODO: 成功
        }
    }, new V2NIMFailureCallback() {
        @Override
        public void onFailure(V2NIMError error) {
            // TODO: 失败
        }
    });
    
    iOS
    objective-cV2NIMMessageListOption *option = [[V2NIMMessageListOption alloc] init];
    [[[NIMSDK sharedSDK] v2MessageService] getMessageList:option
                                                success:^(NSArray<V2NIMMessage *> * _Nonnull result) {
        // result 返回消息数组
    }
                                                failure:^(V2NIMError * _Nonnull error) {
        // error 包含错误原因
    }];
    
    macOS/Windows
    cppV2NIMMessageListOption option;
    option.limit = 10;
    messageService.getMessageList(
        option,
        [](std::vector<V2NIMMessage> messages) {
            for (auto&& message : messages) {
                // do something
            }
        },
        [](V2NIMError error) {
            // get message list failed, handle error
        }
    );
    
    Web/uni-app/小程序
    typescripttry {
    const res: V2NIMMessage[] = await nim.V2NIMMessageService.getMessageList({
        "conversationId": "cjhz1|1|cs6",
        "limit": 50,
        "anchorMessage": {
        "messageServerId": "111",
        "createTime": 0
        },
        "direction": 0
    });
    // TODO: Success
    } catch (err) {
    // TODO: Error
    }
    
    Harmony
    typescripttry {
    const res: V2NIMMessage[] = await nim.messageService.getMessageList({
        "conversationId": "cjhz1|1|cs6",
        "limit": 50,
        "anchorMessage": {
        "messageServerId": "111",
        "createTime": 0
        },
        "direction": 0
    })
    // todo Success
    } catch (err) {
    // todo error
    }
    

批量查询指定的历史消息列表

调用 getMessageListByIds 方法根据消息客户端 ID 查询指定的历史消息。

  • 该接口只在本地数据库中查询。
  • Web 端不支持该接口。
  • 参数说明:

    Android
    参数名称 类型 是否必填 描述
    messageClientIds List<String> 需要查询的消息客户端 ID 列表。该字段为空,或者数量为 0,则返回参数错误。
    success V2NIMSuccessCallback 查询成功回调,返回 V2NIMMessage 列表。
    failure V2NIMFailureCallback 查询失败回调,返回错误码
    iOS
    参数名称 类型 是否必填 描述
    messageClientIds NSArray<NSString *> * 需要查询的消息客户端 ID 列表。该字段为空,或者数量为 0,则返回参数错误。
    success V2NIMSuccessCallback 查询成功回调,返回 V2NIMMessage 列表。
    failure V2NIMFailureCallback 查询失败回调,返回错误码
    macOS/Windows
    参数名称 类型 是否必填 描述
    messageClientIds nstd::vectornstd::string 需要查询的消息客户端 ID 列表。该字段为空,或者数量为 0,则返回参数错误。
    success V2NIMSuccessCallback 查询成功回调,返回 V2NIMMessage 列表。
    failure V2NIMFailureCallback 查询失败回调,返回错误码
    Harmony
    参数名称 类型 是否必填 描述
    messageClientIds string[] 客户端消息 ID,具有唯一性。不能为空,否则返回 191004 参数错误。
  • 示例代码:

    Android
    javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);
    
    List<String> messageClientIds = new ArrayList<>();
    // TODO
    // messageClientIds.add("xxx");
    
    v2MessageService.getMessageListByIds(messageClientIds,
            new V2NIMSuccessCallback<List<V2NIMMessage>>() {
                @Override
                public void onSuccess(List<V2NIMMessage> v2NIMMessages) {
    
                }
            },
            new V2NIMFailureCallback() {
                @Override
                public void onFailure(V2NIMError error) {
    
                }
            });
    
    iOS
    objective-cNSArray *messageClientIds = @[@"messageClientId1",@"messageClientId2",@"messageClientIdn"];
    
    [[[NIMSDK sharedSDK] v2MessageService] getMessageListByIds:messageClientIds
                                                    success:^(NSArray<V2NIMMessage *> * _Nonnull result) {
        // result 返回消息数组
        
    }
                                                    failure:^(V2NIMError * _Nonnull error) {
        // error 包含错误原因
    }];
    
    macOS/Windows
    cppstd::vector<std::string> messageClientIds;
    // ...
    messageService.getMessageListByIds(
        messageClientIds,
        [](std::vector<V2NIMMessage> messages) {
            for (auto&& message : messages) {
                // do something
            }
        },
        [](V2NIMError error) {
            // get message list by ids failed, handle error
        });
    
    Harmony
    typescriptconst messageIds: string[] //消息id数组
    const result = await nim.messageService.getMessageListByIds(messageIds)
    

删除历史消息

云信 IM 的删除消息接口,可通过配置 onlyDeleteLocal 参数选择是否只删除本地消息。

  • 只删除本地,本地会将该消息标记为删除,后续查询本地消息时会过滤该消息,界面不展示,卸载重装会再次显示。

  • 删除本地的同时删除云端对应的消息,删除后消息无法恢复。

    删除云端消息功能需要在云信控制台单独开通,只有开通后,该功能才能使用。若未开通,请参考 开启功能项 进行开通。

删除指定单条消息

调用 deleteMessage 方法删除指定的单条消息。

删除指定消息后,若消息还未读,则应用总消息未读数会减 1。

若需要删除的消息处于未发送成功状态,则只删除本地消息,不涉及云端消息,因此不会触发多端同步。删除本地消息的同时删除对应的云端消息后,会多端同步该操作。

本地或云端删除消息成功后,SDK 会返回删除成功回调 onMessageDeletedNotifications

  • 参数说明:

    Android
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 需要删除的消息。
    serverExtension String - 扩展字段,会多端同步至其他的登录端。
    onlyDeleteLocal Boolean true 是否只删除本地消息。
  • true:只删除本地,本地会将该消息标记为删除, getMessageList 会过滤该消息,界面不展示,卸载重装会再次显示。
  • false:删除本地的同时删除云端,删除后消息无法恢复。
  • success V2NIMSuccessCallback - 删除消息成功回调。
    failure V2NIMFailureCallback - 删除消息失败回调,返回错误码
    iOS
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 需要删除的消息。
    serverExtension NSString * - 扩展字段,会多端同步至其他的登录端。
    onlyDeleteLocal BOOL true 是否只删除本地消息。
  • true:只删除本地,本地会将该消息标记为删除, getMessageList 会过滤该消息,界面不展示,卸载重装会再次显示。
  • false:删除本地的同时删除云端,删除后消息无法恢复。
  • success V2NIMSuccessCallback - 删除消息成功回调。
    failure V2NIMFailureCallback - 删除消息失败回调,返回错误码
    macOS/Windows
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 需要删除的消息。
    serverExtension nstd::optionalnstd::string - 扩展字段,会多端同步至其他的登录端。
    onlyDeleteLocal bool true 是否只删除本地消息。
  • true:只删除本地,本地会将该消息标记为删除, getMessageList 会过滤该消息,界面不展示,卸载重装会再次显示。
  • false:删除本地的同时删除云端,删除后消息无法恢复。
  • success V2NIMSuccessCallback - 删除消息成功回调。
    failure V2NIMFailureCallback - 删除消息失败回调,返回错误码
    Web/uni-app/小程序
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 需要删除的消息。
    serverExtension string - 扩展字段,会多端同步至其他的登录端。
    Harmony
    参数名称 类型 是否必填 默认值 描述
    message V2NIMMessage - 需要删除的消息。
    serverExtension string - 扩展字段,会多端同步至其他的登录端。
  • 示例代码:

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

批量删除指定消息列表

调用 deleteMessages 方法删除指定会话内的消息列表。

删除指定消息列表后,若消息还未读,则应用总消息未读数会减去对应的删除的消息数量。

若需要删除的消息处于未发送成功状态,则只删除本地消息,不涉及云端消息,因此不会触发多端同步。删除本地消息的同时删除对应的云端消息后,会多端同步该操作。

本地或云端删除消息成功后,SDK 会返回删除成功回调 onMessageDeletedNotifications

  • 参数说明:

    Android
    参数名称 类型 是否必填 默认值 描述
    messages List<V2NIMMessage> - 需要删除的消息列表。 单次最多删除 50 条消息,超出上限会返回参数错误。
    serverExtension String - 消息服务端扩展字段。必须为 JSON 格式封装,长度上限为 1024 字节,会多端同步至其他的登录端。
    onlyDeleteLocal Boolean true 是否只删除本地消息。
  • true:只删除本地,本地会将该消息标记为删除, getMessageList 会过滤该消息,界面不展示,卸载重装会再次显示。
  • false:删除本地的同时删除云端,删除后消息无法恢复。
  • success V2NIMSuccessCallback - 删除消息成功回调。
    failure V2NIMFailureCallback - 删除消息失败回调,返回错误码
    iOS
    参数名称 类型 是否必填 默认值 描述
    messages NSArray<V2NIMMessage *> * - 需要删除的消息列表。 单次最多删除 50 条消息,超出上限会返回参数错误。
    serverExtension NSString * - 消息服务端扩展字段。必须为 JSON 格式封装,长度上限为 1024 字节,会多端同步至其他的登录端。
    onlyDeleteLocal BOOL true 是否只删除本地消息。
  • true:只删除本地,本地会将该消息标记为删除, getMessageList 会过滤该消息,界面不展示,卸载重装会再次显示。
  • false:删除本地的同时删除云端,删除后消息无法恢复。
  • success V2NIMSuccessCallback - 删除消息成功回调。
    failure V2NIMFailureCallback - 删除消息失败回调,返回错误码
    macOS/Windows
    参数名称 类型 是否必填 默认值 描述
    messages nstd::vector<V2NIMMessage> - 需要删除的消息列表。 单次最多删除 50 条消息,超出上限会返回参数错误。
    serverExtension nstd::optionalnstd::string - 消息服务端扩展字段。必须为 JSON 格式封装,长度上限为 1024 字节,会多端同步至其他的登录端。
    onlyDeleteLocal bool true 是否只删除本地消息。
  • true:只删除本地,本地会将该消息标记为删除, getMessageList 会过滤该消息,界面不展示,卸载重装会再次显示。
  • false:删除本地的同时删除云端,删除后消息无法恢复。
  • success V2NIMSuccessCallback - 删除消息成功回调。
    failure V2NIMFailureCallback - 删除消息失败回调,返回错误码
    Web/uni-app/小程序
    参数名称 类型 是否必填 默认值 描述
    messages V2NIMMessage[] - 需要删除的消息列表。 单次最多删除 50 条消息,超出上限会返回参数错误。
    serverExtension String - 消息服务端扩展字段。必须为 JSON 格式封装,长度上限为 1024 字节,会多端同步至其他的登录端。
    Harmony
    参数名称 类型 是否必填 默认值 描述
    messages V2NIMMessage[] - 需要删除的消息列表。 单次最多删除 50 条消息,超出上限会返回参数错误。
    serverExtension String - 消息服务端扩展字段。必须为 JSON 格式封装,长度上限为 1024 字节,会多端同步至其他的登录端。
  • 示例代码:

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

清空历史消息

调用 clearHistoryMessage 方法清空指定会话内的所有消息,支持指定是否同步删除漫游消息以及是否多端同步清空操作。

本地或云端清空消息成功后,SDK 会返回清空成功回调 onClearHistoryNotifications

  • 参数说明:

    Android
    参数名称 类型 是否必填 描述
    option V2NIMClearHistoryMessageOption 清空消息条件配置。可设置是否同步删除漫游消息、是否多端同步等信息。
    success V2NIMSuccessCallback 清空成功回调。
    failure V2NIMFailureCallback 清空失败回调,返回错误码
    iOS
    参数名称 类型 是否必填 描述
    option V2NIMClearHistoryMessageOption 清空消息条件配置。可设置是否同步删除漫游消息、是否多端同步等信息。
    success V2NIMSuccessCallback 清空成功回调。
    failure V2NIMFailureCallback 清空失败回调,返回错误码
    macOS/Windows
    参数名称 类型 是否必填 描述
    option V2NIMClearHistoryMessageOption 清空消息条件配置。可设置是否同步删除漫游消息、是否多端同步等信息。
    success V2NIMSuccessCallback 清空成功回调。
    failure V2NIMFailureCallback 清空失败回调,返回错误码
    Web/uni-app/小程序
    参数名称 类型 是否必填 描述
    option V2NIMClearHistoryMessageOption 清空消息条件配置。可设置是否同步删除漫游消息、是否多端同步等信息。
    Harmony
    参数名称 类型 是否必填 描述
    option V2NIMClearHistoryMessageOption 清空消息条件配置。可设置是否同步删除漫游消息、是否多端同步等信息。
  • 示例代码:

    Android
    javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);
    
    V2NIMConversationType conversationType = V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P;
    String conversationId = V2NIMConversationIdUtil.conversationId("xxx", conversationType);
    // 根据实际情况配置
    V2NIMClearHistoryMessageOption clearOption = V2NIMClearHistoryMessageOption
        .V2NIMClearHistoryMessageOptionBuilder.builder(conversationId)
        .withDeleteRoam()
        .withExtension()
        .withOnlineSync()
        .build();
    
    v2MessageService.clearHistoryMessage(clearOption, new V2NIMSuccessCallback<Void>() {
        @Override
        public void onSuccess(Void unused) {
    
        }
    }, new V2NIMFailureCallback() {
        @Override
        public void onFailure(V2NIMError error) {
    
        }
    });
    
    iOS
    objective-cV2NIMClearHistoryMessageOption *clearOption = [[V2NIMClearHistoryMessageOption alloc] init];
    [[[NIMSDK sharedSDK] v2MessageService] clearHistoryMessage:clearOption
                                                       success:^{
    
    } failure:^(V2NIMError * _Nonnull error) {
        //error 包含错误原因
    }];
    
    macOS/Windows
    cppV2NIMClearHistoryMessageOption option;
    option.conversationId = V2NIMConversationIdUtil::p2pConversationId("target_account_id");
    messageService.clearHistoryMessage(
        option,
        []() {
            // clear history message succeeded
        },
        [](V2NIMError error) {
            // clear history message failed, handle error
        });
    
    Web/uni-app/小程序
    typescripttry {
    await nim.V2NIMMessageService.clearHistoryMessage({conversationId: 'me|1|another'})
    // todo Success
    } catch (err) {
    // todo error
    }
    
    Harmony
    typescripttry {
    await nim.messageService.clearHistoryMessage({conversationId: 'me|1|another'})
    // todo Success
    } catch (err) {
    // todo error
    }
    

全文搜索历史消息

调用 searchCloudMessages 方法,可以对指定会话、对象的历史消息进行全局关键字内容搜索。

  • 目前仅支持搜索文本类型的消息,匹配规则为文本内容中包含关键字。

  • 目前仅支持精确匹配,暂不支持模糊匹配和拼音匹配。

  • 参数说明:

    Android
    参数名称 类型 是否必填 描述
    params V2NIMMessageSearchParams 搜索消息条件配置。可设置查询的关键字、时间范围、结果排列顺序、单次搜索消息数量上限等条件信息。
    success V2NIMSuccessCallback 搜索成功回调,返回 V2NIMMessage 列表。
    failure V2NIMFailureCallback 搜索失败回调,返回错误码
    iOS
    参数名称 类型 是否必填 描述
    params V2NIMMessageSearchParams 搜索消息条件配置。可设置查询的关键字、时间范围、结果排列顺序、单次搜索消息数量上限等条件信息。
    success V2NIMSuccessCallback 搜索成功回调,返回 V2NIMMessage 列表。
    failure V2NIMFailureCallback 搜索失败回调,返回错误码
    macOS/Windows
    参数名称 类型 是否必填 描述
    params V2NIMMessageSearchParams 搜索消息条件配置。可设置查询的关键字、时间范围、结果排列顺序、单次搜索消息数量上限等条件信息。
    success V2NIMSuccessCallback 搜索成功回调,返回 V2NIMMessage 列表。
    failure V2NIMFailureCallback 搜索失败回调,返回错误码
    Web/uni-app/小程序
    参数名称 类型 是否必填 描述
    params V2NIMMessageSearchParams 搜索消息条件配置。可设置查询的关键字、时间范围、结果排列顺序、单次搜索消息数量上限等条件信息。
    Harmony
    参数名称 类型 是否必填 描述
    params V2NIMMessageSearchParams 搜索消息条件配置。可设置查询的关键字、时间范围、结果排列顺序、单次搜索消息数量上限等条件信息。

    V2NIMMessageSearchParams 说明:

    名称 类型 是否必填 默认值 描述
    keyword String - 检索关键字
    beginTime long 0 查询开始时间。该字段必须小于等于 endTime
    endTime long 0,即系统当前时间。 查询结束时间。该字段必须大于等于 beginTime
    conversationLimit int 0 本次检索的会话条数上限:
  • 设置为大于 0:查询结果按照会话分组显示。
  • 设置为小于或等于 0:查询结果按照时间排序。
  • messageLimit int 10 本次检索返回的消息条数上限,0 表示无限制。
    sortOrder V2NIMSortOrder V2NIM_SORT_ORDER_DESC 检索结果的排序规则,按照消息时间戳升序或降序排序。
    p2pAccountIds List null 单聊账号列表。最多传入 20 个账号,否则返回 191004 参数错误。
    teamIds List null 高级群账号列表。最多传入 20 个账号,否则返回 191004 参数错误。
    senderAccountIds List null 发送方账号列表。最多传入 20 个账号,否则返回 191004 参数错误。
    messageTypes List<V2NIMMessageType> null 或空,即查询所有消息类型。 消息类型
    messageSubtypes List> null 或空,即查询所有消息子类型。 自定义消息子类型
  • 示例代码:

    Android
    javaV2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class);
    
    V2NIMMessageSearchParams searchParams = V2NIMMessageSearchParams.V2NIMMessageSearchParamsBuilder
            // 搜索关键字,必填
            .builder(keyword)
            // TODO: 根据实际情况配置
            .withBeginTime()
            .withConversationLimit()
            .withEndTime()
            .withMessageLimit()
            .withMessageSubtypes()
            .withMessageTypes()
            .withP2pAccountIds()
            .withSenderAccountIds()
            .withSortOrder()
            .withTeamIds()
            .build();
    
    v2MessageService.searchCloudMessages(searchParams, new V2NIMSuccessCallback<List<V2NIMMessage>>() {
        @Override
        public void onSuccess(List<V2NIMMessage> v2NIMMessages) {
    
        }
    }, new V2NIMFailureCallback() {
        @Override
        public void onFailure(V2NIMError error) {
    
        }
    });
    
    iOS
    objective-cV2NIMMessageSearchParams *searchParams = [[V2NIMMessageSearchParams alloc] init];
    [[[NIMSDK sharedSDK] v2MessageService] searchCloudMessages:searchParams 
                                                       success:^(NSArray<V2NIMMessage *> * _Nonnull result) {
        //查询成功结果
    }
                                                       failure:^(V2NIMError * _Nonnull error) {
        //error 包含错误原因
    }];
    
    macOS/Windows
    cppV2NIMMessageSearchParams params;
    params.keyword = "keyword";
    params.messageLimit = 20;
    messageService.searchCloudMessages(
        params,
        [](std::vector<V2NIMMessage> messages) {
            for (auto&& message : messages) {
                // do something
            }
        },
        [](V2NIMError error) {
            // search cloud messages failed, handle error
        });
    
    Web/uni-app/小程序
    typescripttry {
    const res: V2NIMMessage[] = await nim.V2NIMMessageService.searchCloudMessages({
        keyword: 'keyword',
        beginTime: 0,
        endTime: 0,
        conversationLimit: 20,
        sortOrder: 0,
        p2pAccountIds: ['a', 'b'],
        senderAccountIds: ['c', 'd']
    });
    // todo: Success
    } catch (err) {
    // todo: error
    }
    
    Harmony
    typescripttry {
    const res: V2NIMMessage[] = await nim.messageService.searchCloudMessages({
        keyword: 'keyword',
        beginTime: 0,
        endTime: 0,
        conversationLimit: 20,
        sortOrder: 0,
        p2pAccountIds: ['a', 'b'],
        senderAccountIds: ['c', 'd']
    })
    // todo Success
    } catch (err) {
    // todo error
    }
    
此文档是否对你有帮助?
有帮助
去反馈
  • 前提条件
  • 监听消息相关事件
  • 查询历史消息
  • 分页查询会话内所有历史消息
  • 批量查询指定的历史消息列表
  • 删除历史消息
  • 删除指定单条消息
  • 批量删除指定消息列表
  • 清空历史消息
  • 全文搜索历史消息