集成 SDK
更新时间: 2024/07/04 19:13:53
本文介绍如何快速将网易云信 IM SDK(NetEase Instant Messaging SDK,NIM SDK)集成到您的 Android 项目中。
开发环境要求
- Android 5.0 及以上版本。
- 自 v6.9.0 起,改用 AndroidX 支持库,Target API 改为 28,不再支持 support 库。
集成步骤
步骤1:集成 SDK
NIM SDK 支持两种集成方式:
-
通过 Gradle 自动集成(推荐)。
-
通过下载SDK,然后手动集成到您的工程项目中。
Gradle 集成
-
若您需要创建新项目,在 Android Studio 里,在顶部菜单依次选择 File > New > New Project 新建工程,再依次选择 Phone and Tablet > Empty Activity,单击 Next。
创建 Android 项目成功后,Android Studio 会自动开始同步 gradle, 您需要等同步成功后再进行下一步操作。
-
在项目根目录下的 “build.gradle” 文件中,配置
repositories
(使用 maven)。示例代码如下:groovy
allprojects { repositories { mavenCentral() } }
-
在 “app” 目录下的 “build.gradle” 文件中,配置支持的 SO 库架构。示例代码如下:
groovy
android { defaultConfig { ndk { //设置支持的SO库架构 abiFilters "armeabi-v7a", "x86","arm64-v8a","x86_64" } } }
-
根据开发者项目的需求,添加对应的依赖。
- NIM SDK 组件版本号必须一致。可在SDK 更新日志中查看当前最新版本。
- NIM SDK 稳定版暂未支持如下列出的全文检索插件。
groovy
dependencies { compile fileTree(dir: 'libs', include: '*.jar') // 添加依赖。注意,版本号必须一致。 // 基础功能 (必需) implementation "com.netease.nimlib:basesdk:${LATEST_VERSION}" // 聊天室需要 implementation "com.netease.nimlib:chatroom:${LATEST_VERSION}" // 通过云信来集成小米等厂商推送需要 implementation "com.netease.nimlib:push:${LATEST_VERSION}" // 超大群需要 implementation "com.netease.nimlib:superteam:${LATEST_VERSION}" // 全文检索插件 implementation "com.netease.nimlib:lucene:${LATEST_VERSION}" // 海外融合存储需要 // 该功能仅支持Gradle集成,不提供手动集成方式 implementation "com.netease.nimlib:fusionstorage:${LATEST_VERSION}" implementation "com.google.code.gson:gson:${GSON_VERSION}" // Gson 推荐版本 2.8.9 }
手动集成
-
若您需要创建新项目,在 Android Studio 里,在顶部菜单依次选择 File > New > New Project 新建工程,再依次选择 Phone and Tablet > Empty Activity,单击 Next。
创建 Android 项目成功后,Android Studio 会自动开始同步 gradle, 您需要等同步成功后再进行下一步操作。
-
在SDK下载页面下载最新版本的 SDK。
-
按需将对应的 SDK 文件拷贝至工程的
libs
目录下,即可完成配置。NIM SDK 稳定版暂未支持如下列出的全文检索插件。
SDK 文件说明如下:
libs ├── arm64-v8a │ ├── libne_audio.so //语音消息录制功能,必需 │ ├── traceroute.so //网络探测功能,必需 | ├── libc++_shared.so //C++动态库,必需 | ├── libhigh-available.so //高可用功能库,必需 ├── armeabi-v7a │ ├── libne_audio.so │ ├── traceroute.so | ├── libc++_shared.so | ├── libhigh-available.so ├── x86 │ ├── libne_audio.so │ ├── traceroute.so | ├── libc++_shared.so | ├── libhigh-available.so ├── x86_64 │ ├── libne_audio.so │ ├── traceroute.so | ├── libc++_shared.so | ├── libhigh-available.so │ ├── nim-basesdk-x.x.x.jar //IM基础功能,必需 ├── nim-chatroom-x.x.x.jar //聊天室功能 ├── nim-lucene-x.x.x.jar //全文检索插件 ├── nim-push-x.x.x.jar //通过云信来集成小米等厂商推送时需要
-
在 app/build.gradle 文件中设置 libs 路径。
java
android { ... compileOptions { // SDK 依赖的JDK版本为Java 8 sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } ... dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) ... } }
-
单击 File > Sync Project With Gradle Files 按钮,直到同步完成。
步骤2:配置权限与防混淆
添加权限
开发者可以根据实际应用需求,设置所需的权限。
在 AndroidManifest.xml
中添加以下配置(请将 com.netease.nim.demo 替换为自己的包名)。
您可在AndroidManifest.xml
中配置云信的 App Key,也可在初始化时配置。App Key 通过在云信控制台创建应用获取。
xml<?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"/>
<!-- Android11:V8.6.1及之后的版本不需要;其他: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="false"
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.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>
防止代码混淆
代码混淆是指使用简短无意义的名称重命名已存在的类、方法、属性等,增加逆向工程的难度,保障 Android 程序源码的安全性。
为了避免因上述的重命名而导致调用 NIM SDK 异常,请在 proguard-rules.pro 文件中加入以下代码,将 NIM SDK 相关类加入不混淆名单。
groovy-dontwarn com.netease.nim.**
-keep class com.netease.nim.** {*;}
-dontwarn com.netease.nimlib.**
-keep class com.netease.nimlib.** {*;}
-dontwarn com.netease.share.**
-keep class com.netease.share.** {*;}
-dontwarn com.netease.mobsec.**
-keep class com.netease.mobsec.** {*;}
#如果你使用全文检索插件,需要加入
-dontwarn org.apache.lucene.**
-keep class org.apache.lucene.** {*;}
#如果你开启数据库功能,需要加入
-keep class net.sqlcipher.** {*;}
后续步骤
完成 SDK 集成后,需进行初始化。
相关参考
Demo 参考
云信在 Github 上提供了开源的 IM Demo,为您后续的 IM 集成提供参考。
核心 API 列表
您可在 Android SDK API 了解 SDK API 的基础信息(接口类型、返回值类型和调用框架),查看核心 API 列表和核心类列表。