云信小课堂|搭建应用级别在线聊天室,7步就够了!
Vol. 6
從2000年至今,聊天室一直活躍在人們的各種生活場景中,目前廣泛運用于超級小班課、互動大班課、連麥開黑、主播 PK 等場景,還具備文本、表情、點贊、撒花等互動方式,架起溝通橋梁的同時,玩法也更加多變。
上一期云信小課堂中,我們和大家分享了《從0搭建聊天室,只需四步( Web 端)》,今天我們將和大家分享如何在安卓端快速集成聊天室,并實現(xiàn)進(jìn)出聊天室、簡單的消息收發(fā)、權(quán)限管理等功能。同時,我們也提供了一個完善的 UI 組件,會為大家講解如何利用 UI 組件快速實現(xiàn)應(yīng)用級別聊天室功能。
視頻講解
9分鐘視頻,手把手教你接入
集成聊天室-基礎(chǔ)篇
一、集成 SDK
Step?1 Gradle 集成
首先,在整個工程的 Build.gradle 文件中,配置 repositories,使用 jcenter 或者 maven ,二選一即可,如下:
allprojects {repositories {jcenter() // 或者 mavenCentral()} }然后,在主工程的 Build.gradle 文件中,添加 NDK 支持庫:
android {defaultConfig {ndk {//設(shè)置支持的SO庫架構(gòu),根據(jù)需要選擇對應(yīng)的架構(gòu)abiFilters "armeabi-v7a", "x86","arm64-v8a","x86_64"}} }再是根據(jù)自己項目的需求,添加不同的依賴。
注意:云信的組件版本號必須一致??稍?SDK 下載頁面查看當(dāng)前最新版本。
SDK下載鏈接:
https://yunxin.163.com/im-sdk-demo
這里以 8.6.0 版本為例:
dependencies {compile fileTree(dir: 'libs', include: '*.jar')// 添加依賴。注意,版本號必須一致。// 基礎(chǔ)功能 (必需)implementation 'com.netease.nimlib:basesdk:8.6.0'// 聊天室需要implementation 'com.netease.nimlib:chatroom:8.6.0' }
Step?2 權(quán)限與組件
在 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"><!-- 權(quán)限聲明 --><!-- 訪問網(wǎng)絡(luò)狀態(tài)--><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"/><!-- 外置存儲存取權(quán)限 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!-- 多媒體相關(guān) --><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+系統(tǒng)需要--><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, 可以在這里設(shè)置,也可以在 SDKOptions 中提供。如果 SDKOptions 中提供了,則取 SDKOptions 中的值。--><meta-dataandroid:name="com.netease.nim.appKey"android:value="key_of_your_app" /><!-- 云信后臺服務(wù),請使用獨立進(jìn)程。--><serviceandroid:name="com.netease.nimlib.service.NimService"android:process=":core"/><!-- 云信后臺輔助服務(wù) --><serviceandroid:name="com.netease.nimlib.service.NimService$Aux"android:process=":core"/><!-- 云信后臺輔助服務(wù) --><serviceandroid:name="com.netease.nimlib.job.NIMJobService"android:exported="true"android:permission="android.permission.BIND_JOB_SERVICE"android:process=":core"/><!-- 云信監(jiān)視系統(tǒng)啟動和網(wǎng)絡(luò)變化的廣播接收器,保持和 NimService 同一進(jìn)程 --><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><!-- 云信進(jìn)程間通信 Receiver --><receiver android:name="com.netease.nimlib.service.ResponseReceiver"/><!-- 云信進(jìn)程間通信service --><service android:name="com.netease.nimlib.service.ResponseService"/><!-- 云信進(jìn)程間通信provider --><providerandroid:name="com.netease.nimlib.ipc.NIMContentProvider"android:authorities="com.netease.nim.demo.ipc.provider"android:exported="false"android:process=":core" /><!-- 云信內(nèi)部使用的進(jìn)程間通信provider --><!-- SDK啟動時會強(qiáng)制檢測該組件的聲明是否配置正確,如果檢測到該聲明不正確,SDK會主動拋出異常引發(fā)崩潰 --><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 最終會經(jīng)過代碼混淆,請在 Proguard 配置文件中加入以下代碼:
-dontwarn com.netease.** -keep class com.netease.** {*;} #如果你使用全文檢索插件,需要加入 -dontwarn org.apache.lucene.** -keep class org.apache.lucene.** {*;} #如果你開啟數(shù)據(jù)庫功能,需要加入 -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 進(jìn)入聊天室
進(jìn)入聊天室可以有兩種方式:以獨立模式進(jìn)入聊天室和非獨立模式進(jìn)入聊天室。
獨立模式是指在 IM 處于未登錄的情況下,進(jìn)入聊天室的方式,針對只需要聊天室功能的業(yè)務(wù)場景。
非獨立模式是指先完成 IM 登錄,再進(jìn)入聊天室的方式,針對需要 IM 和聊天室功能的業(yè)務(wù)場景。
這里只演示獨立模式,選擇以獨立模式進(jìn)入聊天室時,必須提前設(shè)置聊天室獨立模式。
獨立模式的非匿名登錄和非獨立模式都需要 accid 和 token,如何獲取詳見鏈接:https://doc.yunxin.163.com/docs/TM5MzM5Njk/Dc2NTM1NzI?platformId=60353
// roomId 為聊天室id EnterChatRoomData data = new EnterChatRoomData(roomId); //設(shè)置appkey data.setAppKey(appKey); // 獨立模式的非匿名登錄,帳號和密碼必填,以account和token為例 data.setIndependentMode(new ChatRoomIndependentCallback() {@Overridepublic List<String> getChatRoomLinkAddresses(String roomId, String account) {// 向應(yīng)用服務(wù)器請求聊天室地址return "服務(wù)端返回的聊天室地址列表";} }, 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?收發(fā)消息
先通過 ChatRoomMessageBuilder 提供的接口創(chuàng)建消息對象,然后調(diào)用 ChatRoomService 的 sendMessage 接口發(fā)送出去即可。下面以文本消息發(fā)送為例,其它類型的消息發(fā)送方式與 IM 單聊群聊類似:
// 示例用roomId String roomId = "roomId";// 文本消息內(nèi)容 String text = "這是聊天室文本消息";// 創(chuàng)建聊天室文本消息 ChatRoomMessage message = ChatRoomMessageBuilder.createChatRoomTextMessage(roomId, text);// 將文本消息發(fā)送出去 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) {// 錯誤}});通過添加消息接收觀察者,在有新消息到達(dá)時,就可以接收到通知:
Observer<List<ChatRoomMessage>> incomingChatRoomMsg = new Observer<List<ChatRoomMessage>>() {@Overridepublic void onEvent(List<ChatRoomMessage> messages) {// 處理新收到的消息}}; NIMClient.getService(ChatRoomServiceObserver.class).observeReceiveMessage(incomingChatRoomMsg,?register);
Step 4?離開聊天室
離開聊天室,會斷開聊天室對應(yīng)的鏈接,并不再收到該聊天室的任何消息。如果用戶要離開聊天室,可以手動調(diào)用離開聊天室接口,該接口沒有回調(diào):
NIMClient.getService(ChatRoomService.class).exitChatRoom(roomId);集成聊天室- UI 篇
一、集成 UI 組件
Step 1?下載組件
鏈接:
https://github.com/netease-kit/NIM_Android_Demo/tree/dev_g2
UI 組件的 Demo 已經(jīng)上傳到 Github 倉庫中,可以直接下載,下載的 Demo 包含源碼形式的 UI 組件庫,可以直接導(dǎo)入到一個 Android Studio 項目中。
Step 2?導(dǎo)入到項目中
1、在 Demo 源碼中找到 Uikit 文件夾,并復(fù)制到自己項目中。
在整個工程的 Build.gradle 文件中,配置 Repositories,如下:
2、在整個工程的 Build.gradle 文件中,把下面配置添加到末尾;并調(diào)整 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 文件,并添加以下內(nèi)容導(dǎo)入Uikit模塊:
include?':uikit'4、在對應(yīng) Application/Library 模塊的 Build.gradle 文件下添加對 Uikit 模塊的依賴:
implementation?project(':uikit')二、功能使用
Step 1?初始化
在 Application 中,在初始化云信 SDK 之后,初始化 Uikit ,請務(wù)必放在主進(jìn)程中初始化,否則可能出現(xiàn)一些異常:
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 方式實現(xiàn)了聊天室的功能,開發(fā)者只需要將該 Fragment 集成到自身的 Fragment 或者 Activity 中即可。
Step 3 進(jìn)入聊天室
在聊天室 SDK 登錄成功的回調(diào)中,調(diào)用下面代碼:
//uikit 進(jìn)入聊天室 NimUIKit.enterChatRoomSuccess(result, true); if (messageFragment != null) {//初始化fragmentmessageFragment.init(roomId); }Step 4?退出聊天室
退出聊天室的代碼比較簡單,和 SDK 退出聊天室放在一起即可:
//sdk 退出聊天室 NIMClient.getService(ChatRoomService.class).exitChatRoom(roomId); //uikit 退出聊天室 NimUIKit.exitedChatRoom(roomId);總結(jié)
以上就是網(wǎng)易云信聊天室解決方案 Demo 安卓端接入流程的詳細(xì)解說,按照如上步驟就可以輕松完成應(yīng)用級聊天室的搭建。
任何系統(tǒng)的搭建都不是一蹴而就的,自研搭建聊天室意味著較高的人力成本、時間成本和資金成本。而融合通信云服務(wù)專家網(wǎng)易云信所提供的聊天室解決方案,1 天即可完成集成工作,可實現(xiàn)快速上線,輕松應(yīng)對億級日活的高并發(fā)場景。網(wǎng)易云信也會繼續(xù)打磨底層技術(shù)能力、為開發(fā)者提供更多簡單集成,快速接入的音視頻和即時通訊解決方案。
如果感興趣或者有需求的開發(fā)者可以閱讀《技術(shù)干貨|網(wǎng)易云信大規(guī)模聊天室系統(tǒng)架構(gòu)解析》,或點擊閱讀原文,免費試用。
云信小課堂推薦閱讀
第一期:如何實現(xiàn)音視頻通話
第二期:5步構(gòu)建本土「Clubhouse」
第三期:?5分鐘實現(xiàn)安卓端PK連麥場景
第四期:5分鐘快速實現(xiàn)iOS端PK連麥場景
第五期:從0搭建在線聊天室,只需4步!
關(guān)于網(wǎng)易云信
網(wǎng)易云信是集網(wǎng)易21年IM以及音視頻技術(shù)打造的融合通信云服務(wù)專家,穩(wěn)定易用的通信與視頻 PaaS 平臺。
提供融合通信與視頻的核心能力與組件,包含 IM 即時通訊、5G 消息平臺、一鍵登錄、信令、短信與號碼隱私保護(hù)等通信服務(wù),音視頻通話、直播、點播、互動直播與互動白板等音視頻服務(wù),視頻會議等組件服務(wù)。
網(wǎng)易云信服務(wù)于網(wǎng)易云音樂、好未來、新東方、科大訊飛、南京銀行等各行各業(yè)客戶,已有100w+ 企業(yè)開發(fā)者接入云信服務(wù)。
總結(jié)
以上是生活随笔為你收集整理的云信小课堂|搭建应用级别在线聊天室,7步就够了!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 技术实践 | Web 端实现 RTC 视
- 下一篇: 开发者们,「Innovation 202