

# 编写插件功能

本文档主要介绍注册插件组件及使用WPS协作SDK接口编写插件业务代码。

## 前提条件

完成[创建插件组件](/app-integration-dev/wps365/xz-mobile-dev/devGuide/android/create-plugin-components)流程。



## 操作步骤

### 1、实现KIMSdkApplication

创建插件入口类，实现init()方法，作为组件总入口。示例代码如下：


```Kotlin [Kotlin]
class DemoSdkApplication : KIMSdkApplication() {
    override fun init(application: Application) {
        super.init(application)

        // 添加初始化代码，如注册拓展实现等。
    }
}
```


### 2、注册自定义DemoSdkApplication


::: code-group

```Kotlin [Kotlin]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application>
        <meta-data
            android:name="com.kingsoft.kim.sdk.demo.DemoSdkApplication"
            android:value="@string/kim_sdk_application" />
    </application>
</manifest>
```

:::


### 3、环境配置

entry.json配置，在私有化环境下你需要修改成相应的服务环境地址，该地址在部署服务完成后可获取到。。在项目根目录中，编辑gradle.properties。替换


::: code-group

```Kotlin [Kotlin]
ALLOW_UNSAFE_HTTPS = true
PRIVATIZATION_CONFIG_URL = <填入私网entry.json网络地址>
```

:::


<img src="https://cloudcdn.qwps.cn/open/_img/b0eddb960f.jpeg" style="width:100%; height:auto;"/>

> 私网服务入口地址一般为：https://域名或IP:端口号 （如：http://10.13.72.41:9003 ），端口号为默认端口号时需去掉默认端口号（https默认端口号为443，http默认端口号为80）。



### 4、编写插件代码

在编写插件业务代码过程中，通常会涉及到：

- 调用服务接口：调用WPS协作SDK服务接口，使用WPS协作相关能力。如获取当前登录用户ID。

- 实现拓展协议：拓展WPS协作原有功能，达到定制化效果。如自定义JSAPI，拦截文件打开自定义安全管控等。

- 接收广播事件：监听WPS协作SDK广播事件，针对特定事件作出响应。如监听退出登录事件断开VPN连接。

下面针对这几种场景的代码调用给出相关说明及示例代码。

#### 调用服务接口

服务接口命名为 KIMISdkXxxService，在插件中可以通过调用这些服务接口来获取WPS协作相关服务能力。示例代码：


::: code-group

```Kotlin [Kotlin]
// 打开设置工作状态页面
val sdkUserInfoService = KIM.getService().getLinkUpService(KIMISdkUserInfoService::class.java);
sdkUserInfoService?.openSettingWorkStatusPage(fragment, workStatus);
```

:::


#### 实现拓展协议

插件拓展协议命名为 KIMExpXxx，在插件中通过注册相关拓展协议实现来提供定制化能力。示例代码：


::: code-group

```Kotlin [Kotlin]
// 实现自定义通讯录

//1.实现自定义通讯录协议
class MyContactsExp : KIMExpContacts {
    override fun openContacts(context: Context) {
        // 打开自定义通讯录页面
    }
    override fun openContactsPicker(
        context: Context,
        params: KIMExpContacts.ContactsPickerParams,
        callback: (selectedUids: Array<String>?, chatIds: Array<String>?) -> Unit,
    ) {
        // 打开自定义通讯录选择器页面
    }
}

//2.在KIMSdkApplication类中注册扩展点
class DemoSdkApplication : KIMSdkApplication() {

    override fun confMeatsOnBone(): KConf<Meat> {
        return kConfOf(KIMExpContacts::class.java confTo MyContactsExp::class.java)
    }
}
```

:::


#### 接收广播事件

WPS协作内部事件（如账号登录/登出）通过广播的形式通知外部。事件协议命名为KIMEventXxx，在插件中可以通过注册事件协议实现来接收广播事件。示例代码：


::: code-group

```Kotlin [Kotlin]
//登录完成后，进入主页事件

//1. 实现收到对应事件后的处理
val launchMainEvent = object : KIMEventLaunch() {
    override fun launchMain(activity: Activity, needAuth: Boolean) {
        // 登录成功
    }
}
//2. 注册事件
KIM.getService().registerEvent(KIMEventLaunch::class.java, launchMainEvent)
//3. 反注册事件
KIM.getService().unRegisterEvent(event)
```

:::

#### 三方库集成
如果插件代码中需要引入新的aar|jar文件，在开发阶段可以拷贝 aar 文件到插件组件工程的 libs 路径

##### 开发时临时添加 SDK 依赖


::: code-group

```Plaintext [Plaintext]
在插件组件工程下的 build.gradle 里面添加如下依赖：
repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    implementation(name: 'XXXSdk', ext: 'aar')
}
```

:::




##### 正式交付时添加 SDK 依赖

在开发联调完成后找到PM，将新的aar|jar文件上传到协作Maven仓库中，
得到一个组件的版本号和对应的repo-xxx.zip。
上传完成后需要下载repo文件中的aar和pom文件放置到本地repo目录对应的aar目录下：

<img src="https://cloudcdn.qwps.cn/open/_img/56230570c4.jpeg" style="width:100%; height:auto;"/>


::: code-group

```Plaintext [Plaintext]
在插件组件工程下的 build.gradle 里面添加如下依赖：
dependencies {
    implementation 'com.wps.woa.aar:ENSDK:1.0.0_2025.7.15@aar'
}
```

:::


### 5、调试代码

直接运行插件模版工程来调试代码功能。



## 后续步骤

完成插件代码及调试后，可按照[生成插件产物](/app-integration-dev/wps365/xz-mobile-dev/devGuide/android/generate-plugin-products)流程生成插件产物并发布到平台上。