国密App端对接案例(uni-app)
重点:aar文件需要二次扩展 uni-app无法直接调用java代码,需要java那边做一个 uni-app的扩展module(参考地址https://nativesupport.dcloud.net.cn/NativePlugin/course/android?id=%e6%8f%92%e4%bb%b6%e5%bc%80%e5%8f%91)然后uni-app才能调用 接口
在根目录下新建文件夹nativeplugins 格式如下
```
nativeplugins 固定
--uinplug
-----android 固定
------uniplugin_module-release.aar
-----package.json 固定
```
以下是package.json详细数据 (接口集成 SDKManager)
```
{
"name":"uinplug", //插件名称
"id": "uinplug", // 插件标识
"version": "1.0", //插件版本号
"description": "", //插件描述信息
"_dp_type": "nativeplugin",
"_dp_nativeplugin": {
"android": {
"plugins": [
{
"type": "module", //必填, 根据插件类型选择",
"name": "uinplug_SDKManager", //必填, 注册插件的名称
"class": "cn.com.sansec.vpnsdk.module.SDKManager" //注册插件的类名
}
],
"minSdkVersion":"23", //支持的Android最低版本,如21"
"integrateType": "aar", //"必填, 可取值framework|library",
"permissions": [
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.INTERNET"
]
//第三方配置给的
}
}
}
```
配置完以上步骤后
在manifest.json中找到 -- 原生插件配置 --点击本地插件(选择插件)--选中uinplug(插件名)
调用方法aar
```
第一步获取aar实例
this.sdkManager = uni.requireNativePlugin('uinplug_SDKManager') //sdkManager自己声明下
//uinplug_SDKManager时package.json中的注册插件的名称
第二步初始化接口
//以下参数需要根据对应接口配置 有无参数会写在其注释中 重点回显在setStatusCallback接口中 统一回显
this.sdkManager.sdkInit() //开始时后端让我们提供参数: Context :上下文 (这是后端自己获取的,不是前端给的)详情可以看uni-app插件文档 有参数 设备的唯一标示符 plus.device.imei
第三步初始化网关
this.sdkManager.setServerInfo() 有参数 网关ip
第四步获取网关的一些配置信息返回
this.sdkManager.getSettingInfo() //无参数
第五步获取证书信息
this.sdkManager.getCertificateInfo() //有参数
第六步申请证书
this.sdkManager.applyCertificate() // 有参数
第七步下载证书
this.sdkManager.downloadCertificate() //有参数 pin码(申请证书时传递的,仅仅是一个唯一值)
第八步校验用户PIN码
this.sdkManager.checkPinCode() //有参数 pin码
第九步获取VPN权限返回
this.sdkManager.getVPNAuthority() //无参数 -- 但app会弹出一个提示框,让其允许链接vpn权限 点击确认后执行回调返回结果
第十步登录
this.sdkManager.login() //无参数
第十一步退出
this.sdkManager.loginOut() //无参数
第十二步 销毁初始化接口
this.sdkManager.SdKDestroy() //无参数
回显数据的回调函数
this.sdkManager.setStatusCallback((data) => {})
```
以上只是顺序执行的步骤 ,下面是代码部分
```
this.imei = plus.device.imei //获取手机设备唯一值
第一步获取aar实例
this.sdkManager = uni.requireNativePlugin('uinplug_SDKManager')
第二步初始化接口
this.sdkManager.sdkInit(this.imei)
第三步初始化网关
this.sdkManager.setServerInfo("113.246.57.49",10443)
第四步获取网关的一些配置信息返回
this.sdkManager.getSettingInfo() //无参数
//回显的回调函数 根据对应type来判断执行函数是什么,然后根据id(其实是状态码 这里给的有问题)判断是否成功
this.sdkManager.setStatusCallback((data) => {
//获取网关的一些配置信息返回
if(data.type === 1018) {
if(data.id === 0) {
// 获取证书属性
this.sdkManager.getCertificateInfo("100")
}
}
//签证状态返回
if(data.type === 1010) {
// 获取证书属性 0是已有 直接获取pin码跳过申请和下载
if(data.id === 0) {
this.sdkManager.checkPinCode("147258369456")
} else {
//申请
this.sdkManager.applyCertificate("湖南人防",this.imei,"413333333333333333","147258369456","cs3")
}
}
//申请成功返回
if(data.type === 1003) {
if(data.id === 0) {
//下载
this.sdkManager.downloadCertificate("147258369456")
}
}
//下载成功返回
if(data.type === 1004) {
if(data.id === 0) {
//校验用户PIN码
this.sdkManager.checkPinCode("147258369456")
}
}
//校验用户PIN码
if(data.type === 1005) {
if(data.id === 0) {
//vpn授权
//this.sdkManager.getVPNAuthority() //这里需要判断是否 已授权 重点
let info = this.sdkManager.getVPNAuthority()
console.log(info)
// 0 表示没有vpn授权,需要用户授权.
// 1 表示已经授权了
if(info === 1) {
this.sdkManager.login()
}
}
}
//获取VPN权限返回
if(data.type === 1024) {
if(data.id === 0) {
//成功 登录
this.sdkManager.login()
} else {
uni.showToast({
title: "vpn权限未设置,登录失败",
icon: 'none'
})
}
}
//登录返回
if(data.type === 1014) {
if(data.id === 0) {
} else {
uni.showToast({
title: "第三方登录失败",
icon: 'none'
})
}
}
})
```