更新记录
1.1.0(2024-10-15)
修复1.0.9更新SDK退回了2.2.14.4_1125的问题
1.0.9(2024-08-27)
修复BUG
1.0.8(2023-10-22)
Android端修改SDK启动模式为MODE_SUPPORT_MUTABLE,使用MODE_SUPPORT_MUTABLE模式会根据你当前服务端控制台的配置动态切换MODE_VPN和MODE_VPN_SANDBOX
查看更多平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:5.0 - 12.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | 适用版本区间:9 - 16 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
深信服VPN-aTrust插件使用说明
导入示例项目说明
导入示例项目时可能会自动加入uniCloud目录,本插件无需关联服务空间,直接删除即可,否则打包时会要求关联uniCloud服务空间;由于深信服SDK仅支持armeabi-v7a架构, arm64-v8a架构模拟器, 不支持X86架构模拟器,建议在真机环境下运行调试。
获取插件对象
const aTrustVPN = uni.requireNativePlugin('Sangfor-aTrust-aTrustVPN');
初始化
created() {
this.initSDK();//SDK初始化,并设置监听
},
methods: {
initSDK(){
aTrustVPN.initSDK({},result => {
console.log(result)
})
}
}
VPN账号主认证
data() {
return {
mVpnAddress: 'https://xxxxx',
mUserName: 'xxxxx',
phoneNumber: '86-185xxxxxx8626@sms',
mUserPassword: 'xxxxx',
smsCode:'',
randCode:'',
randCodeBase64:''
}
},
loginVPN() {
uni.showLoading({
title:'VPN正在认证,请稍候...'
})
if(this.getAuthStatus()!="SFAuthStatusAuthOk"){
aTrustVPN.startPasswordAuth({
h: this.mVpnAddress,
u: this.mUserName,
p: this.mUserPassword
}, result => {
uni.hideLoading();
console.log(result)
})
}else{
//已经登陆
uni.showToast({
title: 'VPN已认证!',
duration: 2000
});
}
}
短信主验证
loginSMS() {
if(this.getAuthStatus()!="SFAuthStatusAuthOk"){
uni.showLoading({
title:'VPN正在认证,请稍候...'
})
aTrustVPN.startPrimarySmsAuth({
url: this.mVpnAddress,
phone: this.phoneNumber
}, result => {
uni.hideLoading();
console.log(result)
})
}else{
//已经登陆
uni.showToast({
title: 'VPN已认证!',
duration: 2000
});
}
}
辅助验证
secondLogin() {
console.log('验证码',this.smsCode)
uni.showLoading({
title:'VPN正在认证,请稍候...'
})
if(this.getAuthStatus()!="SFAuthStatusAuthOk"){
aTrustVPN.doSecondaryAuth({
code: this.smsCode
}, result => {
uni.hideLoading()
console.log(result)
})
}else{
//已经登陆
uni.showToast({
title: 'VPN已认证!',
duration: 2000
});
}
},
免密登陆
loginAutoTicket() {
//自动免密上线接口,该接口可以实现免密认证。
if(this.getAuthStatus()!="SFAuthStatusAuthOk"){
//Android true代表免密调用成功,false代表免密调用失败。
//IOS YES代表免密调用成功,NO代表免密调用失败
let res=aTrustVPN.startAutoTicket();
uni.showToast({
title: res,
duration: 2000
});
return res;
}else{
//已经登陆
uni.showToast({
title: 'VPN已认证!',
duration: 2000
});
}
},
重新获取验证码
regetSmsCode() {
aTrustVPN.regetSmsCode(result => {
console.log(result)
})
}
获取登陆状态
getAuthStatus() {
let res = "SFAuthStatusNone";
// case 0:
// return SFAuthStatusNone;
// case 1:
// return SFAuthStatusLogining;
// case 2:
// return SFAuthStatusPrimaryAuthOK;
// case 3:
// return SFAuthStatusAuthOk;//已登陆
// case 4:
// return SFAuthStatusLogouting;
// case 5:
// return SFAuthStatusLogouted;//已经注销(登出)
res = aTrustVPN.getAuthStatus()
console.log(res);
return res;
}
登出、注销
logoutVPN() {
if(this.getAuthStatus()=="SFAuthStatusAuthOk"){
uni.showLoading({
title:'正在注销,请稍候...'
})
aTrustVPN.logout({},result => {
uni.hideLoading();
console.log(result)
})
}else{
//已经登陆
uni.showToast({
title: 'VPN未登陆!',
duration: 2000
});
}
}
常见问题原因排查
常见错误码信息请查阅:https://bbs.sangfor.com.cn/atrustdeveloper/appsdk/android/error.html