123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- //
- // NIMMessage.h
- // NIMLib
- //
- // Created by Netease.
- // Copyright (c) 2015年 Netease. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- #import "NIMGlobalDefs.h"
- #import "NIMSession.h"
- #import "NIMLoginClient.h"
- #import "NIMImageObject.h"
- #import "NIMLocationObject.h"
- #import "NIMAudioObject.h"
- #import "NIMCustomObject.h"
- #import "NIMVideoObject.h"
- #import "NIMFileObject.h"
- #import "NIMNotificationObject.h"
- #import "NIMTipObject.h"
- #import "NIMRobotObject.h"
- #import "NIMMessageSetting.h"
- #import "NIMMessageReceipt.h"
- #import "NIMTeamMessageReceiptDetail.h"
- #import "NIMAntiSpamOption.h"
- #import "NIMMessageApnsMemberOption.h"
- #import "NIMTeamMessageReceipt.h"
- NS_ASSUME_NONNULL_BEGIN
- @class NIMMessageChatroomExtension;
- /**
- * 消息送达状态枚举
- */
- typedef NS_ENUM(NSInteger, NIMMessageDeliveryState){
- /**
- * 消息发送失败
- */
- NIMMessageDeliveryStateFailed,
- /**
- * 消息发送中
- */
- NIMMessageDeliveryStateDelivering,
- /**
- * 消息发送成功
- */
- NIMMessageDeliveryStateDeliveried
- };
- /**
- * 消息附件下载状态
- */
- typedef NS_ENUM(NSInteger, NIMMessageAttachmentDownloadState){
- /**
- * 附件需要进行下载 (有附件但并没有下载过)
- */
- NIMMessageAttachmentDownloadStateNeedDownload,
- /**
- * 附件收取失败 (尝试下载过一次并失败)
- */
- NIMMessageAttachmentDownloadStateFailed,
- /**
- * 附件下载中
- */
- NIMMessageAttachmentDownloadStateDownloading,
- /**
- * 附件下载成功/无附件
- */
- NIMMessageAttachmentDownloadStateDownloaded
- };
- /**
- * 消息结构
- */
- @interface NIMMessage : NSObject
- /**
- * 消息类型
- */
- @property (nonatomic,assign,readonly) NIMMessageType messageType;
- /**
- * 消息来源
- */
- @property (nullable,nonatomic,copy) NSString *from;
- /**
- * 消息所属会话
- */
- @property (nullable,nonatomic,copy,readonly) NIMSession *session;
- /**
- * 消息ID,唯一标识
- */
- @property (nonatomic,copy,readonly) NSString *messageId;
- /**
- * 消息服务端ID
- */
- @property (nonatomic,copy,readonly) NSString * serverID;
- /**
- * 消息文本
- * @discussion 消息中除 NIMMessageTypeText 和 NIMMessageTypeTip 外,其他消息 text 字段都为 nil
- */
- @property (nullable,nonatomic,copy) NSString *text;
- /**
- * 消息附件内容
- */
- @property (nullable,nonatomic,strong) id<NIMMessageObject> messageObject;
- /**
- * 消息设置
- * @discussion 可以通过这个字段制定当前消息的各种设置,如是否需要计入未读,是否需要多端同步等
- */
- @property (nullable,nonatomic,strong) NIMMessageSetting *setting;
- /**
- * 消息反垃圾配置
- */
- @property (nullable,nonatomic,strong) NIMAntiSpamOption *antiSpamOption;
- /**
- * 消息推送文案,长度限制500字
- */
- @property (nullable,nonatomic,copy) NSString *apnsContent;
- /**
- * 消息推送Payload
- * @discussion 可以通过这个字段定义消息推送 Payload ,支持字段参考苹果技术文档,长度限制 2K
- */
- @property (nullable,nonatomic,copy) NSDictionary *apnsPayload;
- /**
- * 指定成员推送选项
- * @discussion 通过这个选项进行一些更复杂的推送设定,目前只能在群会话中使用
- */
- @property (nullable,nonatomic,strong) NIMMessageApnsMemberOption *apnsMemberOption;
- /**
- * 服务器扩展
- * @discussion 客户端可以设置这个字段,这个字段将在本地存储且发送至对端,上层需要保证 NSDictionary 可以转换为 JSON,长度限制 1K
- */
- @property (nullable,nonatomic,copy) NSDictionary *remoteExt;
- /**
- * 客户端本地扩展
- * @discussion 客户端可以设置这个字段,这个字段只在本地存储,不会发送至对端,上层需要保证 NSDictionary 可以转换为 JSON
- */
- @property (nullable,nonatomic,copy) NSDictionary *localExt;
- /**
- * 消息拓展字段
- * @discussion 服务器下发的消息拓展字段,并不在本地做持久化,目前只有聊天室中的消息才有该字段(NIMMessageChatroomExtension)
- */
- @property (nullable,nonatomic,strong) id messageExt;
- /**
- * 消息发送时间
- * @discussion 本地存储消息可以通过修改时间戳来调整其在会话列表中的位置,发完服务器的消息时间戳将被服务器自动修正
- */
- @property (nonatomic,assign) NSTimeInterval timestamp;
- /**
- * 消息投递状态 仅针对发送的消息
- */
- @property (nonatomic,assign,readonly) NIMMessageDeliveryState deliveryState;
- /**
- * 消息附件下载状态 仅针对收到的消息
- */
- @property (nonatomic,assign,readonly) NIMMessageAttachmentDownloadState attachmentDownloadState;
- /**
- * 是否是收到的消息
- * @discussion 由于有漫游消息的概念,所以自己发出的消息漫游下来后仍旧是"收到的消息",这个字段用于消息出错是时判断需要重发还是重收
- */
- @property (nonatomic,assign,readonly) BOOL isReceivedMsg;
- /**
- * 是否是往外发的消息
- * @discussion 由于能对自己发消息,所以并不是所有来源是自己的消息都是往外发的消息,这个字段用于判断头像排版位置(是左还是右)。
- */
- @property (nonatomic,assign,readonly) BOOL isOutgoingMsg;
- /**
- * 消息是否被播放过
- * @discussion 修改这个属性,后台会自动更新 db 中对应的数据。聊天室消息里,此字段无效。
- */
- @property (nonatomic,assign) BOOL isPlayed;
- /**
- * 消息是否标记为已删除
- * @discussion 已删除的消息在获取本地消息列表时会被过滤掉,只有根据 messageId 获取消息的接口可能会返回已删除消息。聊天室消息里,此字段无效。
- */
- @property (nonatomic,assign,readonly) BOOL isDeleted;
- /**
- * 对端是否已读
- * @discussion 只有当当前消息为 P2P 消息且 isOutgoingMsg 为 YES 时这个字段才有效,需要对端调用过发送已读回执的接口
- */
- @property (nonatomic,assign,readonly) BOOL isRemoteRead;
- /**
- * 是否已发送群回执
- * @discussion 只针对群消息有效
- */
- @property (nonatomic,assign,readonly) BOOL isTeamReceiptSended;
- /**
- * 群已读回执信息
- * @discussion 只有当当前消息为 Team 消息且 teamReceiptEnabled 为 YES 时才有效,需要对端调用过发送已读回执的接口
- */
- @property (nullable,nonatomic,strong,readonly) NIMTeamMessageReceipt *teamReceiptInfo;
- /**
- * 消息发送者名字
- * @discussion 当发送者是自己时,这个值可能为空,这个值表示的是发送者当前的昵称,而不是发送消息时的昵称。聊天室消息里,此字段无效。
- */
- @property (nullable,nonatomic,copy,readonly) NSString *senderName;
- /**
- * 发送者客户端类型
- */
- @property (nonatomic,assign,readonly) NIMLoginClientType senderClientType;
- /**
- * 是否在黑名单中
- * @discussion YES 为被目标拉黑;
- */
- @property (nonatomic,assign,readonly) BOOL isBlackListed;
- @end
- NS_ASSUME_NONNULL_END
|