NIMMessage.h 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  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 "NIMTeamMessageReceiptDetail.h"
  24. #import "NIMAntiSpamOption.h"
  25. #import "NIMMessageApnsMemberOption.h"
  26. #import "NIMTeamMessageReceipt.h"
  27. NS_ASSUME_NONNULL_BEGIN
  28. @class NIMMessageChatroomExtension;
  29. /**
  30. * 消息送达状态枚举
  31. */
  32. typedef NS_ENUM(NSInteger, NIMMessageDeliveryState){
  33. /**
  34. * 消息发送失败
  35. */
  36. NIMMessageDeliveryStateFailed,
  37. /**
  38. * 消息发送中
  39. */
  40. NIMMessageDeliveryStateDelivering,
  41. /**
  42. * 消息发送成功
  43. */
  44. NIMMessageDeliveryStateDeliveried
  45. };
  46. /**
  47. * 消息附件下载状态
  48. */
  49. typedef NS_ENUM(NSInteger, NIMMessageAttachmentDownloadState){
  50. /**
  51. * 附件需要进行下载 (有附件但并没有下载过)
  52. */
  53. NIMMessageAttachmentDownloadStateNeedDownload,
  54. /**
  55. * 附件收取失败 (尝试下载过一次并失败)
  56. */
  57. NIMMessageAttachmentDownloadStateFailed,
  58. /**
  59. * 附件下载中
  60. */
  61. NIMMessageAttachmentDownloadStateDownloading,
  62. /**
  63. * 附件下载成功/无附件
  64. */
  65. NIMMessageAttachmentDownloadStateDownloaded
  66. };
  67. /**
  68. * 消息结构
  69. */
  70. @interface NIMMessage : NSObject
  71. /**
  72. * 消息类型
  73. */
  74. @property (nonatomic,assign,readonly) NIMMessageType messageType;
  75. /**
  76. * 消息来源
  77. */
  78. @property (nullable,nonatomic,copy) NSString *from;
  79. /**
  80. * 消息所属会话
  81. */
  82. @property (nullable,nonatomic,copy,readonly) NIMSession *session;
  83. /**
  84. * 消息ID,唯一标识
  85. */
  86. @property (nonatomic,copy,readonly) NSString *messageId;
  87. /**
  88. * 消息服务端ID
  89. */
  90. @property (nonatomic,copy,readonly) NSString * serverID;
  91. /**
  92. * 消息文本
  93. * @discussion 消息中除 NIMMessageTypeText 和 NIMMessageTypeTip 外,其他消息 text 字段都为 nil
  94. */
  95. @property (nullable,nonatomic,copy) NSString *text;
  96. /**
  97. * 消息附件内容
  98. */
  99. @property (nullable,nonatomic,strong) id<NIMMessageObject> messageObject;
  100. /**
  101. * 消息设置
  102. * @discussion 可以通过这个字段制定当前消息的各种设置,如是否需要计入未读,是否需要多端同步等
  103. */
  104. @property (nullable,nonatomic,strong) NIMMessageSetting *setting;
  105. /**
  106. * 消息反垃圾配置
  107. */
  108. @property (nullable,nonatomic,strong) NIMAntiSpamOption *antiSpamOption;
  109. /**
  110. * 消息推送文案,长度限制500字
  111. */
  112. @property (nullable,nonatomic,copy) NSString *apnsContent;
  113. /**
  114. * 消息推送Payload
  115. * @discussion 可以通过这个字段定义消息推送 Payload ,支持字段参考苹果技术文档,长度限制 2K
  116. */
  117. @property (nullable,nonatomic,copy) NSDictionary *apnsPayload;
  118. /**
  119. * 指定成员推送选项
  120. * @discussion 通过这个选项进行一些更复杂的推送设定,目前只能在群会话中使用
  121. */
  122. @property (nullable,nonatomic,strong) NIMMessageApnsMemberOption *apnsMemberOption;
  123. /**
  124. * 服务器扩展
  125. * @discussion 客户端可以设置这个字段,这个字段将在本地存储且发送至对端,上层需要保证 NSDictionary 可以转换为 JSON,长度限制 1K
  126. */
  127. @property (nullable,nonatomic,copy) NSDictionary *remoteExt;
  128. /**
  129. * 客户端本地扩展
  130. * @discussion 客户端可以设置这个字段,这个字段只在本地存储,不会发送至对端,上层需要保证 NSDictionary 可以转换为 JSON
  131. */
  132. @property (nullable,nonatomic,copy) NSDictionary *localExt;
  133. /**
  134. * 消息拓展字段
  135. * @discussion 服务器下发的消息拓展字段,并不在本地做持久化,目前只有聊天室中的消息才有该字段(NIMMessageChatroomExtension)
  136. */
  137. @property (nullable,nonatomic,strong) id messageExt;
  138. /**
  139. * 消息发送时间
  140. * @discussion 本地存储消息可以通过修改时间戳来调整其在会话列表中的位置,发完服务器的消息时间戳将被服务器自动修正
  141. */
  142. @property (nonatomic,assign) NSTimeInterval timestamp;
  143. /**
  144. * 消息投递状态 仅针对发送的消息
  145. */
  146. @property (nonatomic,assign,readonly) NIMMessageDeliveryState deliveryState;
  147. /**
  148. * 消息附件下载状态 仅针对收到的消息
  149. */
  150. @property (nonatomic,assign,readonly) NIMMessageAttachmentDownloadState attachmentDownloadState;
  151. /**
  152. * 是否是收到的消息
  153. * @discussion 由于有漫游消息的概念,所以自己发出的消息漫游下来后仍旧是"收到的消息",这个字段用于消息出错是时判断需要重发还是重收
  154. */
  155. @property (nonatomic,assign,readonly) BOOL isReceivedMsg;
  156. /**
  157. * 是否是往外发的消息
  158. * @discussion 由于能对自己发消息,所以并不是所有来源是自己的消息都是往外发的消息,这个字段用于判断头像排版位置(是左还是右)。
  159. */
  160. @property (nonatomic,assign,readonly) BOOL isOutgoingMsg;
  161. /**
  162. * 消息是否被播放过
  163. * @discussion 修改这个属性,后台会自动更新 db 中对应的数据。聊天室消息里,此字段无效。
  164. */
  165. @property (nonatomic,assign) BOOL isPlayed;
  166. /**
  167. * 消息是否标记为已删除
  168. * @discussion 已删除的消息在获取本地消息列表时会被过滤掉,只有根据 messageId 获取消息的接口可能会返回已删除消息。聊天室消息里,此字段无效。
  169. */
  170. @property (nonatomic,assign,readonly) BOOL isDeleted;
  171. /**
  172. * 对端是否已读
  173. * @discussion 只有当当前消息为 P2P 消息且 isOutgoingMsg 为 YES 时这个字段才有效,需要对端调用过发送已读回执的接口
  174. */
  175. @property (nonatomic,assign,readonly) BOOL isRemoteRead;
  176. /**
  177. * 是否已发送群回执
  178. * @discussion 只针对群消息有效
  179. */
  180. @property (nonatomic,assign,readonly) BOOL isTeamReceiptSended;
  181. /**
  182. * 群已读回执信息
  183. * @discussion 只有当当前消息为 Team 消息且 teamReceiptEnabled 为 YES 时才有效,需要对端调用过发送已读回执的接口
  184. */
  185. @property (nullable,nonatomic,strong,readonly) NIMTeamMessageReceipt *teamReceiptInfo;
  186. /**
  187. * 消息发送者名字
  188. * @discussion 当发送者是自己时,这个值可能为空,这个值表示的是发送者当前的昵称,而不是发送消息时的昵称。聊天室消息里,此字段无效。
  189. */
  190. @property (nullable,nonatomic,copy,readonly) NSString *senderName;
  191. /**
  192. * 发送者客户端类型
  193. */
  194. @property (nonatomic,assign,readonly) NIMLoginClientType senderClientType;
  195. /**
  196. * 是否在黑名单中
  197. * @discussion YES 为被目标拉黑;
  198. */
  199. @property (nonatomic,assign,readonly) BOOL isBlackListed;
  200. @end
  201. NS_ASSUME_NONNULL_END