メインコンテンツまでスキップ

マルチインスタンス

最終更新 2026/10/05

1. マルチインスタンス機能の紹介​

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のインスタンスを1つだけ使用しているユーザーの場合、データへの影響はありません。

2. 複数のSDKインスタンスの作成方法​

このセクションでは、SDKのマルチインスタンスの使用方法を紹介します:

[TDAnalytics enableLog:YES];

NSString *appId_1 = @"appId_1";
NSString *receiverUrl_1 = @"https://receiver-ta-preview.thinkingdata.cn";
[TDAnalytics startAnalyticsWithAppId:appId_1 serverUrl:receiverUrl_1];

NSString *appId_2 = @"appId_2";
NSString *receiverUrl_2 = @"https://receiver-ta-preview.thinkingdata.cn";
[TDAnalytics startAnalyticsWithAppId:appId_2 serverUrl:receiverUrl_2];

[TDAnalytics calibrateTimeWithNtp:@"time.apple.com"];

[TDAnalytics login:@"TD" withAppId:appId_1];
[TDAnalytics login:@"TD" withAppId:appId_2];

[TDAnalytics setDistinctId:@"Thinker" withAppId:appId_2];

// 静的共通イベントプロパティを設定
[TDAnalytics setSuperProperties:@{@"channel": @"ta",} withAppId:appId_1];
[TDAnalytics setSuperProperties:@{@"channel": @"ta",} withAppId:appId_2];
[TDAnalytics unsetSuperProperty:@"isTest" withAppId:appId_1];
[TDAnalytics clearSuperPropertiesWithAppId:appId_1];
[TDAnalytics getSuperPropertiesWithAppId:appId_1];
[TDAnalytics setDynamicSuperProperties:^NSDictionary * _Nonnull{
return @{@"now": [NSDate date]};
} withAppId:appId_1];

//自動収集を有効にする
[TDAnalytics enableAutoTrack:TDAutoTrackEventTypeAppInstall | TDAutoTrackEventTypeAppStart | TDAutoTrackEventTypeAppEnd withAppId:appId_1];
// 特定のページの自動収集イベントを無視
[TDAnalytics ignoreAutoTrackViewControllers:@[] withAppId:appId_1];
[TDAnalytics setAutoTrackProperties:TDAutoTrackEventTypeAll properties:@{@"auto_key2": @"auto_value2"} withAppId:appId_1];

// 通常イベントを送信
[TDAnalytics track:@"product_buy" withAppId:appId_1];

// 初回イベントを送信
TDFirstEventModel *firstModel = [[TDFirstEventModel alloc] initWithEventName:@"device_activation" firstCheckID:@"TD"];
firstModel.properties = @{@"key":@"value"};
[TDAnalytics trackWithEventModel:firstModel withAppId:appId_1];

// 更新可能イベントを送信
TDUpdateEventModel *updateModel = [[TDUpdateEventModel alloc] initWithEventName:@"UPDATABLE_EVENT" eventID:@"test_event_id"];
updateModel.properties = @{@"status": @3, @"price": @100};
[TDAnalytics trackWithEventModel:updateModel withAppId:appId_1];

// 上書き可能イベントを送信
TDOverwriteEventModel *overwriteModel = [[TDOverwriteEventModel alloc] initWithEventName:@"OVERWRITE_EVENT" eventID:@"test_event_id"];
overwriteModel.properties = @{@"status": @3, @"price": @100};
[TDAnalytics trackWithEventModel:overwriteModel withAppId:appId_1];

// 次の例では、ユーザーがある商品ページに滞在した時間を集計します
[TDAnalytics timeEvent:@"stay_shop" withAppId:appId_1];
/*
do someting .......
*/
// ユーザーが商品ページを離れると計時が終了し、"stay_shop" イベントにイベントの所要時間を表すプロパティ#durationが付与されます
[TDAnalytics track:@"stay_shop" withAppId:appId_1];

// ログアウト
[TDAnalytics logoutWithAppId:appId_1];

