跳到主要内容

搜索本地消息

提示
  • 搜索消息功能仅支持搜索本地数据库中存储的消息。
  • SDK 从 5.3.4 版本开始支持超级群本地消息搜索功能。
  • 融云提供搜索超级群历史消息记录的 IM Server API。详见服务端文档搜索超级群消息

您可以通过 IMLib SDK 的相关搜索接口通过关键词、消息类型等条件搜索会话中的符合条件的消息列表,同时支持按时间段搜索。您也可以通过用户 userId 搜索指定会话中符合条件的消息列表。

支持关键字搜索的消息需要实现 RCMessageCoding 协议的 getSearchableWords 方法:

  • 内置的消息类型中文本消息(RCTextMessage),文件消息(RCFileMessage),和图文消息RCRichContentMessage 类型默认实现了 RCMessageCoding 协议的 getSearchableWords 方法。
  • 自定义消息类型也可以支持关键字搜索,需要您参考文档自行实现 getSearchableWords 方法。详见自定义消息类型

搜索会话

按关键字搜索本地所有会话。返回符合条件的搜索结果(RCSearchConversationResult)列表。请注意,超级群业务中单个会话(conversation)仅对应单个超级群频道。

接口原型

Objective C
- (void)searchConversations:(NSArray<NSNumber *> *)conversationTypeList
channelId:(nullable NSString *)channelId
messageType:(NSArray<NSString *> *)objectNameList
keyword:(NSString *)keyword
completion:(nullable void(^)(NSArray<RCSearchConversationResult *> * _Nullable results))completion;

参数说明

参数类型说明
conversationTypeListNSArray会话类型列表,包含 RCConversationType。超级群传入 ConversationType_ULTRAGROUP
channelIdNSString超级群频道 channelId
objectNameListNSArray消息类型列表,默认仅支持内置类型 RC:TxtMsg(文本消息)、RC:FileMsg(文件消息)、RC:ImgTextMsg(图文消息 )。
keywordNSString关键字。不可为空。
completionBlock异步回调。results 中返回 RCSearchConversationResult 列表。请注意,超级群业务中单个会话(conversation)仅对应单个超级群频道。

示例代码

Objective C
NSArray *conversationTypeList = @[@(ConversationType_ULTRAGROUP)];
NSArray *objectNameList = @[@"RC:TxtMsg"];

[[RCChannelClient sharedChannelManager] searchConversations:@[ @(ConversationType_ULTRAGROUP) ]
channelId:@"channelId"
messageType:objectNameList
keyword:@"搜索的关键字"
completion:^(NSArray<RCSearchConversationResult *> * _Nullable results) {
//异步回调
}];

搜索单个频道的消息

当您获取包含关键词的会话列表后,可以搜索指定单个会话中符合条件的消息。在实现超级群消息搜索时,您可以先通过搜索会话获取符合条件的超级群会话列表,再搜索指定频道中符合条件的消息。

搜索单个频道的消息需要 您 同时提供超级群 ID(targetId) 与 频道 ID(channelId)。

根据关键字搜索指定频道的消息

您可以在本地存储中根据关键字搜索指定频道会话中的消息,支持搜索指定时间点之前的历史消息记录。回调中分页返回包含指定关键字的消息列表。

Objective C
- (void)searchMessages:(RCConversationType)conversationType
targetId:(NSString *)targetId
channelId:(nullable NSString *)channelId
keyword:(NSString *)keyword
count:(int)count
startTime:(long long)startTime
completion:(nullable void(^)(NSArray<RCMessage *> * _Nullable messages))completion;
参数类型说明
conversationTypeRCConversationType会话类型。超级群会话传入 ConversationType_ULTRAGROUP
targetIdNSString超级群 ID。
channelIdNSString超级群频道 ID。
keywordNSString关键字。传空默认为是查全部符合条件的消息。
countint最大的查询数量
startTimelong long询记录的起始时间。传 0 时从最新消息开始搜索。非 0 时从该时间往前搜索。
completionBlock异步回调。messages 中返回匹配的 RCMessage 列表。
Objective C
[[RCChannelClient sharedChannelManager] searchMessages:ConversationType_ULTRAGROUP
targetId:@"超级群 ID"
channelId:@"超级群频道 ID"
keyword:searchText
count:50
startTime:0
completion:^(NSArray<RCMessage *> * _Nullable messages) {
//异步回调
}];

根据关键字搜索指定时间段内指定频道的消息

您可以在指定超级群指定频道中搜索指定的时间范围内,符合关键字的本地消息,回调中返回符合搜索条件的消息列表。

接口原型

Objective C
- (void)searchMessages:(RCConversationType)conversationType
targetId:(NSString *)targetId
channelId:(nullable NSString *)channelId
keyword:(NSString *)keyword
count:(int)count
startTime:(long long)startTime
completion:(nullable void(^)(NSArray<RCMessage *> * _Nullable messages))completion;

参数说明

