IM 即时通讯
iOS
产品介绍
简介
主要功能
产品优势
功能介绍
帐号集成与登录
基础消息功能
群组功能
聊天室功能
聊天室标签功能
圈组功能
多端登录与互踢策略
质量数据监控台
海外数据中心
IM平滑迁移方案
接口及业务限制
更新日志
IM UIKit 更新日志
NIM SDK 开发版更新日志
NIM SDK 稳定版更新日志
体验 Demo
下载 SDK 与 Demo 源码
快速开始
跑通 IM Demo 源码
跑通圈组 Demo 源码
实现单聊消息收发(不含 UI)
实现圈组消息收发(不含 UI)
含 UI 集成
什么是 IM UIKit
IM UIKit 功能概览
快速集成 IM UIKit
组件导入
初始化与登录
界面跳转
自定义用户信息
会话列表相关
集成会话列表界面
自定义会话列表 UI
会话列表 API 概览
会话消息相关
集成会话消息界面
实现地理位置消息功能
实现音视频通话
实现自定义消息收发
自定义会话消息 UI
会话消息 API 概览
通讯录相关
集成通讯录界面
自定义通讯录 UI
通讯录 API 概览
IM UIKit API 概览
不含 UI 集成
集成 SDK
初始化
登录相关
登录 IM
多端登录与互踢
登出 IM
消息相关
消息概述
消息收发
自定义消息收发
消息配置选项
NOS 资源场景
广播消息收发
消息已读回执
消息撤回
消息重发与转发
消息更新
消息过滤
语音消息处理
本地消息插入
历史消息
最近会话
服务端会话服务
用户资料
用户关系
在线状态订阅
系统通知
离线推送
群组功能
群组概述
群组管理
群成员管理
群消息管理
超大群功能
聊天室
圈组功能
圈组概述
登录管理
服务器相关
服务器概述
服务器管理
服务器成员管理
游客功能
服务器未读数管理
频道相关
频道概述
频道管理
频道黑白名单
实时互动频道
频道分组
频道分组黑白名单
频道未读数管理
搜索服务器与频道
身份组相关
身份组概述
身份组应用场景
服务器身份组
频道身份组
频道分组身份组
用户定制权限
自定义权限项
成员权限查询与判定
身份组相关查询
圈组订阅机制
圈组消息相关
图解圈组消息流转
圈组消息收发
圈组消息撤回
圈组消息更新
圈组消息删除
消息正在输入
会话消息回复(Thread)
圈组快捷评论
圈组消息缓存
圈组消息搜索
查询历史消息
查询@我的消息
圈组系统通知相关
圈组系统通知概述
圈组系统通知收发
圈组系统通知更新
圈组离线推送
圈组内容审核
圈组第三方回调
圈组相关抄送
圈组各端接口命名差异
反垃圾
聊天扩展
其他
最佳实践
IM 登录最佳实践
聊天室重要消息投递
参考文档
iOS PushKit 配置
iOS苹果推送配置
API 参考
iOS SDK API
iOS SDK 状态码
IM 控制台指南
创建应用
注册 IM 账号
升级服务
开通聊天室功能
配置客户端应用标识
常见问题
FAQ
错题集
iOS 推送问题排查
服务协议

历史消息

更新时间: 2023/03/13 19:26:34

云信支持在客户端本地与云端存储历史消息,供后续查询。

本地历史消息

本地历史消息查询

原型

传入一个已知的消息(锚点消息),返回比这个消息更早的消息集合。如果没有已知的消息,则传入 nil,返回最新的消息集合。查询结果按照旧消息到新消息的顺序排列。

同步接口

@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 读取条数限制

示例

// 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>
/**
 *  从本地db读取一个会话里某条消息之前的若干条的消息
 *
 *  @param session 消息所属的会话
 *  @param message 当前最早的消息,没有则传入nil
 *  @param limit   个数限制
 *  @param completion 完成后的回调
 */
- (void)messagesInSession:(NIMSession *)session
                  message:(NIMMessage *)message
                    limit:(NSInteger)limit
               completion:(NIMFetchMessageHistoryBlock)completion;
