云信小课堂|搭建应用级别在线聊天室,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 替换为自己的包名):

<?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 文件中。-->
    <permission
        android: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-data
            android:name="com.netease.nim.appKey"
            android:value="key_of_your_app" />


        <!-- 云信后台服务,请使用独立进程。-->
        <service
            android:name="com.netease.nimlib.service.NimService"
            android:process=":core"/>


       <!-- 云信后台辅助服务 -->
        <service
            android:name="com.netease.nimlib.service.NimService$Aux"
            android:process=":core"/>


        <!-- 云信后台辅助服务 -->
        <service
            android: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 -->
        <provider
            android:name="com.netease.nimlib.ipc.NIMContentProvider"
            android:authorities="com.netease.nim.demo.ipc.provider"
            android:exported="false"
            android:process=":core" />


          <!-- 云信内部使用的进程间通信provider -->
          <!-- SDK启动时会强制检测该组件的声明是否配置正确,如果检测到该声明不正确,SDK会主动抛出异常引发崩溃 -->
        <provider
            android: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();
        // 初始化云信SDK
        NIMClient.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() {
    @Override
    public List<String> getChatRoomLinkAddresses(String roomId, String account) {
        // 向应用服务器请求聊天室地址
        return "服务端返回的聊天室地址列表";
    }
}, account, token);


NIMClient.getService(ChatRoomService.class).enterChatRoomEx(data, 1).setCallback(new RequestCallback<EnterChatRoomResultData>() {
    @Override
    public void onSuccess(EnterChatRoomResultData result) {
        Toast.makeText(MainActivity.this,"onSuccess",Toast.LENGTH_SHORT).show();
    }


    @Override
    public void onFailed(int code) {
        Toast.makeText(MainActivity.this,"onFailed",Toast.LENGTH_SHORT).show();
    }


    @Override
    public 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>() {
            @Override
            public void onSuccess(Void param) {
                // 成功
            }


            @Override
            public void onFailed(int code) {
                // 失败
            }


            @Override
            public void onException(Throwable exception) {
               // 错误
            }
        });


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

Observer<List<ChatRoomMessage>> incomingChatRoomMsg = new Observer<List<ChatRoomMessage>>() {
        @Override
        public 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();
        // 初始化云信SDK
        NIMClient.init(this, null, sdkOptions );


        if (NIMUtil.isMainProcess(this)) {
            // 初始化 uikit
            NimUIKit.init(this);
        }
}

Step 2 添加布局

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

Step 3 进入聊天室

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

//uikit 进入聊天室
NimUIKit.enterChatRoomSuccess(result, true);
if (messageFragment != null) {
    //初始化fragment
    messageFragment.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+ 企业开发者接入云信服务。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值