参数类型说明
conversationTypeRCConversationType会话类型。超级群会话传入 ConversationType_ULTRAGROUP
targetIdNSString超级群 ID。
channelIdNSString超级群频道 ID。
keywordNSString关键字。传空默认为是查全部符合条件的消息。
startTimelong long查询记录的起始时间。传 0 时从最新消息开始搜索。非 0 时从该时间往前搜索。
endTimelong long结束时间
offsetint偏移量。要求 ≧ 0。
limitint返回的搜索结果数量,limit 需大于 0。最大值为 100。超过 100 时默认返回 100 条。
completionBlock异步回调。messages 中返回匹配的 RCMessage 列表。

示例代码

Objective C
[[RCChannelClient sharedChannelManager] searchMessages:ConversationType_ULTRAGROUP
targetId:@"超级群 ID"
channelId:@"超级群频道 ID"
keyword:searchText
startTime:startTime
endTime:endTime
offset:0
limit:100
completion:^(NSArray<RCMessage *> * _Nullable messages) {
//异步回调
}];

根据用户 userId 搜索指定频道的消息

您可以在指定超级群会话中搜索指定用户 userId 发送的消息,支持搜索指定时间点之前的本地的历史消息记录,回调中返回符合搜索条件的消息列表。

接口原型

Objective C
- (void)searchMessages:(RCConversationType)conversationType
targetId:(NSString *)targetId
channelId:(nullable NSString *)channelId
userId:(NSString *)userId
count:(int)count
startTime:(long long)startTime
completion:(nullable void(^)(NSArray<RCMessage *> * _Nullable messages))completion;

参数说明

参数类型说明
conversationTypeRCConversationType会话类型。超级群会话传入 ConversationType_ULTRAGROUP
targetIdNSString超级群 targetId。
channelIdNSString超级群频道 channelId。
userIdNSString搜索用户 userId。
countint最大的查询数量
startTimelong long查询记录的起始时间。传 0 时从最新消息开始搜索。非 0 时从该时间往前搜索。
completionBlock异步回调。messages 中返回匹配的 RCMessage 列表。

示例代码

Objective C
[[RCChannelClient sharedChannelManager] searchMessages:ConversationType_ULTRAGROUP
targetId:@"接收方 id"
channelId:@"超级群频道 ID"
userId:@"userId"
count:50
startTime:0
completion:^(NSArray<RCMessage *> * _Nullable messages) {
//异步回调
}];

搜索超级群下多个频道的消息

根据关键字搜索指定超级群本地所有频道的消息

接口说明

Objective C
- (void)searchMessagesForAllChannel:(RCConversationType)conversationType
targetId:(NSString *)targetId
keyword:(NSString *)keyword
count:(int)count
startTime:(long long)startTime
completion:(nullable void(^)(NSArray<RCMessage *> * _Nullable messages))completion;

参数说明

参数类型说明
conversationTypeRCConversationType会话类型。超级群会话传入 ConversationType_ULTRAGROUP
targetIdNSString超级群 targetId。
keywordNSString关键字。传空默认为是查全部符合条件的消息。
countint最大的查询数量
startTimelong long询记录的起始时间。传 0 时从最新消息开始搜索。非 0 时从该时间往前搜索。
completionBlock异步回调。messages 中返回匹配的 RCMessage 列表。

示例代码

Objective C
[[RCChannelClient sharedChannelManager] searchMessagesForAllChannel:ConversationType_ULTRAGROUP
targetId:@"超级群 ID"
keyword:searchText
count:50
startTime:0
completion:^(NSArray<RCMessage *> * _Nullable messages) {
//异步回调
}];

根据关键字搜索指定超级群指定时间段内本地所有频道的消息

接口原型

Objective C
- (void)searchMessagesForAllChannel:(RCConversationType)conversationType
targetId:(NSString *)targetId
keyword:(NSString *)keyword
startTime:(long long)startTime
endTime:(long long)endTime
offset:(int)offset
limit:(int)limit
completion:(nullable void(^)(NSArray<RCMessage *> * _Nullable messages))completion;

参数说明

参数类型说明
conversationTypeRCConversationType会话类型。超级群会话传入 ConversationType_ULTRAGROUP
targetIdNSString超级群 targetId。
keywordNSString关键字。传空默认为是查全部符合条件的消息。
startTimelong long查询记录的起始时间。传 0 时从最新消息开始搜索。非 0 时从该时间往前搜索。
endTimelong long结束时间
offsetint偏移量。要求 ≧ 0。
limitint返回的搜索结果数量,limit 需大于 0。最大值为 100。超过 100 时默认返回 100 条。
completionBlock异步回调。messages 中返回匹配的 RCMessage 列表。

示例代码

Objective C
[[RCChannelClient sharedChannelManager] searchMessagesForAllChannel:ConversationType_ULTRAGROUP
targetId:@"超级群 targetId"
keyword:searchText
startTime:startTime
endTime:endTime
offset:0
limit:100
completion:^(NSArray<RCMessage *> * _Nullable messages) {
//异步回调
}];

根据关键字搜索指定超级群下多个频道的本地历史消息

提示

SDK 从 5.6.2 版本开始提供该方法。

接口原型