@end

属性列表

参数 类型 说明
session NIMSession 消息所属的会话
message NIMMessage 锚点消息
limit NSInteger 读取条数限制
completion NIMFetchMessageHistoryBlock 完成后的回调

按消息id查询

@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<NSString *> 消息Id集合

删除本地消息

删除单条消息


@protocol NIMConversationManager <NSObject>

/**
 *  删除某条消息
 *
 *  @param message 待删除的聊天消息
 *  @param option  删除选项。
 */
- (void)deleteMessage:(NIMMessage *)message 
               option:(nullable NIMDeleteMessageOption *)option;

@end

调用此方法时,如果删除的是最后一条消息,消息所属的最近会话的 lastMessage 属性会自动变成上一条消息(没有则为空消息),同时触发最近消息修改的回调。

NIMDeleteMessageOption 中可配置 removeFromDB。默认为 NO。若设置为YES,则为标记删除,即SDK将记录此条消息的删除记录,即使从云端再次同步到该消息,也无法再从数据库里查询出来。

删除指定会话内消息

@protocol NIMConversationManager <NSObject>
/**
 *  删除某个会话的所有消息
 *
 *  @param session 待删除会话
 *  @param option 删除消息选项
 */
- (void)deleteAllmessagesInSession:(NIMSession *)session
                            option:(nullable NIMDeleteMessagesOption *)option;
@end

NIMDeleteMessagesOption 参数列表

参数 类型 说明
removeSession BOOL 是否移除对应最近会话,批量删除消息时是否移除最近会话,默认为 NO,设置为 YES 时将同时删除最近会话信息
removeTable BOOL 是否删除消息表,默认情况下云信采用标记的方式进行消息删除,如果设置为 YES,将一并移除对应的消息表,进而减少消息表数量,加快 I/O。默认为NO,为标记删除。当删除后又从云端将该消息拉取下来并设置同步到数据库后,此时,该条消息依旧无法查询到。

若想指定删除某一时间段内的消息,请使用以下接口:

@protocol NIMConversationManager <NSObject>
/**
 *  删除指定范围内的消息,如指定时间范围
 *
 *  @param session 目标会话
 *  @param option 删除消息选项
 */
- (void)deleteMessagesInSession:(NIMSession *)session 
                         option:(nullable NIMBatchDeleteMessagesOption *)option 
                     completion:(nullable NIMBatchDeleteMessagesBlock)block;
@end

NIMBatchDeleteMessagesOption 参数列表

参数 类型 说明
start NSTimeInterval 起始时间,默认 0,单位s。小于等于0表示之前全部消息。
end NSTimeInterval 截止时间, 默认 0, 单位s。小于等于0表示当前时间

删除所有消息

@protocol NIMConversationManager <NSObject>
/**
 *  删除所有会话消息
 *
 *  @param option 删除消息选项
 *  @discussion 调用这个接口只会触发allMessagesDeleted这个回调,其他针对单个recentSession的回调都不会被调用
 */
- (void)deleteAllMessages:(NIMDeleteMessagesOption *)option
@end

云端历史消息

云端历史消息查询

@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 查询方向,NIMMessageSearchOrderDesc表示从新消息往旧消息查(并且查询结果按照新消息到旧消息的顺序排列),设置为NIMMessageSearchOrderAsc表示从旧消息往新消息查(并且查询结果按照旧消息到新消息的顺序排列)。此参数对聊天室会话无效
currentMessage NIMMessage 作为查询起点的消息(查询结果不会包含该消息)。如果order为NIMMessageSearchOrderDesc,那么设置currentMessage的同时必须设置endTime为该消息对应的timestamp属性。如果order为NIMMessageSearchOrderAsc,那么设置currentMessage的同时必须设置startTime为该消息对应的timestamp属性。 此参数对聊天室会话无效。
sync BOOL 是否在远程获取消息成功之后同步到本地数据库,同步只会保证消息数据写入本地但不触发回调。默认不同步,此参数对聊天室会话无效。
messageTypes NSArray <NSNumber *>* 消息类型组合,默认为 nil ,搜索全类型。一旦设置了这个字段,则 sync 字段失效,查询结果不会写入 db。
customFilter NIMHistoryMessageFilterBlock 自定义消息过滤。返回YES表示消息被过滤,不入库不回调,返回NO,表示消息正常入库和回调

