menu
Is this helpful?

# C# - Advanced

# 1. 계정 ID 설정

SDK 인스턴스는 랜덤 UUID로 유저의 게스트 ID로 할당됩니다. 게스트 ID는 유저가 로그인하기 전의 유저 식별 ID로 사용됩니다. 하지만, 사전에 주의해야 할 것은, 계정 ID는 유저가 재설치할 경우 변경됩니다.

# 1.1 게스트 ID 설정

::: 팁

일반적으로, 게스트 ID를 수동 설정할 필요는 없으며, 유저 식별 규칙을 확인한 후에 게스트 ID 설정을 진행해주세요.

만약 게스트 ID를 변경하고 싶은 경우는, SDK를 초기 설정한 후 바로 호출하도록 설정해주세요.

:::

독자적으로 게스트 ID의 관리 체계가 있는 경우는, identify를 호출하여 게스트 ID를 설정해주세요.

TDAnalytics.SetIdentity("Thinker");

# 1.2 계정 ID 설정

유저 로그인 시에, Login을 호출하여 계정 ID를 설정할 수 있습니다. TE는 계정 ID를 유저 신분의 식별 ID로 사용됩니다. 한 번 설정된 계정 ID는 Logout을 호출하기 전까지 저장됩니다. Login을 여러 번 호출한 경우는, 그 이전의 계정 ID가 덮어씌워집니다.

TDAnalytics.Login("TE");

이 방법으로는 로그인 이벤트로 전송되지 않습니다.

# 1.3 계정 ID 삭제

유저가 로그아웃 이벤트를 수행하기 전에, Logout을 호출하여 계정 ID를 삭제할 수 있습니다. 다시 Login을 호출하기 전까지 게스트 ID는 유저 신분의 식별 ID로 사용됩니다.

TDAnalytics.Logout();

유저가 계정을 삭제할 때 Logout을 호출하도록 설정해주세요.

로그아웃 이벤트로서 전송되지 않습니다.

# 2. 이벤트 전송

SDK가 초기화 설정을 완료한 후, 데이터 트래킹 정책에 따라 트래킹 코드를 구현하고 유저의 행동 데이터를 수집할 수 있습니다. 일반적으로, 기본 이벤트 전송은 충분히 수집 가능하며, 실제 업무 상황에 따라 처음이나 업데이트 가능 등의 특수 이벤트를 수집할 수도 있습니다.

# 2.1 기본 이벤트

track를 호출하여 데이터 트래킹 정책에 따라 이벤트 속성을 설정한 후, 데이터 전송이 가능합니다.

예: 아이템 구매

Dictionary<string, Object> dic = new Dictionary<string, object>();
dic.Add("제품_이름", "아이템명");
TDAnalytics.Track( "product_buy",dic);

# 2.2 첫 이벤트

첫 이벤트는 어떤 디바이스 혹은 다른 분석 대상의 ID마다, 처음 한 번만 기록되는 이벤트입니다.

예를 들어: 어떤 디바이스의 활성화 이벤트는 그 디바이스를 최초로 사용할 때 유용합니다.

Dictionary<string, Object> dic = new Dictionary<string, object>();
dic.Add("key", "value");
TDAnalytics.TrackFirst("device_activation", dic);

디바이스 외에 첫 이벤트를 판단하고 싶다면, first_check_id를 사용하여 첫 이벤트를 정의해주세요.

Dictionary<string, Object> dic = new Dictionary<string, object>();
dic.Add("key", "value");
TDAnalytics.TrackFirst("account_activation", "TE", dic);

주의: 서버 측에서 첫 번째 이벤트인지 확인하기 위해, 첫 이벤트는 기본적으로 1시간 지연하여 저장됩니다.

# 2.3 갱신 가능 이벤트

일반적으로 이벤트는 데이터가 저장되면 갱신할 수 없게 되지만, 데이터 갱신을 하고 싶을 경우에는 갱신 가능 이벤트를 사용해 주세요. 갱신 가능 이벤트는 식별 이벤트의 ID가 필요하며, 생성 시에는 속성에 입력해 주세요. TE시스템은 이벤트 이름과 이벤트 ID를 식별 대상으로 하여 갱신 데이터를 확정합니다.

 //이벤트 보고 후 속성 상태가 3이며, 가격은 100입니다. 
Dictionary<string, Object> dic = new Dictionary<string, object>();
dic.Add("price", 100);
dic.Add("status",3);
TDAnalytics.TrackUpdate("UPDATABLE_EVENT", "updateEventId", dic);

//이벤트 보고 후 속성 상태가 5이며, 가격은 변하지 않습니다.
Dictionary<string, Object> dic1 = new Dictionary<string, object>();
dic1.Add("status",5);
TDAnalytics.TrackUpdate("UPDATABLE_EVENT", "updateEventId", dic1);

# 2.4 덮어쓰기 이벤트

덮어쓰기 이벤트는 갱신 가능 이벤트와 비슷하며, 덮어쓰기 이벤트는 과거 데이터를 최신 데이터로 덮어쓰기 때문에 이전 데이터를 삭제하고 새로운 데이터를 저장하는 것처럼 보입니다. TE 시스템은 이벤트 이름과 이벤트 ID를 식별 대상으로 하여 갱신 데이터를 확정합니다.

// 예시: 덮어쓰기 이벤트를 보고할 때 이벤트 이름이 OVERWRITE_EVENT라고 가정
// 이벤트 속성 상태가 보고 후 3이며, 가격은 100입니다
Dictionary<string, Object> dic = new Dictionary<string, object>();
dic.Add("price", 100);
dic.Add("status",3);
TDAnalytics.TrackOverwrite("OVERWRITABLE_EVENT", "eventId", dic);