Objective C
- (void)searchMessagesForChannels:(RCConversationType)conversationType
targetId:(NSString *)targetId
channelIds:(NSArray<NSString *> *)channelIds
keyword:(NSString *)keyword
startTime:(long long)startTime
limit:(int)limit
success:(void (^)(NSArray<RCMessage *> *messages))successBlock
error:(nullable void (^)(RCErrorCode errorCode))errorBlock;

参数说明

参数类型说明
conversationTypeRCConversationType会话类型。超级群会话传入 ConversationType_ULTRAGROUP
targetIdNSString超级群 targetId。
channelIdsNSArray超级群频道 channelId 数组,channelId 数组不可为空,channelId 数量不可超过 50 个,数组中的 channelId 均必须为合法有效的值(大小写英文字母与数字),不支持 channelId 为空字符串。
keywordNSString关键字。传空默认为是查全部符合条件的消息。
startTimelong long查询记录的起始时间。传 0 时从最新消息开始搜索。非 0 时从该时间往前搜索。
limitint返回的搜索结果数量,limit 需大于 0。最大值为 100。超过 100 时默认返回 100 条。
successBlockBlock搜索成功回调。messages 中返回匹配的 RCMessage 列表。
errorBlockBlock搜索失败回调,返回对应的错误码。

示例代码

Objective C
[[RCChannelClient sharedChannelManager] searchMessagesForChannels:ConversationType_ULTRAGROUP 
targetId:@"超级群 targetId"
channelIds:@[@"超级群频道 channelId"]
keyword:searchText
startTime:startTime
limit:100
success:^(NSArray<RCMessage *> * _Nonnull messages) {

} error:^(RCErrorCode status) {

}];

根据发送者用户 userId 搜索指定超级群下多个频道的本地历史消息

提示

SDK 从 5.6.2 版本开始提供该方法。

接口原型

Objective C
- (void)searchMessagesByUserForChannels:(RCConversationType)conversationType
targetId:(NSString *)targetId
channelIds:(NSArray<NSString *> *)channelIds
userId:(NSString *)userId
startTime:(long long)startTime
limit:(int)limit
success:(void (^)(NSArray<RCMessage *> *messages))successBlock
error:(nullable void (^)(RCErrorCode errorCode))errorBlock;

参数说明

参数类型说明
conversationTypeRCConversationType会话类型。超级群会话传入 ConversationType_ULTRAGROUP
targetIdNSString超级群 targetId。
channelIdsNSArray超级群频道 channelId 数组,channelId 数组不可为空,channelId 数量不可超过 50 个,数组中的 channelId 均必须为合法有效的值(大小写英文字母与数字),不支持 channelId 为空字符串。
userIdNSString搜索用户 userId。
startTimelong long查询记录的起始时间。传 0 时从最新消息开始搜索。非 0 时从该时间往前搜索。
limitint返回的搜索结果数量,limit 需大于 0。最大值为 100。超过 100 时默认返回 100 条。
successBlockBlock搜索成功回调。messages 中返回匹配的 RCMessage 列表。
errorBlockBlock搜索失败回调,返回对应的错误码。

示例代码

Objective C
[[RCChannelClient sharedChannelManager] searchMessagesForChannels:ConversationType_ULTRAGROUP 
targetId:@"超级群 targetId"
channelIds:@[@"超级群频道 channelId"]
userId:@"userId"
startTime:startTime
limit:100
success:^(NSArray<RCMessage *> * _Nonnull messages) {

} error:^(RCErrorCode status) {

}];

根据发送者用户 ID 搜索指定超级群下所有频道的本地历史消息

提示

SDK 从 5.6.2 版本开始提供该方法。

支持从最新消息开始搜索,或者搜索早于 startTime 的消息。每次搜索最大 100 条,如果还有更多的消息,可以将 startTime 设为获取到的消息数组最后一条消息的时间戳,然后继续调用接口。

接口原型

Objective C
- (void)searchMessagesByUserForAllChannel:(RCConversationType)conversationType
targetId:(NSString *)targetId
userId:(NSString *)userId
startTime:(long long)startTime
limit:(int)limit
success:(void (^)(NSArray<RCMessage *> *messages))successBlock
error:(nullable void (^)(RCErrorCode errorCode))errorBlock;

参数说明

参数类型说明
conversationTypeRCConversationType会话类型。超级群会话传入 ConversationType_ULTRAGROUP
targetIdNSString超级群 targetId。
userIdNSString搜索用户 userId。
startTimelong long查询记录的起始时间。传 0 时从最新消息开始搜索。非 0 时从该时间往前搜索。
limitint返回的搜索结果数量,limit 需大于 0。最大值为 100。超过 100 时默认返回 100 条。
successBlockBlock搜索成功回调。messages 中返回匹配的 RCMessage 列表。
errorBlockBlock搜索失败回调,返回对应的错误码。

示例代码

Objective C
[[RCChannelClient sharedChannelManager] searchMessagesByUserForAllChannel:ConversationType_ULTRAGROUP 
targetId:@"超级群 targetId"
userId:@"userId"
startTime:startTime
limit:100
success:^(NSArray<RCMessage *> * _Nonnull messages) {

} error:^(RCErrorCode status) {

}];