删除云端历史消息

删除单会话云端历史消息

@protocol NIMConversationManager <NSObject>

/**
 *  清空点对点会话的服务端的消息。不会删除本地的消息记录。
 *
 *  @param session 目标会话
 *  @param option 清空消息选项
 *  @param completion 完成回调
 *  @discussion 只支持点对点,清空本用户服务端消息,不影响对方;如果不设置清空选项,服务端默认会同时清空漫游消息;
 */
- (void)deleteSelfRemoteSession:(NIMSession *)session
                         option:(nullable NIMClearMessagesOption *)option
                     completion:(nullable NIMRemoveRemoteSessionBlock)completion;              
@end

属性列表

参数 类型 说明
sessions NIMSession 会话
option NIMClearMessagesOption 可选择是否同时清空服务端漫游消息,nil时默认删除
completion NIMRemoveRemoteSessionBlock 远端会话删除错误回调

删除单条云端历史消息

@protocol NIMConversationManager <NSObject>

/**
 *  删除本地某条消息,并同时删除服务端历史、漫游
 *
 *  @param message 待删除的聊天消息
 *  @param ext 扩展字段
 *  @param completion 完成回调
 */
- (void)deleteMessageFromServer:(NIMMessage *)message 
                            ext:(nullable NSString *)ext 
                     completion:(nullable NIMRemoveRemoteMessageBlock)block         
@end

批量删除云端历史消息

@protocal NIMConversationManager <NSObject>

/**
 * 批量删除消息,同时删除服务端和本地。所有传入的消息必需属于同一个会话。
 *
 * @param messages 消息数组
 * @param exts key为消息id,value为删除该消息所对应的扩展信息
 * @param completion 删除完成的回调
 */
- (void)deleteRemoteMessages:(NSArray<NIMMessage *> *)messages
                        exts:(nullable NSDictionary<NSString *,NSString *> *)exts
                  completion:(nullable NIMDeleteRemoteMessagesCompletionBlock)completion;

@end

清空单个会话的云端历史消息

@protocol NIMConversationManager <NSObject>
  
 /**
 * 删除某个会话的所有本地和云端的历史消息。删除后,查询云端消息历史的接口将不能返回这些消息。
 *
 * @param session 目标会话
 * @param options 清空消息历史的可选项
 * @param block 清空完成后的回调
 */
- (void)deleteAllRemoteMessagesInSession:(NIMSession *)session
                                 options:(NIMSessionDeleteAllRemoteMessagesOptions *)options
                              completion:(NIMSessionDeleteAllRemoteMessagesCompletionBlock)completion;
@end

属性列表

参数 类型 说明
session NIMSession 需要清空的会话
options NIMSessionDeleteAllRemoteMessagesOptions 清空消息历史的可选项
completion NIMSessionDeleteAllRemoteMessagesCompletionBlock 清空完成的回调

消息检索

SDK当前支持消息检索。

本地消息检索

根据会话检索

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

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

参数 类型 说明
startTime NSTimeInterval 起始时间,默认为0
endTime NSTimeInterval 结束时间。默认为0,表示最大时间戳。若自行设置,要保证endTime晚于startTime。
limit NSUInteger 检索条数,默认100条,设置为0表示无条数限制
order NIMMessageSearchOrder 查询方向,默认为NIMMessageSearchOrderDesc表示从新消息往旧消息查,设置为NIMMessageSearchOrderAsc表示从旧消息往新消息查。无论查询方向如何,查询结果都按照旧消息到新消息的顺序排列。
messageTypes NSArray<NSNumber *> 消息类型组合,默认只搜索文本类型, 只有在 allMessageTypes 为 NO 时有效
messageSubTypes NSArray<NSNumber*> * 查询的消息子类型组合
allMessageTypes BOOL 搜索全部消息类型。默认为 NO,当设置为 YES 时,忽略 messageType,同时返回所有的消息类型消息。
searchContent NSString 检索文本,如果需要搜索的消息类型为文本,会进行内容的匹配
fromIds NSArray<NSString *> 消息发起者列表
enableContentTransfer BOOL 将搜索文本中的正则特殊字符转义,默认 YES

