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

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 替换为自己的包名):




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 getChatRoomLinkAddresses(String roomId, String account) {// 向应用服务器请求聊天室地址return "服务端返回的聊天室地址列表";}
}, account, token);NIMClient.getService(ChatRoomService.class).enterChatRoomEx(data, 1).setCallback(new RequestCallback() {@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() {@Overridepublic void onSuccess(Void param) {// 成功}@Overridepublic void onFailed(int code) {// 失败}@Overridepublic void onException(Throwable exception) {// 错误}});

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

Observer> incomingChatRoomMsg = new Observer>() {@Overridepublic void onEvent(List 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+ 企业开发者接入云信服务。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部