历史消息

更新时间: 2024/11/18 14:27:31

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

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

支持平台

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

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

前提条件

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

云信 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/小程序/Node.js/Electron/HarmonyOS

调用 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[]) {})
    
    Node.js/Electron
    typescriptv2.messageService.on("messageDeletedNotifications", function (messageDeletedNotifications: V2NIMMessageDeletedNotification[]) {})
    v2.messageService.on("clearHistoryNotifications", function (clearHistoryNotifications: V2NIMClearHistoryNotification[]) {})
    

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

    typescriptv2.messageService.off("messageDeletedNotifications", function (messageDeletedNotifications: V2NIMMessageDeletedNotification[]) {})
    v2.messageService.off("clearHistoryNotifications", function (clearHistoryNotifications: V2NIMClearHistoryNotification[]) {})
    
    HarmonyOS
    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[]) {})
    

Flutter

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

  • 相关回调:

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

    dartsubsriptions.add(NimCore
        .instance.messageService.onMessageDeletedNotifications
        .listen((event) {
    //do something
    }));
    subsriptions.add(NimCore
        .instance.messageService.onClearHistoryNotifications
        .listen((event) {
    //do something
    }));
    

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

    dartsubsriptions.forEach((subsription) {
    subsription.cancel();
    });
    

查询历史消息

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

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

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

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
}
Node.js/Electron
typescripttry {
  const messages = await v2.messageService.getMessageList({
    conversationId: 'conversationId'
})
  // todo Success
} catch (err) {
  // todo error
}
HarmonyOS
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
}
Flutter
dartawait NimCore.instance.messageService.getMessageList(option);

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

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

  • 该接口只在本地数据库中查询。
  • Web 端不支持该接口。
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
    });
HarmonyOS
typescriptconst messageIds: string[] //消息id数组
const result = await nim.messageService.getMessageListByIds(messageIds)
Flutter
dartawait NimCore.instance.messageService.getMessageListByIds(messageClientIds);

分页查询云端 Thread 历史消息

调用 getThreadMessageList 方法根据 Thread 根消息分页获取所有 Thread 子消息。

为避免触发请求频控,若云端会话数据同步已完成(收到 onSyncFinished),建议您改用 getLocalThreadMessageList 方法获取本地 Thread 历史消息列表。

示例代码如下:

Android
JavaV2NIMThreadMessageListOption option = new V2NIMThreadMessageListOption();
// messageRefer field is mandatory and is used to determine a root message. It can be filled directly with a message body or a V2NIMMessageRefer object can be constructed based on the message body's fields.
option.setMessageRefer(rootMessageRefer);
// The following fields are optional
// beginTime and endTime define the time range of the query. Fill with 0 to indicate no restriction.
option.setBeginTime(0L);
option.setEndTime(0L);
// For the first page, leave this field blank. When paging, fill in the serverId of the message closest to the target page's current page. For example, anchorMessage represents the earliest message on the current page, allowing the current request to page backward (earlier events). Query 20 messages earlier than anchorMessage (excluding itself).
option.setExcludeMessageServerId("123456");
// Maximum number of messages to be retrieved
option.setLimit(20);
// Query direction, default is V2NIM_QUERY_DIRECTION_DESC
option.setDirection(V2NIMQueryDirection.V2NIM_QUERY_DIRECTION_DESC);

NIMClient.getService(V2NIMMessageService.class).getThreadMessageList(option, v2NIMThreadMessageListResult -> {
    //Query successful
}, error -> {
    //Query failed
});
iOS
Objective-CV2NIMThreadMessageListOption *option = [[V2NIMThreadMessageListOption alloc] init];
// messageRefer 字段必填,此字段用于确定一条根消息。可以直接填消息体,也可以根据消息体的字段,构造一个 V2NIMMessageRefer 对象
option.messageRefer = rootMessage;
//下面的字段均为可选字段
// beginTime 和 endTime 划定了查询的时间范围,填 0 表示不做限制。
option.beginTime = 0;
option.endTime = 1715331571.927; //anchorMessage.createTime
// 第一页不填,翻页时填写距离目标页最近的当前页的消息的 serverId。
// 如 anchorMessage 表示当前页中最早的一条消息,则当前请求可以实现向前(事件更早)翻页。查询比 anchorMessage 早(不包括自己)的 20 条消息
option.excludeMessageServerId = @"123456"; //anchorMessage.messageServerId
// 查询出的消息条数上限
option.limit = 20;
// 查询方向。DESC 为按时间戳从大到小查询
option.direction = V2NIM_QUERY_DIRECTION_DESC;

