更新记录

1.0.1(2026-08-03)

  1. 增加连接、登陆、获取状态等接口

1.0.0(2026-08-01)

  1. univpn

平台兼容性

uni-app(3.7.11)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - - 5.0 -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - - -

uni-app x(3.7.11)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - 5.0 - -

其他

多语言 暗黑模式 宽屏模式

UniVPN Client

开发文档

  1. 拷贝demo里的nativeResources文件到项目根目录
  2. 集成过程有问题可以点击上面的"进入交流群"私聊作者

接口


import {UTSUniVPN} from "@/uni_modules/wrs-uts-univpn"
  • 初始化VPN,一般在启动的时候调用

UTSUniVPN.vpnInit()
  • 初始化日志

let path = plus.io.convertLocalFileSystemURL("_download")
let flag = UTSUniVPN.logInit({
    path: path,
    loglevel: 3 // 1: error 2:warning 3: info 4: debug
})
if (flag) {
    this.showMsg("日志初始化成功")
} else {
    this.showMsg("日志初始化失败")
}
  • 请求读写权限

let platform = uni.getSystemInfoSync().platform
switch (platform) {
    case "android": {
        let builderVersion = UTSUniVPN.getBuildSDKVersion()
        if (builderVersion >= 30) {
            let flag = UTSUniVPN.isExternalStorageManager()
            if (!flag) {
                UTSUniVPN.toFilesAccessPermissionPage()
            }
        } else if (builderVersion >= 23) {
            this.requestPermission([
                "android.permission.READ_EXTERNAL_STORAGE",
                "android.permission.WRITE_EXTERNAL_STORAGE"
            ])
        }
    }
    break;
    case "ios": {

    }
    break;
    default:
        break;
}
  • 连接服务器
let params = {}
params.serverAddrEntityList = [{
    serverAddress: this.serverAddress,
    port: parseInt(this.port)
}]
params.gmAlgorithm = 0 // //是否支持国密 1: 支持 0:不支持
if (params.gmAlgorithm == 1) {
    params.gmSigCertPath = "/xxx/xxx" // 设置国密证书路径
    params.gmEncCertPath = "/xx/xx" // 设置国密加密证书路径
}
params.routeCover = 0 // //设置是否支持路由覆盖 1: 覆盖 0:不覆盖
params.tunnelMold = 0 // 设置隧道模式, 0为可靠模式 1为快速模式 2为自适应模式
params.tcpbuffersize = 0 /// 设置tcp缓存区
// params.whiteApp = ["om.tencent.mobileqq"] // 设置白名单
let isStartConnect = UTSUniVPN.startConnect(params, (resp) => {
    let opt = resp.opt
    switch (opt) {
        case "onConnectSuccess": {
            // 0-账号密码 1:匿名证书  2:证书挑战  3:证书+账号密码 --必传
            let authMode = resp.authMode
            if (authMode == 0) { // LOGIN_USERNAME_AND_PASSWORD
                this.loginAccountAndPassword()
            } else {
                this.loginAuthMode(authMode)
            }
        }
        break;
        case "onConnectFail": {

        }
        break;
        default:
            break;
    }
})
if (isStartConnect) {
    this.showMsg("连接构建成功")
} else {
    this.showMsg("连接构建失败")
}
  • 登陆

let params = {}
params.cauthType = 0
params.userName = this.userName
params.password = this.password
let flag = UTSUniVPN.startLogin(params, (resp) => {
    let code = resp.code
    switch (code) {
        case 1200: {
            this.showMsg("登陆成功")
        }
        break;
        case 1201: {
            this.showMsg("本地服务器验证失败 响应码:" + code)
        }
        break;
        case 1202: {
            this.showMsg("需要修改密码 响应码:" + code)
        }
        break;
        case 1203: {
            this.showMsg("需要进行双因子验证 响应码:" + code)
        }
        break;
        default: {
            this.showMsg("登陆失败 响应码:" + code)
        }
        break;
    }
})
if (flag) {
    this.showMsg("登陆构建成功")
} else {
    this.showMsg("登陆构建失败")
}
  • 退出登陆
let flag = UTSUniVPN.logout()
if(!flag) {
    this.showMsg("断开连接失败")
}
  • 获取连接状态

let status = UTSUniVPN.getConnectStatus()
if(status == 1) {
    this.showMsg("已连接")
} else if(status == 0) {
    this.showMsg("未连接")
}
  • 获取日志路径

let path = UTSUniVPN.getLogPath()
  • 修改密码

let params = {}
params.originPassword = ""
params.newPassword = ""
params.confirmPassword = ""
UTSUniVPN.modifyPassword(params, (resp)=>{
    let code = resp.code
})
  • 校验simcode

let params = {}
params.simcode = ""
UTSUniVPN.verificationCode(params, (resp)=>{
    let code = resp.code
})

隐私、权限声明

1. 本插件需要申请的系统权限列表:

网络权限

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: