# 快速集成

本教程是为了让新手快速了解WPS协作中台。在本教程中，你可以体验集成协作中台SDK的基本流程和协作中台提供的 UI 界面。

## 环境要求

### rc_5.36及以下版本

| 名称   | 版本    |
| :----- | :------ |
| Java   | 11      |
| AGP    | 4.2.0 + |
| Gradle | 6.7.1 + |

支持的最低系统版本为 5.0(API 21):

`minSdkVersion 21`

目标 Android SDK 版本:

`targetSdkVersion 30`

### rc_5.37及以上版本

| 名称   | 版本    |
| :----- | :------ |
| Java   | 17      |
| AGP    | 8.6.0 + |
| Gradle | 8.7.0 + |

支持的最低系统版本为 5.0(API 21):

`minSdkVersion 21`

目标 Android SDK 版本:

`targetSdkVersion 35`

## Demo体验

协作中台为您提供SDK Demo源码，可以运行安装Demo，快速了解和体验协作中台SDK提供的多项服务能力，如会话，文档，工作台，通讯录等。

### 运行步骤

1. 通过官方获取到 WOASDKDemo 源码。

2. 使用Android Studio打开 WOASDKDemo 工程。

3. 点击Sync Project。

4. 点击运行按钮。

### Demo效果展示
<br />
<div style="display: flex; width: 200px;">
  <img src="https://cloudcdn.qwps.cn/open/_img/81a1e820e5.jpeg" style="margin-right: 10px; width: auto; height: 100%; max-width: 100%; object-fit: cover;"/>
  <img src="https://cloudcdn.qwps.cn/open/_img/c9625211ab.jpeg" style="margin-right: 10px; width: auto; height: 100%; max-width: 100%; object-fit: cover;"/>
  <img src="https://cloudcdn.qwps.cn/open/_img/840725a79b.jpeg" style="margin-right: 10px; width: auto; height: 100%; max-width: 100%; object-fit: cover;"/>
  <img src="https://cloudcdn.qwps.cn/open/_img/77d0bc6e27.jpeg" style="margin-right: 10px; width: auto; height: 100%; max-width: 100%; object-fit: cover;"/>
  <img src="https://cloudcdn.qwps.cn/open/_img/311651027d.jpeg" style="margin-right: 10px; width: auto; height: 100%; max-width: 100%; object-fit: cover;"/>
</div>

## 集成SDK

### 步骤1: 导入SDK

你可以使用以 Android 本地仓库的形式导入本地依赖项。

SDK 以 zip 包的形式提供，下载后，会得到一份 Sample 源码，以及 repo.zip. 将解压的 repo 文件夹放到工程根目录中。repo 包含 SDK 所需的依赖库 【禁止调整包内文件的结构与命名，将会导致集成依赖不正常】

#### 环境配置

Android Studio 的代码库配置在 Gradle 插件 7.0 以下版本、7.0 及以上版本有所不同。请根据您当前的 Gradle 插件版本，选择对应的配置过程。

##### 7.0 以下版本

1. 打开根目录下的 `build.gradle`（Project 视图下）添加如下配置。

::: code-group


```groovy [groovy]
buildscript {
    repositories {

        // 本地仓库
        maven { url "${rootProject.getRootDir()}/repo" }

        //Huawei官方maven仓库，华为离线推送
        maven { url 'https://developer.huawei.com/repo/' }

        //个推官方maven仓库，个推离线推送
        maven { url "https://mvn.getui.com/nexus/content/repositories/releases/" }

        //荣耀官方maven仓库，荣耀离线推送
        maven { url 'https://developer.hihonor.com/repo/' }

        maven { url 'https://maven.aliyun.com/repository/google' }// 可选配置
        maven { url 'https://maven.aliyun.com/repository/public' }// 可选配置
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }// 可选配置
        maven { url 'https://jitpack.io' }// 可选配置

        ...
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:{version}' // 最低版本要求 4.2.0
        classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:{version}' // 最低版本要求 1.6.20
        // 华为离线推送
        classpath 'com.huawei.agconnect:agcp:1.6.0.300'
    }
}

allprojects {
    repositories {
        // 本地仓库
        maven { url "${rootProject.getRootDir()}/repo" }

        //Huawei官方maven仓库，华为离线推送
        maven { url 'https://developer.huawei.com/repo/' }

        //个推官方maven仓库，个推离线推送
        maven { url "https://mvn.getui.com/nexus/content/repositories/releases/" }

        //荣耀官方maven仓库，荣耀离线推送
        maven { url 'https://developer.hihonor.com/repo/' }

        maven { url 'https://maven.aliyun.com/repository/google' }// 可选配置
        maven { url 'https://maven.aliyun.com/repository/public' }// 可选配置
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }// 可选配置
        maven { url 'https://jitpack.io' }// 可选配置

        ...
    }
}
````


:::


2. 在应用的 `build.gradle` 中，添加编译配置项和 SDK 依赖


::: code-group


```groovy [groovy]
android {
    buildToolsVersion "30.0.3"

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 29

        manifestPlaceholders = [
                GETUI_APPID : "请填写您的个推APP ID",
                MEIZU_APPKEY: "请填写您的魅族APP KEY",
                MEIZU_APPID : "请填写您的魅族APP ID",
                AMAP_API_KEY: "请填写您的高德API_KEY",
                VIVO_APP_ID : "请填写您的VIVO APP_ID",
                VIVO_API_KEY: "请填写您的VIVO API_KEY",
        ]
    }

    compileOptions {
        sourceCompatibility = 1.8
        targetCompatibility = 1.8
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }

    buildFeatures {
        viewBinding true
        dataBinding true
    }
}

dependencies {
    ...
    // repo/com/kingsoft/kim/sdk/woasdk下目录文件名即为版本号, 使用版本号替换$latestVersion
    api 'com.kingsoft.kim.sdk:woasdk:$latestVersion'
    api 'com.wps.woa.sdk:image-glide4wrap:1.0.13'
    // 以下按需依赖不同厂商的推送SDK
    api 'com.wps.woa.sdk:pushHuawei:0.0.7'
    api 'com.wps.woa.sdk:pushOppo:0.0.7'
    api 'com.wps.woa.sdk:pushVivo:0.0.7'
    api 'com.wps.woa.sdk:pushXiaomi:0.0.9'
    api 'com.wps.woa.sdk:pushHonor:0.0.4'
    api 'com.wps.woa.sdk:pushMeizu:0.0.6'
    api 'com.wps.woa.sdk:pushGetui:0.0.4'
}
````



:::

3. 在项目中使用 androidx 库

::: code-group


```groovy [groovy]
android.useAndroidX=true
android.enableJetifier=true
```


:::

##### 7.0 及以上版本

1. 打开根目录下的 `settings.gradle`（Project 视图下）添加如下配置。

::: code-group


```groovy [groovy]
pluginManagement {
    repositories {
        // 本地仓库
        maven { url "${rootProject.getRootDir()}/repo" }

        //Huawei官方maven仓库，华为离线推送
        maven { url 'https://developer.huawei.com/repo/' }

        //个推官方maven仓库，个推离线推送
        maven { url "https://mvn.getui.com/nexus/content/repositories/releases/" }

        //荣耀官方maven仓库，荣耀离线推送
        maven { url 'https://developer.hihonor.com/repo/' }

        maven { url 'https://maven.aliyun.com/repository/google' }// 可选配置
        maven { url 'https://maven.aliyun.com/repository/public' }// 可选配置
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }// 可选配置
        maven { url 'https://jitpack.io' }// 可选配置
        ...
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        // 本地仓库
        maven { url "${rootProject.getRootDir()}/repo" }

        //Huawei官方maven仓库，华为离线推送
        maven { url 'https://developer.huawei.com/repo/' }

        //个推官方maven仓库，个推离线推送
        maven { url "https://mvn.getui.com/nexus/content/repositories/releases/" }

        //荣耀官方maven仓库，荣耀离线推送
        maven { url 'https://developer.hihonor.com/repo/' }

        maven { url 'https://maven.aliyun.com/repository/google' }// 可选配置
        maven { url 'https://maven.aliyun.com/repository/public' }// 可选配置
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }// 可选配置
        maven { url 'https://jitpack.io' }// 可选配置
        ...
    }
}
````


:::


2. 打开根目录下的 `build.gradle`（Project 视图下）添加如下配置。


::: code-group


```groovy [groovy]
buildscript {
    dependencies {
        // 增加Android Gradle插件版本号配置，{version}为实际的Gradle插件版本号
        classpath 'com.android.tools.build:gradle:{version}'
        // 华为离线推送
        classpath 'com.huawei.agconnect:agcp:1.6.0.300'
        ...
    }
}
plugins {
    id 'org.jetbrains.kotlin.android' version '{version}' apply false // kotlin-gradle插件版本，与相应Gradle版本匹配
    ...
}
````



:::

3. 在应用的 `build.gradle` 中，添加编译配置项和 SDK 依赖

::: code-group


```groovy [groovy]
plugins {
    ...
    // 华为离线推送插件
    id 'com.huawei.agconnect'
}

android {

    defaultConfig {
        ...
        minSdk 21
        targetSdk 29

        manifestPlaceholders = [
                GETUI_APPID : "请填写您的个推APP ID",
                MEIZU_APPKEY: "请填写您的魅族APP KEY",
                MEIZU_APPID : "请填写您的魅族APP ID",
                AMAP_API_KEY: "请填写您的高德API_KEY",
                VIVO_APP_ID : "请填写您的VIVO APP_ID",
                VIVO_API_KEY: "请填写您的VIVO API_KEY",
        ]
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    buildFeatures {
        viewBinding true
        dataBinding true
    }

}

dependencies {
...
// repo/com/kingsoft/kim/sdk/woasdk下目录文件名即为版本号, 使用版本号替换$latestVersion
    api 'com.kingsoft.kim.sdk:woasdk:$latestVersion'
api 'com.wps.woa.sdk:image-glide4wrap:1.0.13'
// 以下按需依赖不同厂商的推送SDK
api 'com.wps.woa.sdk:pushHuawei:0.0.7'
api 'com.wps.woa.sdk:pushOppo:0.0.7'
api 'com.wps.woa.sdk:pushVivo:0.0.7'
api 'com.wps.woa.sdk:pushXiaomi:0.0.9'
api 'com.wps.woa.sdk:pushHonor:0.0.4'
api 'com.wps.woa.sdk:pushMeizu:0.0.6'
api 'com.wps.woa.sdk:pushGetui:0.0.4'
}

````


:::


4. 在项目中使用 androidx 库


::: code-group


```groovy [groovy]
android.useAndroidX=true
android.enableJetifier=true
````



:::

### 步骤2: 初始化

获取 App Key, 并在程序 application 启动时进行初始化，可以在这里进行全局设置，如设置会话列表，消息列表 UI 样式，在线通知配置，网络环境设置等。

::: code-group


```kotlin [Kotlin]
KIM.init(application: Application, appKey: String, config: KIMInitConfig)
```


:::

集成 SDK 需要进行网络环境配置，请按照以下配置项进行网络环境配置。

| 网络环境配置项 | 说明                                                                   |
| :------------- | :--------------------------------------------------------------------- |
| isV7           | 是否使用 V7 接口，false 表示使用 V6 接口（若无特别说明，请使用V7接口） |

SDK 提供接口设置 productName 占位字符串，productName 通常用于标识您的产品信息，比如分享群聊到“金山协作”，如果您想将“金山协作”替换为您自己的 app 名称，可以通过`KIMInitConfig` 接口设置。

::: code-group


```kotlin [Kotlin]
KIM.init(application, AK, KIMInitConfig().apply {
    entryJsonUrl = "$yourUrl"
    isV7 = true
    appDisplayName = "$yourAppName"
    options = getConfig(application) //初始化页面配置
})
```


:::

### 步骤3: 登录连接

1. 未登录情况下，先调用授权码登录接口进行登录激活。
   
   a. 开发者需在[企业后台](https://work.wps.cn/base/setting/contacts-sync)完成 SSO 认证配置，获取得到 APP_ID。配置流程详见[SSO 登录](/app-integration-dev/collaboration-middleware/server/SSO-login)。  
   
   b. 用户从自身业务服务接口中获取授权码 AUTH_CODE。注意 AUTH_CODE 通常具有时效性。

::: code-group


```kotlin [Kotlin]
KIM.getControl().login(APP_ID, AUTH_CODE,object : KIMCore.ConnectCallback {
    override fun onSuss() {
    }

    override fun onFail(reason: String?) {
    }

})

````


:::


### 步骤4: 页面集成

完成登录后，可进入到会话列表，消息列表，文档列表，工作台等页面。

#### 会话页面

在连接成功后可跳转至 SDK 会话列表页。


::: code-group


```kotlin [Kotlin]
KIM.getService().goPage(KIMChatListFragment::class.java.getPageName(), this, Bundle())
````



:::

#### 聊天页面

点击会话列表的某条会话时，可跳转至 SDK 聊天页面。

::: code-group


```kotlin [Kotlin]
val args = KIMMessageListFragment.defaultArguments(chatId, chatName, null)
KIM.getService().goPage(KIMMessageListFragment::class.java.getPageName(), context, args)
```


:::

#### 文档页面

连接成功后，可以进入文档主页，使用文档列表，预览文档，编辑文档等功能。

::: code-group


```kotlin [Kotlin]
KIM.getService().goPage(KIMDocumentTabFragment::class.java.getPageName(), this, Bundle())
```


:::

#### 工作台页面

连接成功后，可以进入工作台页面，工作台页面展示应用列表，可以点击应用进入应用详情ß页，使用到各个应用功能。

::: code-group


```kotlin [Kotlin]
KIM.getService().goPage(KIMContactsFragment::class.java.getPageName(), this, Bundle())
```


:::