Vol. 6

从2000年至今,聊天室一直活跃在人们的各种生活场景中,目前广泛运用于超级小班课、互动大班课、连麦开黑、主播 PK 等场景,还具备文本、表情、点赞、撒花等互动方式,架起沟通桥梁的同时,玩法也更加多变。

上一期云信小课堂中,我们和大家分享了《从0搭建聊天室,只需四步( Web 端)》,今天我们将和大家分享如何在安卓端快速集成聊天室,并实现进出聊天室、简单的消息收发、权限管理等功能。同时,我们也提供了一个完善的 UI 组件,会为大家讲解如何利用 UI 组件快速实现应用级别聊天室功能。

视频讲解

9分钟视频,手把手教你接入

集成聊天室-基础篇

一、集成 SDK

Step 1 Gradle 集成

首先,在整个工程的 Build.gradle 文件中,配置 repositories,使用 jcenter 或者 maven ,二选一即可,如下:

allprojects {repositories {jcenter() // 或者 mavenCentral()}
}

然后,在主工程的 Build.gradle 文件中,添加 NDK 支持库:

android {defaultConfig {ndk {//设置支持的SO库架构,根据需要选择对应的架构abiFilters "armeabi-v7a", "x86","arm64-v8a","x86_64"}}
}

再是根据自己项目的需求,添加不同的依赖。

注意:云信的组件版本号必须一致。可在 SDK 下载页面查看当前最新版本。

SDK下载链接:

https://yunxin.163.com/im-sdk-demo

这里以 8.6.0 版本为例:

dependencies {compile fileTree(dir: 'libs', include: '*.jar')// 添加依赖。注意,版本号必须一致。// 基础功能 (必需)implementation 'com.netease.nimlib:basesdk:8.6.0'// 聊天室需要implementation 'com.netease.nimlib:chatroom:8.6.0'
}

Step 2 权限与组件

在 AndroidManifest.xml 中加入以下配置(请将 com.netease.nim.demo 替换为自己的包名):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.netease.nim.demo"><!-- 权限声明 --><!-- 访问网络状态--><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/><!-- 外置存储存取权限 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!-- 多媒体相关 --><uses-permission android:name="android.permission.CAMERA"/><uses-permission android:name="android.permission.RECORD_AUDIO"/><!-- V4.4.0及之后的版本不需要 --><uses-permission android:name="android.permission.READ_PHONE_STATE"/><!-- 控制呼吸灯,振动器等,用于新消息提醒 --><uses-permission android:name="android.permission.FLASHLIGHT" /><uses-permission android:name="android.permission.VIBRATE" /><!-- 8.0+系统需要--><uses-permission android:name="android.permission.FOREGROUND_SERVICE" /><!-- 下面的 uses-permission 一起加入到你的 AndroidManifest 文件中。--><permissionandroid:name="com.netease.nim.demo.permission.RECEIVE_MSG"android:protectionLevel="signature"/><uses-permission android:name="com.netease.nim.demo.permission.RECEIVE_MSG"/><application...><!-- APP key, 可以在这里设置,也可以在 SDKOptions 中提供。如果 SDKOptions 中提供了,则取 SDKOptions 中的值。--><meta-dataandroid:name="com.netease.nim.appKey"android:value="key_of_your_app" /><!-- 云信后台服务,请使用独立进程。--><serviceandroid:name="com.netease.nimlib.service.NimService"android:process=":core"/><!-- 云信后台辅助服务 --><serviceandroid:name="com.netease.nimlib.service.NimService$Aux"android:process=":core"/><!-- 云信后台辅助服务 --><serviceandroid:name="com.netease.nimlib.job.NIMJobService"android:exported="true"android:permission="android.permission.BIND_JOB_SERVICE"android:process=":core"/><!-- 云信监视系统启动和网络变化的广播接收器,保持和 NimService 同一进程 --><receiver android:name="com.netease.nimlib.service.NimReceiver"android:process=":core"android:exported="false"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED"/><action android:name="android.net.conn.CONNECTIVITY_CHANGE"/></intent-filter></receiver><!-- 云信进程间通信 Receiver --><receiver android:name="com.netease.nimlib.service.ResponseReceiver"/><!-- 云信进程间通信service --><service android:name="com.netease.nimlib.service.ResponseService"/><!-- 云信进程间通信provider --><providerandroid:name="com.netease.nimlib.ipc.NIMContentProvider"android:authorities="com.netease.nim.demo.ipc.provider"android:exported="false"android:process=":core" /><!-- 云信内部使用的进程间通信provider --><!-- SDK启动时会强制检测该组件的声明是否配置正确,如果检测到该声明不正确,SDK会主动抛出异常引发崩溃 --><providerandroid:name="com.netease.nimlib.ipc.cp.provider.PreferenceContentProvider"android:authorities="com.netease.nim.demo.ipc.provider.preference"android:exported="false" /></application>
</manifest>

Step 3 混淆配置

如果你的 APK 最终会经过代码混淆,请在 Proguard 配置文件中加入以下代码:

-dontwarn com.netease.**
-keep class com.netease.** {*;}
#如果你使用全文检索插件,需要加入
-dontwarn org.apache.lucene.**
-keep class org.apache.lucene.** {*;}
#如果你开启数据库功能,需要加入
-keep class net.sqlcipher.** {*;}

二、功能使用

Step 1 初始化

需要在 Application 中,初始化云信 SDK:

public class NimApplication extends Application {public void onCreate() {SDKOptions sdkOptions = new SDKOptions();// 初始化云信SDKNIMClient.init(this, null, sdkOptions );
}

Step 2 进入聊天室

进入聊天室可以有两种方式:以独立模式进入聊天室和非独立模式进入聊天室。

  • 独立模式是指在 IM 处于未登录的情况下,进入聊天室的方式,针对只需要聊天室功能的业务场景。

  • 非独立模式是指先完成 IM 登录,再进入聊天室的方式,针对需要 IM 和聊天室功能的业务场景。

这里只演示独立模式,选择以独立模式进入聊天室时,必须提前设置聊天室独立模式。

独立模式的非匿名登录和非独立模式都需要 accid 和 token,如何获取详见链接:https://doc.yunxin.163.com/docs/TM5MzM5Njk/Dc2NTM1NzI?platformId=60353

// roomId 为聊天室id
EnterChatRoomData data = new EnterChatRoomData(roomId);
//设置appkey
data.setAppKey(appKey);
// 独立模式的非匿名登录,帐号和密码必填,以account和token为例
data.setIndependentMode(new ChatRoomIndependentCallback() {@Overridepublic List<String> getChatRoomLinkAddresses(String roomId, String account) {// 向应用服务器请求聊天室地址return "服务端返回的聊天室地址列表";}
}, account, token);NIMClient.getService(ChatRoomService.class).enterChatRoomEx(data, 1).setCallback(new RequestCallback<EnterChatRoomResultData>() {@Overridepublic void onSuccess(EnterChatRoomResultData result) {Toast.makeText(MainActivity.this,"onSuccess",Toast.LENGTH_SHORT).show();}@Overridepublic void onFailed(int code) {Toast.makeText(MainActivity.this,"onFailed",Toast.LENGTH_SHORT).show();}@Overridepublic void onException(Throwable exception) {Toast.makeText(MainActivity.this,"onException",Toast.LENGTH_SHORT).show();}
});

Step 3 收发消息

先通过 ChatRoomMessageBuilder 提供的接口创建消息对象,然后调用 ChatRoomService 的 sendMessage 接口发送出去即可。下面以文本消息发送为例,其它类型的消息发送方式与 IM 单聊群聊类似:

// 示例用roomId
String roomId = "roomId";// 文本消息内容
String text = "这是聊天室文本消息";// 创建聊天室文本消息
ChatRoomMessage message = ChatRoomMessageBuilder.createChatRoomTextMessage(roomId, text);// 将文本消息发送出去
NIMClient.getService(ChatRoomService.class).sendMessage(message, false).setCallback(new RequestCallback<Void>() {@Overridepublic void onSuccess(Void param) {// 成功}@Overridepublic void onFailed(int code) {// 失败}@Overridepublic void onException(Throwable exception) {// 错误}});

通过添加消息接收观察者,在有新消息到达时,就可以接收到通知:

Observer<List<ChatRoomMessage>> incomingChatRoomMsg = new Observer<List<ChatRoomMessage>>() {@Overridepublic void onEvent(List<ChatRoomMessage> messages) {// 处理新收到的消息}};
NIMClient.getService(ChatRoomServiceObserver.class).observeReceiveMessage(incomingChatRoomMsg, register);

Step 4 离开聊天室

离开聊天室,会断开聊天室对应的链接,并不再收到该聊天室的任何消息。如果用户要离开聊天室,可以手动调用离开聊天室接口,该接口没有回调:

NIMClient.getService(ChatRoomService.class).exitChatRoom(roomId);

集成聊天室- UI 篇

一、集成 UI 组件

Step 1 下载组件

链接:

https://github.com/netease-kit/NIM_Android_Demo/tree/dev_g2

UI 组件的 Demo 已经上传到 Github 仓库中,可以直接下载,下载的 Demo 包含源码形式的 UI 组件库,可以直接导入到一个 Android Studio 项目中。

Step 2 导入到项目中

1、在 Demo 源码中找到 Uikit 文件夹,并复制到自己项目中。

  1. 在整个工程的 Build.gradle 文件中,配置 Repositories,如下:

allprojects {repositories {maven { url "https://jitpack.io" }}
}

2、在整个工程的 Build.gradle 文件中,把下面配置添加到末尾;并调整 Uikit 的 Build.gradle 中的配置项和主工程保持一致:

ext {nimVersion = '8.4.6'imSdk = "com.netease.nimlib:basesdk:$nimVersion"avsignallingSdk = "com.netease.nimlib:avsignalling:$nimVersion"imPushSdk = "com.netease.nimlib:push:$nimVersion"luceneSdk = "com.netease.nimlib:lucene:$nimVersion"chatroomSdk = "com.netease.nimlib:chatroom:$nimVersion"rtsSdk = "com.netease.nimlib:rts:$nimVersion"superteamSdk = "com.netease.nimlib:superteam:$nimVersion"ysfSdk = "com.netease.nimlib:ysf:$nimVersion"ysfkitSdk = "com.netease.nimlib:ysfkit:$nimVersion"
}

3、在项目根目录下,找到 Settings.gradle 文件,并添加以下内容导入Uikit模块:

include ':uikit'

4、在对应 Application/Library 模块的 Build.gradle 文件下添加对 Uikit 模块的依赖:

implementation project(':uikit')

二、功能使用

Step 1 初始化

在 Application 中,在初始化云信 SDK 之后,初始化 Uikit ,请务必放在主进程中初始化,否则可能出现一些异常:

public class NimApplication extends Application {public void onCreate() {SDKOptions sdkOptions = new SDKOptions();// 初始化云信SDKNIMClient.init(this, null, sdkOptions );if (NIMUtil.isMainProcess(this)) {// 初始化 uikitNimUIKit.init(this);}
}

Step 2 添加布局

Uikit 中 ChatRoomMessageFragment 以 Fragment 方式实现了聊天室的功能,开发者只需要将该 Fragment 集成到自身的 Fragment 或者 Activity 中即可。

Step 3 进入聊天室

在聊天室 SDK 登录成功的回调中,调用下面代码:

//uikit 进入聊天室
NimUIKit.enterChatRoomSuccess(result, true);
if (messageFragment != null) {//初始化fragmentmessageFragment.init(roomId);
}

Step 4 退出聊天室

退出聊天室的代码比较简单,和 SDK 退出聊天室放在一起即可:

//sdk 退出聊天室
NIMClient.getService(ChatRoomService.class).exitChatRoom(roomId);
//uikit 退出聊天室
NimUIKit.exitedChatRoom(roomId);

总结

以上就是网易云信聊天室解决方案 Demo 安卓端接入流程的详细解说,按照如上步骤就可以轻松完成应用级聊天室的搭建。

任何系统的搭建都不是一蹴而就的,自研搭建聊天室意味着较高的人力成本、时间成本和资金成本。而融合通信云服务专家网易云信所提供的聊天室解决方案1 天即可完成集成工作,可实现快速上线,轻松应对亿级日活的高并发场景。网易云信也会继续打磨底层技术能力、为开发者提供更多简单集成,快速接入的音视频和即时通讯解决方案。

如果感兴趣或者有需求的开发者可以阅读《技术干货|网易云信大规模聊天室系统架构解析》,或点击阅读原文,免费试用。

云信小课堂推荐阅读

第一期:如何实现音视频通话

第二期:5步构建本土「Clubhouse」

第三期: 5分钟实现安卓端PK连麦场景

第四期:5分钟快速实现iOS端PK连麦场景

第五期:从0搭建在线聊天室,只需4步!

关于网易云信

网易云信是集网易21年IM以及音视频技术打造的融合通信云服务专家,稳定易用的通信与视频 PaaS 平台。

提供融合通信与视频的核心能力与组件,包含 IM 即时通讯、5G 消息平台、一键登录、信令、短信与号码隐私保护等通信服务,音视频通话、直播、点播、互动直播与互动白板等音视频服务,视频会议等组件服务

网易云信服务于网易云音乐、好未来、新东方、科大讯飞、南京银行等各行各业客户,已有100w+ 企业开发者接入云信服务。

云信小课堂|搭建应用级别在线聊天室,7步就够了!相关推荐

  1. 云信小课堂丨简单四步,快速搭建协同办公系统!

    Vol. 8 企业作为社会分工参与的主体,在自身发展以及内部协作中,势必会涉及到各类自有技术和商业信息的互动与交流,而这类信息由于有着高度的保密性和隐私性,所以如微信.QQ 等通用的即时通讯工具很难满 ...

  2. 云信小课堂 | 聊天室内容审核很头疼? 3 步解决!

    Vol. 7 随着 5G . AI 等颠覆性的技术创新,各类产品的互动性和沉浸感都在快速提升.强互动作为产品快速发展的生命力,也带来了一定程度的安全和监管风险,对通信.安全等技术和服务提出了更高要求. ...

  3. 云信小课堂|如何实现音视频安全检测?

    Vol. 9 泛娱乐类音视频聊天场景中,充斥着各种不可控的风险因素,例如色情.暴恐和涉政信息等.随着国家监管的日趋严格,各平台需要对平台的音视频内容进行管控,自行处理音视频内容审核需要投入大量人力进行 ...

  4. 云信小课堂|聊天室内容审核很头疼?3步解决!

    简介 随着 5G . AI 等颠覆性的技术创新,各类产品的互动性和沉浸感都在快速提升.强互动作为产品快速发展的生命力,也带来了一定程度的安全和监管风险,对通信.安全等技术和服务提出了更高要求. 以娱乐 ...

  5. 从0搭建在线聊天室,只需4步!

    Vol. 5 聊天室不同于单聊和群聊,是一类集成了多种 IM 功能一体的大规模实时消息分发系统.在跨入新世纪的2000年,聊天室作为新型的即时通讯场景迅速在年轻人群体中火热起来,"网易聊天室 ...

  6. 从头搭建一个基于 Python 的在线聊天室

    本场 Chat,是基于 Python + Redis + Flask 来搭建一个简单易用的在线聊天室.完全从零开始,一步一步完成整个项目. 主要分享内容: Flask 项目结构 Python Redi ...

  7. rudesocket如何使用_[WebSocket入门]手把手搭建WebSocket多人在线聊天室(SpringBoot+WebS...

    前言 本文中搭建了一个简易的多人聊天室,使用了WebSocket的基础特性. 源代码来自老外的一篇好文: 本文内容摘要: 初步理解WebSocket的前后端交互逻辑 手把手使用 SpringBoot ...

  8. 云信小课堂|5分钟快速实现iOS端PK连麦场景

    Vol. 4 2021年开年,音频社交风靡互联网,语音社交再成风口,直播连麦开启社交新赛道.在实时通信技术不断革新的现状下,直播平台需要不断探索新的方式以满足用户日益增长的需求,直播连麦就是在此背景下 ...

  9. 云信小课堂|5分钟快速实现安卓端PK连麦场景

    Vol. 3 2021年开年,音频社交风靡互联网,语音社交再成风口,直播连麦开启社交新赛道.在实时通信技术不断革新的现状下,直播平台需要不断探索新的方式以满足用户日益增长的需求,直播连麦就是在此背景下 ...

最新文章

  1. hudson pending - Waiting for next available executor
  2. [唐诗]入朝洛堤步月-上官仪
  3. 非零返回怎么解决_VLOOKUP如何返回多个值?
  4. 小程序 | 微信小程序二级选择器
  5. 二叉搜索树的中序遍历为 递增序列_Go 刷 Leetcode 系列:恢复二叉搜索树
  6. Java性能调优小技巧
  7. java记秒,Java程序获取自Java时代开始以来的秒数
  8. Group By和Order By的总结
  9. EasyRTMP实现对接海康、大华等IPCamera SDK进行RTMP推送直播功能
  10. 使用网关实现把modbus数据存入sql数据库的方案
  11. 什么是物联网技术?物联网主要技术有哪些?
  12. c语言家谱管理系统不是二叉树,二叉树实现的简单家谱管理系统
  13. 大学计算机excel高级筛选,excel高级筛选的使用方法(入门 进阶 高级)
  14. WIN10家庭版局域网连接设置(含设置账号密码)
  15. android 连接web加密的wifi,Android 与WEP加密连接
  16. CTFHUB POST
  17. react 实现渐变色背景样式
  18. 解决乱码的方法(转)
  19. caffe layer层详解
  20. 【LAS 】 SRS 开启ATC功能 时间戳测试

热门文章

  1. (解决)mysql1366中文显示错误的终极解决方案
  2. windows和Linux内存的对齐方式
  3. mysql集群不同步_mysql数据库集群出现1236错误导致主库与从库无法同步的
  4. supervisor python_使用supervisor运行python脚本
  5. Vscode解决Setting.json报警告:Problems loading reference ... Unable to load schema from ...
  6. springmvc +bootstrap创建简单web项目
  7. VS2015配置opencv教程(图文详解)
  8. 北斗导航 | C语言实现PPP(精密单点定位)
  9. 光流 | 金字塔迭代(Iterative Pyramidal)LK光流算法(Matlab源代码)
  10. C语言 | 编程实现2