//이벤트 속성 상태가 보고 후 5이며, 가격은 삭제됩니다
Dictionary<string, Object> dic1 = new Dictionary<string, object>();
dic1.Add("status",5);
TDAnalytics.TrackOverwrite("OVERWRITABLE_EVENT", "eventId", dic1);

# 3. 유저 속성

TE에서 유저 속성을 설정하는 API는 userSet, userSetOnce, userAdd, userUnset, userDelete, userAppend입니다.

# 3.1 userSet

일반적으로 유저 속성 설정은 userSet을 사용하여 설정할 수 있습니다. 이 호출을 사용하면 원래 속성 값이 변경됩니다. 원래 속성 값이 없는 경우 새로 만들어집니다. 데이터 타입은 저장된 데이터 타입과 일치합니다. 다음은 예시입니다:

//the username now is TA
TDAnalytics.UserSet(new Dictionary<string, object>(){{"user_name", "TA"}});
//the userName now is TE
TDAnalytics.UserSet(new Dictionary<string, object>(){{"user_name", "TE"}});

# 3.2 userSetOnce

만약 유저 속성을 한 번 설정한 후 변경할 필요가 없는 경우, userSetOnce를 사용하여 설정할 수 있습니다. 이 호출은 값이 있을 때 변경하지 않습니다. 예: 첫 결제 시간 설정

//first_payment_time is 2018-01-01 01:23:45.678
TDAnalytics.UserSetOnce(new Dictionary<string, object>(){{"first_pay_time","2018-01-01 01:23:45.67"}});
//first_payment_time is still 2018-01-01 01:23:45.678
TDAnalytics.UserSetOnce(new Dictionary<string, object>(){{"first_pay_time","2018-12-31 01:23:45.678"}});

# 3.3 userAdd

만약 숫자형 속성에 대해 누적 계산을 하고 싶은 경우, userAdd를 사용하여 설정할 수 있습니다. 이 호출은 값이 없을 경우 자동으로 0을 부여한 후 계산합니다. "-" 값으로 계산하는 것도 가능합니다. 예: 누적 결제 금액

//in this case, the total_revenue is 30
TDAnalytics.UserAdd(new Dictionary<string, object>(){{"total_revenue",30}});
//in this case, the total_revenue is 678
TDAnalytics.UserAdd(new Dictionary<string, object>(){{"total_revenue",648}})

속성 key는 문자열이며, Value는 숫자 타입만 가능합니다.

# 3.4 UserUnset

유저 속성을 리셋하고 싶은 경우, userUnset을 사용하여 설정할 수 있습니다. 해당 속성이 클러스터에서 생성되지 않은 경우, userUnset은 해당 속성을 생성하지 않습니다.

List<string> list2 = new List<string>();
list2.Add("nickname");
list2.Add("age");
TDAnalytics.UserUnSet(list2);

송신 값은 클리어된 속성의 key 값이 됩니다.

# 3.5 UserDelete

유저를 삭제하고 싶은 경우, UserDelete를 사용하여 설정할 수 있습니다. 삭제한 후 해당 유저의 유저 속성은 쿼리할 수 없지만, 해당 유저가 생성한 이벤트 데이터는 쿼리할 수 있습니다..

TDAnalytics.UserDelete();

# 3.6 UserAppend

UserAppend을 사용하여 Array타입의 유저 속성을 추가할 수 있습니다.

Dictionary<string, object> dictionary = new Dictionary<string, object>();
List<string> list6 = new List<string>();
list6.Add("true");
list6.Add("test");
dictionary.Add("arrkey4", list6);
TDAnalytics.UserAppend( dictionary);

# 4. 기타 기능

# 4.1 SDK 로그 출력

ThinkingdataAnalytics.setLoggingType(TALogging.TALoggingLog);

# 4.2 프리셋 속성

속성 이름

이름

유형

설명

#ip

IP 주소

문자열

사용자의 IP 주소, TA는 사용자의 지리적 위치 정보

#country

국가

문자열

사용자의 국가 또는 지역은, IP 주소를 기반으로 생성됨

#country_code

국가 코드

문자열

사용자가 위치한 국가 또는 지역의 국가별 지역 코드(ISO 3166-1 alpha-2, 즉 2자리 대문자 영문)는, IP 주소를 기반으로 생성됨

#province

문자열

사용자의 주, IP 주소를 기반으로 생성됨

#city

도시

문자열

사용자의 도시는, IP 주소를 기반으로 생성됨

#os

OS

문자열

Android, iOS 등

#device_id

디바이스 ID

문자열

사용자의 디바이스 ID, iOS는 사용자의 IDFV나 UUID, Android는 AndroidID를 얻음

#lib

SDK 유형

문자열

SDK의 유형: Android, iOS 등

#lib_version

SDK 버전

문자열

SDK의 버전

# 4.3 SDK의 시간 조정

기본적으로 로컬의 시간이 이벤트 발생 시간으로 사용됩니다. 사용자가 디바이스의 시간을 수동으로 변경하면, 비즈니스 분석에 영향을 줄 수 있습니다. 이 경우, 타임스탬프 시간 조정 방법을 사용하여 이벤트 발생 시간의 정확성을 보장할 수 있습니다.

  • 서버에서 얻은 현재 타임스탬프를 사용하여 SDK의 시간을 조정할 수 있습니다. 그 후, 이벤트 데이터나 사용자 속성 설정 등, 지정되지 않은 모든 호출은 조정된 시간이 발생 시간으로 사용됩니다.
// 1585633785954는 현재 Unix 타임스탬프로, 밀리초 단위로 측정되며, 2020-03-31 14:49:45 한국 시간에 해당합니다.
TDAnalytics.CalibrateTime(1585633785954);