融云自定义消息及自定义扩展区域plugin

本文介绍了如何在Android项目中自定义融云1v1聊天的消息内容和扩展区域。通过继承`MessageContent`创建自定义消息,并使用`@MessageTag`注解进行配置。同时,详细讲解了自定义plugin、provider以及布局文件的设置,确保消息显示和功能的正确实现。在应用程序中注册这些自定义组件,并在初始化融云之后应用自定义扩展区域。
摘要由CSDN通过智能技术生成

最近一个项目在接入融云1v1聊天,然后各种更换界面~先说下自定义消息,先上图,运行效果如下:

1、需要自定义message,继承 MessageContent 

如:@MessageTag(value = "RCDTestMessage", flag = MessageTag.ISPERSISTED | MessageTag.ISCOUNTED) public class        RCDTestMessage extends MessageContent {

注意:@MessageTag里面的value,如果需要收到服务端推送过来的自定义消息去展示或者和ios推送过来的自定义消息互通,value里面的值,一定要和后台还有ios端约定好,一模一样才可以。

flag 是 MessageTag.ISCOUNTED | MessageTag.ISPERSISTED 表示消息计数且存库。

下面是自定义message:

/**
 * 自定义消息的实体类
 */
@MessageTag(value = "RCDTestMessage", flag = MessageTag.ISPERSISTED | MessageTag.ISCOUNTED)
public class RCDTestMessage extends MessageContent {

    private String content;
    private String extra;
   /** 
   * 实现 encode() 方法,该方法的功能是将消息属性封装成 json 串,再将 json 串转成 byte 数组,该方法会在发消息时调用
   */
    @Override
    public byte[] encode() {
        JSONObject object = new JSONObject();
        object.put("content", content);
        object.put("extra", extra);
        try {
            return object.toString().getBytes("UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return null;
    }

    public RCDTestMessage() {

    }

  /**
  *覆盖父类的 MessageContent(byte[] data) 构造方法,该方法将对收到的消息进行解析, * 先由 byte 转成 json 字符串,再将  json  中内容取出赋值给消息属性。
  */
    public RCDTestMessage(byte[] data) {
        super(data);
        String jsonStr = null;
        try {
            jsonStr = new String(data, "UTF-8");
            JSONObject object = JSON.parseObject(jsonStr);//注意,这里一定要用setContent和setExtra
            this.setContent(object.getString("content"));
            this.setExtra(object.getString("extra"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        ParcelUtils.writeToParcel(dest, this.getContent());//注意,这里一定要用getContent和getExtra
        ParcelUtils.writeToParcel(dest, this.getExtra());
    }

    public static final Creator<RCDTestMessage> CREATOR = new Creator<RCDTestMessage>() {
        @Override
        public RCDTestMessage createFromParcel(Parcel source) {
            return new RCDTestMessage(source);
        }

        @Override
        public RCDTestMessage[] newArray(int size) {
            return new RCDTestMessage[size];
        }
    };

    public RCDTestMessage(Parcel parcel) {//注意,这里一定要用setContent和setExtra
        this.setExtra(ParcelUtils.readFromParcel(parcel));
        this.setContent(ParcelUtils.readFromParcel(parcel));
    }

    @Override
    public int describeContents() {
        return 0;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getExtra() {
        return extra;
    }

 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值