搜索将返回:时间在 (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
}];

本地全局检索

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

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

参数 类型 说明
startTime NSTimeInterval 起始时间,默认为0
endTime NSTimeInterval 结束时间。默认为0,表示最大时间戳。若自行设置,要保证endTime晚于startTime。
limit NSUInteger 检索条数,默认100条,设置为0表示无条数限制
order NIMMessageSearchOrder 查询方向,默认为NIMMessageSearchOrderDesc表示从新消息往旧消息查,设置为NIMMessageSearchOrderAsc表示从旧消息往新消息查。无论查询方向如何,查询结果都按照旧消息到新消息的顺序排列。
messageTypes NSArray<NSNumber *> 消息类型组合,默认只搜索文本类型, 只有在 allMessageTypes 为 NO 时有效
messageSubTypes NSArray<NSNumber*> * 查询的消息子类型组合
allMessageTypes BOOL 搜索全部消息类型。默认为 NO,当设置为 YES 时,忽略 messageType,同时返回所有的消息类型消息。
searchContent NSString 检索文本,如果需要搜索的消息类型为文本,会进行内容的匹配
fromIds NSArray<NSString *> 消息发起者列表
enableContentTransfer BOOL 将搜索文本中的正则特殊字符转义,默认 YES

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

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

NIMMessageSearchOption *option = [[NIMMessageSearchOption alloc] init];
option.limit = 100;

[[NIMSDK sharedSDK].conversationManager searchAllMessages:option result:^(NSError * _Nullable error, NSDictionary<NIMSession *,NSArray<NIMMessage *> *> * _Nullable messages) { }];

云端消息关键字检索

根据关键字查询服务端历史消息的文本内容,可另外通过指定设置起、止时间完成分页等功能;支持点对点、群(暂不支持超大群);

/**
 *  会话管理器
 */
@protocol NIMConversationManager <NSObject>
/**
*  根据关键字从服务器上检索消息
*
*  @param session 消息所属的会话
*  @param option  检索选项
*  @param result  读取的消息列表结果
*  @discussion    检索消息内容,大小写不敏感;此接口不支持查询聊天室消息,聊天室请参考 NIMChatroomManagerProtocol 中的消息接口。
*
*/
- (void)retrieveServerMessages:(NIMSession *)session
                        option:(NIMMessageServerRetrieveOption *)option
                        result:(nullable NIMRetrieveServerMessagesBlock)result;
@end

属性列表

参数 类型 说明
session NIMSession 表示的当前会话
option NIMMessageServerRetrieveOption 检索选项
result NIMRetrieveServerMessagesBlock 结果回调

示例

	NSString * keyword = searchBar.text;
    NIMMessageServerRetrieveOption * option = [[NIMMessageServerRetrieveOption alloc] init];
    option.keyword = keyword;
    [[NIMSDK sharedSDK].conversationManager retrieveServerMessages:self.session
                                                            option:option
                                                            result:^(NSError * _Nullable error,
                                                                     NSArray<NIMMessage *> * _Nullable messages)
    {
     ...
    }];

全文云端消息检索

使用全文云端消息前,需先在云信控制台开通该功能。

配置路径:配置路径:选择应用进入应用详情界面,并选择 IM 免费版/专业版 > 功能权限开通 > 拓展配置 > 全局 > 全文云端消息检索

EnableFullTextSearch.png

全文云端消息检索(按会话聚合排列)

@protocol NIMConversationManager <NSObject>
/**
 *  根据关键字从服务器上全量检索消息
 *
 *  @param option  检索选项
 *  @param result  读取的消息列表结果
 *  @discussion    检索消息内容,此接口仅支持查询P2P和群聊消息,不支持聊天室和超大群
 *
 */
- (void)retrieveServerMessages:(NIMMessageFullKeywordSearchOption *)option
                        result:(nullable NIMRetrieveServerMessagesBlock)result;
