1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 云信小课堂|搭建应用级别聊天室 7步就够了!

云信小课堂|搭建应用级别聊天室 7步就够了!

时间:2022-06-08 17:53:50

相关推荐

云信小课堂|搭建应用级别聊天室 7步就够了!

Vol. 6

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

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

视频讲解

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

集成聊天室-基础篇

一、集成 SDK

Step1 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下载链接:

/im-sdk-demo

这里以 8.6.0 版本为例:

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

Step2 权限与组件

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

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="ease.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="ease.nim.demo.permission.RECEIVE_MSG"android:protectionLevel="signature"/><uses-permission android:name="ease.nim.demo.permission.RECEIVE_MSG"/><application...><!-- APP key, 可以在这里设置,也可以在 SDKOptions 中提供。如果 SDKOptions 中提供了,则取 SDKOptions 中的值。--><meta-dataandroid:name="ease.nim.appKey"android:value="key_of_your_app" /><!-- 云信后台服务,请使用独立进程。--><serviceandroid:name="ease.nimlib.service.NimService"android:process=":core"/><!-- 云信后台辅助服务 --><serviceandroid:name="ease.nimlib.service.NimService$Aux"android:process=":core"/><!-- 云信后台辅助服务 --><serviceandroid:name="ease.nimlib.job.NIMJobService"android:exported="true"android:permission="android.permission.BIND_JOB_SERVICE"android:process=":core"/><!-- 云信监视系统启动和网络变化的广播接收器,保持和 NimService 同一进程 --><receiver android:name="ease.nimlib.service.NimReceiver"android:process=":core"android:exported="false"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED"/><action android:name=".conn.CONNECTIVITY_CHANGE"/></intent-filter></receiver><!-- 云信进程间通信 Receiver --><receiver android:name="ease.nimlib.service.ResponseReceiver"/><!-- 云信进程间通信service --><service android:name="ease.nimlib.service.ResponseService"/><!-- 云信进程间通信provider --><providerandroid:name="ease.nimlib.ipc.NIMContentProvider"android:authorities="ease.nim.demo.ipc.provider"android:exported="false"android:process=":core" /><!-- 云信内部使用的进程间通信provider --><!-- SDK启动时会强制检测该组件的声明是否配置正确,如果检测到该声明不正确,SDK会主动抛出异常引发崩溃 --><providerandroid:name="ease.nimlib.ipc.cp.provider.PreferenceContentProvider"android:authorities="ease.nim.demo.ipc.provider.preference"android:exported="false" /></application></manifest>

Step 3混淆配置

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

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

二、功能使用

Step1 初始化

需要在 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./docs/TM5MzM5Njk/Dc2NTM1NzI?platformId=60353

// roomId 为聊天室idEnterChatRoomData data = new EnterChatRoomData(roomId);//设置appkeydata.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 单聊群聊类似:

// 示例用roomIdString 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下载组件

链接:

/netease-kit/NIM_Android_Demo/tree/dev_g2

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

Step 2导入到项目中

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

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

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

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

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

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

include':uikit'

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

implementationproject(':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步!

关于网易云信

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

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。