浏览 SDKs · iOS
平台
SDKsiOS

搜索消息

在 iOS SDK 已同步的本地消息中搜索关键词。

复制

搜索本地消息接口用于在当前用户已同步到本地数据库的历史消息中检索包含指定关键词的内容。针对群聊消息搜索时,目标参数应传入群聊对应的 conversationID,而非发送消息时使用的 groupID。

搜索范围取决于 SDK 已同步到本地的消息。若需要服务端全量检索或跨会话全局排序,可由业务后端搜索服务返回对应的 conversationID 和 clientMsgID,再由客户端定位到具体消息。

执行本地搜索

通常在搜索输入框中输入关键词后触发搜索。发起搜索前先清理首尾空白字符;当用户修改关键词、消息类型或时间范围时,应将页码重置为 1:

NSString *keyword = [searchText stringByTrimmingCharactersInSet:
    NSCharacterSet.whitespaceAndNewlineCharacterSet];
if (keyword.length == 0) {
    [self renderSearchItems:@[] totalCount:0];
    return;
}

OIMSearchParam *param = [OIMSearchParam new];
param.conversationID = conversationID;
param.keywordList = @[keyword];
param.messageTypeList = @[@(OIMMessageContentTypeText)];
param.searchTimePosition = 0;
param.searchTimePeriod = 0;
param.pageIndex = 1;
param.count = 20;

[[OIMManager manager] searchLocalMessages:param
    onSuccess:^(OIMSearchResultInfo * _Nullable result) {
        if (result == nil) {
            [self showSearchError:0 message:@"搜索回调未返回结果"];
            return;
        }
        [self renderSearchItems:result.searchResultItems
                     totalCount:result.totalCount];
    }
    onFailure:^(NSInteger code, NSString * _Nullable message) {
        [self showSearchError:code message:message ?: @"搜索消息失败"];
    }];

参数说明

字段类型是否可空说明
conversationIDNSString *否目标会话 ID;传空字符串表示跨本地所有会话搜索。群聊仍传会话 ID,不传 groupID。
keywordListNSArray<NSString *> *否关键词数组;当前支持传入单个关键词。
keywordListMatchTypeNSInteger值类型多关键词匹配模式字段,当前保留未启用。
senderUserIDListNSArray * _Nullable是发送者筛选列表,当前保留未启用。
messageTypeListNSArray * _Nullable是可选的消息类型数值数组,例如文本消息。
searchTimePositionNSInteger值类型UTC 秒级时间起点;0 表示从当前时间开始。
searchTimePeriodNSInteger值类型从起点计算的秒级时间跨度;0 表示不限制。
pageIndexNSInteger值类型会话内分页页码,从 1 开始;跨会话搜索时无效。
countNSInteger值类型会话内每页拉取条数;跨会话搜索时无效。

返回结果

成功回调返回 OIMSearchResultInfo 搜索结果对象:

属性类型说明
totalCountNSInteger符合搜索条件的消息总数。
searchResultItemsNSArray<OIMSearchResultItemInfo *> *本地搜索按会话组织的分组结果。
findResultItemsNSArray<OIMSearchResultItemInfo *> *消息精确定位结果数组,非搜索主字段。

每个 OIMSearchResultItemInfo 会话分组结果包含:

属性类型说明
conversationIDNSString *命中消息所属会话 ID。
conversationTypeOIMConversationType会话类型枚举。
showNameNSString *会话展示名称。
faceURLNSString *会话头像地址。
messageCountNSInteger该会话内匹配到的消息条数。
messageListNSArray<OIMMessageInfo *> *该会话内当前页命中的消息列表。

客户端状态合并与后续操作

  • 会话内分页加载时,保持相同的 conversationID、keywordList 及筛选条件不变,仅递增 pageIndex。页面中应以 conversationID 与消息的 clientMsgID 组合去重。
  • 搜索查询本身仅读取本地快照,不触发消息事件。命中的消息如果在展示期间发生变更,应统一由接收消息、批量删除消息和撤回消息的监听器按 conversationID 与 clientMsgID 刷新。
  • 点击搜索结果跳转定位时,可先通过按 ID 查找消息获取完整的锚点消息对象,再调用读取消息上下文拉取其前后历史消息。

相关页面