网易im聊天室的集成

主要的 :

上线是enterRoom();

进入聊天室我们得携带一些参数,这样以后每发一条消息都会将这些参数携带;

Map<String, Object> ext = new HashMap<>();  格式是map
ext.put("live_chatroom_level", "");  
ext.put("live_chatroom_identity", usertype);
ext.put("live_user_id", userid);
ext.put("avatar", upUrl);
enterChatRoomData = new EnterChatRoomData(chatroomid);  
enterChatRoomData.setAvatar(upUrl);  用户图像
enterChatRoomData.setNick(username); 用户昵称
enterChatRoomData.setExtension(ext);  这是普通消息的扩展字段 
enterChatRoomData.setNotifyExtension(ext);  这是系统消息(网易发的像进入直播间,离开直播间,禁言之类的) 的扩展字段

NIMClient.getService(ChatRoomService.class).enterChatRoom(enterChatRoomData).setCallback(new RequestCallback() {
            @Override
            public void onSuccess(Object o) {
                chatMessageList.add(new LiveChatMessage(getResources().getString(R.string.live_enter_msg), "", false));
                chatAdapter.notifyDataSetChanged();
            }

            @Override
            public void onFailed(int i) {   这里可以做一些失败重连
//                int eCode = NIMClient.getService(ChatRoomService.class).getEnterErrorCode(chatroomid);
                chatMessageList.add(new LiveChatMessage("进入聊天室失败" + i, "", false));
                chatAdapter.notifyDataSetChanged();
                if (i == 404) {
                    chatMessageList.add(new LiveChatMessage("直播间已关闭", "", false));
                    chatAdapter.notifyDataSetChanged();
                } else  if (i==13002){
                    chatMessageList.add(new LiveChatMessage("直播间已关闭", "", false));
                    chatAdapter.notifyDataSetChanged();
                }else if (i == 415) {
                    chatMessageList.add(new LiveChatMessage("网络信号弱", "", false));
                    chatMessageList.add(new LiveChatMessage("自动重新登录", "", false));
                    chatAdapter.notifyDataSetChanged();
                    mxEnterRoomMore(false);
                } else {
                    chatMessageList.add(new LiveChatMessage("登录失败", "", false));
                    chatMessageList.add(new LiveChatMessage("自动重新登录", "", false));
                    chatAdapter.notifyDataSetChanged();
                    mxEnterRoomMore(true);
                }
            }

            @Override
            public void onException(Throwable throwable) {
//                int eCode = NIMClient.getService(ChatRoomService.class).getEnterErrorCode(chatroomid);
                chatMessageList.add(new LiveChatMessage("登录失败", "", false));
                chatMessageList.add(new LiveChatMessage("自动重新登录", "", false));
                chatAdapter.notifyDataSetChanged();
                mxEnterRoomMore(true);
            }
        });
    }

private void initChat() {
    NIMClient.toggleNotification(false);
}                  初始化消息

private void setChatRoomObserver() {
    // 处理新收到的消息
    incomingChatRoomMsg = new Observer<List<ChatRoomMessage>>() {
        @Override
        public void onEvent(List<ChatRoomMessage> messages) {
            displayReceivedMessages(messages);  主要在这个方法中处理
        }
    };

    NIMClient.getService(ChatRoomServiceObserver.class)
            .observeReceiveMessage(incomingChatRoomMsg, true);

}

 private void displayReceivedMessages(List<ChatRoomMessage> messages) {
        if (closeChatroom) {
            for (ChatRoomMessage message : messages) {
                String tmpText = "";
                String nickName = message.getChatRoomMessageExtension().getSenderNick();   这里就可以得到进入聊天室携带的昵称 也就是消息的昵称
                String avatar = message.getChatRoomMessageExtension().getSenderAvatar();   图像
//                String targetAccid=message.get
                Map<String, Object> map =   message.getChatRoomMessageExtension().getSenderExtension();    扩展字段
                if (message != null && message.getAttachment() instanceof   ChatRoomNotificationAttachment) {//通知消息
                    getNotificationMsg(message, tmpText);
                } else if (message != null && message.getAttachment() instanceof CustomTextAttachment) {//文本消息
                    getTextMsg(message, nickName, avatar);
                } else if (message != null && message.getAttachment() instanceof CustomGiftAttachment) {//礼物消息包括礼物,红包,优惠券
                    getGiftMsg(message, nickName, avatar, map);
                } else if (message != null && message.getAttachment() instanceof CustomLikeAttachment) {
                } else if (message != null && message.getAttachment() instanceof CustomSystemAttachment) {
                } else {
                }    根据消息类型做处理
            }
        }
    }

//监听是否被提出聊天室
private void setKickOutClassRoom() {
    Observer<ChatRoomKickOutEvent> kickOutObserver = new Observer<ChatRoomKickOutEvent>() {
        @Override
        public void onEvent(ChatRoomKickOutEvent chatRoomKickOutEvent) {
            // 提示被踢出的原因(聊天室已解散、被管理员踢出、被其他端踢出等)
            // 清空缓存数据
        }
    };
    NIMClient.getService(ChatRoomServiceObserver.class)
            .observeKickOutEvent(kickOutObserver, true);

}   如果被踢出聊天室或者直播结束聊天室解散可以在这里监听并做处理

private void leaveChatRoom() {
    NIMClient.getService(ChatRoomServiceObserver.class)
            .observeReceiveMessage(incomingChatRoomMsg, false);
    NIMClient.getService(ChatRoomService.class).exitChatRoom(chatroomid);
}   离开聊天室  这是在ondestroy 里面做的 没有回调

发消息可以在直播聊天室中找到

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值