// ユーザープロパティ
[TDAnalytics userSet:@{@"username": @"ThinkingData"} withAppId:appId_2];
[TDAnalytics userSetOnce:@{@"first_payment_time": @"2018-01-01 01:23:45.678"} withAppId:appId_1];
[TDAnalytics userAdd:@{@"total_revenue": @30} withAppId:appId_1];
[TDAnalytics userUnset:@"key" withAppId:appId_1];
[TDAnalytics userDeleteWithAppId:appId_1];
[TDAnalytics userAppend:@{@"user_list": @[@"apple", @"ball"]} withAppId:appId_1];
[TDAnalytics userUniqAppend:@{@"user_list":@[@"apple", @"cube"]} withAppId:appId_1];

// H5ページのデータを連携
[TDAnalytics addWebViewUserAgent];

// デバイスIDを取得
[TDAnalytics getDeviceId];

[TDAnalytics flushWithAppId:appId_1];

// サードパーティデータの連携
[TDAnalytics enableThirdPartySharing:TDThirdPartyTypeAppsFlyer withAppId:appId_1];

複数のSDKインスタンスのAPPIDは、それぞれ異なる必要があります。マルチインスタンス間では、ほとんどのデータは共有されません。詳細は、4節「マルチインスタンス間のデータと設定の共有」を参照してください。

3. ライトインスタンスの作成​

iOS SDK 3.0.0以降では、lightInstanceIdWithAppId:インターフェースを使用して、同じAPPIDで複数のインスタンスをライトインスタンスとして作成できます

// 元のプロジェクト
NSString *appId = @"appId";
NSString *receiverUrl = @"https://receiver-ta-preview.thinkingdata.cn";
[TDAnalytics startAnalyticsWithAppId:appId serverUrl:receiverUrl];

// 元のプロジェクトからライトインスタンスを作成
NSString *lightProjectAppId = [TDAnalytics lightInstanceIdWithAppId:appId];

// イベントを送信
[TDAnalytics track:@"event" withAppId:lightProjectAppId];

// ユーザープロパティ
[TDAnalytics userSet:@{@"age": @18} withAppId:lightProjectAppId];

子ライトインスタンスのAPPID、データ受信URL、一部の設定は親インスタンスと同じですが、その他の情報は共有されません。詳細は、4節「マルチインスタンス間のデータと設定の共有」を参照してください。

4. マルチインスタンス間のデータと設定の共有​

ほとんどのインターフェースはインスタンスオブジェクトから呼び出されるため、大部分のデータと設定は、複数APPIDのインスタンス間や、親インスタンスとライトインスタンスの間で共有されません。ただし、一部のデータと設定はすべてのインスタンスに適用されます。各データと設定がマルチインスタンス間で共有されるかどうかの詳細は次のとおりです:

  • アカウント関連の情報

    • システムがデフォルトで生成するゲストID#distinct_id:共有
    • setDistinctIdを呼び出して設定したゲストID#distinct_id:共有しない
    • loginを呼び出して設定したアカウントID#account_id:共有しない
  • イベントの送信trackとユーザープロパティの送信userSet、userSetOnce、userAdd、userDelete:共有しない

  • 共通イベントプロパティsetSuperPropertiesと動的共通イベントプロパティsetDynamicSuperProperties:共有しない

  • SDKの設定情報がマルチインスタンス間で共有されるかどうか:

    • 送信ポリシー関連(送信間隔と1バッチあたりのデータ量):共有。最初にインスタンス化したAPPIDに対応するプロジェクトのデータによって決まります
    • 送信時のネットワーク条件setNetworkType:共有
  • 自動収集イベント

    • 自動収集イベントは、1つのインスタンスでのみ有効にすることをお勧めします
    • 複数のAPP IDへの自動収集イベントの送信に対応しています
    • 自動収集イベントの設定は、単一のAPPIDインスタンスにのみ適用できます。詳細はiOS SDK自動収集ガイドを参照してください
  • イベント時間の記録timeEvent:共有しない

このページは役に立ちましたか?