搜索消息
提示
- 搜索消息功能仅支持搜索本地数据库中存储的消息。
- 从 5.3.0 版本开始,建议使用示例代码中异步返回结果的接口,原同步接口同时废弃。
您可以通过 IMLib SDK 的相关搜索接口通过关键词、消息类型等条件搜索会话中的符合条件的消息列表,同时支持按时间段搜索。您也可以通过用户 userId 搜索指定会话中符合条件的消息列表。
支持关键字搜索的消息需要实现 RCMessageCoding 协议的 getSearchableWords 方法:
- 内置的消息类型中文本消息(RCTextMessage),文件消息(RCFileMessage),和图文消息
RCRichContentMessage类型默认实现了RCMessageCoding协议的getSearchableWords方法。 - 自定义消息类型也可以支持关键字搜索,需要您参考文档自行实现
getSearchableWords方法。详见自定义消息类型。
如何实现基于关键字的全局搜索:
- 根据关键字搜索本地存储的全部会话,获取包含关键字的会话列表。
- 根据搜索会话返回的会话列表数据,调用搜索单个会话的方法,搜索符合条件的消息。
搜索符合条件的会话
您可以通过 searchConversations: 按关键字、消息类型搜索本地存储的符合查找条件的所有会话列表([RCSearchConversationResult])。
接口原型
Objective C
- (void)searchConversations:(NSArray<NSNumber *> *)conversationTypeList
messageType:(NSArray<NSString *> *)objectNameList
keyword:(NSString *)keyword
completion:(nullable void(^)(NSArray<RCSearchConversationResult *> *_Nullable results))completion;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| conversationTypeList | NSArray | 会话类型列表,包含 RCConversationType |
| objectNameList | NSArray | 消息类型列表,IMLib SDK 内置消息类型仅支持 RC:TxtMsg(文本消息)、RC:FileMsg(文件消息)、RC:ImgTextMsg(图文消息 )。 |
| keyword | NSString | 关键字。不可为空。 自定义的消息必须要实现 RCMessageContent 的 getSearchableWords 接口才能进行搜索。 |
| completion | Block | 异步回调。results 中返回 [RCSearchConversationResult] 列表。 |
示例代码
Objective C
NSArray *conversationTypeList = @[@(ConversationType_PRIVATE)];
NSArray *objectNameList = @[@"RC:TxtMsg"];
[[RCCoreClient sharedCoreClient] searchConversations:conversationTypeList
messageType:objectNameList
keyword:@"搜索的关键字"
completion:^(NSArray<RCSearchConversationResult *> * _Nullable results) {
//异步回调
}];
在指定单个会话中搜索
您可以通过不同的方法策略来搜索指定单个会话中符合条件的消息。
根据关键字搜索消息
您可以在本地数据库中根据关键字搜索指定会话中的消息,支持搜索指定时间点之前的历史消息记录,回调中返回符合搜索条件的消息列表。
接口原型
Objective C
- (void)searchMessages:(RCConversationType)conversationType
targetId:(NSString *)targetId
keyword:(NSString *)keyword
count:(int)count
startTime:(long long)startTime
completion:(nullable void(^)(NSArray<RCMessage *> *_Nullable messages))completion;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| conversationType | RCConversationType | 会话类型,单聊传入 ConversationType_PRIVATE |
| targetId | NSString | 会话 targetId |
| keyword | NSString | 关键字。传空默认为是查全部符合条件的消息。 |
| count | int | 最大的查询数量 |
| startTime | long long | 查询记录的起始时间。传 0 时从最新消息开始搜索,非 0 时从该时间往前搜索。 |
| completion | Block | 异步回调。messages 中返回匹配的 RCMessage 列表。 |
示例代码
Objective C
[[RCCoreClient sharedCoreClient] searchMessages:ConversationType_PRIVATE
targetId:@"会话 ID"
keyword:searchText
count:50
startTime:0
completion:^(NSArray<RCMessage *> * _Nullable messages) {
//异步回调
}];
根据关键字搜索指定时间段的消息
您可以在指定会话中搜索指定的时间范围内,符合关键字的本地消息,回调中返回符合搜索条件的消息列表。