网易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() {@Overridepublic void onSuccess(Object o) {chatMessageList.add(new LiveChatMessage(getResources().getString(R.string.live_enter_msg), "", false));chatAdapter.notifyDataSetChanged();}@Overridepublic 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);}}@Overridepublic 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>>() {@Overridepublic 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.getMap<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>() {@Overridepublic 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 里面做的 没有回调
发消息可以在直播聊天室中找到
网易im聊天室的集成相关推荐
- 关于网易云信聊天室 FAQ
聊天室和其他模块最大的区别在于聊天室类人数多,单位时间消息量巨大,在这种场景下如果开发者还是按照处理群的逻辑来处理聊天室就会引起很多的问题,下面主要列举一下常见的问题. Q:登录云信聊天室是否要求先登 ...
- 网易云信联手配音秀,打造语音聊天室互动新体验
自互联网走进这个时代起,我们生活的方方面面都在不断发生改变,文化娱乐是其中之一.从网文.网游.网剧,到网综.短视频.在线演唱会,互联网不仅丰富了我们的娱乐方式,也改变了整个文娱产业格局.借着互联网的东 ...
- 网易云信直播聊天室:无上限人数系统不卡顿,是不是鱼与熊掌不能兼得?
1.直播聊天室的形式和应用场景 在一般人的理解中,直播聊天室应该就是直播画面旁边配一个聊天窗口,众多观看者在 里面发表自己的评论(如图1).Oh, NO!这样的场景是不是太Low啦!随着互联网技术和消 ...
- 技术干货 | 网易云信大规模聊天室系统架构解析
导读:聊天室是一类非常重要的 IM 系统,不同于单聊和群聊,聊天室是一种大规模的实时消息分发系统.本文我们来详细介绍一下网易云信大规模聊天室系统的具体架构以及实践应用案例. 文|曹佳俊 网易云信资深服 ...
- 云信小课堂|搭建应用级别在线聊天室,7步就够了!
Vol. 6 从2000年至今,聊天室一直活跃在人们的各种生活场景中,目前广泛运用于超级小班课.互动大班课.连麦开黑.主播 PK 等场景,还具备文本.表情.点赞.撒花等互动方式,架起沟通桥梁的同时,玩 ...
- 从0搭建在线聊天室,只需4步!
Vol. 5 聊天室不同于单聊和群聊,是一类集成了多种 IM 功能一体的大规模实时消息分发系统.在跨入新世纪的2000年,聊天室作为新型的即时通讯场景迅速在年轻人群体中火热起来,"网易聊天室 ...
- 抓住语音社交风口,1天快速搭建语音聊天室
语音聊天室孵化 一起KTV.众人大合唱.语音开黑.狼人杀.剧本杀.多人配音.观影.语音电台.相亲联谊社交等,一般都是在语音聊天室中进行,那么语音聊天室产品如此火热的原因有哪些呢? 一对一社交适用于朋友 ...
- 音视频---速搭建语音聊天室技术分析
语音聊天室孵化 一起KTV.众人大合唱.语音开黑.狼人杀.剧本杀.多人配音.观影.语音电台.相亲联谊社交等,一般都是在语音聊天室中进行,那么语音聊天室产品如此火热的原因有哪些呢? 一对一社交适用于朋友 ...
- IM即时通讯:如何跳出传统思维来设计聊天室架构?
因为视频直播业务的大规模扩张,聊天室这种功能在最近几年又火了起来.本篇文章将会重点挑选聊天室这个典型场景,和大家分享一下网易云信在实现这个功能时是如何做架构设计的. 相关推荐阅读 几十万人同时在线的直 ...
最新文章
- gulp die('click').live('click' composer
- 1亿元“真金白银”发展大数据产业
- From AlphaGo Zero to 2048论文分享
- 最早使用计算机领域,第2章 交换单元及交换网络(2.3.4).ppt
- java 方法 时间_Java 方法
- MySQL基础 — 常用命令
- 中国新能源汽车电机及控制器行业需求态势与十四五方向分析报告2021年版
- jenkins 版本升级
- Rational Rose 2007 使用方法
- android渠道版本号,2. 验证Android渠道版本渠道号 - 测试手册
- Surface Laptop2 键盘无响应,只有电源键有效(已解决)
- Netty源码解析(八)之Recycler
- LED数码管段码生成
- 最简单的个人辞职原因[范文7篇]
- 【高德地图API】从头德国高中生JS API(三)覆盖物——大喊|折线|多边形|信息表|聚合marker|点蚀图|照片覆盖...
- 多项式拟合 java_最小二乘法多项式拟合的Java实现
- I-deas TMG 基础培训教程 - 小例题 (7)
- 强化学习-蒙特卡罗法
- ASP.net的ItemDataBound事件与LinqToSql数据源关于e.Item.DataItem的类型
- 新浪微博价值大幅贬值 将受腾讯致命冲击