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 ?: @"搜索消息失败"];
}];参数说明
| 字段 | 类型 | 是否可空 | 说明 |
|---|---|---|---|
conversationID | NSString * | 否 | 目标会话 ID;传空字符串表示跨本地所有会话搜索。群聊仍传会话 ID,不传 groupID。 |
keywordList | NSArray<NSString *> * | 否 | 关键词数组;当前支持传入单个关键词。 |
keywordListMatchType | NSInteger | 值类型 | 多关键词匹配模式字段,当前保留未启用。 |
senderUserIDList | NSArray * _Nullable | 是 | 发送者筛选列表,当前保留未启用。 |
messageTypeList | NSArray * _Nullable | 是 | 可选的消息类型数值数组,例如文本消息。 |
searchTimePosition | NSInteger | 值类型 | UTC 秒级时间起点;0 表示从当前时间开始。 |
searchTimePeriod | NSInteger | 值类型 | 从起点计算的秒级时间跨度;0 表示不限制。 |
pageIndex | NSInteger | 值类型 | 会话内分页页码,从 1 开始;跨会话搜索时无效。 |
count | NSInteger | 值类型 | 会话内每页拉取条数;跨会话搜索时无效。 |
返回结果
成功回调返回 OIMSearchResultInfo 搜索结果对象:
| 属性 | 类型 | 说明 |
|---|---|---|
totalCount | NSInteger | 符合搜索条件的消息总数。 |
searchResultItems | NSArray<OIMSearchResultItemInfo *> * | 本地搜索按会话组织的分组结果。 |
findResultItems | NSArray<OIMSearchResultItemInfo *> * | 消息精确定位结果数组,非搜索主字段。 |
每个 OIMSearchResultItemInfo 会话分组结果包含:
| 属性 | 类型 | 说明 |
|---|---|---|
conversationID | NSString * | 命中消息所属会话 ID。 |
conversationType | OIMConversationType | 会话类型枚举。 |
showName | NSString * | 会话展示名称。 |
faceURL | NSString * | 会话头像地址。 |
messageCount | NSInteger | 该会话内匹配到的消息条数。 |
messageList | NSArray<OIMMessageInfo *> * | 该会话内当前页命中的消息列表。 |
客户端状态合并与后续操作
- 会话内分页加载时,保持相同的
conversationID、keywordList及筛选条件不变,仅递增pageIndex。页面中应以conversationID与消息的clientMsgID组合去重。 - 搜索查询本身仅读取本地快照,不触发消息事件。命中的消息如果在展示期间发生变更,应统一由接收消息、批量删除消息和撤回消息的监听器按
conversationID与clientMsgID刷新。 - 点击搜索结果跳转定位时,可先通过按 ID 查找消息获取完整的锚点消息对象,再调用读取消息上下文拉取其前后历史消息。
相关页面
这个页面有帮助吗?