转发消息
功能简介
ZIM SDK 支持实现以下两种形式的消息转发:
- 合并消息后转发。
- 逐条消息转发。
收发合并消息
说明
- 仅 2.14.0 及以上版本的 ZIM SDK 支持发送合并类型消息,接收并查看合并类型消息的内容。
- 如果接收端的 SDK 版本介乎 [2.0.0, 2.14.0) 区间,可以收到合并消息时,但会显示此消息类型为未知,且无法获取信息内容。如需获取此条消息,请将 SDK 升级为 2.14.0 或以上版本。
- 如果接收端的 SDK 版本为 1.x.x 版本,则无法收到合并消息,也不会收到合并消息。
发送合并消息
发送合并消息步骤如下:
-
通过 ZIMCombineMessage 对象构造合并消息体。
说明ZIM SDK 支持在合并消息内包含其他合并消息。
-
调用 sendMessage 接口发送合并消息。开发者可参考 收发普通消息 - 发送消息 了解此接口参数详情。
以下为用户在单聊会话中发送合并消息的示例代码:
Untitled
// 在单聊会话发送合并信息
ZIMConversationType type = ZIM_CONVERSATION_TYPE_PEER; // 会话类型,取值为 单聊:0,房间:1,群组:2
ZIMMessageSendConfig config;
// 需要合并转发的原始消息列表,可从历史消息中获取
std::vector<std::shared_ptr<ZIMMessage>> messageList;
messageList.push_back(message1);
messageList.push_back(message2);
std::shared_ptr<ZIMCombineMessage> combineMessage = std::make_shared<ZIMCombineMessage>("标题", "概要", messageList);
zim_->sendMessage(
combineMessage, "conv_id", type, config,
std::make_shared<zim::ZIMMessageSendNotification>(
[=](const std::shared_ptr<zim::ZIMMessage> &message) {
if (message) {
// 开发者可以通过该回调,监听消息是否开始准备发送。只有当通过本地基础参数检验的消息才会抛出该回调,否则通过 onMessageSent 回调抛出错误。
}
}),
[=](std::shared_ptr<zim::ZIMMessage> message, zim::ZIMError errorInfo) {
// 开发者可以通过该回调监听消息是否发送成功。
if (errorInfo.code == zim::ZIMErrorCode::ZIM_ERROR_CODE_SUCCESS) {
}
});
1
接收合并消息
接收合并消息的回调接口与接收普通消息的回调接口一致,请参考 收发普通消息 - 接收消息 了解具体接口。
注意
接收消息回调仅返回合并消息的标题、概要、合并 ID 的信息,如需了解合并消息内容,请参考 查看合并消息详情。
以下为用户在单聊会话中接收合并消息的示例代码:
Untitled
// 用户在单聊会话中接收合并消息
void onReceivePeerMessage(ZIM& zim, std::vector<ZIMMessage>& messageList,
std::string fromUserID) {
for (ZIMMessage& message : messageList) {
if (message.type == ZIMMessageType::ZIM_MESSAGE_TYPE_COMBINE) {
// 合并消息
}
}
}
1
查看合并消息详情
消息操作(监听、增加以及拉取历史消息)只会返回合并消息的标题、概要、合并 ID 的信息。因此,当需要了解合并消息包含的子消息时,可以通过调用 queryCombineMessageDetail 接口查询。
操作的结果将通过 ZIMCombineMessageDetailQueriedCallback 返回,可知合并消息下具体的子消息内容。
Untitled
zim_->queryCombineMessageDetail(combineMessage, [=](const std::shared_ptr<ZIMCombineMessage> &message, ZIMError &errorInfo) {
// 查看合并消息,具体的子消息在回调 message 里的 messageList 中。
});
1
若子消息列表中存在合并消息,要想获取该合并消息下的具体子消息,需再次调用 queryCombineMessageDetail 接口,将通过接口获取到的合并消息作为参数,以此类推,对于嵌套多层的合并消息会存在多次调用的情况。
逐条转发消息
逐条转发消息本质上就是将已发送成功的消息作为参数发送到其它会话,与发送普通消息所用接口相同,开发者可参考 收发普通消息 - 发送消息 了解此接口参数详情。