Android集成环信3.x实现发送自定义扩展消息

本文介绍了如何在Android项目中集成环信3.x版本,实现发送自定义扩展消息,如商品卡片。通过创建工具类、发送、接收、显示消息以及处理点击事件,详细阐述了实现过程,确保兼容环信3.5.2版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.项目背景

集成环信3.x版本实现类似淘宝发送商品卡片的效果,需要我们手动实现自定义扩展消息。
我使用的环信为3.5.2的版本,应该是几乎当前的最新版本,网上现有的文章或多或少已过时不太适配当前的版本,在我尝试成功后决定记录下整个实现的过程。
最终实现效果为,从商品界面点击【联系卖家】,界面跳转到和卖家的聊天界面,并发送商品信息卡片。
效果图

2.实现过程

1.自定义工具类

创建工具类GoodsMessageHelper ,需要定义一些和消息有关的常量以便统一调用,这里实现了isGoodsChatType()函数用于判断一条消息是否是我们自定义的消息。

public class GoodsMessageHelper {
   

    public static String CHATTYPE = "GoodsChatType";
    public static String GOODS_ID = "goods_id";
    public static String GOODS_NAME = "goods_name";
    public static String GOODS_PRICE = "goods_price";
    public static String GOODS_PIC = "goods_pic";

    public static boolean isGoodsChatType(EMMessage emMessage) {
   
        String TYPE = emMessage.getStringAttribute("CHATTYPE", null);
        if (TYPE == null){
   
            return false;
        }
        if (TYPE.equals(CHATTYPE)){
   
            return true;
        }

        return false;
    }
}

2.发送消息

在EaseChatFragment类的onActivityCreated()方法中,利用商品信息界面传递的标志位来判断是否发送商品信息,该标志位是用于区分从商品界面点过来的聊天窗口和直接从消息列表点进来的聊天窗口。
在这里插入图片描述
发送商品消息的方法实现如下,message使用setAttribute(key, value)的方式来传递数据,注意这里我们创建的是Txt文本类型的消息:

protected void sendGoodsMessage(String id, String name, String pic, double price) {
   
        EMMessage message = EMMessage.createTxtSendMessage(name, toChatUsername);
        message.setAttribute(GoodsMessageHelper.GOODS_ID, id);
        message.setAttribute(GoodsMessageHelper.GOODS_NAME, name);
        message.setAttribute(GoodsMessageHelper.GOODS_PIC, pic);
        message.setAttribute(GoodsMessageHelper.GOODS_PRICE, String.valueOf(price));
        message.setAttribute("CHATTYPE", GoodsMessageHelper.CHATTYPE);
        EMClient.getInstance().chatManager().sendMessage(message);
        Log.d(TAG, "sendGoodsMessage: 发送商品消息");
    }

3.接收消息

找到EaseMessageAdapter类(这个是消息适配器)。
定义两个常量,用于表示消息类型(注意:扩展一种消息类型,需要定义两个常量:接收+发送)

private static final int MESSAGE_TYPE_SENT_GOODS = 14;
private static final int MESSAGE_TYPE_RECV_GOODS = 15;

getViewTypeCount()修改返回的消息类型:+2(每扩展一种消息类型,返回的数值+2)
在这里插入图片描述
在getItemViewType()方法中设置返回的消息类型,并把相应数值+2。
需要注意的是,由于我们之前创建的是TXT类型的消息,所以这里是在TXT类型消息的判断下来对我们自定义消息做出处理的。
在这里插入图片描述
在createChatRowPresenter()方法中设置呈现消息的类,类GoodsChatRowPresenter由字面意思可理解为消息的呈递者,它的代码将在后续给出
在这里插入图片描述

4.显示消息

显示消息首先创建呈递消息所用的GoodsChatRowPresenter类,它实现可参考环信UI中其他Presenter。
在onCreateChatRow()方法中创建显示消息的载体GoodsChatRow,onBubbleClick()方法用于处理该扩展消息的点击事件(例如跳转界面到商品详情页,这里不做具体实现,可根据自己的需求修改)。代码如下:

public class GoodsChatRowPresenter 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值