更新时间:2023-09-15 17:44:23
SecureLink SDK需使用iOS系统提供的VPN,不同于普通APP,系统VPN是由单独的进程运行(Network Extensions)。考虑到大多数后台运行APP但仍旧访问网络资源情况,您的APP进程可能被iOS系统挂起或杀死,因此必须使用两个 bundleId, 以保证APP进程异常时,Network Extension 进程可以正常运行。开发者在启动SecureLink SDK时,也需考虑Network Extension 已经在运行的情况。
到 developer.apple.com 上,创建两个 appID,即 bundleID ( 一个为 App 的 App ID, 一个为 VPN 的 App ID, 如果已有App 的 ID 只需要创建一个 VPN 的 App ID 即可)。 VPN 的 App ID 必须用 App 的 App ID 作为前缀( 如:App 的bundleID 为 com.wangsu.WSLinkApp 则, VPN 的的 BundleID 必须 为 com.wangsu.WSLinkApp.xxxx 如: com.wangsu.WSLinkApp.tunnel )
创建一个 App 工程,假设叫 WSLinkDemo ( 如已有 App 工程,则跳过该步骤)
在 App 工程中,创建一个新的 target , 类型为 NetworkExtension, 假设取名为 WSLinkDemoTunnel, Provider Type 选择 Packet Tunnel,如图:
在Targets 中选择 WSLinkDemo → Signing & Capabilities → 点击加号 → 添加 Network Extensions。
勾选 App Proxy 和 Packet Tunnel 选项
同步骤4 一样,选择 App Groups 创建功能:
设置 App group 名称: 在 App Groups 栏目中,自定义您的 App Group 名称, 如: group.WSLinkDemo
targets 中选择 WSLinkDemoTunnel 同步骤5做一样的设置(注意:两个target App group 名称要相同)
参考步骤4
Tunnel Target 中 选择 Do Not Embed, 如图:
Copy Bundle Resources 设置:
WSLink.framework 和 WSLinkTunnel.framework 都需要使用到 WSLink.bundle 文件,所以,请做如下设置:
(将 WSLink.bundle 添加到 您的 App 和 Tunnel target 依赖中)
在 Targets→ WSLinkDemo → Build Phases → Link Binary With Libraries 中,去掉 WSLinkTunnel.framework, 如图:选择 WSLinkTunnel.Framework 点击 - 号去掉。
在 Tunnel 工程代码中,找到 PacketTunnelProvider 类文件。
参考 demo, 引入头文件,并将原本继承于 【NEPacketTunnelProvider】 修改成 【WSLinkTunnelProvider】,如下:
#import <NetworkExtension/NetworkExtension.h>
#import <WSLinkTunnel/WSLinkTunnelProvider.h>
@interface PacketTunnelProvider : WSLinkTunnelProvider
@end
删除 PacketTunnelProvider.m 内自动生成的代码,只保留类实现, 如下:
#import "PacketTunnelProvider.h"
@implementation PacketTunnelProvider
@end
(详细请参考 demo 和 接口说明)
##接口说明
/// 初始化SDK
/// @param delegate SDK delegate
+ (BOOL)initWithDelegate:(id<WSCtrlDelegate> _Nullable)delegate;
/// 用户登录
/// @param config SDK配置
/// @param callback 回调,error nil 为成功
/// 说明: 如果当前 VPN 已经运行中,登录后,VPN 的用户和当前登录的用户不一致,则会自动退出VPN
+ (void)loginWithConfiguration:(WSCtrlConfiguration *)config
callback:(void(^)(NSError *error))callback;
/// 登出,相应功能也会退出,如VPN
+ (void)logout;
/// SDK 版本号
+ (NSString *)SDKVersion;
/// 初始化 SDK
/// @param callback 回调
+ (void)initWithConfiguration:(WSLinkConfiguration *)configuration
delegate:(nonnull id<WSLinkDelegate>)delegate
callback:(void(^)(NSError * __nullable error))callback;
/// 启动VPN
/// @param callback 回调
+ (void)startTunnelWithCallback:(void(^)(NSError * __nullable error))callback;
/// 停止VPN
/// @param callack 回调
+ (void)stopTunnel:(void(^)(NSError * __nullable error))callack;
/// 当前 Proxy 进程的企业组织 ( WSLink 初始化成功后,方可调用)
+ (NSString *)currentTunnelOrg;
/// 获取当前VPN进程的用户 ( WSLink 初始化成功后,方可调用)
+ (NSString *)currentTunnelUser;
/// 确认VPN进程是否运行中 ( WSLink 初始化成功后,方可调用)
+ (BOOL)isTunnelRunning;
/// 获取SDK 版本号
+ (NSString *)SDKVersion;
错误码 | 错误描述 | 最佳实践 |
---|---|---|
1000 | 包名指纹校验不通过 | 打包应用时,请使用在控制台创建的APP的包名或指纹,否则鉴权将无法通过 |
1002 | SDK 版本校验不通过 | 获取SDK配置时发生内部错误,请联系网宿技术支持 |
2001 | 企业标识不存在 | 请联系企业管理员或网宿技术支持确认企业标识是否变更或服务是否存在 |
2005 | 用户名或者密码错误,请重新输入 | 提示用户确认用户名或密码 |
2006 | 登录设备已达上限 | 若您购买了客户端同时在线的增值服务,SecureLink会限制可登录设备的数量上限。请提示用户可退出其它设备再登录 |
2007 | 账号已禁用, 请联系企业管理员 | 提示用户账号已被禁用 |
2022 | 账号到期,请联系企业管理员 | 提示用户账号过期 |
2032 | 错误次数超限,账号已锁定 | 提示用户输入错误次数超限,账号已被锁定 |
2041 | 密码已到期,请重置后登录 | 提示用户密码已到期 |
2031 | 账号已在其它设备登录 | SecureLink的默认设备规则为后手踢前手,即新设备可以抢占旧设备。建议提示用户: 账号已在其他设备登录,如非本人操作,请立即修改密码 |
2048 | LDAP认证失败,请稍后重试 | 稍后重新调用WSCtrl initWithConfiguration 接口, 若仍旧失败,请联系企业管理员或网宿技术支持确认LDAP服务是否有异常 |
2063 | 非法 SDK TOKEN | 请检查 SDK 鉴权逻辑,并重新进行SDK鉴权 |
2065 | 用户无权限,请联系管理员 | 请联系企业管理员 |
-108 | 本地时间差过大 | 请检查设备时间,并建议用户修正本地时间,若修改后仍旧提示失败,请联系网宿技术支持 |
0 | 未知错误 | 请稍后重试,若仍旧失败,请联系网宿技术支持 |
5001 | 网络不可用 | 请检查App网络设置 |
5002 | 网络请求超时 | 请检查手机网络状态 |
5003 | 网络异常 | 请稍候重试,如果还不行,请联系网宿技术支持 |
5101 | VPN连接失败 | 请检查网络后,重新启动Proxy。若仍旧失败,请联系网宿技术支持 |
5102 | VPN鉴权失败 | 可尝试重新启动VPN,如果是因为账号在其它设备登录,重启过程中会收到2031的错误码,则代表该设备被踢下线。 |
5103 | VPN错误 | 请联系网宿技术支持 |
5104 | VPN配置异常 | 请联系网宿技术支持 |
5105 | VPN配置异常 | 请联系网宿技术支持 |
5106 | VPN正常退出 | 用户调用stopTunnel接口,或者用户退出登录,正常关闭 VPN。不用做特殊处理 |
5107 | VPN正常退出 | 用户在iOS 设置中关闭了VPN。属于正常行为,不用做特殊处理 |
5108 | VPN启动异常 | 请联系网宿技术支持 |
5109 | VPN未知异常退出 | 请联系网宿技术支持 |
5110 | VPN未知异常退出 | 请联系网宿技术支持 |
5111 | 无可用的安全网关 | 请检查网络连接后重试,若仍旧失败,请联系网宿技术支持 |
5112 | VPN启动失败 | 请重试,若仍旧失败,请联系网宿技术支持 |
5201 | 调用系统API超时 | 请稍候重试,如若还不行,若仍旧失败,请联系网宿技术支持 |
5202 | iOS 系统异常 | 可详细查看 NSError info 内容,或联系网宿技术支持 |
5203 | VPN有异常抛出 | 请联系网宿技术支持 |
5204 | 证书配置异常 | 请联系网宿技术支持 |
5208 | VPN异常 | 请联系网宿技术支持 |
5209 | VPN异常 | 请联系网宿技术支持 |
5210 | VPN异常 | 请联系网宿技术支持 |
5211 | 系统VPN配置异常 | 请检查 tunnelProviderId 设置,或请联系网宿技术支持 |
5212 | 系统VPN配置不可用 | 请联系网宿技术支持 |
5213 | 系统VPN配置需要更新 | 请联系网宿技术支持 |
5214 | 系统配置连接安全网关失败 | 请联系网宿技术支持 |
5215 | 系统VPN未知异常 | 请联系网宿技术支持 |
5307 | SecureLink暂不支持IPv6 | 请更换其它网络后重试 |
5304 | 用户未授权VPN权限 | 请重新启动VPN,让用户完成授权 |
5306 | 客户端虚拟IP段已达到上限 | 请联系企业管理员或网宿技术支持扩展虚拟IP段 |
5500 | 启动配置错误 | 请根据错误信息,检查启动配置 |
5501 | 调用系统API失败 | 请重试,或检查启动配置,如仍旧失败,请联系网宿技术支持 |
5502 | WSLink 已完成初始化 | 不需要处理,直接跳过 |
5503 | WSLink 初始化前,需限初始化WSCtrl 模块 | 先初始化 WSCtrl 模块 |
5504 | 需先初始化 WSLink 模块 | 启动VPN前,需先初始化 WSLink 模块 |
5505 | 需先登录 WSCtrl 模块 | 先调用WSCtrl loginWithUserConfiguration 接口并成功 |
5506 | 其它少见的错误 | 请查看错误信息,或联系网宿技术支持 |
5900 | WSCtrl 未知错误 | 请查看错误信息,或联系网宿技术支持 |
5902 | 配置错误 | 请查看错误信息,检查启动配置 |
5903 | SDK 未初始化 | 请先初始化 WSCtrl |
5904 | 调用了 logout 接口主动退出 | 不做处理 |
5905 | 检查到账号过期,退出登录 | 提示用户账号过期 |