最近做了一个项目,需要实现转账红包功能。我这里接入的是环信,我自己做的过程中也比较坎坷,所以想把实现的方法整理了一下分享给大家(如果大家有更好的实现方法,欢迎评论区留言,废话不多说了开始上货,东西有点多所以分开写了)。
这里我先说下我的思路,我主要是通过环信的自定义类型消息还有仿照其他消息类型实现的,其中有一些需要与后台配合完成,我这里只说下Android这边具体干了什么。
1.首先我们需要将环信集成进入我们自己的项目,我也集成了环信的easeui,也实现了基础的聊天功能(这里我就不说如何集成了,因为比较简单基础,如果大家有需要我可以写一篇关于如何集成环信与easeui的文章,评论区留言即可)。
2.我们需要进行转账肯定需要在聊天页面的底部操作栏EaseChatInputMenu 中新建一个item,然后我们点击这个item进行发送红包或者转账操作。
我这里是在ChatFragment 的registerExtendMenuItem()中 发送视频的item直接更改的,大家可以自己加一个或者更改别的item
//这里判断了一下消息是群聊还是单聊,我们的功能是群聊不支持转账,前边是item的名字后面是item的图标
if (chatType == Constant.CHATTYPE_SINGLE){
inputMenu.registerExtendMenuItem("转账", R.drawable.em_chat_video_selector, ITEM_VIDEO, extendMenuItemClickListener);
}
2.更改完之后我们需要在此item的点击事件中操作 onExtendMenuItemClick(int itemId, View view) 里
@Override
public boolean onExtendMenuItemClick(int itemId, View view) {
switch (itemId) {
case ITEM_VIDEO:
//我这里点击后直接进入转账页面就是输入金额页面,ZhuanzActivity这个就是我的转账页面,我这里需要传入接收红包的username,说白了就是你要发给谁,你就传谁的,后边的777(幸运三角)是我发送完事之后的回调需要用到的。样式啥的看项目需求,下面是我们项目的样式。
startActivityForResult(new Intent(getActivity(),ZhuanzActivity.class).putExtra("toChatUsername", toChatUsername), 777);
}
return false;
}
3.输入金额之后点击转账就,就会调起支付,这个支付需要大家自己按照自己项目的需求来做,我这里就只上一个支付成功后操作的代码,支付成功后我们需要构造一个消息体,也就是我开始说的自定义红包消息,构造好
之后我们需要以发送消息的方式发送出去,然后关闭转账页面,然后走页面回传的回调,也就是777(幸运三角),我们只需要在回调中刷新消息列表即可。
private EMMessage customMessage;
//开始构造自定义红包消息体
customMessage = EMMessage.createSendMessage(EMMessage.Type.CUSTOM);
EMCustomMessageBody customBody = new EMCustomMessageBody("红包转账");
Map<String,String> params = new HashMap<>();
//这是消息体内层的一些参数
params.put("redPacketNum",money);//金额
params.put("redPacketRemark",bz);//备注
params.put("redPacketHxNo",redPacketHxNo);//红包编码,这个需要大家自己生成,唯一即可。
customBody.setParams(params);
customMessage.addBody(customBody);
customMessage.setTo(toChatUsername);//这个就是我们从聊天页面传过来的数据
//消息体的外层的一些参数
customMessage.setAttribute("userNickName", userNickName);//用户名称
customMessage.setAttribute("userAvatar", userHeadPic);//用户头像
customMessage.setAttribute("redPacket",true);//这个是我们自定义需要的东西
//这些参数小伙伴们完全可以自己定义,如果只需要与ios端参数名字一致即可。(双端交互这块一定要做好)
//还有就是如果有群聊发红包的功能一定要设置发送消息的类型是群还是单聊,如果不设置默认单聊,群聊会显示不出来(下面这块,我用不着,单给大家写的)。
// if (chatType == EaseConstant.CHATTYPE_GROUP){
// customMessage.setChatType(EMMessage.ChatType.GroupChat);
// }else if (chatType == EaseConstant.CHATTYPE_CHATROOM){
// customMessage.setChatType(EMMessage.ChatType.ChatRoom);
// }
//发送消息体
EMClient.getInstance().chatManager().sendMessage(customMessage);
//回传
this.setResult(RESULT_OK, intent);
//关闭转账页面
finish();
overridePendingTransition(com.hyphenate.easeui.R.anim.slide_in_from_left, com.hyphenate.easeui.R.anim.slide_out_to_right);
4.我们需要在EaseChatFragment 的 onActivityResult 中接收回传值
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == 777){
messageList.refresh();//刷新消息数据
}
}
}
现在我们的准备工作做的差不多了,下一篇我们接着说一下红包消息体的内在,有点累,明天更。
谢谢大家的观看有哪里不懂的或者有什么疑问的,请在品论区留言,我会给大家一一解答。