# iOS SDK 多实例指南

# 一、多实例功能介绍

在 iOS SDK 1.2.0 版本中,新增了多 APPID 特性,可以创建多个 SDK 实例,分别对应各自的 APPID 进行数据上报,也就是可以向多个 APPID 进行数据上报。

在 iOS SDK 2.1.0 版本中,新增了轻量实例的特性,可以支持对同一 APPID 生成多个子轻量实例,子轻量实例与父实例的 APPID 一致,但账号等信息不一致。

如果您将老版本(1.2.0 之前的版本)SDK 升级至 1.2.0 之后的版本,如果老版本 SDK 本地缓存还有未上报的数据,那么将会直接上报到第一个实例化的 APPID 中。对于只使用一个 APPID 实例的用户而言,数据不会有任何影响。

# 二、如何创建多 SDK 实例

本节介绍 iOS SDK 1.2.0 之后版本的 SDK 初始化方式以及多 SDK 实例的创建方法:


  //初始化
  ThinkingAnalyticsSDK *instance = [ThinkingAnalyticsSDK startWithAppId:APP_ID withUrl:SERVER_URL];

  // 后续可以通过如下两种方法使用 SDK
  [instance track:@"event_name" properties:eventProperties];
  // [[ThinkingAnalyticsSDK sharedInstanceWithAppid:APP_ID] track:@"event_name" properties:eventProperties];

  // 1.2.0之前,或者单实例可使用下列使用 SDK
  // [[ThinkingAnalyticsSDK sharedInstance] track:@"event_name" properties:eventProperties];

  //支持初始化多个APPID实例
  //ThinkingAnalyticsSDK *instance2 = [ThinkingAnalyticsSDK startWithAppId:APP_ID2 withUrl:SERVER_URL2];

请注意多个 SDK 实例的 APPID 必须不同,多实例之间的大多数数据是不共通的,详情可参考第四节“多实例间的数据、设置共享”。

# 三、创建轻实例

在 iOS SDK 2.1.0 版本中,您可以通过轻实例的方式,创建同一个 APPID 下的多个实例


  //首先创建一个SDK实例
  ThinkingAnalyticsSDK *instance = [ThinkingAnalyticsSDK startWithAppId:APP_ID withUrl:SERVER_URL];

  //通过之前创建的实例,调用createLightInstance生成轻实例
  ThinkingAnalyticsSDK *lightInstance  = [instance createLightInstance];

  [lightInstance login:@"123ABCabc@thinkingdata.cn"];
  [lightInstance track:@"some_event" properties:eventProperties];

子轻量实例与父实例的 APPID、上报地址以及部分设置一致,但其他信息不共享,详情可参考第四节“多实例间的数据、设置共享”。

# 四、多实例间的数据、设置共享

大多数接口都是由实例对象所调用,因此绝大部分数据与设置在多 APPID 实例、父实例与轻量实例间是不共享的,但有部分数据与设置会对所有实例生效,以下是所有数据与设置在多实例间是否共享的详细说明:

  1. 账号相关信息
  • 系统默认生成的访客 ID#distinct_id:共享
  • 调用 identify 设置的访客 ID#distinct_id:不共享
  • 调用 login 设置的账号 ID#account_id:不共享
  1. 事件上报 track 与用户属性上报 user_set、user_setOnce、user_add、user_delete:不共享
  2. 公共属性 setSuperProperties 和动态公共属性 registerDynamicSuperProperties:不共享
  3. SDK 配置信息是否在多实例之间共享:
  • 上报策略相关(即上报的间隔时间与每批次数据量):共享,由第一个实例化的 APPID 对应的项目数据决定
  • 上传的网络条件 setNetworkType:共享
  1. 自动采集事件
  • 建议只在一个实例上开启自动采集事件
  • 支持向多个 APP ID 上报自动采集事件
  • 自动采集事件的设置可以只对单个 APPID 实例生效,详情请参考iOS SDK 自动采集指南
  1. 记录事件时长 timeEvent:不共享