消息介绍
IMLib SDK 定义了 Message 类,用于进行消息传输和管理。
Message 模型
Message 类中封装了以下关键数据:
- 用于消息传输的属性:发送者 ID、接收者 ID、所属会话类型等。
- 消息内容体: 用于封装一条消息携带的的具体内容,分为普通消息内容体和媒体消息内容体。例如,文本消息内容(TextMessage)属于普通消息内容体,图片消息内容(ImageMessage)属于媒体消息内容体。消息内容体的类型,常称为「消息类型」,决定了使用发送普通消息还是发送媒体的接口。
提示
文档里出现的「消息」,如文本消息、语音消息等,有时指继承自 MessageContent 或 MediaMessageContent 的消息具体内容。
下表描述 Message 类的关键属性,完整的属性列表可参考 API 文档。
属性名 | 类型 | 描述 |
---|---|---|
conversationType | ConversationType | 会话类型枚举,例如单聊、群聊、聊天室、超级群、系统会话等。参考会话介绍(../conversation/intro.md)。 |
targetId | string | 会话 ID(或称目标 ID),用于标识会话对端。
|
messageId | int | 消息 ID,消息在本地存储中的唯一 ID(数据库索引唯一值)。 |
direction | MessageDirection | 消息方向枚举,分为发送和接收。 |
senderId | string | 消息发送者的用户 ID。 |
receivedStatus | ReceivedStatus | 接收到的消息的状态,如是否已读、是否下载等。详见消息接收状态(./receive.md#消息接收状态)。 |
sentStatus | SentStatus | 发送消息的状态。如发送中、发送成功、发送失败、取消发送。 |
receivedTime | number | 消息接收时间。接收时间为消息到达接收客户端时客户端的本地时间。使用 UNIX 时间戳,单位为毫 |
sentTime | number | 消息发送时间。发送时间为消息从发送客户端到达服务器时服务器的本地时间。使用 UNIX 时间戳,单位为毫秒。 |
objectName | string | 消息类型的标识名,由消息内容体中的 MessageTag 注解中的 value 值决定。 |
content | MessageContent | 消息携带的具体内容,必须为 MessageContent 或 MediaMessageContent 的子类对象,其中封装了不同类型消息的具体数据字段。即时通讯服务已提供预定义的消息类型,并规定了跨平台一致的消息内容体结构(参见消息类型概述),如文本、语音、图片 等。您也可以通过自定义消息内容体创建自定义消息类型。 |
messageUid | String | 消息 UID,在同一个 App Key 下全局唯一。只有发送成功的消息才有唯一 ID。 |
extra | String | 消息的附加信息,该字段为本地操作的字段,不会发往服务端。请区别于 **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 默认自动添加,无需额外操作。
如果您需要创建自定义消息类型,则需要了解学习如何正确创建消息注解。详见以下文档: