文档中心 网宿安达SecureLink iOS SDK 1.1.0 & 1.1.1

iOS SDK 1.1.0 & 1.1.1

更新时间:2023-09-15 17:44:23

一、SDK 兼容说明

  • 系统版本:iOS 11.0及其以上
  • 适合架构:arm64
  • 适合设备:iOS真机设备(不支持模拟器)

二、集成SDK

概述

SecureLink SDK需使用iOS系统提供的VPN,不同于普通APP,系统VPN是由单独的进程运行(Network Extensions)。考虑到大多数后台运行APP但仍旧访问网络资源情况,您的APP进程可能被iOS系统挂起或杀死,因此必须使用两个 bundleId, 以保证APP进程异常时,Network Extension 进程可以正常运行。开发者在启动SecureLink SDK时,也需考虑Network Extension 已经在运行的情况。

XCode 工程构建指引

1. 创建 App ID

到 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 )

2. 创建 App 工程(可选)

创建一个 App 工程,假设叫 WSLinkDemo ( 如已有 App 工程,则跳过该步骤)

3. 创建 Network Extension Target

在 App 工程中,创建一个新的 target , 类型为 NetworkExtension, 假设取名为 WSLinkDemoTunnel, Provider Type 选择 Packet Tunnel,如图:
远程办公吐槽上热搜 卡顿掉线谁来救急?

4. 为 App 添加 Network Extensions 功能。

在Targets 中选择 WSLinkDemo → Signing & Capabilities → 点击加号 → 添加 Network Extensions。
远程办公吐槽上热搜 卡顿掉线谁来救急?
勾选 App Proxy 和 Packet Tunnel 选项
远程办公吐槽上热搜 卡顿掉线谁来救急?

5. 为 App 添加 App groups 功能

同步骤4 一样,选择 App Groups 创建功能:
远程办公吐槽上热搜 卡顿掉线谁来救急?
设置 App group 名称: 在 App Groups 栏目中,自定义您的 App Group 名称, 如: group.WSLinkDemo
远程办公吐槽上热搜 卡顿掉线谁来救急?

6. 为 Tunnel 添加 App Groups 功能

targets 中选择 WSLinkDemoTunnel 同步骤5做一样的设置(注意:两个target App group 名称要相同)
远程办公吐槽上热搜 卡顿掉线谁来救急?

7. 为Tunnel 添加 Network Extensions 功能

参考步骤4
远程办公吐槽上热搜 卡顿掉线谁来救急?

8. 添加 SDK 相关文件到 App 工程中

  1. 将 WSLink.framework、 WSLinkTunnel.framework、OpenProxyAdapter.xcframework、WSLinkWSLink.bundle 添加到您的App 工程中(注意文件需拷贝的您的工程目录下):

远程办公吐槽上热搜 卡顿掉线谁来救急?

远程办公吐槽上热搜 卡顿掉线谁来救急?

  1. Targets 中的 App → General → Frameworks, Libraries and Embedded Content 中 framework 选择 Embed & Sign, 如图:

远程办公吐槽上热搜 卡顿掉线谁来救急?

  1. Tunnel Target 中 选择 Do Not Embed, 如图:
    远程办公吐槽上热搜 卡顿掉线谁来救急?

  2. Copy Bundle Resources 设置:
    WSLink.framework 和 WSLinkTunnel.framework 都需要使用到 WSLink.bundle 文件,所以,请做如下设置:
    (将 WSLink.bundle 添加到 您的 App 和 Tunnel target 依赖中)
    远程办公吐槽上热搜 卡顿掉线谁来救急?

9. 处理类冲突

在 Targets→ WSLinkDemo → Build Phases → Link Binary With Libraries 中,去掉 WSLinkTunnel.framework, 如图:选择 WSLinkTunnel.Framework 点击 - 号去掉。

远程办公吐槽上热搜 卡顿掉线谁来救急?

10. Tunnel 代码编辑

在 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

11. App 代码编写

(详细请参考 demo 和 接口说明)

##接口说明

基础模块

1. 初始化基础模块

/// 初始化SDK
/// @param delegate  SDK delegate
+ (BOOL)initWithDelegate:(id<WSCtrlDelegate> _Nullable)delegate;

2. 登录

/// 用户登录
/// @param config SDK配置
/// @param callback 回调,error nil 为成功
/// 说明: 如果当前 VPN 已经运行中,登录后,VPN 的用户和当前登录的用户不一致,则会自动退出VPN
+ (void)loginWithConfiguration:(WSCtrlConfiguration *)config
                      callback:(void(^)(NSError *error))callback;

3. 登出

/// 登出,相应功能也会退出,如VPN
+ (void)logout;

4. 获取 SDK 版本号

/// SDK 版本号
+ (NSString *)SDKVersion;

WSLink 模块

1. 初始化

/// 初始化 SDK
/// @param callback 回调
+ (void)initWithConfiguration:(WSLinkConfiguration *)configuration
                     delegate:(nonnull id<WSLinkDelegate>)delegate
                     callback:(void(^)(NSError * __nullable error))callback;

2. 启动VPN

/// 启动VPN
/// @param callback 回调
+ (void)startTunnelWithCallback:(void(^)(NSError * __nullable error))callback;

3. 停止VPN

/// 停止VPN
/// @param callack 回调
+ (void)stopTunnel:(void(^)(NSError * __nullable error))callack;

4. 获取当前VPN进程的企业组织

/// 当前 Proxy 进程的企业组织 ( WSLink 初始化成功后,方可调用)
+ (NSString *)currentTunnelOrg;

5. 获取当前VPN进程的用户

/// 获取当前VPN进程的用户  ( WSLink 初始化成功后,方可调用)
+ (NSString *)currentTunnelUser;

6. 确认VPN进程是否在运行中

/// 确认VPN进程是否运行中 ( WSLink 初始化成功后,方可调用)
+ (BOOL)isTunnelRunning;

7. 获取SDK版本号

/// 获取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 检查到账号过期,退出登录 提示用户账号过期
本篇文档内容对您是否有帮助?
有帮助
我要反馈
提交成功!非常感谢您的反馈,我们会继续努力做到更好!