tencent cloud

文档反馈

Android & iOS & Mac

最后更新时间:2022-09-08 18:39:10

    功能描述

    如果您想实现合并转发功能,需要进行以下步骤:

    1. 根据原始消息列表创建一条合并消息。
    2. 把合并消息发送到对端。
    3. 对端收到合并消息后解析出原始消息列表。

    合并消息的展示还需要标题和摘要信息,如下图所示:

    合并转发 合并消息展示 点击合并消息下载合并消息列表展示

    合并转发消息

    创建并发送合并转发消息

    我们在创建一条合并消息的时候不仅要设置合并消息列表,还要设置标题和摘要信息,实现流程如下:

    1. 调用 createMergerMessage (Android / iOS & Mac 接口创建一条合并消息,创建合并消息的时候需要设置原始消息列表,合并消息标题、合并消息摘要等信息。
    属性 含义 说明
    messageList 原始消息列表 合并转发的原始消息列表。
    title 标题 合并消息的标题,如上图所示 “xixiyah 和 Hello 的聊天记录”。
    abstractList 摘要列表 合并消息的摘要信息,如上图所示,合并消息需要预先展示原始消息的摘要信息,当用户点击 Cell 后才去展示完整消息内容。
    compatibleText 兼容文本信息 低版本 SDK 如果不支持合并消息,默认会收到一条文本消息,文本消息的内容为 compatibleText。

    示例代码如下:

    // 需要被转发的消息列表,消息列表里可以包含合并消息,不能包含群 Tips 消息
    List<V2TIMMessage> msgs = new ArrayList<>();
    msgs.add(message1);
    msgs.add(message2);
    // 合并消息标题
    String title = "vinson 和 lynx 的聊天记录"; 
    // 合并消息摘要列表
    List<String> abstactList = new ArrayList<>();
    msgs.add("abstract1");
    msgs.add("abstract2");
    msgs.add("abstract3");
    // 合并消息兼容文本,低版本 SDK 如果不支持合并消息,默认会收到一条文本消息,文本消息的内容为 compatibleText
    String compatibleText = "请升级最新版本查看合并消息"; 
    // 创建合并消息
    V2TIMMessage mergeMessage = V2TIMManager.getMessageManager().createMergerMessage(msgs, title, abstractList, compatibleText);
    

    1. 调用 sendMessage (Android / iOS & Mac) 接口发送合并消息。

    示例代码如下:

    // 发送合并消息给用户 "denny"
    V2TIMManager.getMessageManager().sendMessage(mergeMessage, "denny", null, V2TIMMessage.V2TIM_PRIORITY_NORMAL, false, null, new V2TIMSendCallback<V2TIMMessage>() {
     @Override
     public void onProgress(int progress) {}
      @Override
     public void onSuccess(V2TIMMessage v2TIMMessage) {}
      @Override
     public void onError(int code, String desc) {}
     })
    

    接收合并转发消息

    添加监听器

    接收方调用 addAdvancedMsgListener (Android / iOS & Mac) 添加高级消息监听器。
    一般建议在比较靠前的时间点调用,例如例如聊天消息界面初始化后,确保 App 能及时收到消息。

    示例代码如下:

    V2TIMManager.getMessageManager().addAdvancedMsgListener(advancedMsgListener);
    

    解析消息

    添加监听器后,接收方会在 onRecvNewMessage 中收到合并消息 V2TIMMessage
    可以先通过合并消息元素 V2TIMMergerElem (Android / iOS & Mac) 获取 titleabstractList UI 展示。
    当用户点击合并消息的时候再调用 downloadMergerMessage(Android / iOS & Mac) 接口下载合并消息列表 UI 展示。

    示例代码如下:

    @Override
    public void onRecvNewMessage(V2TIMMessage msg) {
     if (msg.getElemType() == V2TIMMessage.V2TIM_ELEM_TYPE_MERGER) {
       // 获取合并消息 elem
       V2TIMMergerElem mergerElem = msg.getMergerElem();
       // 获取 title
       String title = mergerElem.getTitle();
       // 获取摘要列表
       List<String> abstractList = mergerElem.getAbstractList();
       // 用户点击合并消息的时候下载合并消息列表
       mergerElem.downloadMergerMessage(new V2TIMValueCallback<List<V2TIMMessage>>() {
         @Override
         public void onSuccess(List<V2TIMMessage> v2TIMMessages) {
           // 下载成功,v2TIMMessages 即为合并消息列表
           for (V2TIMMessage subMsg : v2TIMMessages) {
           // 如果合并消息列表里面还有合并消息,可以继续解析
           if (subMsg.getElemType() == V2TIMMessage.V2TIM_ELEM_TYPE_MERGER) {
             V2TIMMergerElem mergerElem = subMsg.getMergerElem();
             // 获取 title
             String title = mergerElem.getTitle();
             // 获取摘要列表
             List<String> abstractList = mergerElem.getAbstractList();
             // 用户点击合并消息的时候下载合并消息列表
             ......
           }
         }
       }
        @Override
       public void onError(int code, String desc) {
       // 下载失败
       }
     });
    }
    

    移除监听器

    如果想停止接收消息,接收方可调用 removeAdvancedMsgListener (Android / iOS & Mac) 移除高级消息监听器。

    示例代码如下:

    V2TIMManager.getMessageManager().removeAdvancedMsgListener(advancedMsgListener);
    

    逐条转发消息

    如果您需要转发单条消息,可以先通过 createForwardMessage (Android / iOS & Mac) 接口创建一条和原消息内容完全一样的转发消息,再调用 sendMessage (Android / iOS & Mac) 接口把转发消息发送出去。

    示例代码如下:

    // 创建转发消息,转发消息的 elem 内容和原消息完全一致
    V2TIMMessage forwardMessage = V2TIMManager.getMessageManager().createForwardMessage(originMsg);
    // 发送消息给用户 "denny"
    V2TIMManager.getMessageManager().sendMessage(forwardMessage, "denny", null, V2TIMMessage.V2TIM_PRIORITY_NORMAL, false, null, new V2TIMSendCallback<V2TIMMessage>() {
     @Override
     public void onProgress(int progress) {
     }
      @Override
     public void onSuccess(V2TIMMessage message) {
     }
      @Override
     public void onError(int code, String desc) {
     }
    });
    

    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持