跳到主要内容

消息介绍

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

Message 模型

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

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

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

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

属性名类型描述
conversationTypeConversationType会话类型枚举,例如单聊、群聊、聊天室、超级群、系统会话等。参考会话介绍(../conversation/intro.md)。
targetIdstring会话 ID(或称目标 ID),用于标识会话对端。
  1. 针对单聊会话,用对端用户的 ID 作为 Target ID,因此发送与接收的所有消息的 Target ID 一定为对端的用户 ID。请注意,本端用户所接收的消息在本地消息数据中存储的 Target ID 也不是当前用户 ID,而是对端用户(消息发送者)的用户 ID。
  2. 在群组、聊天室、超级群会话中,Target ID 为对应的群组、聊天室、超级群 ID。
  3. 针对系统会话,因客户端用户无法回复系统会话消息,因此不需要 Target ID。
messageIdint消息 ID,消息在本地存储中的唯一 ID(数据库索引唯一值)。
directionMessageDirection消息方向枚举,分为发送和接收。
senderIdstring消息发送者的用户 ID。
receivedStatusReceivedStatus接收到的消息的状态,如是否已读、是否下载等。详见消息接收状态(./receive.md#消息接收状态)。
sentStatusSentStatus发送消息的状态。如发送中、发送成功、发送失败、取消发送。
receivedTimenumber消息接收时间。接收时间为消息到达接收客户端时客户端的本地时间。使用 UNIX 时间戳,单位为毫
sentTimenumber消息发送时间。发送时间为消息从发送客户端到达服务器时服务器的本地时间。使用 UNIX 时间戳,单位为毫秒。
objectNamestring消息类型的标识名,由消息内容体中的 MessageTag 注解中的 value 值决定。
contentMessageContent消息携带的具体内容,必须为 MessageContent 或 MediaMessageContent 的子类对象,其中封装了不同类型消息的具体数据字段。即时通讯服务已提供预定义的消息类型,并规定了跨平台一致的消息内容体结构(参见消息类型概述),如文本、语音、图片 等。您也可以通过自定义消息内容体创建自定义消息类型。
messageUidString消息 UID,在同一个 App Key 下全局唯一。只有发送成功的消息才有唯一 ID。
extraString消息的附加信息,该字段为本地操作的字段,不会发往服务端。请区别于 **MessageContent.extra`,后者会随消息一并发送到对端。

MessageContent

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

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

即时通讯服务已提供预定义的、跨平台一致的消息内容体结构(参见消息类型概述),如文本、语音、图片 等。

目前鸿蒙仅支持自定义普通消息,可以继承 MessageContent 创建自定义消息内容体。

消息存储策略

客户端 SDK 和即时通讯服务端通过消息注解(MessageTag)识别消息的类型、在本地和服务端的存储策略、是否计入未读消息数等属性。MessageTag 是基于 TS annotation 实现的、对消息内容类添加的注释。继承自 MessageContent 的消息具体内容都必须带有 MessageTag 注解。

如果发送 SDK 内置消息类型的消息,则 MessageTag 默认自动添加,无需额外操作。

如果您需要创建自定义消息类型,则需要了解学习如何正确创建消息注解。详见以下文档: