集成方式

网易云通信 SDK 支持两种方式集成。

1. 通过 Gradle 集成 SDK (推荐)

2. 通过类库配置集成 SDK

网易云通信 Android SDK 2.5.0 以上强烈推荐通过 Gradle 集成 SDK。

注意:互动白板最低要求 Android 4.1

通过 Gradle 集成 SDK

首先,在整个工程的 build.gradle 文件中,配置 repositories,使用 jcenter 或者 maven ,二选一即可,如下:

allprojects {
    repositories {
        jcenter() // 或者 mavenCentral()
    }
}

第二步,在主工程的 build.gradle 文件中,添加 dependencies。根据自己项目的需求,添加不同的依赖即可。注意:版本号必须一致,这里以 3.3.0 版本为例:


android {
   defaultConfig {
       ndk {
           //设置支持的SO库架构
           abiFilters "armeabi-v7a", "x86","arm64-v8a","x86_64"
        }
   }
}

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    // 添加依赖。注意,版本号必须一致。
    // 基础功能 (必需)
    compile 'com.netease.nimlib:basesdk:4.4.0'
    // 互动白板服务需要
    compile 'com.netease.nimlib:nrtc:4.4.0'
    // 互动白板和文档转码服务模块(版本号必须和基础模块一样)
    compile 'com.netease.nimlib:rts:4.4.0'
}

再次注意:依赖包的版本号必须一致。

通过类库配置集成 SDK

首先到下载页面进行下载 Android SDK。开发者可以根据实际需求,配置类库。

以下介绍以 Android SDK v2.5 及以上版本为例,Android SDK v2.5 以下的配置,请咨询技术支持。

网易云通信 Android SDK v2.5 及以上分为两种 SDK 包下载,第一种包含全部功能:IM + 聊天室 + 实时音视频 + 教学白板。第二种包含部分功能,包含:IM + 聊天室。请下载第一种包来集成音视频通话功能。

SDK 包的 libs 文件夹中,包含了网易云通信的 jar 文件,各 jni 库文件夹以及 SDK 依赖的第三方库。

实现音视频通话功能,需要将这些文件拷贝到你的工程的 libs 目录下,即可完成配置。列表如下:

libs
├── arm64-v8a
│   ├── libvideoeffect.so (视频处理)
│   ├── libnrtc_engine.so (音视频基础服务底层库)
│   └── libnrtc_network.so (音视频基础服务底层库)
├── armeabi-v7a
│   ├── libvideoeffect.so
│   ├── libnrtc_engine.so
│   └── libnrtc_network.so
├── x86
│   ├── libvideoeffect.so
│   ├── libnrtc_engine.so
│   └── libnrtc_network.so
├── x86_64
│   ├── libvideoeffect.so
│   ├── libnrtc_engine.so
│   └── libnrtc_network.so
│
├── nim-basesdk-4.4.0.jar (云通信SDK基础服务)
├── nim-rts-4.4.0.jar (互动白板、文档转码服务)
├── nrtc-sdk.jar(音视频基础服务)

以上文件列表中,jar 文件版本号可能会不同,子目录中的文件是 SDK 所依赖的各个 CPU 架构的 so 库。

如果你使用的 IDE 是 Android Studio,要将 jni 库按照 IDEA 工程目录的结构,放置在对应的目录中(一般为 src/main/jniLibs)。或者在 build.gradle 中配置好 jniLibs 的 sourceSets(可参考 demo 的 build.gradle)。

权限与组件

AndroidManifest.xml 中加入以下配置:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
       package="xxx">

    <!-- 权限声明 -->
    <!-- 访问网络状态-->
    <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.FLASHLIGHT" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <!-- 外置存储存取权限 -->
    <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"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

    <!-- 如果需要实时音视频通话模块,下面的权限也是必须的。否则,可以不加 -->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
    <uses-permission android:name="android.permission.BROADCAST_STICKY"/>
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-feature android:glEsVersion="0x00020000" android:required="true" />

    <!-- SDK 权限申明, 第三方 APP 接入时,请将 com.netease.nim.demo 替换为自己的包名 -->
    <!-- 和下面的 uses-permission 一起加入到你的 AndroidManifest 文件中。 -->
    <permission
        android:name="com.netease.nim.demo.permission.RECEIVE_MSG"
        android:protectionLevel="signature"/>
    <!-- 接收 SDK 消息广播权限, 第三方 APP 接入时,请将 com.netease.nim.demo 替换为自己的包名 -->
     <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 -->
        <!-- android:authorities="{包名}.ipc.provider", 请将com.netease.nim.demo替换为自己的包名 -->
        <provider
            android:name="com.netease.nimlib.ipc.NIMContentProvider"
            android:authorities="com.netease.nim.demo.ipc.provider"
            android:exported="false"
            android:process=":core" />
    </application>
</manifest>

混淆配置

如果你的 apk 最终会经过代码混淆,请在 proguard 配置文件中加入以下代码:

-dontwarn com.netease.**
-keep class com.netease.** {*;}
#如果你使用全文检索插件,需要加入
-dontwarn org.apache.lucene.**
-keep class org.apache.lucene.** {*;}

总体接口介绍

网易云通信 SDK 提供了两类接口供开发者调用:一类是第三方 APP 主动发起请求,第二类是第三方 APP 作为观察者监听事件和变化。第一类接口名均以 Service 结尾,例如 AuthService ,第二类接口名均以 ServiceObserver 结尾,例如 AuthServiceObserver,个别太长的类名则可能直接以 Observer 结尾,比如 SystemMessageObserver。

SDK 提供三种接口返回值:基本数据类型(同步接口),InvocationFuture(异步接口) 和 AbortableFuture(异步接口)。异步接口基本上都是从主进程发起调用,然后在后台进程执行,最后再将结果返回给主进程。

SDK 接口返回值 说明
基本数据类型 同步接口
InvocationFuture 异步接口
AbortableFuture 异步接口,耗时很长或者传输大量数据时使用,可用 abort() 方法,中断请求。
例如上传下载、登录等

异步接口可设置回调函数,提供两种方式:RequestCallback 和 RequestCallbackWrapper。

异步接口回调函数 说明
RequestCallback 需要实现3个接口:
成功 onSuccess, 失败 onFailed, 异常 onException
RequestCallbackWrapper 需要实现 onResult。封装了成功,失败和异常的3个接口,在参数上进行区分

SDK 4.4.0 API调用框架增强:

SDK 提供的接口主要按照业务进行分类,大致说明如下:

SDK接口 说明
AuthService 用户认证服务接口,提供登录注销接口。
AuthServiceObserver 用户认证服务观察者接口。
MsgService 消息服务接口,用于发送消息,管理消息记录等。
同时还提供了发送自定义通知的接口。
MsgServiceObserve 接收消息,消息状态变化等观察者接口。
LuceneService 聊天消息全文检索接口。
TeamService 群组服务接口,用于发送群组消息,管理群组和群成员资料等。
TeamServiceObserve 群组和群成员资料变化观察者。
SystemMessageService 系统通知观察者。
FriendService 好友关系托管接口,目前支持添加、删除好友、
获取好友列表、黑名单、设置消息提醒。
FriendServiceObserve 好友关系变更、黑名单变更通知观察者。
UserService 用户资料托管接口,提供获取用户资料、修改个人资料等。
UserServiceObserve 用户资料托管接口,提供获取用户资料、修改个人资料等。
AVChatManager 语音视频通话接口。
RTSManager 实时会话接口。
NosService 网易云存储服务,提供文件上传和下载。
NosServiceObserve 网易云存储传输进度观察者接口。
MixPushService 第三方推送接口,提供第三方推送服务。
EventSubscribeService 事件订阅服务接口,提供事件订阅等服务
EventSubscribeServiceObserver 事件状态变更观察者接口。
RedPacketService 红包接口。提供获取红包sdk token等功能。
RobotService 机器人操作相关接口,提供获取机器人、
获取机器人信息、判断是否是机器人等功能。
RobotServiceObserve 机器人数据变更观察者接口。
SettingsService 系统设置接口。提供多端推送、免打扰配置
SettingsServiceObserver 系统设置变更观察者接口。