历史记录


本地记录

原型

@protocol NIMConversationManager <NSObject>
/**
 *  从本地db读取一个会话里某条消息之前的若干条的消息
 *
 *  @param session 消息所属的会话
 *  @param message 当前最早的消息,没有则传入nil
 *  @param limit   个数限制
 *
 *  @return 消息列表,按时间从小到大排列
 */
- (nullable NSArray<NIMMessage *> *)messagesInSession:(NIMSession *)session
                                              message:(nullable NIMMessage *)message
                                                limit:(NSInteger)limit;
@end

属性列表

参数 类型 说明
session NIMSession 消息所属的会话
message NIMMessage 锚点消息
limit NSInteger 读取条数限制

传入一个已知的消息,返回比这个消息更早的消息集合。如果没有已知的消息,则传入 nil,返回最新的消息集合。

示例

// NIMSessionMsgDatasource.m

- (void)resetMessages:(void(^)(NSError *error)) handler
{    
    ...
    //获取到本地会话最后 limit 个消息并接到数据末尾
    NSArray<NIMMessage *> *messages = [[[NIMSDK sharedSDK] conversationManager] messagesInSession:_currentSession
                                                                                message:nil
                                                                                    limit:_messageLimit];
    [self appendMessageModels:[self modelsWithMessages:messages]];
    ...
}
@protocol NIMConversationManager <NSObject>
/**
 *  根据消息Id获取消息
 *
 *  @param session    消息所属会话结合
 *
 *  @param messageIds 消息Id集合
 *
 *  @return 消息列表,按时间从小到大排列
 */
- (nullable NSArray<NIMMessage *> *)messagesInSession:(NIMSession *)session
                                           messageIds:(NSArray<NSString *> *)messageIds;
@end

属性列表

参数 类型 说明
session NIMSession 消息所属的会话
messageIds NSArray 消息Id集合
@protocol NIMConversationManager <NSObject>
/**
 *  搜索本地会话内消息
 *
 *  @param session 消息所属的会话
 *  @param option  搜索选项
 *  @param result  读取的消息列表结果
 *
 */
- (void)searchMessages:(NIMSession *)session
                option:(NIMMessageSearchOption *)option
                result:(nullable NIMSearchMessageBlock)result;
@end

以及搜索本地全局历史消息

@protocol NIMConversationManager <NSObject>
/**
 *  全局搜索本地消息
 *
 *  @param option 搜索选项
 *  @param result 读取的消息内容
 */
- (void)searchAllMessages:(NIMMessageSearchOption *)option
                result:(NIMGlobalSearchMessageBlock)result
@end

其中 option 为搜索选项,具体选项如下:

参数 类型 说明
startTime NSTimeInterval 起始时间,默认为0
endTime NSTimeInterval 结束时间,默认为0,0 表示最大时间戳
limit NSUInteger 检索条数,默认100条,设置为0表示无条数限制
order NIMMessageSearchOrder 检索顺序,正向或反向查询消息历史
messageTypes NSArray 消息类型组合,默认只搜索文本类型, 只有在 allMessageTypes 为 NO 时有效
allMessageTypes BOOL 搜索全部消息类型。默认为 NO,当设置为 YES 时,忽略 messageType 和 searchContent,同时返回所有的消息类型消息。
searchContent NSString 检索文本,如果需要搜索的消息类型为文本,会进行内容的匹配
fromIds NSArray 消息发起者列表

搜索将返回:时间在 (startTime,endTime) 之间,消息类型为指定类型,且匹配搜索内容或消息发起者列表的一定数量的消息。

示例:

根据关键词搜索最新 100 条消息的内容

NIMMessageSearchOption *option = [[NIMMessageSearchOption alloc] init];
option.searchContent = @"keyWord";
option.fromIds       = uids;
option.limit         = 100;
option.allMessageTypes = YES;

[[NIMSDK sharedSDK].conversationManager searchMessages:session option:option result:^(NSError * _Nullable error, NSArray<NIMMessage *> * _Nullable messages) {
    // do something with messages
}];

搜索全局的图片和视频的最新 100 条消息

NIMMessageSearchOption *option = [[NIMMessageSearchOption alloc] init];
option.limit = 100;
option.messageTypes = @[@(NIMMessageTypeImage),@(NIMMessageTypeVideo)];

[[NIMSDK sharedSDK].conversationManager searchMessages:session option:option result:^(NSError * _Nullable error, NSArray<NIMMessage *> * _Nullable messages) {
    // do something with messages
}];

云端记录

NIMConversationManager 支持从云信服务器上远程获取之前的聊天历史记录。

@protocol NIMConversationManager <NSObject>
/**
 *  从服务器上获取一个会话里某条消息之前的若干条的消息
 *
 *  @param session 消息所属的会话
 *  @param option  搜索选项
 *  @param result  读取的消息列表结果
 *  @discussion    此接口不支持查询聊天室消息,聊天室请参考 NIMChatroomManagerProtocol 中的查询消息接口。
 *
 */
- (void)fetchMessageHistory:(NIMSession *)session
                     option:(NIMHistoryMessageSearchOption *)option
                     result:(nullable NIMFetchMessageHistoryBlock)result;
@end

其中 option 为搜索选项,具体选项如下:

参数 类型 说明
startTime NSTimeInterval 需要检索的起始时间,没有则传入0。
endTime NSTimeInterval 当前最早的时间,没有则传入 0 。 此参数对聊天室会话无效。
limit NSUInteger 检索条数,上限为 100 条
order NIMMessageSearchOrder 检索顺序,正向或反向查询消息历史,此参数对聊天室会话无效
currentMessage NIMMessage 检索消息的当前参考消息,返回的消息结果集里不会包含这条消息,此参数对聊天室会话无效。
sync BOOL 是否在远程获取消息成功之后同步到本地数据库,同步只会保证消息数据写入本地但不触发回调。默认不同步,此参数对聊天室会话无效。
messageTypes NSArray \* 消息类型组合,默认为 nil ,搜索全类型。一旦设置了这个字段,则 sync 字段失效,查询结果不会写入 db。