sangfor

概述

深信服vpn插件,可多种方式登陆vpn。

iOS关于L3VPN说明

L3vpn模式的特点是在一个应用中打通了VPN隧道后,其他应用不需要集成SDK即可访问资源。并且额外支持了UDP、􏲽ICMP协议

iOS证书及描述文件制作

申请iOS主证书及描述文件和扩展证书及描述文件,两者都需开启Network Extension权限,且扩展的AppID的BundleId以主App的AppID为前缀,例如主APP的BundleId为com.sangfor.vpndemo,那么拓展的BundleId可以设置为com.sangfor.vpndemo.vpnextension,证书配置流程操作详情参考iOS证书及描述文件制作流程

iOS重签名扩展

深信服官网下载官方demo,找到PacketTunnel.appex文件,然后使用可视化工具SangforResign-1.2beta.app对扩展描述文件进行重签名,然后打包成一个附加自定义插件上传 YonBuilder移动开发 平台。可视化工具可联系深信服获得。

附加自定义插件制作方法如下:

下载 sangforAppendix 插件 zip 包并解压,把 zip 包内 plugins 目录下的 PacketTunnel.appex 文件替换为对扩展描述文件重签名后的文件。然后重新压缩为 zip 包文件上传自定义插件,应用打包时勾选该插件。

Network Extension权限:

使用本插件需要在工程target的Capabilities选项中打开Network Extension权限开关,而最终的配置都会写入到工程中的一个.entitlements文件中,下面我们提供了配置该entitlements文件的方法,具体配置请参考iOS修改entitlements文件

示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.developer.networking.networkextension</key>
    <array>
        <string>app-proxy-provider</string>
        <string>content-filter-provider</string>
        <string>packet-tunnel-provider</string>
    </array>
