融云之修改在群的备注和修改群名

目的:修改自己在本群的昵称,别人收到消息时显示昵称,而不是真实昵称

注意:修改在群中的昵称需要注意两个点:第一个自身群昵称的改变,第二个要通知别的群里,修改自己的昵称。

思路:

  1. 当修改自己在群的昵称的时候,进行刷新自身的群昵称,该方法为如以下代码所示(文档传送门)
 /**
     * 更新本地昵称
     */
    private void refreshGroupLocalNickName(String name) {
        GroupUserInfo info = new GroupUserInfo(fromConversationId, SharedPreferencesUtil.getString(MyApplication.getInstance().getApplicationContext(),"uid"), name);
        RongIM.getInstance().refreshGroupUserInfoCache(info);
    }
  1. 设置发送消息监听器,判断群昵称是否与原昵称是否相同,如果相同就不添加extra字段,如果不同就应该添加extra字段
    private void setSendMessageListener() {
        RongIM.getInstance().setSendMessageListener(new RongIM.OnSendMessageListener() {
            @Override
            public Message onSend(Message message) {
                if (null != message.getContent() && message.getContent() instanceof TextMessage) {
                    TextMessage txtMsg = (TextMessage) message.getContent();
                    if (null != txtMsg) {
                        if (mConversationType.equals(Conversation.ConversationType.GROUP)) {
                            //获取群昵称查看群昵称是否与原昵称相同,相同就不增加extra字段
//                            requestGroupNickName(mTargetId);
                            GroupUserInfo groupUserInfo = RongUserInfoManager.getInstance().getGroupUserInfo(mTargetId, SharedPreferencesUtil.getString(MyApplication.getInstance().getApplicationContext(),"uid"));
                            //必须去判断是否为空,否则会报空指针
                            if (null != groupUserInfo) {
                                if (null != groupUserInfo.getNickname()) {
                                    if (!groupUserInfo.getNickname().equals(MyApplication.getInstance().getUser().getNickname())) {
                                        txtMsg.setExtra(groupUserInfo.getNickname() + GroupChatInfoActivity.GROUP_NICKNAME_EXTRA + MyApplication.getInstance().getUser().getNickname());
                                    }
                                }
                            }
                        } else if (mConversationType.equals(Conversation.ConversationType.PRIVATE)) {
                            //在私聊的过程中会有阅后即焚的条目
                            if (is_burn) {
                                txtMsg.setExtra(DELETE_TAG);
                            }
                        }
                    }
                }
                return message;
            }

            @Override
            public boolean onSent(Message message, RongIM.SentMessageErrorCode sentMessageErrorCode) {
                if (message.getSentStatus() == Message.SentStatus.FAILED) {
                    if (sentMessageErrorCode == RongIM.SentMessageErrorCode.NOT_IN_CHATROOM) {
                        //不在聊天室
                    } else if (sentMessageErrorCode == RongIM.SentMessageErrorCode.NOT_IN_DISCUSSION) {
                        //不在讨论组
                    } else if (sentMessageErrorCode == RongIM.SentMessageErrorCode.NOT_IN_GROUP) {
                        //不在群组
                    } else if (sentMessageErrorCode == RongIM.SentMessageErrorCode.REJECTED_BY_BLACKLIST) {
                        //你在他的黑名单中
                    }
                }
                MessageContent messageContent = message.getContent();
                if (messageContent instanceof TextMessage) {//文本消息
                    TextMessage textMessage = (TextMessage) messageContent;
                    Log.d(TAG, "onSent-TextMessage:" + textMessage.getContent());
                } else if (messageContent instanceof ImageMessage) {//图片消息
                    ImageMessage imageMessage = (ImageMessage) messageContent;
                    Log.d(TAG, "onSent-ImageMessage:" + imageMessage.getRemoteUri());
                } else if (messageContent instanceof VoiceMessage) {//语音消息
                    VoiceMessage voiceMessage = (VoiceMessage) messageContent;
                    Log.d(TAG, "onSent-voiceMessage:" + voiceMessage.getUri().toString());
                } else if (messageContent instanceof RichContentMessage) {//图文消息
                    RichContentMessage richContentMessage = (RichContentMessage) messageContent;
                    Log.d(TAG, "onSent-RichContentMessage:" + richContentMessage.getContent());
                } else {
                    Log.d(TAG, "onSent-其他消息,自己来判断处理");
                }

                /**
                 * 只支持文本阅后即焚
                 */
                if (null != message && message.getContent() instanceof TextMessage) {
                    TextMessage txtMsg = (TextMessage) message.getContent();
                    if (null != txtMsg.getExtra() && txtMsg.getExtra().toString().equals(DELETE_TAG)) {
                        sendMessageIds.add(message.getMessageId()); //获取发送的id ,进行焚烧状态
                        setSendReadReceiptRequest(message);
                    }
                }

                return false;
            }
        });
    }
  1. 设置接收监听器,在接收监听器中查看是否存在该extra字段,如果存在就进行相应的操作(这里需要注意的是如果用extra添加昵称信息,只有修改昵称的那个用户给你发消息,自己的昵称才会改变)
 if (null != message.getContent() && message.getContent() instanceof TextMessage) {
                    TextMessage txtMsg = (TextMessage) message.getContent();
                    //                   用于修改相应的群组昵称
                    if (null != txtMsg.getExtra() && txtMsg.getExtra().indexOf(GroupChatInfoActivity.GROUP_NICKNAME_EXTRA) != -1) {
                        String[] str = txtMsg.getExtra().split(GroupChatInfoActivity.GROUP_NICKNAME_EXTRA);
                        //应该怎么去处理呢
                        if (message.getConversationType().equals(Conversation.ConversationType.GROUP)) {
                            GroupUserInfo groupUserInfo = RongUserInfoManager.getInstance().getGroupUserInfo(message.getTargetId(), message.getSenderUserId());
                            if (!str[1].equals(str[0])) {
                                GroupUserInfo info = new GroupUserInfo(message.getTargetId(), message.getSenderUserId(), str[0]);
                                RongIM.getInstance().refreshGroupUserInfoCache(info);
                            }


                        }
                    }
                }

需要注意:当时修改群昵称的过程中与设置阅后即焚的extra会出现冲突,即如果即改变了群昵称,又需要阅后即焚,所以最后群昵称只是在群中,阅后即焚针对的私聊

另外一种思路:利用provider方法

  1. 修改相应的昵称,通过刷新 RonIm.getInstance.refreshGroupUserInfoCache(),刷新本地信息
    2.在Application阶段通过相应的GroupUserInfoProvider()获取相应的信息,通过后台server端获取相应的修改的群昵称。

你可能感兴趣的:(融云之修改在群的备注和修改群名)