menu
Is this helpful?

# 다중 인스턴스

# 기능 소개

다중 인스턴스 기능을 통해 여러 SDK 인스턴스를 생성하여 각기 다른 Appid를 기반으로 데이터 추적을 실행할 수 있습니다. 즉, 데이터를 여러 Appid로 전송할 수 있습니다.

iOS SDK 버전 2.1.0에서는 새로운 라이트 인스턴스 기능이 추가되어, 동일한 Appid의 여러 서브 라이트 인스턴스를 생성할 수 있게 되었습니다. 라이트 인스턴스는 메인 인스턴스의 Appid와 일치하지만, 계정 등의 정보는 일치하지 않습니다.

# 다중 인스턴스 생성

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];

// super property
[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];

// auto track
[TDAnalytics enableAutoTrack:TDAutoTrackEventTypeAppInstall | TDAutoTrackEventTypeAppStart | TDAutoTrackEventTypeAppEnd withAppId:appId_1];
// Ignore automatic collection events on a certain page.
[TDAnalytics ignoreAutoTrackViewControllers:@[] withAppId:appId_1];
[TDAnalytics setAutoTrackProperties:TDAutoTrackEventTypeAll properties:@{@"auto_key2": @"auto_value2"} withAppId:appId_1];

// track
[TDAnalytics track:@"product_buy" withAppId:appId_1];

// track first
TDFirstEventModel *firstModel = [[TDFirstEventModel alloc] initWithEventName:@"device_activation" firstCheckID:@"TD"];
firstModel.properties = @{@"key":@"value"};
[TDAnalytics trackWithEventModel:firstModel withAppId:appId_1];

// track update
TDUpdateEventModel *updateModel = [[TDUpdateEventModel alloc] initWithEventName:@"UPDATABLE_EVENT" eventID:@"test_event_id"];
updateModel.properties = @{@"status": @3, @"price": @100};
[TDAnalytics trackWithEventModel:updateModel withAppId:appId_1];

// track overwrite
TDOverwriteEventModel *overwriteModel = [[TDOverwriteEventModel alloc] initWithEventName:@"OVERWRITE_EVENT" eventID:@"test_event_id"];
overwriteModel.properties = @{@"status": @3, @"price": @100};
[TDAnalytics trackWithEventModel:overwriteModel withAppId:appId_1];

// The following example completes the statistics of the time users spend on a certain product page.
[TDAnalytics timeEvent:@"stay_shop" withAppId:appId_1];
/*
 do someting .......
 */
// When the user leaves the product page, the timer ends, and the "stay_shop" event will have an attribute indicating the duration of the event. #duration
[TDAnalytics track:@"stay_shop" withAppId:appId_1];

// logout
[TDAnalytics logoutWithAppId:appId_1];

// user set
[TDAnalytics userSet:@{@"username": @"ThinkingData"} withAppId:appId_2];

// user set once
[TDAnalytics userSetOnce:@{@"first_payment_time": @"2018-01-01 01:23:45.678"} withAppId:appId_1];

// user add
[TDAnalytics userAdd:@{@"total_revenue": @30} withAppId:appId_1];

// user unset
[TDAnalytics userUnset:@"key" withAppId:appId_1];

// user delete
[TDAnalytics userDeleteWithAppId:appId_1];

// user append
[TDAnalytics userAppend:@{@"user_list": @[@"apple", @"ball"]} withAppId:appId_1];

// user uniqe append
[TDAnalytics userUniqAppend:@{@"user_list":@[@"apple", @"cube"]} withAppId:appId_1];

// Connect H5 page data
[TDAnalytics addWebViewUserAgent];

[TDAnalytics getDeviceId];

[TDAnalytics flushWithAppId:appId_1];

// third party data
[TDAnalytics enableThirdPartySharing:TDThirdPartyTypeAppsFlyer withAppId:appId_1];

주의: APP ID는 달라야 합니다. 다중 인스턴스 간의 데이터는 공유하지 않습니다.

# 라이트 인스턴스 생성

iOS SDK 2.1.0 버전은 라이트 인스턴스 메소드를 통해 동일한 APPID 아래에서 여러 인스턴스를 생성할 수 있습니다.

// original project
NSString *appId = @"appId";
NSString *receiverUrl = @"https://receiver-ta-preview.thinkingdata.cn";
[TDAnalytics startAnalyticsWithAppId:appId serverUrl:receiverUrl];

// create light project id with original project
NSString *lightProjectAppId = [TDAnalytics lightInstanceIdWithAppId:appId];
    
// track ...
[TDAnalytics track:@"event" withAppId:lightProjectAppId];
    
// user profile ....
[TDAnalytics userSet:@{@"age": 18} withAppId:lightProjectAppId];

서브 라이트 인스턴스는 메인 인스턴트의 APPID, 데이터 수신자의 URL 및 일부 설정은 일치하며, 그 외의 정보는 공유하지 않습니다.

# 다중 인스턴스 간의 데이터 공유

대부분의 인터페이스는 인스턴스 객체에 의해 호출되므로, 대부분의 데이터와 설정은 여러 APPID 인스턴스, 메인 인스턴스, 및 라이트 인스턴스 간에 공유되지 않지만, 일부 데이터와 설정은 모든 인스턴스에서 유효합니다. 다음은 모든 세부 사항입니다:

  1. 계정 정보
    • 시스템에서 기본적으로 생성된 게스트ID#distinct_id: 공유
    • identify를 호출하여 설정한 #distinct_id: 비공유
    • login을 호출하여 설정한 #account_id: 비공유
  2. 이벤트 데이터의 track와 유저 속성 데이터의 user_set, user_setOnce, user_add, user_delete: 비공유
  3. 공통 속성 setSuperProperties과 동적 공통 속성 setDynamicSuperPropertiesTracker: 비공유
  4. SDK 설정 정보:
    • 데이터 전송 정책(전송 간격 시간과 매번 전송 수): 공유, 첫 번째 인스턴스의 APPID 프로젝트 데이터에 의해 결정됨
    • 전송 네트워크 조건 setNetworkType: 공유
  5. 자동 수집 이벤트
    • 하나의 인스턴스에서 자동 수집 이벤트를 활성화하는 것을 권장
    • 여러 APP ID에 자동 수집 이벤트를 전송 대응
    • 자동 수집 이벤트 설정은 하나의 APPID 인스턴스에서만 유효
  6. 이벤트 시간 경과 기록 timeEvent: 비공유