国密App端对接案例(uni-app)

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


猜你喜欢

转载自blog.csdn.net/weixin_42255789/article/details/121958158