setLoginTimeOut logout setLoginListener enableByPass queryStatus addStatusChangedListener clearStatusChangedListener loginByAccount loginByCertificate loginBySession ticketAuthAvailable loginByAuthAvailable doCertificateAuth doSMSAuth doRadiusAuth doTokenAuth doPasswordAuth doRandCodeAuth reacquireSmsCode addRandCodeListener getSession
深信服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({params},callback(ret))
timeOut:
ret:
{
status:, //布尔类型;是否调用成功
}
err:
{
msg:, //字符串类型;错误信息
}
var sangfor = api.require('sangfor');
sangfor.setLoginTimeOut({
timeOut:,
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});
Android、iOS系统
可提供的1.0.0及更高版本
退出登陆
logout({params},callback(ret))
ret:
{
status:, //布尔类型;是否成功
}
err:
{
msg:, //字符串类型;错误信息
}
var sangfor = api.require('sangfor');
sangfor.logout({
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});
Android、iOS系统
可提供的1.0.0及更高版本
设置登陆监听
setLoginListener({params},callback(ret))
ret:
{
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及更高版本
开启ByPass模式,开启后,所有SDK功能将失效 需要在认证之前设置,否则设置无效
enableByPass({params},callback(ret))
ret:
{
status:, //布尔类型;是否调用成功
}
err:
{
msg:, //字符串类型;错误信息
}
var sangfor = api.require('sangfor');
sangfor.enableByPass({
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});
Android、iOS系统
可提供的1.0.0及更高版本
获取当前vpn状态
queryStatus({params},callback(ret))
ret:
{
status:, //布尔类型;是否在线
}
err:
{
msg:, //字符串类型;错误信息
}
var sangfor = api.require('sangfor');
sangfor.queryStatus({
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});
Android、iOS系统
可提供的1.0.0及更高版本
添加vpn状态监听
addStatusChangedListener({params},callback(ret))
ret:
{
status:, //布尔类型;是否添加成功
state:, //数字类型;vpn状态 1/在线、2/离线、3/重连中(iOS 3为重连失败)
changeReason:, //字符类型;VPN状态变化的原因,state == 3不返回;仅支持iOS
}
err:
{
msg:, //字符串类型;错误信息
}
var sangfor = api.require('sangfor');
sangfor.addStatusChangedListener({
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});
Android、iOS系统
可提供的1.0.0及更高版本
清除所有vpn状态监听
clearStatusChangedListener({params},callback(ret))
ret:
{
status:, //布尔类型;是否成功
}
err:
{
msg:, //字符串类型;错误信息
}
var sangfor = api.require('sangfor');
sangfor.clearStatusChangedListener({
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});
Android、iOS系统
可提供的1.0.0及更高版本
初始化并使用账号密码登陆
loginByAccount({params},callback(ret))
vpnMode:
vpnAddress:
name:
password:
ret:
{
status:, //布尔类型;是否调用成功
}
err:
{
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({params},callback(ret))
vpnMode:
vpnAddress:
cirtificatePath:
password:
ret:
{
status:, //布尔类型;是否调用成功
}
err:
{
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及更高版本
初始化并进行共享session认证
loginBySession({params},callback(ret))
vpnMode:
vpnAddress:
session:
ret:
{
status:, //布尔类型;是否调用成功
}
err:
{
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({params},callback(ret))
ret:
{
status:, //布尔类型;是否支持免密登陆
}
err:
{
msg:, //字符串类型;错误信息
}
var sangfor = api.require('sangfor');
sangfor.ticketAuthAvailable({
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});
Android、iOS系统
可提供的1.0.0及更高版本
初始化并进行免密登陆
loginByAuthAvailable({params},callback(ret))
vpnMode:
vpnAddress:
ret:
{
status:, //布尔类型;是否调用成功
}
err:
{
msg:, //字符串类型;错误信息
}
var sangfor = api.require('sangfor');
sangfor.loginByAuthAvailable({
vpnMode:,
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});
Android、iOS系统
可提供的1.0.0及更高版本
证书认证,不进行sdk初始化
doCertificateAuth({params},callback(ret))
cirtificatePath:
password:
ret:
{
status:, //布尔类型;是否调用成功
}
err:
{
msg:, //字符串类型;错误信息
}
var sangfor = api.require('sangfor');
sangfor.doCertificateAuth({
cirtificatePath:'',
password:'',
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});
Android、iOS系统
可提供的1.0.0及更高版本
短信认证,不进行sdk初始化
doSMSAuth({params},callback(ret))
sms:
ret:
{
status:, //布尔类型;是否调用成功
}
err:
{
msg:, //字符串类型;错误信息
}
var sangfor = api.require('sangfor');
sangfor.doSMSAuth({
sms:'',
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});
Android、iOS系统
可提供的1.0.0及更高版本
Radius挑战认证,不进行sdk初始化
doRadiusAuth({params},callback(ret))
radiusCode:
ret:
{
status:, //布尔类型;是否调用成功
}
err:
{
msg:, //字符串类型;错误信息
}
var sangfor = api.require('sangfor');
sangfor.doRadiusAuth({
radiusCode:'',
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});
Android、iOS系统
可提供的1.0.0及更高版本
token令牌认证,不进行sdk初始化
doTokenAuth({params},callback(ret))
token:
ret:
{
status:, //布尔类型;是否调用成功
}
err:
{
msg:, //字符串类型;错误信息
}
var sangfor = api.require('sangfor');
sangfor.doTokenAuth({
token:'',
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});
Android、iOS系统
可提供的1.0.0及更高版本
账号密码认证,不进行sdk初始化
doPasswordAuth({params},callback(ret))
name:
password:
ret:
{
status:, //布尔类型;是否调用成功
}
err:
{
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({params},callback(ret))
code:
ret:
{
status:, //布尔类型;是否调用成功
}
err:
{
msg:, //字符串类型;错误信息
}
var sangfor = api.require('sangfor');
sangfor.doRandCodeAuth({
code:'',
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});
Android、iOS系统
可提供的1.0.0及更高版本
重新获取短信验证码
reacquireSmsCode({params},callback(ret))
ret:
{
status:, //布尔类型;是否调用成功
msg{ //json对象,短信信息,仅支持iOS
phoneNum:'', //字符类型;短信认证的手机号码
countDown:, //数字类型;重新发送短信倒计时时间
stillValid:, //布尔类型;上次发送的短信验证码是否在有效期
}
err:
{
msg:, //字符串类型;错误信息
}
var sangfor = api.require('sangfor');
sangfor.reacquireSmsCode({
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});
Android、iOS系统
可提供的1.0.0及更高版本
重新获取图形验证码
reacquireRandCode({params},callback(ret))
ret:
{
status:, //布尔类型;是否调用成功
}
err:
{
msg:, //字符串类型;错误信息
}
var sangfor = api.require('sangfor');
sangfor.reacquireRandCode({
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});
Android、iOS系统
可提供的1.0.0及更高版本
图形验证码监听
addRandCodeListener({params},callback(ret))
ret:
{
status:, //布尔类型;是否调用成功
data:'', //字符串类型;图片信息的base64字符串
}
err:
{
msg:, //字符串类型;错误信息
}
var sangfor = api.require('sangfor');
sangfor.addRandCodeListener({
}, function(ret) {
api.alert({msg: JSON.stringify(ret)});
});
Android、iOS系统
可提供的1.0.0及更高版本
获取共享登录的Session
getSession({params},callback(ret))
ret:
{
status:, //布尔类型;是否调用成功
session:'', //字符串类型;共享session
}
err:
{
msg:, //字符串类型;错误信息
}
var sangfor = api.require('sangfor');
sangfor.getSession({
}, function(ret, err) {
api.alert({msg: JSON.stringify(ret)});
});
Android、iOS系统
可提供的1.0.0及更高版本