본문으로 건너뛰기

다중 인스턴스

최근 업데이트 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 인스턴스를 하나만 사용하는 유저의 경우 데이터에 아무런 영향이 없습니다.

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, 수집 주소 및 일부 설정이 같지만 그 밖의 정보는 공유하지 않습니다. 자세한 내용은 4절 "다중 인스턴스 간 데이터 및 설정 공유"를 참고하십시오.

4. 다중 인스턴스 간 데이터 및 설정 공유​

대부분의 인터페이스는 인스턴스 객체에서 호출되므로 대부분의 데이터와 설정은 여러 APPID 인스턴스 간, 상위 인스턴스와 경량 인스턴스 간에 공유되지 않습니다. 다만 일부 데이터와 설정은 모든 인스턴스에 적용됩니다. 다음은 각 데이터와 설정이 다중 인스턴스 간에 공유되는지에 대한 상세 설명입니다.

  • 계정 관련 정보

    • 시스템이 기본으로 생성한 게스트 ID #distinct_id: 공유
    • setDistinctId를 호출하여 설정한 게스트 ID #distinct_id: 공유하지 않음
    • login을 호출하여 설정한 계정 ID #account_id: 공유하지 않음
  • 이벤트 전송 track과 유저 속성 전송 userSet, userSetOnce, userAdd, userDelete: 공유하지 않음

  • 공통 속성 setSuperProperties와 동적 공통 속성 setDynamicSuperProperties: 공유하지 않음

  • SDK 설정 정보의 다중 인스턴스 간 공유 여부:

    • 전송 정책 관련(전송 간격과 배치당 데이터양): 공유하며, 가장 먼저 인스턴스화된 APPID에 해당하는 프로젝트 데이터에 따라 결정됩니다
    • 업로드 네트워크 조건 setNetworkType: 공유
  • 자동 수집 이벤트

    • 자동 수집 이벤트는 하나의 인스턴스에서만 활성화하는 것을 권장합니다
    • 여러 APP ID로 자동 수집 이벤트를 전송할 수 있습니다
    • 자동 수집 이벤트 설정은 단일 APPID 인스턴스에만 적용할 수 있습니다. 자세한 내용은 iOS SDK 자동 수집 가이드를 참고하십시오
  • 이벤트 소요 시간 기록 timeEvent: 공유하지 않음

이 문서가 도움이 되었나요?