搜索消息

大约 3 分钟

搜索消息

本文介绍环信即时通讯 IM React Native SDK 如何搜索本地消息。

技术原理

环信即时通讯 IM React Native SDK 通过 ChatManager 类支持搜索用户设备上存储的消息数据,其中包含如下主要方法:

  • ChatManager#getMsgsWithKeyword: 根据搜索范围搜索所有会话中的消息。
  • ChatConversation#getMsgsWithKeyword: 根据搜索范围搜索当前会话中的消息。

前提条件

开始前,请确保满足以下条件:

实现方法

根据搜索范围搜索所有会话中的消息

你可以调用 ChatManager#getMsgsWithKeyword 方法,除了设置关键字、消息时间戳、消息数量、发送方、搜索方向等条件搜索所有会话中的消息时,你还可以选择搜索范围,如只搜索消息内容、只搜索消息扩展信息以及同时搜索消息内容以及扩展信息。

提示

若使用该功能,需将 SDK 升级至 V1.4.0 或以上版本。

ChatClient.getInstance()
  .chatManager.getMsgsWithKeyword({
    keywords, // 搜索关键字
    direction, // 搜索方向
    timestamp, // 搜索消息的时间戳,从该时间戳开始按照搜索方向 `direction` 搜索。
    maxCount: 20, // 请求的消息数量
    from: "", // 消息发送者
    searchScope: ChatMessageSearchScope.All, // 搜索范围,详见 `ChatMessageSearchScope` 类型。
  })
  .then((res) => {
    // todo: 操作成功, 处理返回的结果
  })
  .catch((error) => {
    // todo: 发生错误
  });

根据搜索范围搜索当前会话中的消息

除了设置关键字、消息时间戳、消息数量、发送方、搜索方向等条件搜索当前会话中的消息,你还可以选择搜索范围,如只搜索消息内容、只搜索消息扩展信息以及同时搜索消息内容以及扩展信息。你可以通过以下两种方式获取消息。

提示

若使用该功能,需将 SDK 升级至 V1.4.0 或以上版本。

  • 方式一:
// 直接调用
ChatClient.getInstance()
  .chatManager.getConvMsgsWithKeyword({
    convId, // 会话ID。
    convType, // 会话类型:单聊为 `PeerChat`,群聊为 `GroupChat`。
    keywords, // 搜索关键字
    direction, // 搜索方向
    timestamp, // 搜索消息的时间戳,从该时间戳开始按照搜索方向 `direction` 搜索。
    count: 20, // 请求的消息数量
    sender: "", // 消息发送者
    isChatThread: false, // 是否是子区消息。子区消息只在子区中使用。
    searchScope: ChatMessageSearchScope.All, // 搜索范围,详见 `ChatMessageSearchScope` 类型。
  })
  .then((res) => {
    // todo: 操作成功, 处理返回的结果
  })
  .catch((error) => {
    // todo: 发生错误
  });
  • 方式二:
// 通过会话对象调用
const conv = ChatClient.getInstance().chatManager.getConversation(
  convId,
  convType
);
conv
  .getMsgsWithKeyword({
    keywords, // 搜索关键字
    direction, // 搜索方向
    timestamp, // 搜索消息的时间戳,从该时间戳开始按照搜索方向 `direction` 搜索。
    count: 20, // 请求的消息数量
    sender: "", // 消息发送者
    searchScope: ChatMessageSearchScope.All, // 搜索范围,详见 `ChatMessageSearchScope` 类型。
  })
  .then((res) => {
    // todo: 操作成功, 处理返回的结果
  })
  .catch((error) => {
    // todo: 发生错误
  });