历史消息
更新时间: 2024/10/09 17:02:21
云信 IM 支持对客户端本地和云信服务器存储历史消息进行查询、搜索以及删除操作。
本文介绍如何调用 NIM SDK 的接口实现历史消息管理。
前提条件
已在云信控制台开通历史消息功能,具体请参见配置基础功能/全局功能。
云信 IM 支持云端历史消息,历史消息的存储时长在不同的套餐包中不同,各套餐包中的限制具体请参考 增值服务。
监听消息相关事件
在进行历史消息相关操作前,您可以提前注册监听相关事件。注册成功后,当对应事件发生时,SDK 会触发对应回调通知。
Android/iOS/macOS/Windows
调用 addMessageListener
方法注册消息相关监听器,监听消息删除回调事件和消息清空回调事件。
-
相关回调:
onMessageDeletedNotifications
:消息删除成功回调。当本地端或多端同步删除消息成功时会触发该回调。onClearHistoryNotifications
:消息清空成功回调。当本地端或多端同步清空消息成功时会触发该回调。
-
示例代码:
Androidjava
V2NIMMessageService 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);
iOSobjective-c
[[[NIMSDK sharedSDK] v2MessageService] addMessageListener:listener];
macOS/Windowscpp
V2NIMMessageListener 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
。Androidjava
V2NIMMessageService v2MessageService = NIMClient.getService(V2NIMMessageService.class); v2MessageService.removeMessageListener(messageListener);
iOSobjective-c
[[[NIMSDK sharedSDK] v2MessageService] removeMessageListener:listener];
macOS/Windowscpp
V2NIMMessageListener listener; // ... conversationService.addMessageListener(listener); // ... messageService.removeMessageListener(listener);
Web/uni-app/小程序/Harmony
调用 on("EventName")
方法注册消息相关监听器,监听消息删除回调事件和消息清空回调事件。
-
相关回调:
onMessageDeletedNotifications
:消息删除成功回调。当本地端或多端同步删除消息成功时会触发该回调。onClearHistoryNotifications
:消息清空成功回调。当本地端或多端同步清空消息成功时会触发该回调。
-
示例代码:
Web/uni-app/小程序typescript
nim.V2NIMMessageService.on("onMessageDeletedNotifications", function (messageDeletedNotifications: V2NIMMessageDeletedNotification[]) {}) nim.V2NIMMessageService.on("onClearHistoryNotifications", function (clearHistoryNotifications: V2NIMClearHistoryNotification[]) {})
如需移除消息相关监听,可调用
off("EventName")
。typescript
nim.V2NIMMessageService.off("onMessageDeletedNotifications", function (messageDeletedNotifications: V2NIMMessageDeletedNotification[]) {}) nim.V2NIMMessageService.off("onClearHistoryNotifications", function (clearHistoryNotifications: V2NIMClearHistoryNotification[]) {})
Harmonytypescript
nim.messageService.on("onMessageDeletedNotifications", function (messageDeletedNotifications: V2NIMMessageDeletedNotification[]) {}) nim.messageService.on("onClearHistoryNotifications", function (clearHistoryNotifications: V2NIMClearHistoryNotification[]) {})
如需移除消息相关监听,可调用
off("EventName")
。typescript
nim.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
是 查询消息条件配置。可设置查询的消息类型、时间范围、结果排列顺序、单次查询消息数量上限等信息。 -
示例代码:
Androidjava
V2NIMMessageService 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: 失败 } });
iOSobjective-c
V2NIMMessageListOption *option = [[V2NIMMessageListOption alloc] init]; [[[NIMSDK sharedSDK] v2MessageService] getMessageList:option success:^(NSArray<V2NIMMessage *> * _Nonnull result) { // result 返回消息数组 } failure:^(V2NIMError * _Nonnull error) { // error 包含错误原因 }];
macOS/Windowscpp
V2NIMMessageListOption 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/小程序typescript
try { 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 }
Harmonytypescript
try { 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 参数错误。 -
示例代码:
Androidjava
V2NIMMessageService 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) { } });
iOSobjective-c
NSArray *messageClientIds = @[@"messageClientId1",@"messageClientId2",@"messageClientIdn"]; [[[NIMSDK sharedSDK] v2MessageService] getMessageListByIds:messageClientIds success:^(NSArray<V2NIMMessage *> * _Nonnull result) { // result 返回消息数组 } failure:^(V2NIMError * _Nonnull error) { // error 包含错误原因 }];
macOS/Windowscpp
std::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 });
Harmonytypescript
const 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 否 - 扩展字段,会多端同步至其他的登录端。 - true:只删除本地,本地会将该消息标记为删除,
-
示例代码:
Androidjava
V2NIMMessageService 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) { } });
iOSobjective-c
[[[NIMSDK sharedSDK] v2MessageService] deleteMessage:message serverExtension:@"json String" onlyDeleteLocal:YES success:^{ } failure:^(V2NIMError * _Nonnull error) { //error 包含错误原因 }];
macOS/Windowscpp
V2NIMMessage message; // ... messageService.deleteMessage( message, "serverExtension", false, []() { // delete message succeeded }, [](V2NIMError error) { // delete message failed, handle error } );
Web/uni-app/小程序typescript
try { await nim.V2NIMMessageService.deleteMessage(message, 'serverExtension'); // todo: Success } catch (err) { // todo: error }
Harmonytypescript
try { 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 字节,会多端同步至其他的登录端。 - true:只删除本地,本地会将该消息标记为删除,
-
示例代码:
Androidjava
V2NIMMessageService 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) { } });
iOSobjective-c
[[[NIMSDK sharedSDK] v2MessageService] deleteMessages:@[message] serverExtension:@"json String" onlyDeleteLocal:YES success:^{ } failure:^(V2NIMError * _Nonnull error) { //error 包含错误原因 }];
macOS/Windowscpp
std::vector<V2NIMMessage> messages; // ... messageService.deleteMessages( messages, "serverExtension", false, []() { // delete messages succeeded }, [](V2NIMError error) { // delete messages failed, handle error });
Web/uni-app/小程序typescript
try { await nim.V2NIMMessageService.deleteMessages(messages, 'serverExtension') // todo Success } catch (err) { // todo error }
Harmonytypescript
try { 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
是 清空消息条件配置。可设置是否同步删除漫游消息、是否多端同步等信息。 -
示例代码:
Androidjava
V2NIMMessageService 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) { } });
iOSobjective-c
V2NIMClearHistoryMessageOption *clearOption = [[V2NIMClearHistoryMessageOption alloc] init]; [[[NIMSDK sharedSDK] v2MessageService] clearHistoryMessage:clearOption success:^{ } failure:^(V2NIMError * _Nonnull error) { //error 包含错误原因 }];
macOS/Windowscpp
V2NIMClearHistoryMessageOption 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/小程序typescript
try { await nim.V2NIMMessageService.clearHistoryMessage({conversationId: 'me|1|another'}) // todo Success } catch (err) { // todo error }
Harmonytypescript
try { 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 或空,即查询所有消息子类型。 自定义消息子类型 -
示例代码:
Androidjava
V2NIMMessageService 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) { } });
iOSobjective-c
V2NIMMessageSearchParams *searchParams = [[V2NIMMessageSearchParams alloc] init]; [[[NIMSDK sharedSDK] v2MessageService] searchCloudMessages:searchParams success:^(NSArray<V2NIMMessage *> * _Nonnull result) { //查询成功结果 } failure:^(V2NIMError * _Nonnull error) { //error 包含错误原因 }];
macOS/Windowscpp
V2NIMMessageSearchParams 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/小程序typescript
try { 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 }
Harmonytypescript
try { 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 }