304  
查询码:00000042
app端国密对接案例(uni-app)
作者: 徐文彬 于 2021年12月15日 发布在分类 / 人防组 / 人防前端 下,并于 2021年12月15日 编辑

国密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'
        })
}
  }
})


```



 推荐知识

 历史版本

修改日期 修改人 备注
2021-12-15 18:00:16[当前版本] 徐文彬 app端国密对接案例(uni-app)

  目录
    知识分享平台 -V 4.8.7 -wcp