V2TIMManager+Conversation.h 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507
  1. /////////////////////////////////////////////////////////////////////
  2. //
  3. // 腾讯云通信服务 IMSDK
  4. //
  5. // 模块名称:V2TIMManager+Conversation
  6. //
  7. // 会话接口,里面包含了会话的获取,删除,更新的逻辑
  8. //
  9. /////////////////////////////////////////////////////////////////////
  10. #import "V2TIMManager.h"
  11. #import "V2TIMManager+Group.h"
  12. #import "V2TIMManager+Message.h"
  13. V2TIM_EXPORT @protocol V2TIMConversationListener;
  14. @class V2TIMConversationListFilter;
  15. @class V2TIMConversationOperationResult;
  16. @class V2TIMConversation;
  17. @class V2TIMGroupAtInfo;
  18. /////////////////////////////////////////////////////////////////////////////////
  19. //
  20. // 消息会话相关接口
  21. //
  22. /////////////////////////////////////////////////////////////////////////////////
  23. V2TIM_EXPORT @interface V2TIMManager (Conversation)
  24. /// 获取会话列表成功的回调,nextSeq:下一次分页拉取的游标 isFinished:会话列表是否已经拉取完毕
  25. typedef void(^V2TIMConversationResultSucc)(NSArray<V2TIMConversation *>*list, uint64_t nextSeq, BOOL isFinished);
  26. /// 获取单个会话成功回调
  27. typedef void(^V2TIMConversationSucc)(V2TIMConversation *conv);
  28. /// 搜索会话列表成功回调
  29. typedef void(^V2TIMConversationListSucc)(NSArray<V2TIMConversation *>*list);
  30. /// 获取会话总未读数回调
  31. typedef void(^V2TIMTotalUnreadMessageCountSucc)(UInt64 totalUnreadCount);
  32. /// 获取会话分组列表成功回调
  33. typedef void (^V2TIMConversationGroupListSucc)(NSArray<NSString *> * groupList);
  34. /// 会话操作成功回调
  35. typedef void (^V2TIMConversationOperationResultSucc)(NSArray<V2TIMConversationOperationResult *> *result);
  36. /// 会话类型
  37. typedef NS_ENUM(NSInteger, V2TIMConversationType) {
  38. V2TIM_UNKNOWN = 0, ///< 未知
  39. V2TIM_C2C = 1, ///< 单聊
  40. V2TIM_GROUP = 2, ///< 群聊
  41. };
  42. /// @ 类型
  43. typedef NS_ENUM(NSInteger, V2TIMGroupAtType) {
  44. V2TIM_AT_ME = 1, ///< @ 我
  45. V2TIM_AT_ALL = 2, ///< @ 群里所有人
  46. V2TIM_AT_ALL_AT_ME = 3, ///< @ 群里所有人并且单独 @ 我
  47. };
  48. /// 会话标记类型
  49. typedef NS_ENUM(NSUInteger, V2TIMConversationMarkType) {
  50. V2TIM_CONVERSATION_MARK_TYPE_STAR = 0x1, ///< 会话标星
  51. V2TIM_CONVERSATION_MARK_TYPE_UNREAD = 0x1 << 1, ///< 会话标记未读(重要会话)
  52. V2TIM_CONVERSATION_MARK_TYPE_FOLD = 0x1 << 2, ///< 会话折叠
  53. V2TIM_CONVERSATION_MARK_TYPE_HIDE = 0x1 << 3, ///< 会话隐藏
  54. };
  55. /////////////////////////////////////////////////////////////////////////////////
  56. //
  57. // 会话基础接口
  58. //
  59. /////////////////////////////////////////////////////////////////////////////////
  60. /**
  61. * 1.1 添加会话监听器
  62. */
  63. - (void)addConversationListener:(id<V2TIMConversationListener>)listener NS_SWIFT_NAME(addConversationListener(listener:));
  64. /**
  65. * 1.2 移除会话监听器
  66. */
  67. - (void)removeConversationListener:(id<V2TIMConversationListener>)listener NS_SWIFT_NAME(removeConversationListener(listener:));
  68. /**
  69. * 1.3 获取会话列表
  70. *
  71. * - 一个会话对应一个聊天窗口,比如跟一个好友的 1v1 聊天,或者一个聊天群,都是一个会话。
  72. * - 由于历史的会话数量可能很多,所以该接口希望您采用分页查询的方式进行调用,每次分页拉取的个数建议为 100 个。
  73. * - 该接口拉取的是本地缓存的会话,如果服务器会话有更新,SDK 内部会自动同步,然后在 @ref V2TIMConversationListener 回调告知客户。
  74. * - 如果会话全部拉取完毕,成功回调里面 V2TIMConversationResult 中的 isFinished 获取字段值为 YES。
  75. *
  76. * @note 会话排序规则
  77. * - 5.5.892 及以后版本, 该接口获取的会话列表默认已经按照会话 orderKey 做了排序,orderKey 值越大,代表该会话排序越靠前。
  78. * - 5.5.892 以前版本,该接口获取的会话列表默认已经按照会话 lastMessage -> timestamp 做了排序,timestamp 越大,会话越靠前。
  79. *
  80. * @param nextSeq 分页拉取的游标,第一次默认取传 0,后续分页拉传上一次分页拉取成功回调里的 nextSeq
  81. * @param count 分页拉取的个数,一次分页拉取不宜太多,会影响拉取的速度,建议每次拉取 100 个会话
  82. */
  83. - (void)getConversationList:(uint64_t)nextSeq count:(int)count succ:(V2TIMConversationResultSucc)succ fail:(V2TIMFail)fail;
  84. /**
  85. * 1.4 获取单个会话
  86. *
  87. * @param conversationID 会话唯一 ID, C2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
  88. */
  89. - (void)getConversation:(NSString *)conversationID succ:(V2TIMConversationSucc)succ fail:(V2TIMFail)fail;
  90. /**
  91. * 1.5 获取指定会话列表
  92. *
  93. * @param conversationIDList 会话唯一 ID 列表,C2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
  94. */
  95. - (void)getConversationList:(NSArray<NSString *> *)conversationIDList succ:(V2TIMConversationListSucc)succ fail:(V2TIMFail)fail;
  96. /**
  97. * 1.6 获取会话列表高级接口(从 6.5 版本开始支持)
  98. *
  99. * @param filter 会话 filter
  100. * @param nextSeq 分页拉取的游标
  101. * @param count 分页拉取的个数
  102. *
  103. */
  104. - (void)getConversationListByFilter:(V2TIMConversationListFilter *)filter nextSeq:(uint64_t)seq count:(uint32_t)count succ:(V2TIMConversationResultSucc)succ fail:(V2TIMFail)fail;
  105. /**
  106. * 1.7 删除会话以及该会话中的历史消息
  107. *
  108. * @param conversationID 会话唯一 ID,C2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
  109. *
  110. * @note
  111. * - 该会话以及会话中的历史消息,会被 SDK 从本地和服务端一同删除掉,并且不可恢复。
  112. */
  113. - (void)deleteConversation:(NSString *)conversationID succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  114. /**
  115. * 1.8 删除会话列表(7.1 及以上版本支持)
  116. *
  117. * @param conversationIDList 会话唯一 ID 列表,C2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
  118. * @param clearMessage 是否删除会话中的消息;设置为 NO 时,保留会话消息;设置为 YES 时,本地和服务器的消息会一起删除,并且不可恢复
  119. *
  120. * @note 每次最多支持删除 100 个会话
  121. */
  122. - (void)deleteConversationList:(NSArray<NSString *> *)conversationIDList
  123. clearMessage:(BOOL)clearMessage
  124. succ:(V2TIMConversationOperationResultSucc)succ
  125. fail:(V2TIMFail)fail;
  126. /**
  127. * 1.9 设置会话草稿
  128. *
  129. * @param conversationID 会话唯一 ID,C2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
  130. *
  131. * 只在本地保存,不会存储 Server,不能多端同步,程序卸载重装会失效。
  132. */
  133. - (void)setConversationDraft:(NSString *)conversationID draftText:(NSString *)draftText succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  134. /**
  135. * 1.10 设置会话自定义数据(从 6.5 版本开始支持)
  136. *
  137. * @param customData 自定义数据,最大支持 256 bytes
  138. */
  139. - (void)setConversationCustomData:(NSArray<NSString *> *)conversationIDList customData:(NSData *)customData succ:(V2TIMConversationOperationResultSucc)succ fail:(V2TIMFail)fail;
  140. /**
  141. * 1.11 设置会话置顶(5.3.425 及以上版本支持)
  142. *
  143. * @param conversationID 会话唯一 ID,C2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
  144. * @param isPinned 是否置顶
  145. */
  146. - (void)pinConversation:(NSString *)conversationID isPinned:(BOOL)isPinned succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  147. /**
  148. * 1.12 标记会话(从 6.5 版本开始支持,需要您购买旗舰版套餐)
  149. *
  150. * @param conversationIDList 会话列表
  151. * @param markType 会话标记类型,取值详见 @V2TIMConversationMarkType。
  152. * @param enableMark YES:设置标记 NO:取消标记
  153. *
  154. * 如果已有标记不能满足您的需求,您可以自定义扩展标记,扩展标记需要满足以下两个条件:
  155. * 1、扩展标记值不能和 V2TIMConversationMarkType 已有的标记值冲突
  156. * 2、扩展标记值必须是 0x1LL << n 的位移值(32 <= n < 64,即 n 必须大于等于 32 并且小于 64),比如扩展标记值 0x1LL << 32 表示 "iPhone 在线"
  157. *
  158. * @note: 扩展标记值不能设置为 0x1 << 32,要设置为 0x1LL << 32,明确告诉编译器是 64 位的整型常量。
  159. *
  160. */
  161. - (void)markConversation:(NSArray<NSString *> *)conversationIDList markType:(NSNumber *)markType enableMark:(BOOL)enableMark succ:(V2TIMConversationOperationResultSucc)succ fail:(V2TIMFail)fail;
  162. /**
  163. * 1.13 获取所有会话的未读消息总数(5.3.425 及以上版本支持)
  164. * @note
  165. * - 调用该接口以后,任意会话的未读数发生变化时,SDK 都会给您抛 onTotalUnreadMessageCountChanged 回调。
  166. * - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 V2TIMMessage.V2TIM_NOT_RECEIVE_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE_EXCEPT_AT 的会话。
  167. */
  168. - (void)getTotalUnreadMessageCount:(V2TIMTotalUnreadMessageCountSucc)succ fail:(V2TIMFail)fail;
  169. /**
  170. * 1.14 获取根据 filter 过滤的会话未读总数(7.0 及以上版本支持)
  171. *
  172. * @param filter 会话 filter
  173. *
  174. * @note
  175. * - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 V2TIMMessage.V2TIM_NOT_RECEIVE_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE_EXCEPT_AT 的会话。
  176. */
  177. - (void)getUnreadMessageCountByFilter:(V2TIMConversationListFilter *)filter succ:(V2TIMTotalUnreadMessageCountSucc)succ fail:(V2TIMFail)fail;
  178. /**
  179. * 1.15 注册监听指定 filter 的会话未读总数变化(7.0 及以上版本支持)
  180. *
  181. * @param filter 会话 filter
  182. *
  183. * @note
  184. * - 当您调用这个接口以后,该 filter 下的未读数发生变化时,SDK 会给您抛 onUnreadMessageCountChangedByFilter 回调。
  185. */
  186. - (void)subscribeUnreadMessageCountByFilter:(V2TIMConversationListFilter *)filter;
  187. /**
  188. * 1.16 取消监听指定 filter 的会话未读总数变化(7.0 及以上版本支持)
  189. *
  190. * @param filter 会话 filter
  191. *
  192. */
  193. - (void)unsubscribeUnreadMessageCountByFilter:(V2TIMConversationListFilter *)filter;
  194. /**
  195. * 1.17 清理会话的未读消息计数(7.1 及以上版本支持)
  196. *
  197. * @param conversationID 会话唯一 ID, C2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
  198. * @param cleanTimestamp 清理时间戳,单位为秒,仅对单聊会话生效,指定清理哪一个 timestamp 之前的未读消息计数;当传入为 0 时,对应会话所有的未读消息将被清理,会话的未读数会清 0
  199. * @param cleanSequence 清理 sequence,仅对群聊会话生效,指定清理哪一个 sequence 之前的未读消息计数;当传入为 0 时,对应会话所有的未读消息将被清理,会话的未读数会清 0
  200. *
  201. * @note
  202. * - 当您想清理所有单聊会话的未读消息计数,conversationID 请传入 @"c2c",即不指定具体的 userID;
  203. * - 当您想清理所有群聊会话的未读消息计数,conversationID 请传入 @"group",即不指定具体的 groupID;
  204. * - 当您想清理所有会话的未读消息计数,conversationID 请传入 @“” 或者 nil;
  205. * - 该接口调用成功后,SDK 会通过 onConversationChanged 回调将对应会话的最新未读数通知给您。
  206. */
  207. - (void)cleanConversationUnreadMessageCount:(NSString *)conversationID cleanTimestamp:(uint64_t)cleanTimestamp cleanSequence:(uint64_t)cleanSequence succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  208. /**
  209. * 1.18 设置会话监听器(待废弃接口,请使用 addConversationListener 和 removeConversationListener 接口)
  210. */
  211. - (void)setConversationListener:(id<V2TIMConversationListener>)listener __attribute__((deprecated("use addConversationListener: instead")));
  212. /////////////////////////////////////////////////////////////////////////////////
  213. //
  214. // 会话分组相关接口 (从 6.5 版本开始支持,需要您购买旗舰版套餐)
  215. //
  216. /////////////////////////////////////////////////////////////////////////////////
  217. /**
  218. * 2.1 创建会话分组
  219. *
  220. * @param groupName 分组名(必填参数,长度要 > 0,最大支持 32 bytes)
  221. * @param conversationIDList 会话 ID 列表(必填参数,不能为空)
  222. *
  223. * @note 会话分组最大支持 20 个,不再使用的分组请及时删除。
  224. */
  225. - (void)createConversationGroup:(NSString *)groupName conversationIDList:(NSArray<NSString *> *)conversationIDList succ:(V2TIMConversationOperationResultSucc)succ fail:(V2TIMFail)fail;
  226. /**
  227. * 2.2 获取会话分组列表
  228. *
  229. * @note 该接口获取的是本地缓存的会话分组,建议在 onSyncServerFinish 之后调用。
  230. */
  231. - (void)getConversationGroupList:(V2TIMConversationGroupListSucc)succ fail:(V2TIMFail)fail;
  232. /**
  233. * 2.3 删除会话分组
  234. */
  235. - (void)deleteConversationGroup:(NSString *)groupName succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  236. /**
  237. * 2.4 重命名会话分组
  238. */
  239. - (void)renameConversationGroup:(NSString*)oldName newName:(NSString*)newName succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  240. /**
  241. * 2.5 添加会话到一个会话分组
  242. */
  243. - (void)addConversationsToGroup:(NSString *)groupName conversationIDList:(NSArray<NSString *> *)conversationIDList succ:(V2TIMConversationOperationResultSucc)succ fail:(V2TIMFail)fail;
  244. /**
  245. * 2.6 从一个会话分组中删除会话
  246. */
  247. - (void)deleteConversationsFromGroup:(NSString *)groupName conversationIDList:(NSArray<NSString *> *)conversationIDList succ:(V2TIMConversationOperationResultSucc)succ fail:(V2TIMFail)fail;
  248. @end
  249. /////////////////////////////////////////////////////////////////////////////////
  250. //
  251. // 会话变更监听器
  252. //
  253. /////////////////////////////////////////////////////////////////////////////////
  254. V2TIM_EXPORT @protocol V2TIMConversationListener <NSObject>
  255. @optional
  256. /////////////////////////////////////////////////////////////////////////////////
  257. // 会话基础通知
  258. /////////////////////////////////////////////////////////////////////////////////
  259. /**
  260. * 同步服务器会话开始,SDK 会在登录成功或者断网重连后自动同步服务器会话,您可以监听这个事件做一些 UI 进度展示操作。
  261. */
  262. - (void)onSyncServerStart;
  263. /**
  264. * 同步服务器会话完成,如果会话有变更,会通过 onNewConversation | onConversationChanged 回调告知客户
  265. */
  266. - (void)onSyncServerFinish;
  267. /**
  268. * 同步服务器会话失败
  269. */
  270. - (void)onSyncServerFailed;
  271. /**
  272. * 有新的会话(比如收到一个新同事发来的单聊消息、或者被拉入了一个新的群组中),可以根据会话的 orderKey 重新对会话列表做排序。
  273. */
  274. - (void)onNewConversation:(NSArray<V2TIMConversation*> *) conversationList;
  275. /**
  276. * 某些会话的关键信息发生变化(未读计数发生变化、最后一条消息被更新等等),可以根据会话的 orderKey 重新对会话列表做排序。
  277. */
  278. - (void)onConversationChanged:(NSArray<V2TIMConversation*> *) conversationList;
  279. /**
  280. * 会话被删除的通知(7.2 及以上版本支持)
  281. *
  282. * @note
  283. * conversationIDList 表示被删除的会话唯一 ID 列表。C2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
  284. */
  285. - (void)onConversationDeleted:(NSArray<NSString *> *)conversationIDList;
  286. /**
  287. * 全部会话未读总数变更的通知(5.3.425 及以上版本支持)
  288. * @note
  289. * - 当您调用 getTotalUnreadMessageCount 获取全部会话未读总数以后,任意会话的未读数发生变化时,SDK 都会通过该回调把最新的未读总数通知给您。
  290. * - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 V2TIMMessage.V2TIM_NOT_RECEIVE_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE_EXCEPT_AT 的会话。
  291. */
  292. - (void)onTotalUnreadMessageCountChanged:(UInt64) totalUnreadCount;
  293. /**
  294. * 根据 filter 过滤的未读消息总数变更通知(7.0 及以上版本支持)
  295. * @note
  296. * - 您可以调用 subscribeUnreadMessageCountByFilter 注册监听指定 filter 下的未读总数变化,SDK 通过这个回调把最新的未读总数通知给您。
  297. * - 您可以注册监听多个不同 filter 下的未读总数变化,这个回调的 filter 参数就是注册监听时指定的 filter,该 filter 携带了 conversationType、conversationGroup 和 markType 三个字段,通过判断这三字段是不是都相同,来区分出不同的 filter。
  298. * - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 V2TIMMessage.V2TIM_NOT_RECEIVE_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE_EXCEPT_AT 的会话。
  299. */
  300. - (void)onUnreadMessageCountChangedByFilter:(V2TIMConversationListFilter *)filter totalUnreadCount:(UInt64)totalUnreadCount;
  301. /////////////////////////////////////////////////////////////////////////////////
  302. // 会话分组相关通知(从 6.5 版本开始支持)
  303. /////////////////////////////////////////////////////////////////////////////////
  304. /**
  305. * 会话分组被创建
  306. */
  307. - (void)onConversationGroupCreated:(NSString *)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList;
  308. /**
  309. * 会话分组被删除
  310. */
  311. - (void)onConversationGroupDeleted:(NSString *)groupName;
  312. /**
  313. * 会话分组名变更
  314. */
  315. - (void)onConversationGroupNameChanged:(NSString *)oldName newName:(NSString *)newName;
  316. /**
  317. * 会话分组新增会话
  318. */
  319. - (void)onConversationsAddedToGroup:(NSString *)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList;
  320. /**
  321. * 会话分组删除会话
  322. * @note
  323. * - reason 表示会话从所在分组删除的原因,其取值有:
  324. * - 当 reason 为 0 时,表示由用户主动调用 deleteConversationsFromGroup 触发
  325. * - 当 reason 为 1 时,表示添加到分组的会话数量超过 1000,最早添加进分组的会话被淘汰
  326. */
  327. - (void)onConversationsDeletedFromGroup:(NSString *)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList reason:(uint32_t)reason;
  328. /**
  329. * 会话分组删除会话(待废弃接口,请使用 onConversationsDeletedFromGroup:conversationList:reason: 接口)
  330. */
  331. - (void)onConversationsDeletedFromGroup:(NSString *)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList __attribute__((deprecated("use onConversationsDeletedFromGroup:conversationList:reason: instead")));
  332. @end
  333. /////////////////////////////////////////////////////////////////////////////////
  334. //
  335. // 会话对象 V2TIMConversation
  336. //
  337. /////////////////////////////////////////////////////////////////////////////////
  338. /// 会话对象
  339. V2TIM_EXPORT @interface V2TIMConversation : NSObject
  340. /// 会话类型
  341. @property(nonatomic,assign,readonly) V2TIMConversationType type;
  342. /// 会话唯一 ID,如果是 C2C 单聊,组成方式为 c2c_userID,如果是群聊,组成方式为 group_groupID
  343. @property(nonatomic,strong,readonly) NSString *conversationID;
  344. /// 如果会话类型为 C2C 单聊,userID 会存储对方的用户ID,否则为 nil
  345. @property(nonatomic,strong,readonly) NSString *userID;
  346. /// 如果会话类型为群聊,groupID 会存储当前群的群 ID,否则为 nil
  347. @property(nonatomic,strong,readonly) NSString *groupID;
  348. /// 如果会话类型为群聊,groupType 为当前群类型,否则为 nil
  349. @property(nonatomic,strong,readonly) NSString *groupType;
  350. /// 会话展示名称(群组:群名称 >> 群 ID;C2C:对方好友备注 >> 对方昵称 >> 对方的 userID)
  351. @property(nonatomic,strong,readonly) NSString *showName;
  352. /// 会话展示头像(群组:群头像;C2C:对方头像)
  353. @property(nonatomic,strong,readonly) NSString *faceUrl;
  354. /// 会话未读消息数量,直播群(AVChatRoom)不支持未读计数,默认为 0
  355. @property(nonatomic,assign,readonly) int unreadCount;
  356. /// 消息接收选项(接收 | 接收但不提醒 | 不接收)
  357. @property(nonatomic,assign,readonly) V2TIMReceiveMessageOpt recvOpt;
  358. /**
  359. * 会话最后一条消息
  360. * @note 5.5.892 以前版本,请您使用 lastMessage -> timestamp 对会话做排序,timestamp 越大,会话越靠前
  361. */
  362. @property(nonatomic,strong,readonly) V2TIMMessage *lastMessage;
  363. /// 群会话 @ 信息列表,用于展示 “有人@我” 或 “@所有人” 这两种提醒状态
  364. @property(nonatomic,strong,readonly) NSArray<V2TIMGroupAtInfo *> *groupAtInfolist;
  365. /// 草稿信息,设置草稿信息请调用 setConversationDraft() 接口
  366. @property(nonatomic,strong,readonly) NSString *draftText;
  367. /// 上次设置草稿时的 UTC 时间戳
  368. @property(nonatomic,strong,readonly) NSDate *draftTimestamp;
  369. /// 是否置顶
  370. @property(nonatomic,assign,readonly) BOOL isPinned;
  371. /**
  372. * 排序字段(5.5.892 及以后版本支持)
  373. * @note
  374. * - 排序字段 orderKey 是按照会话的激活时间线性递增的一个数字(注意:不是时间戳,因为同一时刻可能会有多个会话被同时激活)
  375. * - 5.5.892 及其以后版本,推荐您使用该字段对所有会话进行排序,orderKey 值越大,代表该会话排序越靠前
  376. * - 当您 “清空会话所有消息” 或者 “逐个删除会话的所有消息” 之后,会话的 lastMessage 变为空,但会话的 orderKey 不会改变;如果想保持会话的排序位置不变,可以使用该字段对所有会话进行排序
  377. */
  378. @property(nonatomic,assign,readonly) NSUInteger orderKey;
  379. /// 会话标记列表,取值详见 @V2TIMConversationMarkType(从 6.5 版本开始支持)
  380. @property(nonatomic,strong,readonly) NSArray<NSNumber *> * markList;
  381. /// 会话自定义数据(从 6.5 版本开始支持)
  382. @property(nonatomic,strong,readonly) NSData *customData;
  383. /// 会话所属分组列表(从 6.5 版本开始支持)
  384. @property(nonatomic,strong,readonly) NSArray<NSString *> *conversationGroupList;
  385. /// 最新已读消息的 UTC 时间戳,仅对单聊会话生效(从 7.1 版本开始支持)
  386. @property(nonatomic,assign,readonly) NSUInteger c2cReadTimestamp;
  387. /// 已读消息的 sequence,仅对群聊会话生效(从 7.1 版本开始支持)
  388. @property(nonatomic,assign,readonly) NSUInteger groupReadSequence;
  389. @end
  390. /// 会话 filter
  391. V2TIM_EXPORT @interface V2TIMConversationListFilter : NSObject
  392. /// C2C 或群会话(填 0 代表不过滤此项)
  393. @property(nonatomic,assign) V2TIMConversationType type;
  394. /// 会话分组名称
  395. /// 不设置表示不过滤此项,设置为 @"" 代表过滤不属于任何分组的会话
  396. @property(nonatomic,strong) NSString *conversationGroup;
  397. /// 标记类型,取值详见 @V2TIMConversationMarkType
  398. /// 不设置表示不过滤此项,设置为 0 代表过滤不含任何标记的会话
  399. @property(nonatomic,assign) NSUInteger markType;
  400. /// 会话未读数
  401. /// 不设置表示不过滤此项,设置为 YES 代表过滤含未读数的会话;设置为 NO 代表过滤不含未读数的会话
  402. @property(nonatomic,assign) BOOL hasUnreadCount;
  403. /// 会话 @ 信息
  404. /// 不设置表示不过滤此项,设置为 YES 代表过滤含群 @ 消息的会话;设置为 NO 代表过滤不含群 @ 消息的会话
  405. @property(nonatomic,assign) BOOL hasGroupAtInfo;
  406. @end
  407. /// @ 信息
  408. V2TIM_EXPORT @interface V2TIMGroupAtInfo : NSObject
  409. /// @ 消息序列号,即带有 “@我” 或者 “@所有人” 标记的消息的序列号
  410. @property(nonatomic,assign,readonly) uint64_t seq;
  411. /// @ 提醒类型,分成 “@我” 、“@所有人” 以及 “@我并@所有人” 三类
  412. @property(nonatomic,assign,readonly) V2TIMGroupAtType atType;
  413. @end
  414. /// 会话操作结果
  415. V2TIM_EXPORT @interface V2TIMConversationOperationResult : NSObject
  416. /// 会话 ID
  417. @property(nonatomic,strong) NSString* conversationID;
  418. /// 返回码
  419. @property(nonatomic,assign) NSInteger resultCode;
  420. /// 返回信息
  421. @property(nonatomic,strong) NSString *resultInfo;
  422. @end