消息介绍
消息介绍
IMLib SDK 定义了 RCMessage 类,用于进行消息传输和管理。
RCMessage 模型
RCMessage 类中封装了以下关键数据:
- 用于消息传输的属性:发送者 ID、接收者 ID、所属会话类型等。
- 消息内容体: 用于封装一条消息携带的的具体内容,分为普通消息内容体和媒体消息内容体。例如,文本消息内容(RCTextMessage)属于普通消息内容体,图片消息内容(RCImageMessage)属于媒体消息内容体。消息内容体的类型,常称为「消息类型」,决定了使用发送普通消息还是发送媒体的接口。
文档里出现的「消息」,如文本消息、语音消息等,有时指继承自 RCMessageContent
或 RCMediaMessageContent
的消息具体内容。
下表描述 RCMessage 类的关键属性,完整的属性列表可参考 API 文档。
RCMessage 的数据结构如下:
属性名 | 类型 | 描述 |
---|---|---|
objectName | NSString | 消息类型的标识名,通过消息体类方法 +getObjectName 获取的值决定。 |
content | RCMessageContent | 消消息携带的具体内容,必须为 RCMessageContent 或 RCMediaMessageContent 的子类对象,其中封装了不同类型消息的具体数据字段。即时通讯服务已提供预定义的消息类型,并规定了跨平台一致的消息内容体结构(参见消息类型概述),如文本、语音、图片、GIF 等。您也可以通过自定义消息内容体创建自定义消息类型。 |
conversationType | RCConversationType | 会话类型枚举,例如单聊、群聊、聊天室、超级群、系统会话等。参考会话介绍。 |
senderUserId | NSString | 消息发送者的用户 ID。 |
targetId | NSString | 会话 ID(或称目标 ID),用于标识会话对端。
|
channelId | NSString | 超级群频道 ID。 |
messageId | long | 消息 ID,消息在本地存储中的唯一 ID(数据库索引唯一值)。 |
messageUId | String | 消息 UID,在同一个 App Key 下全局唯一。只有发送成功的消息才有唯一 ID。 |
messageDirection | RCMessageDirection | 消息方向枚举,分为发送和接收。 |
sentTime | long long | 消息发送时间。发送时间为消息从发送客户端到达服务器时服务器的本地时间。使用 UNIX 时间戳,单位为毫秒。 |
receivedTime | long long | 消息接收时间。接收时间为消息到达接收客户端时客户端的本地时间。使用 UNIX 时间戳,单位为毫秒。 |
sentStatus | RCSentStatus | 发送消息的状态。如发送中、发送成功、发送失败、取消发送。 |
receivedStatus | RCReceivedStatus | 接收到的消息的状态,如是否已读、是否下载等。详见消息接收状态。 |
readReceiptInfo | RCReadReceiptInfo | 群聊消息已读回执信息。详细请参考群聊消息回执。 |
canIncludeExpansion | BOOL | 是否允许消息扩展。详情请参考 消息扩展。 |
expansionDic | NSDictionary | 消息扩展信息。详情请参考 消息扩展。 |
extra | NSString | 消息的附加信息,该字段为本地操作的字段,不会发往服务端。请区别于 RCMessage.content.extra ,后者会随消息一并发送到对端。 |
isOffLine | BOOL | 是否是离线消息,只在接收消息的回调方法中有效,如果消息为离线消息,则为 YES ,其他情况均为 NO。 |
RCMessageContent
RCMessage
类中封装了 content
属性,代表一条消息携带的具体内容。消息内容体的类型必须继承以下基类:
- RCMessageContent - 即普通消息内容体。例如,SDK 内置消息类型中的文本消息内容体(RCTextMessage)即继承自
RCMessageContent
。 - RCMediaMessageContent - 即媒体消息内容体,继承自
MessageContent
基类,并在其基础上增加了对媒体文件的处理逻辑。。例如,SDK 内置消息类型中的文本消息内容体(RCImageMessage)即继承自MediaMessageContent
。在发送和接收消息时,SDK 会判断消息类型是否为媒体类型消息,如果是媒体类型,则会触发上传或下载媒体文件流程。
即时通讯服务已提供预定义的、跨平台一致的消息内容体结构(参见消息类型概述),如文本、语音、图片、GIF 等。如果您需要实现自定义消息,可以继承 RCMessageContent 或 RCMediaMessageContent,创建自定义消息内容体。
消息存储策略
客户端 SDK 和即时通讯服务端通过消息存储策略(RCMessagePersistent
)识别消息的类型、在本地和服务端的存储策略、是否计入未读消息数等属性。继承自 RCMessageContent
或 RCMediaMessageContent
的消息具体内容都遵守 RCMessagePersistentCompatible
协议,设置与存储相关属性。
如果发送 SDK 内置消息类型的消息,则 RCMessagePersistent
由 SDK 默认自动处理,无需额外操作。关于内置消息的存储策略,详见消息类型概述。
如果您需要创建自定义消息类型,则需要注意,自定义消息必须遵守 RCMessagePersistentCompatible 协议。详见自定义消息类型。