云信小课堂|搭建应用级别在线聊天室,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 文件中。--><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 文件夾,并復制到自己項目中。
在整個工程的 Build.gradle 文件中,配置 Repositories,如下:
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步就够了!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 技术实践 | Web 端实现 RTC 视
- 下一篇: 开发者们,「Innovation 202