流式消息
本文介绍如何在 HarmonyOS IMLib SDK 中接收并拉取流式消息,涵盖消息监听、拉取流程、事件回调、常见结果码和摘要获取。
提示
流式消息从 26.5.0 版本开始支持。
流式消息简介
流式消息由业务服务器触发,融云 IM 服务器生成消息并下发到客户端 SDK。客户端收到流式消息后,可以根据业务需求发起内容拉取,并通过事件回调持续接收增量内容。
下图展示了完整的交互流程:
IMLib SDK 使用 StreamMessage 表示流式消息内容。StreamMessage 继承自 MessageContent,完整属性请参考 API 文档。
关键字段如下:
| 字段 | 类型 | 说明 |
|---|---|---|
content | string | 流式消息内容。拉取过程中,该字段为当前已累加到此刻的完整文本内容。 |
type | string | 流式消息的文本格式或内容类型标记,由服务端定义并透传给业务层。 |
isComplete | boolean | 服务端是否已结束流式内容生成。 |
completeReason | number | 业务服务器下发的结束原因码,0 表示正常。 |
stopReason | number | 融云服务器下发的结束原因码,0 表示正常。 |
isSync | boolean | 客户端是否已完成流式内容拉取。 |
提示
- 流式消息的消息类型标识为
RC:StreamMsg。 - SDK 不支持发送流式消息。流式消息只能由服务器下发,SDK 接收后通过
IMEngine的setMessageReceivedListener(listener)回调传递给业务层。 - 收到流式消息后,需要调用
IMEngine的requestStreamMessage(params)接口拉取完整内容。
接收流式消息
SDK 不支持发送流式消息。开发者需要通过服务器接口触发流式消息,对应的接收者会收到该消息。
添加消 息监听
应用可以通过 setMessageReceivedListener 设置消息接收监听,并在回调中判断是否收到流式消息。
TypeScript
IMEngine.getInstance().setMessageReceivedListener((message: Message, info: ReceivedInfo) => {
if (message.content instanceof StreamMessage) {
const streamMessage = message.content as StreamMessage;
// TODO: 根据 streamMessage.isSync 判断是否需要拉取完整内容
}
});