sangfor

立即使用

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对扩展描述文件进行重签名,然后打包成一个附加自定义模块上传 APICloud 平台。可视化工具可联系深信服获得。

附加自定义模块制作方法如下:

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

Network Extension权限:

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

示例:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3. <plist version="1.0">
  4. <dict>
  5. <key>com.apple.developer.networking.networkextension</key>
  6. <array>
  7. <string>app-proxy-provider</string>
  8. <string>content-filter-provider</string>
  9. <string>packet-tunnel-provider</string>
  10. </array>
  11. </dict>
  12. </plist>
  13. var sangfor = api.require('sangfor');
  14. sangfor.setLoginTimeOut({
  15. timeOut:,
  16. }, function(ret, err) {
  17. alert(JSON.stringify(ret));
  18. });

setLoginTimeOut

设置登陆超时时间

setLoginTimeOut({params},callback(ret))

param

timeOut:

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

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.setLoginTimeOut({
  3. timeOut:,
  4. }, function(ret, err) {
  5. alert(JSON.stringify(ret));
  6. });

可用性

Android、iOS系统

可提供的1.0.0及更高版本

logout

退出登陆

logout({params},callback(ret))

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.logout({
  3. }, function(ret, err) {
  4. alert(JSON.stringify(ret));
  5. });

可用性

Android、iOS系统

可提供的1.0.0及更高版本

setLoginListener

设置登陆监听

setLoginListener({params},callback(ret))

callback(ret, err)

ret:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.setLoginListener({
  3. }, function(ret, err) {
  4. alert(JSON.stringify(ret));
  5. });

可用性

Android、iOS系统

可提供的1.0.0及更高版本

enableByPass

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

enableByPass({params},callback(ret))

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.enableByPass({
  3. }, function(ret, err) {
  4. alert(JSON.stringify(ret));
  5. });

可用性

Android、iOS系统

可提供的1.0.0及更高版本

queryStatus

获取当前vpn状态

queryStatus({params},callback(ret))

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.queryStatus({
  3. }, function(ret, err) {
  4. alert(JSON.stringify(ret));
  5. });

可用性

Android、iOS系统

可提供的1.0.0及更高版本

addStatusChangedListener

添加vpn状态监听

addStatusChangedListener({params},callback(ret))

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.addStatusChangedListener({
  3. }, function(ret, err) {
  4. alert(JSON.stringify(ret));
  5. });

可用性

Android、iOS系统

可提供的1.0.0及更高版本

clearStatusChangedListener

清除所有vpn状态监听

clearStatusChangedListener({params},callback(ret))

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.clearStatusChangedListener({
  3. }, function(ret, err) {
  4. alert(JSON.stringify(ret));
  5. });

可用性

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 对象
  • 内部字段:
  1. {
  2. status:, //布尔类型;是否调用成功
  3. }

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.loginByAccount({
  3. name:'',
  4. password:'',
  5. vpnAddress:'',
  6. }, function(ret, err) {
  7. alert(JSON.stringify(ret));
  8. });

可用性

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 对象
  • 内部字段:
  1. {
  2. status:, //布尔类型;是否调用成功
  3. }

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.loginByCertificate({
  3. vpnAddress:'',
  4. cirtificatePath:'',
  5. password:'',
  6. }, function(ret, err) {
  7. alert(JSON.stringify(ret));
  8. });

可用性

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 对象
  • 内部字段:
  1. {
  2. status:, //布尔类型;是否调用成功
  3. }

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.loginBySession({
  3. vpnAddress:'',
  4. session:'',
  5. }, function(ret, err) {
  6. alert(JSON.stringify(ret));
  7. });

可用性

Android、iOS系统

可提供的1.0.0及更高版本

ticketAuthAvailable

判断是否支持免密登陆

ticketAuthAvailable({params},callback(ret))

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.ticketAuthAvailable({
  3. }, function(ret, err) {
  4. alert(JSON.stringify(ret));
  5. });

可用性

Android、iOS系统

可提供的1.0.0及更高版本

loginByAuthAvailable

初始化并进行免密登陆

loginByAuthAvailable({params},callback(ret))

param

vpnMode:

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

vpnAddress:

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.loginByAuthAvailable({
  3. vpnMode:,
  4. }, function(ret, err) {
  5. alert(JSON.stringify(ret));
  6. });

可用性

Android、iOS系统

可提供的1.0.0及更高版本

doCertificateAuth

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

doCertificateAuth({params},callback(ret))

param

cirtificatePath:

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

password:

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

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.doCertificateAuth({
  3. cirtificatePath:'',
  4. password:'',
  5. }, function(ret, err) {
  6. alert(JSON.stringify(ret));
  7. });

可用性

Android、iOS系统

可提供的1.0.0及更高版本

doSMSAuth

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

doSMSAuth({params},callback(ret))

param

sms:

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

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.doSMSAuth({
  3. sms:'',
  4. }, function(ret, err) {
  5. alert(JSON.stringify(ret));
  6. });

可用性

Android、iOS系统

可提供的1.0.0及更高版本

doRadiusAuth

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

doRadiusAuth({params},callback(ret))

param

radiusCode:

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

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.doRadiusAuth({
  3. radiusCode:'',
  4. }, function(ret, err) {
  5. alert(JSON.stringify(ret));
  6. });

可用性

Android、iOS系统

可提供的1.0.0及更高版本

doTokenAuth

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

doTokenAuth({params},callback(ret))

param

token:

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

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.doTokenAuth({
  3. token:'',
  4. }, function(ret, err) {
  5. alert(JSON.stringify(ret));
  6. });

可用性

Android、iOS系统

可提供的1.0.0及更高版本

doPasswordAuth

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

doPasswordAuth({params},callback(ret))

param

name:

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

password:

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

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.doPasswordAuth({
  3. name:'',
  4. password:'',
  5. }, function(ret, err) {
  6. alert(JSON.stringify(ret));
  7. });

可用性

Android、iOS系统

可提供的1.0.0及更高版本

doRandCodeAuth

图形校验码认证

doRandCodeAuth({params},callback(ret))

param

code:

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

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.doRandCodeAuth({
  3. code:'',
  4. }, function(ret, err) {
  5. alert(JSON.stringify(ret));
  6. });

可用性

Android、iOS系统

可提供的1.0.0及更高版本

reacquireSmsCode

重新获取短信验证码

reacquireSmsCode({params},callback(ret))

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.reacquireSmsCode({
  3. }, function(ret, err) {
  4. alert(JSON.stringify(ret));
  5. });

可用性

Android、iOS系统

可提供的1.0.0及更高版本

reacquireRandCode

重新获取图形验证码

reacquireRandCode({params},callback(ret))

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.reacquireRandCode({
  3. }, function(ret, err) {
  4. alert(JSON.stringify(ret));
  5. });

可用性

Android、iOS系统

可提供的1.0.0及更高版本

addRandCodeListener

图形验证码监听

addRandCodeListener({params},callback(ret))

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.addRandCodeListener({
  3. }, function(ret) {
  4. alert(JSON.stringify(ret));
  5. });

可用性

Android、iOS系统

可提供的1.0.0及更高版本

getSession

获取共享登录的Session

getSession({params},callback(ret))

callback(ret, err)

ret:

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

err:

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

示例代码

  1. var sangfor = api.require('sangfor');
  2. sangfor.getSession({
  3. }, function(ret, err) {
  4. alert(JSON.stringify(ret));
  5. });

可用性

Android、iOS系统

可提供的1.0.0及更高版本