环信IM集成教程---消息转发&合并转发的实现

前言

在发送消息体系中,转发消息是一个重要的环节,可以单条转发也可以合并转发。本文教大家在接入环信IM过程中如何实现单条转发合并转发消息功能,同时举例一些容易踩坑的位置,以便大家尽快顺利的实现转发消息功能。

环信4.4.0以上(包含4.4.0)的SDK版本,附件类消息支持不下载即可转发;如果还在使用之前版本的同学,建议升级到4.4.0或是先下载到本地,再发送(本篇文章是基于4.4.0的SDK实现的)

前提条件:

  • 完成环信IM SDK的初始化
  • 完成发送消息的操作

功能实现:

一. 单条消息转发

1.发送方转发单条消息;

代码如下:

EMMessage.Type type = message.getType();
        EMMessage msgForForward = EMMessage.createSendMessage(type);
        msgForForward.setTo(toChatUsername);
        switch (type) {
            case TXT: {
                EMTextMessageBody body = (EMTextMessageBody) message.getBody();
                msgForForward.setBody(body);
            }
            break;
            case COMBINE: {
                // send combine message
                EMCombineMessageBody body = (EMCombineMessageBody) message.getBody();
                msgForForward.setBody(body);
            }
            break;
            case IMAGE: {
                // send image
                EMImageMessageBody body = (EMImageMessageBody) message.getBody();
                msgForForward.setBody(body);
            }
            break;
            case VIDEO: {
                // send image
                EMVideoMessageBody body = (EMVideoMessageBody) message.getBody();
                msgForForward.setBody(body);
            }
            break;

            case FILE: {
                // send image
                EMFileMessageBody body = (EMFileMessageBody) message.getBody();
                msgForForward.setBody(body);
            }
            break;
            case VOICE:{
                // send image
                EMVoiceMessageBody body = (EMVoiceMessageBody) message.getBody();
                msgForForward.setBody(body);
            }
            break;
        }

        msgForForward.setMessageStatusCallback(new EMCallBack() {
            @Override
            public void onSuccess() {
                EMLog.e(TAG,"=====onSuccess==");
            }

            @Override
            public void onError(int code, String error) {
                EMLog.d(TAG, "===onError===code: " + code + " error: " + error);
            }

            @Override
            public void onProgress(int progress, String status) {

            }
        });
        // send message
        EMClient.getInstance().chatManager().sendMessage(msgForForward);


2.接收方在EMMessageListener#onMessageReceived里接收消息;

代码如下:

EMMessageListener msgListener = new EMMessageListener() {

              //接收到消息
            @Override
            public void onMessageReceived(List<EMMessage> messages) {
            }

        };
        //注册消息监听
  EMClient.getInstance().chatManager().addMessageListener(msgListener);


注意事项 :

  1. 转发附件类消息报下图错误时(视频消息除外),先检查引入的环信SDK版本,这个功能需要使用4.4.0以上的SDK版本;
    在这里插入图片描述

  2. 转发图片消息时,接收方收到图片后,调用EMClient.getInstance().chatManager().downloadThumbnail(message)下载本地后,对比原图模糊时,请检发送方在发送图片时,是否有压缩?
    代码如下:
    在这里插入图片描述

  3. 转发COMBINE消息时,遇到下图报错,请检查引入的环信SDK版本(需要使用4.4.0以上包含4.4.0的sdk版本)
    在这里插入图片描述

二. 合并转发消息

1. 创建和发送合并消息

注:合并消息的原始消息 ID 列表。该列表最多包含 300 个消息 ID。

String title = "标题";
        String summary = "合并消息的概要";
        String compatibleText = "您当前的版本不支持该消息,请升级到最新版本";
        EMMessage message = EMMessage.createCombinedSendMessage(title, summary, compatibleText, mlisMsgID, username);
        message.setMessageStatusCallback(new EMCallBack() {
            @Override
            public void onSuccess() {
                // 消息发送成功的处理逻辑
                EMLog.e(TAG,"==onSuccess===");
            }

            @Override
            public void onError(int code, String error) {
                // 消息发送失败的处理逻辑
                EMLog.e(TAG,"==onError===code:"+code+",error:"+error);
            }
        });
        EMClient.getInstance().chatManager().sendMessage(message);


2. 解析合并消息

合并消息实际上是一种附件消息。收到合并消息后,你可以调用 downloadAndParseCombineMessage 方法下载合并消息附件并解析出原始消息列表。

EMMessageListener msgListener = new EMMessageListener() {

            @Override
            public void onMessageReceived(List<EMMessage> messages) {

                for (EMMessage emmessage:messages) {
//下载合并消息 EMClient.getInstance().chatManager().downloadAndParseCombineMessage(emmessage, new EMValueCallBack<List<EMMessage>>() {
                        @Override
                        public void onSuccess(List<EMMessage> value) {
                            // 处理并展示消息列表
                        }

                        @Override
                        public void onError(int error, String errorMsg) {
                            // 处理出错信息
                        }
                    });
                }
            }
        };
        //注册消息监听
        EMClient.getInstance().chatManager().addMessageListener(msgListener);


场景举例:

A给B合并转发一条消息,B收到合并消息后,再直接将合并消息转给C,这个场景,就需要按照单条消息转发场景去处理,如果出现异常的话,请先检查环信SDK版本是否是4.4.0;

错误示范:
如果你在处理如上场景时,也和下图里的处理逻辑一样的话,请删掉代码,按照单条消息转发的场景处理;
在这里插入图片描述

如您在集成环信IM过程中遇到其他问题,可以在文档集成页呼唤文档助理,转人工,加入环信技术支持群~

参考文档:

  • 21
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值