网易云ios android 自定义消息,【网易云信】Android端-自定义消息

首先,贴上官方文档地址:

http://dev.netease.im/docs/product/IM%E5%8D%B3%E6%97%B6%E9%80%9A%E8%AE%AF/SDK%E5%BC%80%E5%8F%91%E9%9B%86%E6%88%90/Android%E5%BC%80%E5%8F%91%E9%9B%86%E6%88%90/%E6%B6%88%E6%81%AF%E6%94%B6%E5%8F%91?#%E8%87%AA%E5%AE%9A%E4%B9%89%E6%B6%88%E6%81%AF

API 介绍

除了内建消息类型以外,SDK 还支持收发自定义消息类型。SDK 不负责定义和解析自定义消息的具体内容,解释工作由开发者完成。SDK 会将自定义消息存入消息数据库,会和内建消息一并展现在消息记录中。

为了使用更加方便,自定义消息采用附件的方式展示给开发者。体现在 IMMessage 类中,自定义消息的内容会被解析为 MsgAttachment 对象,由于 SDK 并不知道自定义消息的格式,第三方 App 需要注册一个自定义消息解析器。当第三方 App 调用查询查询消息历史的接口,或者是 SDK 收到消息通知第三方 App 时,就能将自定义消息内容转换为一个 MsgAttachment 对象,然后就可以同操作图片消息等带附件消息一样,操作自定义消息了。

与 IMMessage 一致,为了增加自定义消息的灵活性,SDK 还提供了对其生命周期和推送参数的一些配置选项,开发者可以自主设定一条自定义消息是否要保存云端消息记录,是否要漫游,发送时是否要多端同步等的配置选项 CustomMessageConfig。

下面说说具体做法:

1.定义CustomAttachmentType

public interface CustomAttachmentType {

// 多端统一

int Guess = 1;

int SnapChat = 2;

int Sticker = 3;

int RTS = 4;

int RedPacket = 5;

int OpenedRedPacket = 6;

int MyOrderCustomMsg = 10002;

//这里需要注意。需要与后台设置统一。后台设置的时候。不是100的那个自定义消息类型,而是消息body中的type

}

2.定义CustomAttachParser

b624743a133e0496e3fa85123fbf589b.png

3.定义MyOrderAttachment

package com.netease.nim.demo.session.extension;

import android.util.Log;

import com.alibaba.fastjson.JSONObject;

/**

* @describe: -订单 10002

* @author: Gao Chunfa

* @time: 2018/3/14-下午3:15

* @Company: 猎象网络科技

* @other:

*/

public class MyOrderAttachment extends CustomAttachment{

public String title;

public String content;

public MyOrderAttachment() {

super(CustomAttachmentType.MyOrderCustomMsg);

}

@Override

protected void parseData(JSONObject data) {

// Log.d("flag","MyOrderAttachment==="+data.toString());

title=data.getString("title");

content=data.getString("content");

}

@Override

protected JSONObject packData() {

JSONObject data = new JSONObject();

data.put("title",title);

data.put("content",content);

return data;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public String getContent() {

return content;

}

public void setContent(String content) {

this.content = content;

}

}

4.定义MsgViewHolderMyOrder

package com.netease.nim.demo.session.viewholder;

import android.content.Intent;

import android.util.Log;

import android.view.View;

import android.widget.LinearLayout;

import android.widget.TextView;

import com.iliexiang.dianjing.R;

import com.iliexiang.dianjing.dialog.RobOrderDialog;

import com.iliexiang.dianjing.ui.order.public_order.PublicOrderDetailActivity;

import com.iliexiang.dianjing.ui.order.rob.RobCenterActivity;

import com.iliexiang.dianjing.utils.StringUtil;

import com.iliexiang.dianjing.utils.ToastUtils;

import com.netease.nim.demo.session.SessionHelper;

import com.netease.nim.demo.session.extension.MyOrderAttachment;

import com.netease.nim.uikit.business.session.viewholder.MsgViewHolderBase;

import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseMultiItemFetchLoadAdapter;

/**

* @describe:

* @author: Gao Chunfa

* @time: 2018/3/30-下午5:32

* @Company: 猎象网络科技

* @other:

*/

public class MsgViewHolderMyOrder extends MsgViewHolderBase {

private MyOrderAttachment attachment;

private TextView tv_order_title;

private TextView tv_order_content;

private LinearLayout ll_msg_order;

public MsgViewHolderMyOrder(BaseMultiItemFetchLoadAdapter adapter) {

super(adapter);

}

@Override

protected int getContentResId() {

//自己定义的布局

return R.layout.im_msg_order;

}

@Override

protected void inflateContentView() {

ll_msg_order = findViewById(R.id.ll_msg_order);

tv_order_title = findViewById(R.id.tv_order_title);

tv_order_content = findViewById(R.id.tv_order_content);

}

@Override

protected void bindContentView() {

attachment = (MyOrderAttachment) message.getAttachment();

tv_order_title.setText(attachment.getTitle());

if (StringUtil.isNull(attachment.getContent())) {

tv_order_content.setVisibility(View.GONE);

} else {

tv_order_content.setVisibility(View.VISIBLE);

tv_order_content.setText(attachment.getContent());

}

ll_msg_order.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

//点击事件

}

});

}

//若是要自己修改气泡背景

// 当是发送出去的消息时,内容区域背景的drawable id

// @Override

protected int rightBackground() {

return R.drawable.shape_border_gray3_r5;

}

@Override

protected int leftBackground() {

return R.drawable.shape_border_gray3_r5;

}

}

5.在SessionHelper,注册

a7014ca6b42025bb27c5b00bdc9b068e.png

大功告成

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值