@end

属性列表

参数 类型 说明
option MsgFullKeywordSearchConfig 检索选项
result NIMRetrieveServerMessagesBlock 结果回调

MsgFullKeywordSearchConfig属性表

参数 说明
keyword 关键词 类型:NSString *
startTime 起始时间 类型:NSTimeInterval
endTime 终止时间 类型:NSTimeInterval
sessionLimit 会话数量上限 类型:NSUInteger
msgLimit 会话数量下限 类型:NSUInteger
asc 消息排序规则,默认false 类型:BOOL
p2pArray P2P范围,要查询的会话范围是此参数与{@link MsgFullKeywordSearchConfig#teamList} 的并集 类型:NSArray *
teamArray 群范围,如果只查询指定群中的消息,则输入这些群的ID 类型:NSArray *
  • 示例
[[NIMSDK sharedSDK].conversationManager retrieveServerMessages:session
                                                        option:option
                                                        result:^(NSError * _Nullable error, NSArray<NIMMessage *> * _Nullable messages)
{
    if (error)
    {
        NSAssert(NO, @"检索消息关键字失败");
    }
     dispatch_group_leave(group);
}];

全文云端消息检索(按消息时间排列)

@protocol NIMConversationManager <NSObject>
/**
 * 云端历史消息全文检索(按时间排序,不按会话分组)
 *
 * @param option 检索选项,其中sessionLimit为无效变量
 * @param result  读取的消息列表结果
 * @discussion    检索消息内容
 */
- (void)retrieveServerMessagesOrderByTime:(NIMMessageFullKeywordSearchOption *)option
                                   result:(nullable NIMRetrieveServerMessagesBlock)result;
@end

属性列表

参数 类型 说明
option MsgFullKeywordSearchConfig 检索选项
result NIMRetrieveServerMessagesBlock 结果回调

MsgFullKeywordSearchConfig属性表

参数 说明
keyword 关键词 类型:NSString *
startTime 起始时间 类型:NSTimeInterval
endTime 终止时间 类型:NSTimeInterval
sessionLimit 无效
msgLimit 会话数量下限 类型:NSUInteger
asc 消息排序规则,默认false 类型:BOOL
p2pArray P2P范围,要查询的会话范围是此参数与{@link MsgFullKeywordSearchConfig#teamList} 的并集 类型:NSArray *
teamArray 群范围,如果只查询指定群中的消息,则输入这些群的ID 类型:NSArray *

动态查询历史消息

当离线阶段收取大量消息,再次登录或切换设备时,往往容易出现历史消息拉取不完整的情况。

为了获取完整的历史消息记录,您可以使用全云端方案,即用户每次进入时都通过查询云端历史记录并将查到的消息同步至本地。但是在会话多、消息多的场景下,使用全云端方案,会导致耗时长,耗能大等问题。

为解决上述问题,云信 IM 提供本地+云端智能调度方案,通过调用完整的内部逻辑保证历史消息的连续性和完整性。您仅需要选择开始或结束时间戳以及对应的消息条数即可按需获取历史消息。

通过调用 getMessagesDynamically: 方法动态查询连续的历史消息。

  • 若用户的业务场景需要调用该接口,请先在云信控制台开通漫游消息功能,然后联系商务经理单独开通动态查询历史消息功能,否则该接口只会从本地数据库获取消息。
  • 该接口为完整独立的历史消息查询接口,与其他历史消息查询接口互不影响。

参数说明:

参数 说明
session 会话,具体请参见NIMSession
startTime 开始时间
endTime 结束时间,大于开始时间,0 表示当前时间
limit 查询的历史消息数量,取值范围为 [0,100],若传入 0,则视为查询 100 条
anchorClientId 查询起始的客户端消息 ID,查询结果不包括这条消息
anchorServerId 查询起始的服务端消息 ID,查询结果不包括这条消息
order 查询方向,具体请参见NIMMessageSearchOrder,默认NIMMessageSearchOrderDesc,即从新往旧查询

回调结果说明:

结果 说明
isReliable 结果是否可信(连续)。未开启功能,云端请求失败等情况下,此字段为 false,代表消息不一定连续;为 true,代表查询到的消息连续
messages 查询到的消息列表,排序与 order 相同
查询最新的 100 条历史消息

若只需要查询最新的 100 条历史消息,则只需传入 session,其他都可使用默认值。

示例代码如下:

//查询最新的 100 条历史消息
NIMGetMessagesDynamicallyParam *param = [[NIMGetMessagesDynamicallyParam alloc] init];
param.session = [NIMSession session:sessionId type:sessionType];
param.limit = 100;
[[[NIMSDK sharedSDK] conversationManager] getMessagesDynamically:param completion:^(NSError * __nullable error, BOOL isReliable, NSArray<NIMMessage *> * __nullable messages) {
    if (error)
    {
        // 失败
        return;
    }
    if (isReliable)
    {
        // 查到的消息是可信(连续)的,消息列表的顺序默认为从新往旧
    }
    else
    {
        // 查到的消息是不可信(不连续)的,消息列表的顺序默认为从新往旧
    }
}];
查询某条消息之前的 100 条历史消息

若需要查询某条消息(message)之前的 100 条历史消息,除了传入 session 外,还需要传入该条消息的时间戳(endTime)、服务端 ID(anchorServerId)、客户端 ID 信息(anchorClientId)。

示例代码如下:

NIMGetMessagesDynamicallyParam *param = [[NIMGetMessagesDynamicallyParam alloc] init];
param.session = [message session];
param.limit = 100;
param.endTime = [message timestamp];
param.anchorServerId = [message serverID];
param.anchorClientId = [message messageId];

[[[NIMSDK sharedSDK] conversationManager] getMessagesDynamically:param completion:^(NSError * __nullable error, BOOL isReliable, NSArray<NIMMessage *> * __nullable messages) {
    if (error)
    {
        // 失败
        return;
    }
    if (isReliable)
    {
        // 查到的消息是可信(连续)的,消息列表的顺序默认为从新往旧
    }
    else
    {
        // 查到的消息是不可信(不连续)的,消息列表的顺序默认为从新往旧
    }
}];
查询某条消息之后的 100 条历史消息

若需要查询某条消息(message)之后的 100 条历史消息,除了传入 session 外,还需要将查询方向(order)设置为 NIMMessageSearchOrderAsc,传入该条消息的时间戳(startTime)、服务端 ID(anchorServerId)、客户端 ID 信息(anchorClientId)。

示例代码如下:

NIMGetMessagesDynamicallyParam *param = [[NIMGetMessagesDynamicallyParam alloc] init];
param.session = [message session];
param.limit = 100;
param.order = NIMMessageSearchOrderAsc ;
param.startTime = [message timestamp];
param.anchorServerId = [message serverID];
param.anchorClientId = [message messageId];

[[[NIMSDK sharedSDK] conversationManager] getMessagesDynamically:param completion:^(NSError * __nullable error, BOOL isReliable, NSArray<NIMMessage *> * __nullable messages) {
    if (error)
    {
        // 失败
        return;
    }
    if (isReliable)
    {
        // 查到的消息是可信(连续)的,消息列表的顺序为从旧往新(与查询时设置的order一致)
    }
    else
    {
        // 查到的消息是不可信(不连续)的,消息列表的顺序为从旧往新(与查询时设置的order一致)
    }
}];
此文档是否对你有帮助?
有帮助
我要吐槽
  • 本地历史消息
  • 本地历史消息查询
  • 按消息id查询
  • 删除本地消息
  • 删除单条消息
  • 删除指定会话内消息
  • 删除所有消息
  • 云端历史消息
  • 云端历史消息查询
  • 删除云端历史消息
  • 删除单会话云端历史消息
  • 删除单条云端历史消息
  • 批量删除云端历史消息
  • 清空单个会话的云端历史消息
  • 消息检索
  • 本地消息检索
  • 根据会话检索
  • 本地全局检索
  • 云端消息关键字检索
  • 全文云端消息检索
  • 全文云端消息检索(按会话聚合排列)
  • 全文云端消息检索(按消息时间排列)
  • 动态查询历史消息