NIMConversationManagerProtocol.h 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931
  1. //
  2. // NIMConversationManager.h
  3. // NIMLib
  4. //
  5. // Created by Netease.
  6. // Copyright (c) 2015 Netease. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. NS_ASSUME_NONNULL_BEGIN
  10. @class NIMMessage;
  11. @class NIMSession;
  12. @class NIMRecentSession;
  13. @class NIMRecentSessionOption;
  14. @class NIMHistoryMessageSearchOption;
  15. @class NIMMessageSearchOption;
  16. @class NIMDeleteMessageOption;
  17. @class NIMDeleteMessagesOption;
  18. @class NIMImportedRecentSession;
  19. @class NIMMessageReceipt;
  20. @class NIMTeamMessageReceiptDetail;
  21. @class NIMClearMessagesOption;
  22. @class NIMDeleteRecentSessionOption;
  23. @class NIMBatchDeleteMessagesOption;
  24. @class NIMFetchServerSessionOption;
  25. @class NIMMessageServerRetrieveOption;
  26. @class NIMIncompleteSessionInfo;
  27. @class NIMSessionDeleteAllRemoteMessagesOptions;
  28. @class NIMSessionDeleteAllRemoteMessagesInfo;
  29. @class NIMAddEmptyRecentSessionBySessionOption;
  30. /**
  31. * 读取服务器消息记录block
  32. *
  33. * @param error 错误,如果成功则error为nil
  34. * @param messages 读取的消息列表
  35. */
  36. typedef void(^NIMFetchMessageHistoryBlock)(NSError * __nullable error,NSArray<NIMMessage *> * __nullable messages);
  37. /**
  38. * 服务器消息检索记录block
  39. *
  40. * @param error 错误,如果成功则error为nil
  41. * @param messages 读取的消息列表
  42. */
  43. typedef void(^NIMRetrieveServerMessagesBlock)(NSError * __nullable error,NSArray<NIMMessage *> * __nullable messages);
  44. /**
  45. * 删除本地消息记录block
  46. *
  47. * @param error 错误,如果成功则error为nil
  48. */
  49. typedef void (^NIMBatchDeleteMessagesBlock)(NSError * __nullable error);
  50. /**
  51. * 更新本地消息 Block
  52. *
  53. * @param error 错误,如果成功则error为nil
  54. */
  55. typedef void(^NIMUpdateMessageBlock)(NSError * __nullable error);
  56. /**
  57. * 导入本地最近会话 Block
  58. *
  59. * @param error 错误,如果成功则error为nil
  60. * @param failedImportedRecentSessions 导入失败的最近会话
  61. */
  62. typedef void(^NIMImportRecentSessionsBlock)(NSError * __nullable error, NSArray<NIMImportedRecentSession *> * __nullable failedImportedRecentSessions);
  63. /**
  64. * 标记远端会话Block
  65. *
  66. * @param error 错误,如果成功则error为nil
  67. */
  68. typedef void(^NIMRemoveRemoteMessageBlock)(NSError * __nullable error);
  69. /**
  70. * 标记远端会话Block
  71. *
  72. * @param error 错误,如果成功则error为nil
  73. */
  74. typedef void(^NIMRemoveRemoteSessionBlock)(NSError * __nullable error);
  75. /**
  76. * 清空历史消息block
  77. * @param error 错误,如果成功则error为nil
  78. */
  79. typedef void(^NIMSessionDeleteAllRemoteMessagesCompletionBlock)(NSError * _Nullable error);
  80. /**
  81. * 批量单向删除消息的回调block
  82. */
  83. typedef void(^NIMDeleteRemoteMessagesCompletionBlock)(NSError * _Nullable error);
  84. /**
  85. * 搜索本地消息记录Block
  86. *
  87. * @param error 错误,如果成功则error为nil
  88. * @param messages 读取的消息列表
  89. * @discussion 只有在传入参数错误时才会有error产生
  90. */
  91. typedef void(^NIMSearchMessageBlock)(NSError * __nullable error,NSArray<NIMMessage *> * __nullable messages);
  92. /**
  93. * 全局搜索本地消息记录Block
  94. *
  95. * @param error 错误,如果成功则error为nil
  96. * @param messages 读取的消息列表
  97. */
  98. typedef void(^NIMGlobalSearchMessageBlock)(NSError * __nullable error,NSDictionary<NIMSession *,NSArray<NIMMessage *> *> * __nullable messages);
  99. /**
  100. 导出历史消息进度回调
  101. @param progress 进度 0-100
  102. */
  103. typedef void(^NIMExportMessageProgress)(float progress);
  104. /**
  105. 导出历史消息完成回调
  106. @param error 错误,如果成功则为 nil
  107. @param resultFilePath 如果成功,则为结果文件路径
  108. */
  109. typedef void(^NIMExportMessageComletion)(NSError * __nullable error, NSString * __nullable resultFilePath);
  110. /**
  111. 导入历史消息进度回调
  112. @param progress 进度 0-100
  113. */
  114. typedef void(^NIMImportMessageProgress)(float progress);
  115. /**
  116. 导入历史消息完成回调
  117. @param error 错误,如果成功则为 nil
  118. */
  119. typedef void(^NIMImportMessageCompletion)(NSError * __nullable error);
  120. /**
  121. 更新服务器历史备份文件结果回调
  122. @param error 错误,如果成功则为 nil
  123. */
  124. typedef void(^NIMUpdateMigrateMessageCompletion)(NSError * __nullable error);
  125. /**
  126. 获取历史备份文件结果回调
  127. @param error 错误,如果成功则为 nil
  128. @param remoteFilePath 备份文件远端路径
  129. @param secureKey 备份文件解密的 key
  130. */
  131. typedef void(^NIMFetchMigrateMessageCompletion)(NSError * __nullable error, NSString * __nullable remoteFilePath, NSString * __nullable secureKey);
  132. /**
  133. * 读取服务器会话列表block
  134. *
  135. * @param error 错误,如果成功则error为nil
  136. * @param recentSessions 读取的消息列表
  137. * @param hasMore 最小时间戳只有请求第一页时会返回这个参数,表示下一次增量同步时带在请求参数里
  138. */
  139. typedef void(^NIMFetchRecentSessionsHistoryBlock)(NSError * __nullable error,
  140. NSArray<NIMRecentSession *> * __nullable recentSessions,
  141. BOOL hasMore);
  142. /**
  143. * 读取服务器会话block
  144. *
  145. * @param error 错误,如果成功则error为nil
  146. * @param recentSession 结果会话
  147. */
  148. typedef void(^NIMFetchRecentSessionHistoryBlock)(NSError * __nullable error,
  149. NIMRecentSession * _Nullable recentSession);
  150. /**
  151. * 更新服务端端会话扩展
  152. *
  153. * @param error 错误,如果成功则error为nil
  154. */
  155. typedef void(^NIMRemoteRecentSessionBlock)(NSError * __nullable error);
  156. /**
  157. * 批量更新未完整会话列表
  158. *
  159. * @param error 错误,如果成功则error为nil
  160. * @param faileds 更新失败的会话
  161. */
  162. typedef void(^NIMUpdateIncompleteSessionsBlock)(NSError * __nullable error, NSArray<NIMImportedRecentSession *> * __nullable faileds);
  163. /**
  164. * 未完整会话信息
  165. *
  166. * @param error 错误,如果成功则error为nil
  167. * @param result 更新失败的会话
  168. */
  169. typedef void(^NIMIncompleteSessionsBlock)(NSError * __nullable error, NSArray<NIMIncompleteSessionInfo *> * __nullable result);
  170. /**
  171. * 批量发送会话已读回调
  172. *
  173. * @param error 错误,如果成功则error为nil
  174. * @param result 发送失败的会话
  175. */
  176. typedef void(^NIMBatchSendACKSessionsBlock)(NSError * __nullable error, NSArray <NIMSession * > * _Nullable sessions);
  177. /**
  178. * 发送会话已读回调
  179. *
  180. * @param error 错误,如果成功则error为nil
  181. */
  182. typedef void(^NIMSendACKSessionsBlock)(NSError * __nullable error);
  183. /**
  184. 清空会话消息完成时状态回调
  185. */
  186. typedef NS_ENUM(NSUInteger, NIMClearMessagesStatus)
  187. {
  188. NIMClearMessagesStatusLocalCleared = 0,
  189. NIMClearMessagesStatusServerCleared,
  190. NIMClearMessagesStatusServerFailed,
  191. };
  192. /**
  193. * 会话管理器回调
  194. */
  195. @protocol NIMConversationManagerDelegate <NSObject>
  196. @optional
  197. /**
  198. * 最近会话数据库读取完成
  199. *
  200. * @discussion 所有最近会话读取完成。设置NIMSDKConfig中的asyncLoadRecentSessionEnabled属性为YES时,且本地数目大于1000条时,此回调会执行。
  201. * 该回调执行表示最近会话全部加载完毕可以通过allRecentSessions来取全部对话。
  202. */
  203. - (void)didLoadAllRecentSessionCompletion;
  204. /**
  205. * 增加最近会话的回调
  206. *
  207. * @param recentSession 最近会话
  208. * @param totalUnreadCount 目前总未读数
  209. * @discussion 当新增一条消息,并且本地不存在该消息所属的会话时,会触发此回调。
  210. */
  211. - (void)didAddRecentSession:(NIMRecentSession *)recentSession
  212. totalUnreadCount:(NSInteger)totalUnreadCount;
  213. /**
  214. * 最近会话修改的回调
  215. *
  216. * @param recentSession 最近会话
  217. * @param totalUnreadCount 目前总未读数
  218. * @discussion 触发条件包括: 1.当新增一条消息,并且本地存在该消息所属的会话。
  219. * 2.所属会话的未读清零。
  220. * 3.所属会话的最后一条消息的内容发送变化。(例如成功发送后,修正发送时间为服务器时间)
  221. * 4.删除消息,并且删除的消息为当前会话的最后一条消息。
  222. */
  223. - (void)didUpdateRecentSession:(NIMRecentSession *)recentSession
  224. totalUnreadCount:(NSInteger)totalUnreadCount;
  225. /**
  226. * 删除最近会话的回调
  227. *
  228. * @param recentSession 最近会话
  229. * @param totalUnreadCount 目前总未读数
  230. */
  231. - (void)didRemoveRecentSession:(NIMRecentSession *)recentSession
  232. totalUnreadCount:(NSInteger)totalUnreadCount;
  233. /**
  234. * 单个会话里所有消息被删除的回调
  235. *
  236. * @param session 消息所属会话
  237. */
  238. - (void)messagesDeletedInSession:(NIMSession *)session;
  239. /**
  240. * 所有消息被删除的回调
  241. */
  242. - (void)allMessagesDeleted;
  243. /**
  244. * 单个会话所有消息在本地和服务端都被清空
  245. * @param session 消息所属会话
  246. */
  247. - (void)allMessagesClearedInSession:(NIMSession *)session step:(NIMClearMessagesStatus)step;
  248. /**
  249. * 所有消息已读的回调
  250. */
  251. - (void)allMessagesRead;
  252. /**
  253. * 会话服务,会话更新
  254. *
  255. * @param recentSession 最近会话
  256. */
  257. - (void)didServerSessionUpdated:(nullable NIMRecentSession *)recentSession;
  258. /**
  259. * 消息单向删除通知
  260. * @deprecated 请使用 - onRecvMessagesDeleted: exts:
  261. *
  262. * @param message 被删除消息
  263. * @param ext 扩展消息
  264. */
  265. - (void)onRecvMessageDeleted:(NIMMessage *)message ext:(nullable NSString *)ext __attribute__((deprecated("请使用 - onRecvMessagesDeleted: exts:")));
  266. /**
  267. * 消息单向删除通知
  268. *
  269. * @param message 被删除消息
  270. * @param exts 删除时的扩展字段字典,key: messageId,value: ext
  271. */
  272. - (void)onRecvMessagesDeleted:(NSArray<NIMMessage *> *)messages exts:(nullable NSDictionary<NSString *, NSString *> *)exts;
  273. /**
  274. * 未漫游完整会话列表回调
  275. * @param infos 未漫游完整的会话信息
  276. */
  277. - (void)onRecvIncompleteSessionInfos:(nullable NSArray<NIMIncompleteSessionInfo *> *)infos;
  278. /**
  279. * 标记已读回调
  280. * @param session session
  281. * @param error 失败原因
  282. */
  283. - (void)onMarkMessageReadCompleteInSession:(NIMSession *)session error:(nullable NSError *)error;
  284. /**
  285. * 批量标记已读的回调
  286. * @param session session
  287. */
  288. - (void)onBatchMarkMessagesReadInSessions:(NSArray<NIMSession *> *)sessions;
  289. /**
  290. * 远端消息清空的通知
  291. * @param info 清空会话的信息
  292. */
  293. - (void)onRecvAllRemoteMessagesInSessionDeleted:(NIMSessionDeleteAllRemoteMessagesInfo *)info;
  294. @end
  295. /**
  296. 导出历史消息过程 delegate,可用于处理自定义消息
  297. */
  298. @protocol NIMExportMessageDelegate <NSObject>
  299. @optional
  300. /**
  301. 是否导出消息,YES - 导出,NO -不导出
  302. @param message 消息体
  303. @return YES / NO
  304. */
  305. - (BOOL)shouldExportMessage:(NIMMessage *)message;
  306. /**
  307. 消息导出前的通知回调
  308. @param message 将导出的消息
  309. */
  310. - (void)onMessageWillExport:(NIMMessage *)message;
  311. @end
  312. /**
  313. 导入历史消息过程 delegate,可用于处理自定义消息
  314. */
  315. @protocol NIMImportMessageDelegate <NSObject>
  316. @optional
  317. /**
  318. 是否导入消息,YES - 导入,NO -不导入
  319. @param message 消息体
  320. @return YES / NO
  321. */
  322. - (BOOL)shouldImportMessage:(NIMMessage *)message;
  323. /**
  324. 消息导入前的通知回调
  325. @param message 消息体
  326. */
  327. - (void)onMessageWillImport:(NIMMessage *)message;
  328. @end
  329. /**
  330. * 会话管理器
  331. */
  332. @protocol NIMConversationManager <NSObject>
  333. /**
  334. * 删除某条消息
  335. *
  336. * @param message 待删除的聊天消息
  337. */
  338. - (void)deleteMessage:(NIMMessage *)message;
  339. /**
  340. * 删除某条消息
  341. *
  342. * @param message 待删除的聊天消息
  343. * @param option 删除消息选项
  344. */
  345. - (void)deleteMessage:(NIMMessage *)message
  346. option:(nullable NIMDeleteMessageOption *)option;
  347. /**
  348. * 删除本地某条消息,同时删除服务端历史、漫游
  349. *
  350. * @param message 待删除的聊天消息
  351. * @param ext 扩展字段
  352. * @param block 完成回调
  353. */
  354. - (void)deleteMessageFromServer:(NIMMessage *)message
  355. ext:(nullable NSString *)ext
  356. completion:(nullable NIMRemoveRemoteMessageBlock)block;
  357. /**
  358. * 删除某个会话的所有消息
  359. *
  360. * @param session 待删除会话
  361. * @param option 删除消息选项
  362. */
  363. - (void)deleteAllmessagesInSession:(NIMSession *)session
  364. option:(nullable NIMDeleteMessagesOption *)option;
  365. /**
  366. * 删除所有会话消息
  367. *
  368. * @param option 删除消息选项
  369. * @discussion 调用这个接口只会触发allMessagesDeleted这个回调,其他针对单个recentSession的回调都不会被调用
  370. */
  371. - (void)deleteAllMessages:(nullable NIMDeleteMessagesOption *)option;
  372. /**
  373. * 删除指定范围内的消息,如指定时间范围
  374. *
  375. * @param session 目标会话
  376. * @param option 删除消息选项
  377. * @param block 完成回调
  378. */
  379. - (void)deleteMessagesInSession:(NIMSession *)session
  380. option:(nullable NIMBatchDeleteMessagesOption *)option
  381. completion:(nullable NIMBatchDeleteMessagesBlock)block;
  382. /**
  383. * 删除某个会话的所有本地和云端的历史消息。删除后,查询云端消息历史的接口将不能返回这些消息。
  384. *
  385. * @param session 目标会话
  386. * @param options 清空消息历史的可选项
  387. * @param block 清空完成后的回调
  388. */
  389. - (void)deleteAllRemoteMessagesInSession:(NIMSession *)session
  390. options:(NIMSessionDeleteAllRemoteMessagesOptions *)options
  391. completion:(NIMSessionDeleteAllRemoteMessagesCompletionBlock)completion;
  392. /**
  393. * 批量删除消息,同时删除服务端和本地。所有传入的消息必需属于同一个会话。
  394. *
  395. * @param messages 消息数组
  396. * @param exts key为消息id,value为删除该消息所对应的扩展信息
  397. * @param completion 删除完成的回调
  398. */
  399. - (void)deleteRemoteMessages:(NSArray<NIMMessage *> *)messages
  400. exts:(nullable NSDictionary<NSString *,NSString *> *)exts
  401. completion:(nullable NIMDeleteRemoteMessagesCompletionBlock)completion;
  402. /**
  403. * 增加某个最近会话
  404. *
  405. * @param session 待增加的最近会话
  406. * @discussion 异步方法
  407. */
  408. - (void)addEmptyRecentSessionBySession:(NIMSession *)session;
  409. /**
  410. * 增加某个最近会话
  411. *
  412. * @param session 待增加的最近会话
  413. * @param withLastMsg 是否包含最后一条消息
  414. * @discussion 异步方法
  415. */
  416. - (void)addEmptyRecentSessionBySession:(NIMSession *)session
  417. option:(NIMAddEmptyRecentSessionBySessionOption *) option;
  418. /**
  419. * 删除某个最近会话
  420. *
  421. * @param recentSession 待删除的最近会话
  422. * @discussion 异步方法,删除最近会话,但保留会话内消息
  423. */
  424. - (void)deleteRecentSession:(NIMRecentSession *)recentSession;
  425. /**
  426. * 删除某个最近会话
  427. *
  428. * @param recentSession 待删除的最近会话
  429. * @param option 是否删除漫游选项,isDeleteRoamMessage默认为NO
  430. * @param completion 结果回调,不会回调代理方法didRemoveRecentSession:totalUnreadCount:
  431. * @discussion 异步方法,删除最近会话,但保留会话内消息
  432. */
  433. - (void)deleteRecentSession:(NIMRecentSession *)recentSession option:(NIMDeleteRecentSessionOption *)option completion:(NIMRemoveRemoteSessionBlock)completion;
  434. /**
  435. * 设置所有会话消息为已读
  436. *
  437. * @discussion 异步方法,消息会标记为设置的状态。不会触发单条 recentSession 更新的回调,但会触发回调 - (void)allMessagesRead
  438. */
  439. - (void)markAllMessagesRead;
  440. /**
  441. * 批量设置多个会话消息已读
  442. *
  443. * @discussion 异步方法。不会触发单条 recentSession 更新的回调,但会触发回调 - onBatchMarkMessagesReadInSessions:
  444. */
  445. - (void)batchMarkMessagesReadInSessions:(NSArray<NIMSession *> *)sessions;
  446. /**
  447. * 批量设置多个会话消息已读
  448. *
  449. * @param completion 结果回调。部分成功时,可以从NIMBatchSendACKSessionsBlock的sessions参数得到失败的会话
  450. * @discussion 异步方法。不会触发单条 recentSession 更新的回调,但会触发回调 - onBatchMarkMessagesReadInSessions:
  451. */
  452. - (void)batchMarkMessagesReadInSessions:(NSArray<NIMSession *> *)sessions completion:(NIMBatchSendACKSessionsBlock)completion;
  453. /**
  454. * 设置一个会话里所有消息置为已读
  455. *
  456. * @param session 需设置的会话
  457. * @discussion 异步方法,消息会标记为设置的状态
  458. */
  459. - (void)markAllMessagesReadInSession:(NIMSession *)session;
  460. /**
  461. * 设置一个会话里所有消息置为已读
  462. *
  463. * @param session 需设置的会话
  464. * @param session 结果回调
  465. * @discussion 异步方法,消息会标记为设置的状态
  466. */
  467. - (void)markAllMessagesReadInSession:(NIMSession *)session completion:(NIMSendACKSessionsBlock)completion;
  468. /**
  469. * 更新本地已存的消息记录
  470. *
  471. * @param message 需要更新的消息
  472. * @param session 需要更新的会话
  473. * @param completion 完成后的回调
  474. * @discussion 为了保证存储消息的完整性,提供给上层调用的消息更新接口只允许更新如下字段:所有消息的本地拓展字段(LocalExt)和自定义消息的消息对象(messageObject)
  475. */
  476. - (void)updateMessage:(NIMMessage *)message
  477. forSession:(NIMSession *)session
  478. completion:(nullable NIMUpdateMessageBlock)completion;
  479. /**
  480. * 写入消息
  481. *
  482. * @param message 需要更新的消息
  483. * @param session 需要更新的会话
  484. * @param completion 完成后的回调
  485. * @discussion 当保存消息成功之后,会收到 NIMChatManagerDelegate 中的 onRecvMessages: 回调。不允许插入已存在的消息
  486. */
  487. - (void)saveMessage:(NIMMessage *)message
  488. forSession:(NIMSession *)session
  489. completion:(nullable NIMUpdateMessageBlock)completion;
  490. /**
  491. * 导入最近会话
  492. *
  493. * @param importedRecentSession 待导入的会话集合
  494. * @param completion 完成后的回调
  495. * @discussion 当导入最近会话成功之后,不会收到 NIMChatManagerDelegate 中的 recentSession 变化的回调,请直接在 completion 中做处理。不允许插入已经存在的最近会话。
  496. */
  497. - (void)importRecentSessions:(NSArray<NIMImportedRecentSession *> *)importedRecentSession
  498. completion:(nullable NIMImportRecentSessionsBlock)completion;
  499. /**
  500. * 从本地db读取一个会话里某条消息之前的若干条的消息
  501. *
  502. * @param session 消息所属的会话
  503. * @param message 当前最早的消息,没有则传入nil
  504. * @param limit 个数限制
  505. *
  506. * @return 消息列表,按时间从小到大排列
  507. */
  508. - (nullable NSArray<NIMMessage *> *)messagesInSession:(NIMSession *)session
  509. message:(nullable NIMMessage *)message
  510. limit:(NSInteger)limit;
  511. /**
  512. * 根据消息Id获取消息
  513. *
  514. * @param session 消息所属会话结合
  515. *
  516. * @param messageIds 消息Id集合
  517. *
  518. * @return 消息列表,按时间从小到大排列
  519. */
  520. - (nullable NSArray<NIMMessage *> *)messagesInSession:(NIMSession *)session
  521. messageIds:(NSArray<NSString *> *)messageIds;
  522. /**
  523. * 获取所有未读数
  524. * @discussion 只能在主线程调用,包括忽略提醒的会话
  525. * @return 未读数
  526. */
  527. - (NSInteger)allUnreadCount;
  528. /**
  529. * 获取所有需要通知/不需要通知的最近会话未读数
  530. * @param notify 是否需要通知
  531. * @return 未读数
  532. * @discussion 群只有 notify state != NIMTeamNotifyStateNone 才算是不允许通知
  533. */
  534. - (NSInteger)allUnreadCount:(BOOL)notify;
  535. /**
  536. * 获取所有最近会话。
  537. * @return 最近会话列表
  538. * @discussion SDK 以 map 的形式保存 sessions,调用这个方法时将进行排序,数据量较大 (上万) 时会比较耗时。
  539. * 该方法默认是同步查询所有sessions,当数据量较大(上万)会比较耗时,可能会卡主线程,这种情况下
  540. * 用户可以配置NIMSDKConfig中的asyncLoadRecentSessionEnabled属性为YES,此时该接口可以先返回
  541. * 100条最近会话,等全部加载完会回调didLoadAllRecentSessionCompletion,此后再调用该接口可以全量返回
  542. * 所有会话,用户需要在didLoadAllRecentSessionCompletion回调中及时更新UI展示。
  543. */
  544. - (nullable NSArray<NIMRecentSession *> *)allRecentSessions;
  545. /**
  546. * 获取所有最近会话
  547. * @return 最近会话列表
  548. * @discussion SDK 以 map 的形式保存 sessions,调用这个方法时将进行排序,数据量较大 (上万) 时会比较耗时。
  549. * 通过该接口获取的最近会话列表与allRecentSessions接口不同,是基于allRecentSessions接口筛选类型之后重新生成的新对象
  550. * 需要用户自行在外部管理,所有回调不回回调该接口查询的任何会话
  551. */
  552. - (nullable NSArray<NIMRecentSession *> *)allRecentSessionsWithOption:(NIMRecentSessionOption *)option;
  553. /**
  554. * 根据当前 session 返回对应的最近会话信息
  555. *
  556. * @param session 会话
  557. *
  558. * @return 最近会话信息,如果找不到则返回 nil
  559. */
  560. - (nullable NIMRecentSession *)recentSessionBySession:(NIMSession *)session;
  561. /**
  562. * 从服务端分页获取历史会话列表
  563. *
  564. * @param option 分页查询选项,可为空,空时默认全量获取
  565. *
  566. * @param completion 完成回调
  567. */
  568. - (void)fetchServerSessions:(nullable NIMFetchServerSessionOption *)option
  569. completion:(nullable NIMFetchRecentSessionsHistoryBlock)completion;
  570. /**
  571. * 从服务端获取会话信息
  572. *
  573. * @param session 目标会话
  574. *
  575. * @param completion 完成回调
  576. */
  577. - (void)fetchServerSessionBySession:(NIMSession *)session
  578. completion:(nullable NIMFetchRecentSessionHistoryBlock)completion;
  579. /**
  580. * 更新服务端获取会话扩展信息
  581. *
  582. * @param ext 扩展信息
  583. *
  584. * @param session 目标最近会话
  585. *
  586. * @param completion 完成回调
  587. */
  588. - (void)updateServerSessionExt:(NSString *)ext
  589. session:(NIMSession *)session
  590. completion:(nullable NIMRemoteRecentSessionBlock)completion;
  591. /**
  592. * 删除服务端
  593. *
  594. * @param sessions 目标会话
  595. *
  596. * @param completion 完成回调
  597. */
  598. - (void)deleteServerSessions:(NSArray<NIMSession *> *)sessions
  599. completion:(nullable NIMRemoteRecentSessionBlock)completion;
  600. /**
  601. * 从服务器上获取一个会话里某条消息之前的若干条的消息
  602. *
  603. * @param session 消息所属的会话
  604. * @param option 搜索选项
  605. * @param result 读取的消息列表结果
  606. * @discussion 此接口不支持查询聊天室消息,聊天室请参考 NIMChatroomManagerProtocol 中的查询消息接口。
  607. *
  608. */
  609. - (void)fetchMessageHistory:(NIMSession *)session
  610. option:(NIMHistoryMessageSearchOption *)option
  611. result:(nullable NIMFetchMessageHistoryBlock)result;
  612. /**
  613. * 根据关键字从服务器上检索消息
  614. *
  615. * @param session 消息所属的会话
  616. * @param option 检索选项
  617. * @param result 读取的消息列表结果
  618. * @discussion 检索消息内容,大小写不敏感;此接口不支持查询聊天室消息,聊天室请参考 NIMChatroomManagerProtocol 中的消息接口。
  619. *
  620. */
  621. - (void)retrieveServerMessages:(NIMSession *)session
  622. option:(NIMMessageServerRetrieveOption *)option
  623. result:(nullable NIMRetrieveServerMessagesBlock)result;
  624. /**
  625. * 搜索本地会话内消息
  626. *
  627. * @param session 消息所属的会话
  628. * @param option 搜索选项
  629. * @param result 读取的消息列表结果
  630. *
  631. */
  632. - (void)searchMessages:(NIMSession *)session
  633. option:(NIMMessageSearchOption *)option
  634. result:(nullable NIMSearchMessageBlock)result;
  635. /**
  636. * 全局搜索本地消息
  637. *
  638. * @param option 搜索选项
  639. * @param result 读取的消息内容
  640. */
  641. - (void)searchAllMessages:(NIMMessageSearchOption *)option
  642. result:(nullable NIMGlobalSearchMessageBlock)result;
  643. /**
  644. * 删除服务器端最近会话
  645. *
  646. * @param sessions 需要删除的会话列表,内部只能是NIMSession
  647. * @param completion 完成的回调
  648. * @discussion 调用这个接口成功后,当前会话之前的消息都不会漫游到其他端
  649. */
  650. - (void)deleteRemoteSessions:(NSArray<NIMSession *> *)sessions
  651. completion:(nullable NIMRemoveRemoteSessionBlock)completion;
  652. /**
  653. * 清空点对点会话对应服务端的消息
  654. *
  655. * @param session 目标会话列表
  656. * @param option 清空消息选项
  657. * @param completion 完成回调
  658. * @discussion 只支持点对点,清空本用户的服务端消息,不影响对方;如果不设置清空选项,服务端默认会同时清空漫游消息;
  659. */
  660. - (void)deleteSelfRemoteSession:(NIMSession *)session
  661. option:(nullable NIMClearMessagesOption *)option
  662. completion:(nullable NIMRemoveRemoteSessionBlock)completion;
  663. /**
  664. * 更新最近会话的本地扩展
  665. *
  666. * @param ext 扩展信息
  667. * @param recentSession 要更新的最近会话
  668. * @discussion 此扩展不会漫游到其他端,上层需要保证 NSDictionary 可以转换为 JSON。
  669. */
  670. - (void)updateRecentLocalExt:(nullable NSDictionary *)ext
  671. recentSession:(NIMRecentSession *)recentSession;
  672. /**
  673. 导出历史消息到本地文件
  674. @param delegate 自定义消息的处理 delegate
  675. @param progress 导出进度更新回调
  676. @param completion 导出完成回调
  677. */
  678. - (void)exportMeessageInfosWithDelegate:(id<NIMExportMessageDelegate>)delegate
  679. progress:(NIMExportMessageProgress)progress
  680. completion:(NIMExportMessageComletion)completion;
  681. /**
  682. 导入历史消息
  683. @param infoFilePath 已解码并序列化了的本地历史消息文件路径
  684. @param delegate 自定义消息的处理 delegate
  685. @param progress 导入进度更新回调
  686. @param completion 导入完成回调
  687. */
  688. - (void)importMessageInfosAtPath:(NSString *)infoFilePath
  689. delegate:(id<NIMImportMessageDelegate>)delegate
  690. progress:(NIMImportMessageProgress)progress
  691. completion:(NIMImportMessageCompletion)completion;
  692. /**
  693. 取消 导出/导入 历史消息操作
  694. */
  695. - (void)cancelMigrateMessages;
  696. /**
  697. 更新历史消息备份信息
  698. @param URL 历史消息备份的 URL
  699. @param key 历史消息备份的加密 key
  700. @param completion 更新信息的完成回调
  701. */
  702. - (void)updateMigrateMessageInfoWithURL:(NSString *)URL key:(NSString *)key completion:(NIMUpdateMigrateMessageCompletion)completion;
  703. /**
  704. 获取历史消息备份信息
  705. @param completion 获取历史消息备份的完成回调
  706. */
  707. - (void)fetchMigrateMessageInfo:(NIMFetchMigrateMessageCompletion)completion;
  708. /**
  709. 反序列化消息数据
  710. @param encodeData 序列化的数据
  711. @return 消息对象
  712. @discussion 此接口用于反序列化消息的数据,请与encodeMessageToData配套使用,用于实现消息本地序列化
  713. */
  714. - (NIMMessage *)decodeMessageFromData:(NSData *)encodeData;
  715. /**
  716. 序列化消息
  717. @param message 消息对象
  718. @return 序列化数据
  719. @discussion 此接口用于序列化消息,请与decodeMessageFromData配套使用,用于实现消息本地序列化
  720. */
  721. - (NSData *)encodeMessageToData:(NIMMessage *)message;
  722. #pragma mark - 漫游消息未完整会话接口
  723. /**
  724. 查询漫游消息未完整会话信息
  725. @param session 目标会话
  726. @param completion 结果完成回调
  727. */
  728. - (void)incompleteSessionInfoBySession:(NIMSession *)session
  729. completion:(nullable NIMIncompleteSessionsBlock)completion;
  730. /**
  731. 查询所有漫游消息未漫游完整会话信息
  732. @param completion 结果完成回调
  733. */
  734. - (void)allIncompleteSessionInfos:(NIMIncompleteSessionsBlock)completion;
  735. /**
  736. 更新未漫游完整会话列表
  737. @param messages 消息对象,使用NIMMessage的会话、severId、timestamp、from等去更新b
  738. @param completion 结果完成回调
  739. */
  740. - (void)updateIncompleteSessions:(NSArray<NIMMessage *> *)messages
  741. completion:(nullable NIMUpdateIncompleteSessionsBlock)completion;
  742. /**
  743. 根据会话移除未漫游完整会话信息
  744. @param session 目标会话
  745. */
  746. - (void)removeIncompleteSessionInfoBySession:(NIMSession *)session;
  747. /**
  748. 移除所有未完整会话信息
  749. */
  750. - (void)removeAllIncompleteSessionInfos;
  751. /**
  752. * 添加通知对象
  753. *
  754. * @param delegate 通知对象
  755. */
  756. - (void)addDelegate:(id<NIMConversationManagerDelegate>)delegate;
  757. /**
  758. * 删除通知对象
  759. *
  760. * @param delegate 通知对象
  761. */
  762. - (void)removeDelegate:(id<NIMConversationManagerDelegate>)delegate;
  763. @end
  764. NS_ASSUME_NONNULL_END