跳到主要内容

消息介绍

IMLib SDK 定义了 RCMessage 类,用于进行消息传输和管理。

RCMessage 模型

RCMessage 类中封装了以下关键数据:

  • 用于消息传输的属性:发送者 ID、接收者 ID、所属会话类型等。
  • 消息内容体: 用于封装一条消息携带的的具体内容,分为普通消息内容体和媒体消息内容体。例如,文本消息内容(RCTextMessage)属于普通消息内容体,图片消息内容(RCImageMessage)属于媒体消息内容体。消息内容体的类型,常称为「消息类型」,决定了使用发送普通消息还是发送媒体的接口。
提示

文档里出现的「消息」,如文本消息、语音消息等,有时指继承自 RCMessageContentRCMediaMessageContent 的消息具体内容。

下表描述 RCMessage 类的关键属性,完整的属性列表可参考 API 文档。

RCMessage 的数据结构如下:

属性名类型描述
objectNameNSString消息类型的标识名,通过消息体类方法 +getObjectName 获取的值决定。
contentRCMessageContent消消息携带的具体内容,必须为 RCMessageContentRCMediaMessageContent 的子类对象,其中封装了不同类型消息的具体数据字段。即时通讯服务已提供预定义的消息类型,并规定了跨平台一致的消息内容体结构(参见消息类型概述),如文本、语音、图片、GIF 等。您也可以通过自定义消息内容体创建自定义消息类型。
conversationTypeRCConversationType会话类型枚举,例如单聊、群聊、聊天室、超级群、系统会话等。参考会话介绍
senderUserIdNSString消息发送者的用户 ID。
targetIdNSString会话 ID(或称目标 ID),用于标识会话对端。
  1. 针对单聊会话,用对端用户的 ID 作为 Target ID,因此发送与接收的所有消息的 Target ID 一定为对端的用户 ID。请注意,本端用户所接收的消息在本地消息数据中存储的 Target ID 也不是当前用户 ID,而是对端用户(消息发送者)的用户 ID。
  2. 在群组、聊天室、超级群会话中,Target ID 为对应的群组、聊天室、超级群 ID。
  3. 针对系统会话,因客户端用户无法回复系统会话消息,因此不需要 Target ID。
channelIdNSString超级群频道 ID。
messageIdlong消息 ID,消息在本地存储中的唯一 ID(数据库索引唯一值)。
messageUIdString消息 UID,在同一个 App Key 下全局唯一。只有发送成功的消息才有唯一 ID。
messageDirectionRCMessageDirection消息方向枚举,分为发送和接收。
sentTimelong long消息发送时间。发送时间为消息从发送客户端到达服务器时服务器的本地时间。使用 UNIX 时间戳,单位为毫秒。
receivedTimelong long消息接收时间。接收时间为消息到达接收客户端时客户端的本地时间。使用 UNIX 时间戳,单位为毫秒。
sentStatusRCSentStatus发送消息的状态。如发送中、发送成功、发送失败、取消发送。
receivedStatusRCReceivedStatus接收到的消息的状态,如是否已读、是否下载等。详见消息接收状态
readReceiptInfoRCReadReceiptInfo群聊消息已读回执信息。详细请参考群聊消息回执
canIncludeExpansionBOOL是否允许消息扩展。详情请参考 消息扩展
expansionDicNSDictionary消息扩展信息。详情请参考 消息扩展
extraNSString消息的附加信息,该字段为本地操作的字段,不会发往服务端。请区别于 RCMessage.content.extra,后者会随消息一并发送到对端。
isOffLineBOOL是否是离线消息,只在接收消息的回调方法中有效,如果消息为离线消息,则为 YES ,其他情况均为 NO。

RCMessageContent

RCMessage 类中封装了 content 属性,代表一条消息携带的具体内容。消息内容体的类型必须继承以下基类:

  • RCMessageContent - 即普通消息内容体。例如,SDK 内置消息类型中的文本消息内容体(RCTextMessage)即继承自 RCMessageContent
  • RCMediaMessageContent - 即媒体消息内容体,继承自 MessageContent 基类,并在其基础上增加了对媒体文件的处理逻辑。。例如,SDK 内置消息类型中的文本消息内容体(RCImageMessage)即继承自 MediaMessageContent。在发送和接收消息时,SDK 会判断消息类型是否为媒体类型消息,如果是媒体类型,则会触发上传或下载媒体文件流程。

即时通讯服务已提供预定义的、跨平台一致的消息内容体结构(参见消息类型概述),如文本、语音、图片、GIF 等。如果您需要实现自定义消息,可以继承 RCMessageContentRCMediaMessageContent,创建自定义消息内容体。

消息存储策略

客户端 SDK 和即时通讯服务端通过消息存储策略(RCMessagePersistent)识别消息的类型、在本地和服务端的存储策略、是否计入未读消息数等属性。继承自 RCMessageContentRCMediaMessageContent 的消息具体内容都遵守 RCMessagePersistentCompatible 协议,设置与存储相关属性。

如果发送 SDK 内置消息类型的消息,则 RCMessagePersistent 由 SDK 默认自动处理,无需额外操作。关于内置消息的存储策略,详见消息类型概述

如果您需要创建自定义消息类型,则需要注意,自定义消息必须遵守 RCMessagePersistentCompatible 协议。详见自定义消息类型