</dict>
</plist>
var sangfor = api.require('sangfor');
sangfor.setLoginTimeOut({
timeOut:,
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

setLoginTimeOut

设置登陆超时时间

setLoginTimeOut({params},callback(ret))

param

timeOut:

  • 类型:数字类型
  • 描述:超时时间,单位/秒
  • 默认:8

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否调用成功
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.setLoginTimeOut({
timeOut:,
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

logout

退出登陆

logout({params},callback(ret))

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否成功
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.logout({
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

setLoginListener

设置登陆监听

setLoginListener({params},callback(ret))

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
state:'',              //字符串类型;登陆状态, 'success'/登陆成功、‘failed’/登陆失败,'process'/登陆中
nextAuthType:,    //数字类型;下个认证类型;state为'process'时返回,取值如下:
 0,            //证书认证
 1,            //用户名密码认证
 2,            //短信认证
 6,            //挑战认证或者Radius认证
 7,            //令牌认证
 11,           //钉钉code认证
 16,           //Session认证
 17,           //无认证
 18,           //强制修改密码认证
 20,           //强制修改密码认证,处理之前没有输入密码的情况。
 22,           //图形校验码认证
 2048          //Ticket认证
msg{           //json类型;下个认证类型;state为'process'时返回,nextAuthType为2、6、18,20时才有值,Android不支持
  pswMsg:'',       //字符类型;请求修改密码认证的密码规则信息,nextAuthType == 18、20时返回
  challengeMsg:'',  //字符类型;挑战认证的提示信息,nextAuthType == 6时返回
  phoneNum:'',  //字符类型;短信认证的手机号码,nextAuthType == 2时返回
  countDown:,  //数字类型;重新发送短信倒计时时间,nextAuthType == 2时返回
  stillValid:,  //布尔类型;上次发送的短信验证码是否在有效期 ,nextAuthType == 2时返回
}:,          
errorCode:,       //数字类型;错误码 state为‘failed‘时返回
errorMsg:'',       //字符串类型;错误信息;state为‘ailed’时返回

}

示例代码

var sangfor = api.require('sangfor');
sangfor.setLoginListener({
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

enableByPass

开启ByPass模式,开启后,所有SDK功能将失效 需要在认证之前设置,否则设置无效

enableByPass({params},callback(ret))

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否调用成功
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.enableByPass({
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

queryStatus

获取当前vpn状态

queryStatus({params},callback(ret))

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否在线
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.queryStatus({
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

addStatusChangedListener

添加vpn状态监听

addStatusChangedListener({params},callback(ret))

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否添加成功
state:,                       //数字类型;vpn状态   1/在线、2/离线、3/重连中(iOS 3为重连失败)
changeReason:,                //字符类型;VPN状态变化的原因,state == 3不返回;仅支持iOS
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.addStatusChangedListener({
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

clearStatusChangedListener

清除所有vpn状态监听

clearStatusChangedListener({params},callback(ret))

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否成功
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.clearStatusChangedListener({
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

loginByAccount

初始化并使用账号密码登陆

loginByAccount({params},callback(ret))

param

vpnMode:

  • 类型:数字类型
  • 描述:vpn登陆模式,分为EASYAPP 进程vpn,L3VPN 手机代理vpn
  • 可选值:1/EASYAPP,2/L3VPN
  • 默认:1

vpnAddress:

  • 类型:字符串类型
  • 描述:vpn地址,需要带http://

name:

  • 类型:字符串类型
  • 描述:登陆用户名

password:

  • 类型:字符串类型
  • 描述:登陆密码

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否调用成功
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.loginByAccount({
name:'',
password:'',
vpnAddress:'',
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

loginByCertificate

初始化并使用证书认证登陆

loginByCertificate({params},callback(ret))

param

vpnMode:

  • 类型:数字类型
  • 描述:vpn登陆模式,分为EASYAPP 进程vpn,L3VPN 手机代理vpn
  • 可选值:1/EASYAPP,2/L3VPN
  • 默认:1

vpnAddress:

  • 类型:字符串类型
  • 描述:vpn地址,需要带http://

cirtificatePath:

  • 类型:字符串类型
  • 描述:证书路径,支持fs、原生路径。

password:

  • 类型:字符串类型
  • 描述:登陆密码

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否调用成功
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.loginByCertificate({
vpnAddress:'',
cirtificatePath:'',
password:'',
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

loginBySession

初始化并进行共享session认证

loginBySession({params},callback(ret))

param

vpnMode:

  • 类型:数字类型
  • 描述:vpn登陆模式,分为EASYAPP 进程vpn,L3VPN 手机代理vpn
  • 可选值:1/EASYAPP,2/L3VPN
  • 默认:1

vpnAddress:

  • 类型:字符串类型
  • 描述:vpn地址,需要带http://

session:

  • 类型:字符串类型
  • 描述:共享session。

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否调用成功
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.loginBySession({
vpnAddress:'',
session:'',
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

ticketAuthAvailable

判断是否支持免密登陆

ticketAuthAvailable({params},callback(ret))

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否支持免密登陆
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.ticketAuthAvailable({
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

loginByAuthAvailable

初始化并进行免密登陆

loginByAuthAvailable({params},callback(ret))

param

vpnMode:

  • 类型:数字类型
  • 描述:vpn登陆模式,分为EASYAPP 进程vpn,L3VPN 手机代理vpn
  • 可选值:1/EASYAPP,2/L3VPN
  • 默认:1

vpnAddress:

  • 类型:字符串类型
  • 描述:vpn地址,需要带http://,iOS不支持此参数

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否调用成功
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.loginByAuthAvailable({
vpnMode:,
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

doCertificateAuth

证书认证,不进行sdk初始化

doCertificateAuth({params},callback(ret))

param

cirtificatePath:

  • 类型:字符串类型
  • 描述:证书路径,支持fs、原生路径。

password:

  • 类型:字符串类型
  • 描述:登陆密码

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否调用成功
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.doCertificateAuth({
cirtificatePath:'',
password:'',
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

doSMSAuth

短信认证,不进行sdk初始化

doSMSAuth({params},callback(ret))

param

sms:

  • 类型:字符串类型
  • 描述:短信验证码

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否调用成功
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.doSMSAuth({
sms:'',
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

doRadiusAuth

Radius挑战认证,不进行sdk初始化

doRadiusAuth({params},callback(ret))

param

radiusCode:

  • 类型:字符串类型
  • 描述:挑战认证码

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否调用成功
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.doRadiusAuth({
radiusCode:'',
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

doTokenAuth

token令牌认证,不进行sdk初始化

doTokenAuth({params},callback(ret))

param

token:

  • 类型:字符串类型
  • 描述:动态令牌

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否调用成功
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.doTokenAuth({
token:'',
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

doPasswordAuth

账号密码认证,不进行sdk初始化

doPasswordAuth({params},callback(ret))

param

name:

  • 类型:字符串类型
  • 描述:登陆用户名

password:

  • 类型:字符串类型
  • 描述:登陆密码

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否调用成功
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.doPasswordAuth({
name:'',
password:'',
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

doRandCodeAuth

图形校验码认证

doRandCodeAuth({params},callback(ret))

param

code:

  • 类型:字符串类型
  • 描述:图形校验码

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否调用成功

}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.doRandCodeAuth({
code:'',
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

reacquireSmsCode

重新获取短信验证码

reacquireSmsCode({params},callback(ret))

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否调用成功
msg{                           //json对象,短信信息,仅支持iOS
  phoneNum:'',  //字符类型;短信认证的手机号码
  countDown:,  //数字类型;重新发送短信倒计时时间
  stillValid:,  //布尔类型;上次发送的短信验证码是否在有效期
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.reacquireSmsCode({
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

reacquireRandCode

重新获取图形验证码

reacquireRandCode({params},callback(ret))

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否调用成功
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.reacquireRandCode({
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

addRandCodeListener

图形验证码监听

addRandCodeListener({params},callback(ret))

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否调用成功
data:'',                     //字符串类型;图片信息的base64字符串
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.addRandCodeListener({
}, function(ret) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

getSession

获取共享登录的Session

getSession({params},callback(ret))

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
status:,                       //布尔类型;是否调用成功
session:'',                  //字符串类型;共享session
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
msg:,                       //字符串类型;错误信息
}

示例代码

var sangfor = api.require('sangfor');
sangfor.getSession({
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});

可用性

Android、iOS系统

可提供的1.0.0及更高版本

是否仍需要帮助? 请保持联络!
最后更新于 2024/12/2