NIMMessage.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. //
  2. // NIMMessage.h
  3. // NIMLib
  4. //
  5. // Created by Netease.
  6. // Copyright (c) 2015年 Netease. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import "NIMGlobalDefs.h"
  10. #import "NIMSession.h"
  11. #import "NIMLoginClient.h"
  12. #import "NIMImageObject.h"
  13. #import "NIMLocationObject.h"
  14. #import "NIMAudioObject.h"
  15. #import "NIMCustomObject.h"
  16. #import "NIMVideoObject.h"
  17. #import "NIMFileObject.h"
  18. #import "NIMNotificationObject.h"
  19. #import "NIMTipObject.h"
  20. #import "NIMRobotObject.h"
  21. #import "NIMMessageSetting.h"
  22. #import "NIMMessageReceipt.h"
  23. #import "NIMRtcCallRecordObject.h"
  24. #import "NIMTeamMessageReceiptDetail.h"
  25. #import "NIMAntiSpamOption.h"
  26. #import "NIMMessageApnsMemberOption.h"
  27. #import "NIMTeamMessageReceipt.h"
  28. NS_ASSUME_NONNULL_BEGIN
  29. @class NIMMessageChatroomExtension;
  30. /**
  31. * 消息送达状态枚举
  32. */
  33. typedef NS_ENUM(NSInteger, NIMMessageDeliveryState){
  34. /**
  35. * 消息发送失败
  36. */
  37. NIMMessageDeliveryStateFailed,
  38. /**
  39. * 消息发送中
  40. */
  41. NIMMessageDeliveryStateDelivering,
  42. /**
  43. * 消息发送成功
  44. */
  45. NIMMessageDeliveryStateDeliveried
  46. };
  47. /**
  48. * 消息附件下载状态
  49. */
  50. typedef NS_ENUM(NSInteger, NIMMessageAttachmentDownloadState){
  51. /**
  52. * 附件需要进行下载 (有附件但并没有下载过)
  53. */
  54. NIMMessageAttachmentDownloadStateNeedDownload,
  55. /**
  56. * 附件收取失败 (尝试下载过一次并失败)
  57. */
  58. NIMMessageAttachmentDownloadStateFailed,
  59. /**
  60. * 附件下载中
  61. */
  62. NIMMessageAttachmentDownloadStateDownloading,
  63. /**
  64. * 附件下载成功/无附件
  65. */
  66. NIMMessageAttachmentDownloadStateDownloaded
  67. };
  68. /**
  69. * 消息处理状态
  70. */
  71. typedef NS_ENUM(NSInteger, NIMMessageStatus) {
  72. NIMMessageStatusNone = 0, //消息初始状态
  73. NIMMessageStatusRead = 1, //已读
  74. NIMMessageStatusDeleted = 2 //已删除 (必须是 message status 最大值)
  75. };
  76. /**
  77. * 消息结构
  78. */
  79. @interface NIMMessage : NSObject
  80. /**
  81. * 消息类型
  82. */
  83. @property (nonatomic,assign,readonly) NIMMessageType messageType;
  84. /**
  85. * 消息子类型.(默认0。设置值需要大于0)
  86. */
  87. @property (nonatomic,assign) NSInteger messageSubType;
  88. /**
  89. * 消息来源
  90. */
  91. @property (nullable,nonatomic,copy) NSString *from;
  92. /**
  93. * 消息所属会话
  94. */
  95. @property (nullable,nonatomic,copy,readonly) NIMSession *session;
  96. /**
  97. * 消息ID,唯一标识
  98. */
  99. @property (nonatomic,copy,readonly) NSString *messageId;
  100. /**
  101. * 消息服务端ID
  102. */
  103. @property (nonatomic,copy,readonly) NSString * serverID;
  104. /**
  105. * 消息文本
  106. * @discussion 消息中除 NIMMessageTypeText 和 NIMMessageTypeTip 外,其他消息 text 字段都为 nil
  107. */
  108. @property (nullable,nonatomic,copy) NSString *text;
  109. /**
  110. * 消息附件内容
  111. */
  112. @property (nullable,nonatomic,strong) id<NIMMessageObject> messageObject;
  113. /**
  114. * 消息设置
  115. * @discussion 可以通过这个字段制定当前消息的各种设置,如是否需要计入未读,是否需要多端同步等
  116. */
  117. @property (nullable,nonatomic,strong) NIMMessageSetting *setting;
  118. /**
  119. * 消息反垃圾配置
  120. */
  121. @property (nullable,nonatomic,strong) NIMAntiSpamOption *antiSpamOption;
  122. /**
  123. * 消息推送文案,长度限制500字,撤回消息时该字段无效
  124. */
  125. @property (nullable,nonatomic,copy) NSString *apnsContent;
  126. /**
  127. * 消息推送Payload
  128. * @discussion 可以通过这个字段定义消息推送 Payload ,支持字段参考苹果技术文档,长度限制 2K,撤回消息时该字段无效
  129. */
  130. @property (nullable,nonatomic,copy) NSDictionary *apnsPayload;
  131. /**
  132. * 指定成员推送选项
  133. * @discussion 通过这个选项进行一些更复杂的推送设定,目前只能在群会话中使用
  134. */
  135. @property (nullable,nonatomic,strong) NIMMessageApnsMemberOption *apnsMemberOption;
  136. /**
  137. * 服务器扩展
  138. * @discussion 客户端可以设置这个字段,这个字段将在本地存储且发送至对端,上层需要保证 NSDictionary 可以转换为 JSON,长度限制 1K
  139. */
  140. @property (nullable,nonatomic,copy) NSDictionary *remoteExt;
  141. /**
  142. * 客户端本地扩展
  143. * @discussion 客户端可以设置这个字段,这个字段只在本地存储,不会发送至对端,上层需要保证 NSDictionary 可以转换为 JSON
  144. */
  145. @property (nullable,nonatomic,copy) NSDictionary *localExt;
  146. /**
  147. * 消息拓展字段
  148. * @discussion 服务器下发的消息拓展字段,并不在本地做持久化,目前只有聊天室中的消息才有该字段(NIMMessageChatroomExtension)
  149. */
  150. @property (nullable,nonatomic,strong) id messageExt;
  151. /**
  152. * 消息发送时间
  153. * @discussion 本地存储消息可以通过修改时间戳来调整其在会话列表中的位置,发完服务器的消息时间戳将被服务器自动修正
  154. */
  155. @property (nonatomic,assign) NSTimeInterval timestamp;
  156. /**
  157. * 易盾反垃圾增强反作弊专属字段
  158. * @discussion 透传易盾反垃圾增强反作弊专属字段
  159. */
  160. @property (nullable,nonatomic,copy) NSDictionary *yidunAntiCheating;
  161. /**
  162. * 消息的目标标签表达式
  163. */
  164. @property (nullable,nonatomic,copy) NSString *notifyTargetTags;
  165. /**
  166. * 环境变量
  167. * @discussion 环境变量,用于指向不同的抄送、第三方回调等配置
  168. */
  169. @property (nullable,nonatomic,copy) NSString *env;
  170. /**
  171. * 消息投递状态 仅针对发送的消息
  172. */
  173. @property (nonatomic,assign,readonly) NIMMessageDeliveryState deliveryState;
  174. /**
  175. * 消息附件下载状态 仅针对收到的消息
  176. */
  177. @property (nonatomic,assign,readonly) NIMMessageAttachmentDownloadState attachmentDownloadState;
  178. /**
  179. * 是否是收到的消息
  180. * @discussion 由于有漫游消息的概念,所以自己发出的消息漫游下来后仍旧是"收到的消息",这个字段用于消息出错是时判断需要重发还是重收
  181. */
  182. @property (nonatomic,assign,readonly) BOOL isReceivedMsg;
  183. /**
  184. * 是否是往外发的消息
  185. * @discussion 由于能对自己发消息,所以并不是所有来源是自己的消息都是往外发的消息,这个字段用于判断头像排版位置(是左还是右)。
  186. */
  187. @property (nonatomic,assign,readonly) BOOL isOutgoingMsg;
  188. /**
  189. * 消息是否被播放过
  190. * @discussion 修改这个属性,后台会自动更新 db 中对应的数据。聊天室消息里,此字段无效。
  191. */
  192. @property (nonatomic,assign) BOOL isPlayed;
  193. /**
  194. * 消息是否标记为已删除
  195. * @discussion 已删除的消息在获取本地消息列表时会被过滤掉,只有根据 messageId 获取消息的接口可能会返回已删除消息。聊天室消息里,此字段无效。
  196. */
  197. @property (nonatomic,assign,readonly) BOOL isDeleted;
  198. /**
  199. * 对端是否已读
  200. * @discussion 只有当当前消息为 P2P 消息且 isOutgoingMsg 为 YES 时这个字段才有效,需要对端调用过发送已读回执的接口
  201. */
  202. @property (nonatomic,assign,readonly) BOOL isRemoteRead;
  203. /**
  204. * 是否已发送群回执
  205. * @discussion 只针对群消息有效
  206. */
  207. @property (nonatomic,assign,readonly) BOOL isTeamReceiptSended;
  208. /**
  209. * 群已读回执信息
  210. * @discussion 只有当当前消息为 Team 消息且 teamReceiptEnabled 为 YES 时才有效,需要对端调用过发送已读回执的接口
  211. */
  212. @property (nullable,nonatomic,strong,readonly) NIMTeamMessageReceipt *teamReceiptInfo;
  213. /**
  214. * 消息发送者名字
  215. * @discussion 当发送者是自己时,这个值可能为空,这个值表示的是发送者当前的昵称,而不是发送消息时的昵称。聊天室消息里,此字段无效。
  216. */
  217. @property (nullable,nonatomic,copy,readonly) NSString *senderName;
  218. /**
  219. * 发送者客户端类型
  220. */
  221. @property (nonatomic,assign,readonly) NIMLoginClientType senderClientType;
  222. /**
  223. * 是否在黑名单中
  224. * @discussion YES 为被目标拉黑;
  225. */
  226. @property (nonatomic,assign,readonly) BOOL isBlackListed;
  227. #pragma mark - Thread Talk
  228. /**
  229. * 该消息回复的目标消息的消息ID
  230. * @discussion 如果未回复其他消息,则为空
  231. * @discussion A为一条普通消息,B消息为对A回复的消息,则A是B的 replied 消息和 thread 消息; 同时, C为回复B的消息,则C的 replied 消息是B, C的thread消息为A
  232. */
  233. @property (nullable,nonatomic,copy,readonly) NSString *repliedMessageId;
  234. /**
  235. * 该消息回复的目标消息的服务端ID
  236. * @discussion 如果未回复其他消息,则为空
  237. */
  238. @property (nullable,nonatomic,copy,readonly) NSString *repliedMessageServerId;
  239. /**
  240. * 该消息回复的目标消息的发送者
  241. * @discussion 如果未回复其他消息,则为空
  242. */
  243. @property (nullable,nonatomic,copy,readonly) NSString *repliedMessageFrom;
  244. /**
  245. * 该消息回复的目标消息的接收者
  246. * @discussion 如果未回复其他消息,则为空
  247. */
  248. @property (nullable,nonatomic,copy,readonly) NSString *repliedMessageTo;
  249. /**
  250. * 该消息回复的目标消息的发送时间
  251. * @discussion 如果未回复其他消息则为0(单位:秒)
  252. */
  253. @property (nonatomic,assign,readonly) NSTimeInterval repliedMessageTime;
  254. /**
  255. * 该消息的父消息的消息ID
  256. * @discussion 如果未回复其他消息,则为空
  257. */
  258. @property (nullable,nonatomic,copy,readonly) NSString *threadMessageId;
  259. /**
  260. * 该消息的父消息的服务端ID
  261. * @discussion 如果未回复其他消息,则为空
  262. */
  263. @property (nullable,nonatomic,copy,readonly) NSString *threadMessageServerId;
  264. /**
  265. * 该消息回复的父消息的发送者
  266. * @discussion 如果未回复其他消息,则为空
  267. */
  268. @property (nullable,nonatomic,copy,readonly) NSString *threadMessageFrom;
  269. /**
  270. * 该消息回复的目标消息的接收者
  271. * @discussion 如果未回复其他消息,则为空
  272. */
  273. @property (nullable,nonatomic,copy,readonly) NSString *threadMessageTo;
  274. /**
  275. * 该消息回复的父消息的发送时间
  276. * @discussion 如果未回复其他消息则为0(单位:秒)
  277. */
  278. @property (nonatomic,assign,readonly) NSTimeInterval threadMessageTime;
  279. /**
  280. * 第三方回调回来的自定义扩展字段
  281. */
  282. @property (nonatomic,copy,readonly) NSString *callbackExt;
  283. /**
  284. * 消息处理状态
  285. */
  286. @property (nonatomic, assign) NIMMessageStatus status;
  287. @end
  288. NS_ASSUME_NONNULL_END