// 调用接口查询消息
[[NIMSDK sharedSDK].v2MessageService getThreadMessageList:option success:^(V2NIMThreadMessageListResult *result) {
        // 查询成功
    } failure:^(V2NIMError *error) {
        // 查询失败
    }];
macOS/Windows
C++V2NIMTheadMessageListOption threadMessageListOption;
// ...
messageService.getThreadMessageList(
    threadMessageListOption,
    [](V2NIMThreadMessageListResult response) {
        // do something
    },
    [](V2NIMError error) {
        // get message list by refers failed, handle error
    });
Web/uni-app/小程序
TypeScripttry {
    const result = await nim.V2NIMMessageService.getThreadMessageList({
      messageRefer: {
          "senderId": "account1",
          "receiverId": "account2",
          "messageClientId": "21a7e3d43a7afdf52e11f61d9753f99c",
          "messageServerId": "231689624",
          "createTime": 1715222453441,
          "conversationType": 1,
          "conversationId": "account1|1|account2"
      },
      "limit": 50
  })
} catch(err) {
    console.error('getAddApplicationUnreadCount Error:', err)
}
Node.js/Electron
typescripttry {
  const result = await v2.messageService.getThreadMessageList({
      messageRefer: {
          "senderId": "account1",
          "receiverId": "account2",
          "messageClientId": "21a7e3d43a7afdf52e11f61d9753f99c",
          "messageServerId": "231689624",
          "createTime": 1715222453441,
          "conversationType": 1,
          "conversationId": "account1|1|account2"
      },
      "limit": 50
  })
} catch(err) {
    console.error('getAddApplicationUnreadCount Error:', err)
}
HarmonyOS
TypeScripttry {
    const result = await nim.messageService.getThreadMessageList({
      messageRefer: {
          "senderId": "account1",
          "receiverId": "account2",
          "messageClientId": "21a7e3d43a7afdf52e11f61d9753f99c",
          "messageServerId": "231689624",
          "createTime": 1715222453441,
          "conversationType": 1,
          "conversationId": "account1|1|account2"
      },
      "limit": 50
  })
} catch(err) {
    console.error('getAddApplicationUnreadCount Error:', err)
}
Flutter
dartawait NimCore.instance.messageService.getThreadMessageList(threadMessageListOption);

查询本地 Thread 历史消息

调用 getLocalThreadMessageList 方法根据 Thread 根消息获取所有本地 Thread 子消息。

示例代码如下:

Android
Java// messageRefer 字段用于确定一条根消息。可以直接填消息体,也可以根据消息体的字段,构造一个 V2NIMMessageRefer 对象
V2NIMMessageRefer messageRefer = rootMessage;
NIMClient.getService(V2NIMMessageService.class).getLocalThreadMessageList(messageRefer, v2NIMThreadMessageListResult -> {
    //Query successful
}, error -> {
    //Query failed
});
iOS
Objective-C// messageRefer 字段用于确定一条根消息。可以直接填消息体,也可以根据消息体的字段,构造一个 V2NIMMessageRefer 对象
V2NIMMessageRefer *messageRefer = rootMessage;
// 调用接口查询消息
[[NIMSDK sharedSDK].v2MessageService getLocalThreadMessageList:messageRefer success:^(V2NIMThreadMessageListResult *result) {
    // 查询成功
} failure:^(V2NIMError *error) {
    // 查询失败
}];
macOS/Windows
C++V2NIMMessageRefer messageRefer;
// ...
messageService.getLocalThreadMessageList(
    messageRefer,
    [](V2NIMThreadMessageListResult response) {
        // do something
    },
    [](V2NIMError error) {
        // get message list by refers failed, handle error
    });
HarmonyOS
Typescriptconst messageRefer = {
          "senderId": "account1",
          "receiverId": "account2",
          "messageClientId": "21a7e3d43a7afdf52e11f61d9753f99c",
          "messageServerId": "231689624",
          "createTime": 1715222453441,
          "conversationType": 1,
          "conversationId": "account1|1|account2"
      } as V2NIMMessageRefer

const result = await nim.messageService.getLocalThreadMessageList(messageRefer)
Flutter
dartawait NimCore.instance.messageService.getLocalThreadMessageList(messageRefer);

删除历史消息

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

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

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

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

