即时通讯
  • iOS
  • Android : Java
  • macOS
  • Windows
  • Web
  • 小程序
  • Flutter
  • Unity3D
  • uni-app
  • React Native
  • 产品简介
  • 下载
  • 快速开始
    • 跑通示例源码
    • 实现基本消息收发
  • 用户相关
  • 房间相关
  • 群组相关
  • 消息相关
  • 呼叫邀请
  • 会话管理
  • 缓存管理
  • 离线推送
  • 语音组件
  • 客户端 API
  • 服务端 API
  • 迁移方案
  • SDK 错误码
  • 常见问题
  • 文档中心
  • 即时通讯
  • 消息相关
  • 转发消息

转发消息

更新时间:2024-03-08 17:01

功能简介

ZIM SDK 支持实现以下两种形式的消息转发:

  • 合并消息后转发。
  • 逐条消息转发。

前提条件

在实现“转发消息”功能之前,请确保:

收发合并消息

  • 仅 2.14.0 及以上版本的 ZIM SDK 支持发送合并类型消息,接收并查看合并类型消息的内容。
  • 如果接收端的 SDK 版本介乎 [2.0.0, 2.14.0) 区间,可以收到合并消息时,但会显示此消息类型为未知,且无法获取信息内容。如需获取此条消息,请将 SDK 升级为 2.14.0 或以上版本。
  • 如果接收端的 SDK 版本为 1.x.x 版本,则无法收到合并消息,也不会收到合并消息。

发送合并消息

发送合并消息步骤如下:

  1. 通过 ZIMCombineMessage 对象构造合并消息体。参数包含如下:

    参数 类型 是否必填 说明
    title String 合并消息标题,长度上限默认为 20 字节。如需配置,请联系 ZEGO 技术支持。
    summary String 合并消息概要,长度上限默认为 100 字节。如需配置,请联系 ZEGO 技术支持。
    messageList ArrayList<ZIMMessage> 需要合并转发的原始消息列表,不支持信令、弹幕、撤回、系统类型的消息,不支持合并转发非成功的消息。

    ZIM SDK 支持在合并消息内包含其他合并消息。

  2. 调用 sendMessage 接口发送合并消息。开发者可参考 收发普通消息 - 发送消息 了解此接口参数详情。

以下为用户在单聊会话中发送合并消息的示例代码:

// 在单聊会话发送合并信息

ZIMConversationType type = PEER; // 会话类型,取值为 单聊:0,房间:1,群组:2
ZIMMessageSendConfig config = new ZIMMessageSendConfig();

// 需要合并转发的原始消息列表,可从历史消息中获取
ArrayList<ZIMMessage> messageList = new ArrayList<>();
messageList.add(message1);
messageList.add(message2);

ZIMCombineMessage combineMessage = new ZIMCombineMessage("标题", "概要", messageList);

zim.sendMessage(combineMessage,"conv_id", type, config, new ZIMMessageSentCallback() {
    @Override
    public void onMessageAttached(ZIMMessage zimMessage) {
        // 开发者可以通过该回调,监听消息是否开始准备发送。只有当通过本地基础参数检验的消息才会抛出该回调,否则通过 onMessageSent 回调抛出错误。               
    }

    @Override
    public void onMessageSent(ZIMMessage zimMessage, ZIMError error) {
        // 开发者可以通过该回调监听消息是否发送成功。
    }
});

接收合并消息

接收合并消息的回调接口与接收普通消息的回调接口一致,请参考 收发普通消息 - 接收消息 了解具体接口。

接收消息回调仅返回合并消息的标题、概要、合并 ID 的信息,如需了解合并消息内容,请参考 查看合并消息详情。

以下为用户在单聊会话中接收合并消息的示例代码:

// 用户在单聊会话中接收合并消息
@Override
    public void onReceivePeerMessage(ZIM zim, ArrayList<ZIMMessage> messageList,
                                        String fromUserID) {
        for (ZIMMessage message : messageList) {
            if (message.getType() == ZIMMessageType.COMBINE){
                // 合并消息
            }
        }
    }

查看合并消息详情

消息操作(监听、增加以及拉取历史消息)只会返回合并消息的标题、概要、合并 ID 的信息。因此,当需要了解合并消息包含的子消息时,可以通过调用 queryCombineMessageDetail 接口查询。

操作的结果将通过 ZIMCombineMessageDetailQueriedCallback 返回,可知合并消息下具体的子消息内容。


    public abstract void queryCombineMessageDetail(ZIMCombineMessage message,
                                                   ZIMCombineMessageDetailQueriedCallback callback);
参数 类型 是否必填 说明
message ZIMCombineMessage 合并类型消息。
zim.queryCombineMessageDetail(combineMessage, new ZIMCombineMessageDetailQueriedCallback() {
            @Override
            public void onCombineMessageDetailQueried(ZIMCombineMessage message, ZIMError error) {
                // 查看合并消息,具体的子消息在回调中的 message 的 messageList 里。
            }
        });

若子消息列表中存在合并消息,要想获取该合并消息下的具体子消息,需再次调用 queryCombineMessageDetail 接口,将通过接口获取到的合并消息作为参数,以此类推,对于嵌套多层的合并消息会存在多次调用的情况。

逐条转发消息

逐条转发消息本质上就是将已发送成功的消息作为参数发送到其它会话,与发送普通消息所用接口相同,开发者可参考 收发普通消息 - 发送消息 了解此接口参数详情。

本篇目录