那些年我们一起踩过环信的坑

环信IM聊天<基于版本V3.22-V3.3>

1.通过扩展消息传递头像

EMClient.getInstance().chatManager().sendMessage(message);
//接收消息的时候获取到扩展属性
//获取自定义的属性,第2个参数为没有此定义的属性时返回的默认值
message.getStringAttribute("attribute1",null);
message.getBooleanAttribute("attribute2", false);

上面API就可以将扩展消息传递出去,收到消息后直接message.getStringAttribute()可以很方便的获取到扩展消息了

这里写图片描述

  最好不要在DemoHelp调用上图的方法,我之前使用这个方法出现的问题:多存了一遍内存,消息会重复,但是不是一定会产生,需要条件(你app被杀死后,然后运行app,把app切换到后台,然后再进去消息里面你就会发现有重复消息了,只需要将app杀死,后面再进去就没了)

2.通过透传消息进行回撤

1.<接收>找到DemoHelp的onCmdMessageReceived()这个回调,调用下面的方法就行了,

 if (action.equals("cmd_revoke")) {
        try {
                String msgid = message.getStringAttribute("msgid");
EMConversation conversation =EMClient.getInstance().chatManager().getConversation(message.getTo());
             //--删除消息来表示撤回--
               conversation.removeMessage(msgid);
                           refreshUI(); 
               } catch (HyphenateException e) {
                            e.printStackTrace();
               }
        }
*注意:EMClient.getInstance().chatManager().getConversation(message.getTo());这个方法message.getTo()是群Id 群组撤回  message.getFrom()单聊撤回

2.<发送>发送透传消息撤销ChatFragment类

    //撤回消息
    private void msgRevocation(String msgId) {
        EMMessage cmdMsg = EMMessage.createSendMessage(EMMessage.Type.CMD);
        // 如果是群聊,设置chattype,默认是单聊
        if (chatType == CHATTYPE_GROUP) {
            cmdMsg.setChatType(EMMessage.ChatType.GroupChat);
        }
        String action = "cmd_revoke";
        EMCmdMessageBody cmdBody = new EMCmdMessageBody(action);
        // 设置消息body
        cmdMsg.addBody(cmdBody);
        // 设置要发给谁,用户username或者群聊groupid
        cmdMsg.setTo(toChatUsername);
        // 通过扩展字段添加要撤回消息的id
        cmdMsg.setAttribute("msgid", msgId);
        cmdMsg.setMessageStatusCallback(new EMCallBack() {
            @Override
            public void onSuccess() {
                //撤销成功,删除本地改数据
                conversation.removeMessage(contextMenuMessage.getMsgId());
                messageList.refresh();
                ToastUtils.showLongToastSafe("撤销消息成功");
            }

            @Override
            public void onError(int i, String s) {
                ToastUtils.showLongToastSafe("撤回失败");
            }

            @Override
            public void onProgress(int i, String s) {
            }
        });
        EMClient.getInstance().chatManager().sendMessage(cmdMsg);

    }

3.Demo的视频录制在华为有的手机上会卡死

  原因是因为Canvas不有释放

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值