更新记录

1.0.3(2025-02-18)

  1. ios增加disableClientCert参数

1.0.2(2025-02-16)

  1. 修复Android 14以后service类型问题

1.0.1(2025-02-12)

  1. setCallback接口名称改为onSetCallback
查看更多

平台兼容性

Vue2 Vue3
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.6.8,Android:4.4,iOS:9,HarmonyNext:不确定 × × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序 鸿蒙元服务
× × × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
× × × × × × × × ×

支持Android、iOS

跑通demo

  1. 拷贝demo里的nativeplugins、nativeResources、Info.plist、AndroidManifest.xml文件到项目根目录
  2. iOS苹果账号里创建包名的时候在Capabilities里勾选Network Extensions、Personal VPN
  3. 修改nativeplugins/wrs-的文件:

ios的vpn以ios extension(extension可以理解为是另一个app进程)方式集成,可参考uniapp官方集成文档https://nativesupport.dcloud.net.cn/NativePlugin/course/package.html#ios-extension

  • ios extension打包的时候需要包名和.mobileprovision文件,参考官方文档在苹果网站申请
  • manifest.json app原生插件配置勾选WRS插件
  • 在ios-extension.json里修改identifier为ios extension的包名,ios extension的包名规则:app包名+自定义后缀(${app包名}.${自定义后缀}),如:

app包名为com.wrs.project.VPNProject
后缀为VPNPacketTunnel
则ios-extension的包名(identifier)为com.wrs.project.VPNProject.VPNPacketTunnel
  • ios-com_wrs_project_VPNProject_VPNPacketTunnel.mobileprovision文件替换为ios extension签名文件,文件名不要变
  1. 集成插件步骤请参考 https://www.cnblogs.com/wenrisheng/p/18323027

接口


import {
    UTS
} from "@/uni_modules/wrs-uts-"
let vpn = new UTS()
  • 设置回调,仅支持Android

vpn.onSetCallback((resp) => {
    let opt = resp.opt
    switch (opt) {
        case "onUpdateState":
            let state = resp.state
            let logmessage = resp.logmessage
            let level = resp.level
            switch (level) {
                case "LEVEL_CONNECTED":
                    this.showMsg("连接成功!!!!")
                    break;
                case "LEVEL_NOTCONNECTED":
                    this.showMsg("还没有连接或断开连接!!!!")
                    break;
                case "LEVEL_AUTH_FAILED":
                    this.showMsg("认证失败!!!!")
                    break;
                default:
                    break;
            }
            this.showMsg("state:" + state + " level:" + level + " log:" + logmessage)
            break;
        default:
            break;
    }
})
  • 开启VPN

if (this.isAndroid) {
    let params = {}
    // config可以是本地配置文件,也可以是配置文件的字符串
    params.config = plus.io.convertLocalFileSystemURL("_www/static/256_cbc.conf")
    // params.config = this.androidConfig
    params.name = "UTS "
    params.userName = "xx" // 可选
    params.password = "xx" // 可选
    params.privateKeyPassword = "sFTKwpIYR60g03EBWVAWeQ=="
    // 开启结果以onSetCallback的onUpdateState为准
    vpn.startVPN(params, (resp) => {

    })
} else {
    let params = {}
    params.userName = ""
    params.serverAddress = "47.112.185.22" // 服务器地址
    params.disconnectOnSleep = false
    params.localizedDescription = " UTS Client" // ios设置vpn里有多个vpn,以localizedDescription作为ID,表示开启哪个vpn,如果找不到则创建一个新的vpn
    // providerBundleIdentifier 为ios-extension.json里的identifier
    params.providerBundleIdentifier = "com.wrs.project.VPNProject.VPNPacketTunnel"

    // params.providerConfiguration = {
    //  config: plus.io.convertLocalFileSystemURL("_www/static/AES_2562.ovpn"),
    //  privateKeyPassword: "sFTKwpIYR60g03EBWVAWeQ=="
    // }

    params.providerConfiguration = {
        config: this.ovpn,  // config可以是本地配置文件,也可以是配置文件的字符串,ios open的配置不支持fragment、dh、askpass
        privateKeyPassword: "sFTKwpIYR60g03EBWVAWeQ==",
        userName: "xx", // 可选
        password: "xx", // 可选
        disableClientCert: true // 可选
    }

    vpn.startVPN(params, (resp) => {
        let flag = resp.flag
        if (flag) {

            this.showMsg("vpn启动完成")
        } else {
            this.showMsg("vpn启动失败:" + JSON.stringify(resp))
        }

    })
}
  • 停止vpn

vpn.stopVPN()
  • 初始化多语言和创建通知channel,一般放到App.vue的onLaunch里,仅支持Android

if(isAndroid) { 
    // 初始化多语言
    UTS.setDesiredLocale()
    let sdkVersion = UTS.getBuildVersionSDK()
    if(sdkVersion >= 26 ) { // android 8以后,创建通知channel
        UTS.createNotificationChannel({
            id: "_bg", // 固定
            name: "连接统计",
            description: "已建立的连接的实时统计数据",
            enableLights: false
        }) 
        UTS.createNotificationChannel({
            id: "_newstat", // 固定
            name: "连接状态改变",
            description: "连接的状态更改(连接,身份验证...)",
            enableLights: true
        })
        UTS.createNotificationChannel({
            id: "_userreq", // 固定
            name: "需要用户交互",
            description: "连接需要一个用户输入,例如:双因子验证认证",
            enableVibration: true
        })
    }

    UTS.checkRestrictions()
}
  • 获取vpn所有日志,仅支持Android

let array = UTS.getAllLogStr()
  • 清空日志,仅支持Android

UTS.clearLog()

隐私、权限声明

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

vpn权限

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

插件不采集任何数据

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

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问