搜索本地消息
SDK 从 5.3.4 版本开始支持超级群本地消息搜索功能。
SDK 允许 App 通过关键词、用户 ID 等条件搜索指定超级群频道或多个频道中已拉取到本地的消息,支持按时间段搜索。
并非所有消息类型均支持关键字搜索:
- 内置的消息类型中 文本消息(RCTextMessage),文件消息(RCFileMessage),和图文消息
RCRichContentMessage
类型默认实现了RCMessageCoding
协议的getSearchableWords
方法。 - 自定义消息类型也可以支持关键字搜索,需要您参考文档自行实现。详见自定义消息类型。
请注意,消息搜索仅查询本地数据库。超级群默认每次连接时只同步频道最后一条消息,因此超级群业务本地消息记录可能不完整,需要 App 自行将消息拉取到本地(一般在进入会话页面时主动获取历史消息)。
融云提供搜索超级群历史消息记录的 IM Server API。详见服务端文档搜索超级群消息。
搜索会话
按关键字搜索本地所有会话。返回符合条件的搜索结果(RCSearchConversationResult)列表。请注意,超级群业务中单个会话(conversation
)仅对应单个超级群频道。
NSArray *conversationTypeList = @[@(ConversationType_ULTRAGROUP)];
NSArray *objectNameList = @[@"RC:TXT"];
[[RCChannelClient sharedChannelManager] searchConversations:conversationTypeList
messageType:objectNameList
keyword:@"搜索的关键字"
completion:^(NSArray<RCSearchConversationResult *> * _Nullable results) {
//异步回调
}];
如果搜索条件与搜索结果包含多个会话类型,您可以通过返回结果中 RCConversation 对象的会话类型(conversationType
)字段进行分类或筛选。
参数 | 类型 | 说明 |
---|---|---|
conversationTypeList | NSArray | 会话类型列表,包含 RCConversationType。例如 ConversationType_PRIVATE ,ConversationType_GROUP ,ConversationType_ULTRAGROUP 。 |
objectNameList | NSArray | 消息类型列表,默认仅支持内置类型 RC:TxtMsg (文本消息)、RC:FileMsg (文件消息)、RC:ImgTextMsg (图文消息 )。 |
keyword | NSString | 关键字。不可为空。 |
completion | Block | 异步回调。results 中返回 RCSearchConversationResult 列表。请注意,超级群业务中单个会话(conversation )仅对应单个超级群频道。 |
搜索单个频道的消息
获取包含关键词的会话列表后,可以搜索指定单个会话中符合条件的消息。在实现超级群消息搜索时,App 可以先通过搜索会话获取符合条件的超级群会话列表,再搜索指定频道中符合条件的消息。
搜索单个频道 的消息需要 App 同时提供超级群 ID(targetId
) 与 频道 ID(channelId
)。
根据关键字搜索指定频道的消息
在本地存储中根据关键字搜索指定频道会话中的消息,支持搜索指定时间点之前的历史消息记录。回调中分页返回包含指定关键字的消息列表。
[[RCChannelClient sharedChannelManager] searchMessages:ConversationType_ULTRAGROUP
targetId:@"超级群 ID"
channelId:@"超级群频道 ID"
keyword:searchText
count:50
startTime:0
completion:^(NSArray<RCMessage *> * _Nullable messages) {
//异步回调
}];
参数 | 类型 | 说明 |
---|---|---|
conversationType | RCConversationType | 会话类型。超级群会话传入 ConversationType_ULTRAGROUP 。 |
targetId | NSString | 超级群 ID。 |
channelId | NSString | 超级群频道 ID。 |
keyword | NSString | 关键字。传空默认为是查全部符合条件的消息。 |
count | int | 最大的查询数量 |
startTime | long long | 询记录的起始时间。传 0 时从最新消息开始搜索。非 0 时从该时间往前搜索。 |
completion | Block | 异步回调。messages 中返回匹配的 RCMessage 列表。 |
根据关键字搜索指定时间段内指定频道的消息
SDK 支持将关键字搜索的范围限制在指定时间段内。回调中分页返回包含指定关键字和时间段要求的消息列表。
[[RCChannelClient sharedChannelManager] searchMessages:ConversationType_ULTRAGROUP
targetId:@"超级群 ID"
channelId:@"超级群频道 ID"
keyword:searchText
startTime:startTime
endTime:endTime
offset:0
limit:100
completion:^(NSArray<RCMessage *> * _Nullable messages) {
//异步回调
}];
limit
参数控制返回的搜索结果数量,取值范围为 [1-100]。超过 100 默认使用最大值 100。
参数 | 类型 | 说明 |
---|---|---|
conversationType | RCConversationType | 会话类型。超级群会话传入 ConversationType_ULTRAGROUP 。 |
targetId | NSString | 超级群 ID。 |
channelId | NSString | 超级群频道 ID。 |
keyword | NSString | 关键字。传空默认为是查全部符合条件的消息。 |
startTime | long long | 查询记录的起始时间。传 0 时从最新消息开始搜索。非 0 时从该时间往前搜索。 |
endTime | long long | 结束时间 |
offset | int | 偏移量。要求 ≧ 0。 |
limit | int | 返回的搜索结果数量,limit 需大于 0。最大值为 100。超过 100 时默认返回 100 条。 |
completion | Block | 异步回调。messages 中返回匹配的 RCMessage 列表。 |
根据用户 ID 搜索指定频道的消息
在本地存储中根据搜索来自指定用户 ID 的消息,支持搜索指定时间点之前的历史消息记录。回调中分页返回包含符合条件的消息列表。
[[RCChannelClient sharedChannelManager] searchMessages:ConversationType_ULTRAGROUP
targetId:@"接收方 id"
channelId:@"超级群频道 ID"
userId:@"userId"
count:50
startTime:0
completion:^(NSArray<RCMessage *> * _Nullable messages) {
//异步回调
}];
参数 | 类型 | 说明 |
---|---|---|
conversationType | RCConversationType | 会话类型。超级群会话传入 ConversationType_ULTRAGROUP 。 |
targetId | NSString | 超级群 ID。 |
channelId | NSString | 超级群频道 ID。 |
userId | NSString | 搜索用户 ID。 |
count | int | 最大的查询数量 |
startTime | long long | 查询记录的起始时间。传 0 时从最新消息开始搜索。非 0 时从该时间往前搜索。 |
completion | Block | 异步回调。messages 中返回匹配的 RCMessage 列表。 |