消息介绍
IMLib SDK 定义了 Message 类,用于进行消息传输和管理。
Message 模型
Message 类中封装了以下关键数据:
- 用于消息传输的属性:发送者 userId、接收者 userId、所属会话类型等。
- 消息内容体: 用于封装一条消息携带的的具体内容,分为普通消息内容体和媒体消息内容体。例如,文本消息内容(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`,后者会随消息一并发送到对端。 |
needReceipt | boolean | 是否支持发送已读回执 |
sentReceipt | boolean | 是否已经发送已读回执 |
MessageContent
Message
类中封装了 content
属性,代表一条消息携带的具体内容。消息内容体的类型必须继承以下基类:
- MessageContent - 即普通消息内容体。例如,SDK 内置消息类型中的文本消息内容体(TextMessage)即继承自
MessageContent
。 - MediaMessageContent - 即媒体消息内容体,继承自
MessageContent
基类,并在其基础上增加了对媒体文件的处理逻辑。在发送和接收消息时,SDK 会判断消息类型是否为媒体类型消息,如果是媒体类型,则会触发上传或下载媒体文件流程。例如,SDK 内置消息类型中的文本消息内容体(ImageMessage)即继承自MediaMessageContent
。
IMLib SDK 已提供预定义的、跨平台一致的消息内容体结构(参见消息类型概述),如文本、语音、图片、GIF 等。如果您需要实现自定义消息,可以继承 MessageContent 或 MediaMessageContent,创建自定义消息内容体。
目前鸿蒙仅支持自定义普通消息,可以继承 MessageContent 创建自定义消息内容体。