initSDK
接口描述
用于启动并初始化SDK。
注意事项
- 该接口用于启动并初始化SDK,在调用其他接口之前必须先调用该接口。
- 初始化方法必须在主线程调用。
- 该接口可能由于参数传错导致调用失败抛出异常。
- 如无特殊考虑,都建议放到Application的attachBaseContext中初始化,避免出现未在Application的attachBaseContext中初始化,导致多进程场景,子进程无法使用SDK的隧道或者沙箱能力问题。
接口定义
public void initSDK(Context context,
SFSDKMode sdkMode,
int sdkFlags,
Map<SFSDKExtras, String> extra)
参数说明
表1 参数说明
参数 | 是否必须 | 类型 | 描述 |
---|---|---|---|
context | 是 | Context | Android的Context上下文信息 |
sdkMode | 是 | SFSDKMode | SDK模式选项(请看表2) |
sdkFlags | 是 | SFSDKFlags | SDK基本配置选项(请看表3) |
extra | 是 | Map |
额外配置,补充属性(请看表4),不传该参数,传null即可。 |
表2 枚举SFSDKMode说明
枚举值 | 描述 | |
---|---|---|
MODE_SUPPORT_MUTABLE | SDK启动模式会根据配置变动 | (推荐使用) |
MODE_VPN | SDK启用VPN接入功能 | (已经废弃,不推荐使用) |
MODE_VPN_SANDBOX | SDK启动VPN和安全沙箱功能 | (已经废弃,不推荐使用) |
MODE_SUPPORT_MUTABLE说明
使用场景
如果希望部分用户使用集成SDK的APP仅具备代理访问内网业务的能力,部分用户使用集成SDK的APP不仅具备代理访问内网业务的能力,并且还具备数据防泄密的能力,可以使用该模式。
授权占用
- 当集成SDK的APP在应用中心授权给用户,用户使用该APP便会以接入+安全沙箱模式运行,并且占用并发授权和UEM移动版授权;
- 当集成SDK的APP在应用中心未授权给用户,用户使用该APP便会以接入模式运行,并且占用并发授权;
- 当“高级设置”中未勾选“允许未授权用户以接入模式运行”时:
- (1) 如果集成SDK的APP在应用中心未授权给用户,则用户无法通过该APP接入使用;
- (2) 如果集成SDK的APP在应用中心授权给用户,则用户可以通过该APP接入使用,并且占用并发授权和UEM移动版授权。
注意
使用MODE_SUPPORT_MUTABLE模式会根据你当前服务端控制台的配置动态切换MODE_VPN和MODE_VPN_SANDBOX,开关说明说明:
如果勾选,表示当前sdk应用可以让未授权的用户以接入模式登录:当前开关功能仅在服务端版本2.2.10及以上版本支持
表3:枚举SFSDKFlags说明
注意事项:flags可以使用位或"|"来同时指定多个flag,参考initSDK的使用示例。在选路过程中,特别注意 FLAGS_SDP_SERVER 和 FLAGS_VPN_SERVER 枚举。这两个标志可以加速选路过程。如果明确知道需要对接的服务器是 aTrust 服务器,则可以使用 FLAGS_SDP_SERVER 标志;如果只对接 VPN 服务器,则可以使用 FLAGS_VPN_SERVER 标志。这样,在选路时系统将只按照指定的要求进行连接,从而提高效率。如果不使用这两个标志,默认的选路将同时尝试连接 VPN 和 SDP 两条路径,并选择其中一条能连通的路径,这可能会造成不必要的时间浪费。
枚举值 | 描述 |
---|---|
FLAGS_VPN_MODE_TCP | TCP模式,当前必选。 |
FLAGS_HOST_APPLICATION | 主应用模式,与子应用模式二选一。 |
FLAGS_SUB_APPLICATION | 子应用模式,与主应用模式二选一。 |
FLAGS_ENABLE_FILE_ISOLATION | 启用文件加密隔离。 |
FLAGS_SDP_SERVER | 对接SDP服务器,与VPN服务器二选一。 |
FLAGS_VPN_SERVER | 对接VPN服务器,与SDP服务器二选一。 |
表4:额外参数extra说明
注意事项:
- 如果启用文件加密隔离,需要将用户应用的输出日志目录加白,避免应用自身产生的日志目录被加密隔离导致无法获取文件日志的问题
- 如果应用本身有自更新的逻辑, 启用文件加密隔离后,需要apk下载目录加入白名单, 避免系统安装器无法找到被加密隔离后的apk文件而安装失败的问题
枚举值 | 描述 |
---|---|
EXTRA_KEY_FILE_ISOLATION | 设置文件加密隔离路径白名单。 |
EXTRA_KEY_HOSTAPP_PACKAGE_NAME | 主应用包名,子应用模式使用,将主应用包名传入。 |
示例代码
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
// 推荐在Application的attachBaseContext初始化SDK
initSDK(base);
}
private void initSDK(Context context) {
int sdkFlags = 0;
// 主应用(或者子应用,只能二选一)
sdkFlags = SFSDKFlags.FLAGS_HOST_APPLICATION;
// TCP模式(必选)
sdkFlags |= SFSDKFlags.FLAGS_VPN_MODE_TCP;
// 额外参数(如开启文件加密隔离后如何给用户程序日志路径加白)
sdkFlags |= SFSDKFlags.FLAGS_ENABLE_FILE_ISOLATION; // 开启文件加密隔离
JSONObject fileRuleObject = new JSONObject();
JSONArray whiteList = new JSONArray();
whiteList.put("/storage/emulated/0/userLogDir");
whiteList.put("/sdcard/app/logDir");
fileRuleObject.put(EmmPolicyConstants.FILE_WHITELIST, whiteList);
// "{\"whiteList\":[\"/storage/emulated/0/userLogDir\", \"/sdcard/app/logDir\"]}" // 需要加白的日志路径JSON格式
String logPath = fileRuleObject.toString();
Map<SFSDKExtras, String> extra = new HashMap<>();
extra.put(SFSDKExtras.EXTRA_KEY_FILE_ISOLATION, logPath);
SFUemSDK.getInstance().initSDK(context,SFSDKMode.MODE_VPN_SANDBOX, sdkFlags, extra);
}