删除指定单条消息

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

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

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

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

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
}
Node.js/Electron
typescripttry {
  await v2.messageService.deleteMessage(message, 'serverExtension', true)
  // todo Success
} catch (err) {
  // todo error
}
HarmonyOS
typescripttry {
await nim.messageService.deleteMessage(message, 'serverExtension')
// todo Success
} catch (err) {
// todo error
}
Flutter
dartawait NimCore.instance.messageService.deleteMessage(message, serverExtension, onlyDeleteLocal);

批量删除指定消息列表

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

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

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

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

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
}
Node.js/Electron
typescripttry {
  await v2.messageService.deleteMessages(messages, 'serverExtension', true)
  // todo Success
} catch (err) {
  // todo error
}
HarmonyOS
typescripttry {
await nim.messageService.deleteMessages(messages, 'serverExtension')
// todo Success
} catch (err) {
// todo error
}
Flutter
dartawait NimCore.instance.messageService.deleteMessages(messages, serverExtension, onlyDeleteLocal);

清空历史消息

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

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

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
}
Node.js/Electron
typescripttry {
  await v2.messageService.clearHistoryMessage(option)
  // todo Success
} catch (err) {
  // todo error
}
HarmonyOS
typescripttry {
await nim.messageService.clearHistoryMessage({conversationId: 'me|1|another'})
// todo Success
} catch (err) {
// todo error
}
Flutter
dartawait NimCore.instance.messageService.clearHistoryMessage(option);

全文搜索历史消息

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

  • 目前仅支持搜索文本类型的消息,匹配规则为文本内容中包含关键字。
  • 目前仅支持精确匹配,暂不支持模糊匹配和拼音匹配。
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
}
Node.js/Electron
typescripttry {
  const result = await v2.messageService.searchCloudMessages({
    keyword: 'keyword',
    beginTime: 0,
    endTime: 0,
    conversationLimit: 20,
    sortOrder: 0,
    p2pAccountIds: ['a', 'b'],
    senderAccountIds: ['c', 'd']
  })
  // todo Success
} catch (err) {
  // todo error
}
HarmonyOS
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
}
Flutter
dartawait NimCore.instance.messageService.searchCloudMessages(params);

涉及接口

Android/iOS/macOS/Windows
API 说明
addMessageListener 注册消息相关监听器
removeMessageListener 取消注册消息相关监听器
getMessageList 按消息查询配置项分页获取所有历史消息
getMessageListByIds 根据消息客户端 ID 获取历史消息
deleteMessage 删除单条消息
deleteMessages 批量删除消息列表
clearHistoryMessage 清空会话内历史消息
searchCloudMessages 全文搜索云端历史消息
getThreadMessageList 分页获取云端 Thread 历史消息列表
getLocalThreadMessageList 获取本地 Thread 历史消息列表
Web/uni-app/小程序/Node.js/Electron/HarmonyOS
API 说明
on("EventName") 注册消息相关监听器
off("EventName") 取消注册消息相关监听器
getMessageList 按消息查询配置项分页获取所有历史消息
getMessageListByIds 根据消息客户端 ID 获取历史消息
deleteMessage 删除单条消息
deleteMessages 批量删除消息列表
clearHistoryMessage 清空会话内历史消息
searchCloudMessages 全文搜索云端历史消息
getThreadMessageList 分页获取云端 Thread 历史消息列表
getLocalThreadMessageList 暂不支持
Flutter
API 说明
add 注册消息相关监听器
cancel 取消注册消息相关监听器
getMessageList 按消息查询配置项分页获取所有历史消息
getMessageListByIds 根据消息客户端 ID 获取历史消息
deleteMessage 删除单条消息
deleteMessages 批量删除消息列表
clearHistoryMessage 清空会话内历史消息
searchCloudMessages 全文搜索云端历史消息
getThreadMessageList 分页获取云端 Thread 历史消息列表
getLocalThreadMessageList 获取本地 Thread 历史消息列表
此文档是否对你有帮助?
有帮助
去反馈
  • 支持平台
  • 前提条件
  • 监听消息相关事件
  • 查询历史消息
  • 分页查询会话内所有历史消息
  • 批量查询指定的历史消息列表
  • 分页查询云端 Thread 历史消息
  • 查询本地 Thread 历史消息
  • 删除历史消息
  • 删除指定单条消息
  • 批量删除指定消息列表
  • 清空历史消息
  • 全文搜索历史消息
  • 涉及接口