# Unreal
::: 팁
구현하기 전에 데이터 엑세스 준비를 확인하십시오.
TDAnalytics는 Unreal의 빌트인 Analytics 서비스를 구현하며, C++ 코드 호출 인터페이스를 통해 직접 데이터를 전송하는 것도 지원합니다. 현재 Android, iOS, Windows, 및 MacOS 플랫폼을 지원합니다.
:::
최신 버전: v2.0.1
업데이트 시간: 2023-11-24
리소스: Source Code (opens new window) SDK 다운로드 (opens new window)
# 1. SDK 구현
# 1.1 TDAnalytics 플러그인 구현
Unreal SDK를 다운로드하여 압축을 풀고, TDAnalytics
을 프로젝트의 Plugins
디렉토리에 설치합니다. Plugins
디렉토리가 존재하지 않는 경우는, 먼저 프로젝트의 루트 디렉토리 아래에 Plugins
디렉토리를 만들고 나서, TDAnalytics
디렉토리를 거기에 설치합니다.
# 1.2 TDAnalytics 플러그인 활성화
TDAnalytics 플러그인을 활성화하려면 다음 단계를 수행해야 합니다:
- Unreal Editor를 재시작
- Edit > Plugins, Analytics 카테고리 아래에서, TDAnalytics를 활성화
- Blueprint를 사용하는 경우, 빌트인 Analytics 카테고리에서
Analytics Blueprint Library
를 활성화 - Unreal Editor를 재시작
- Edit > Project, 플러그인 카테고리에서 TDAnalytics의 파라미터 설정:
- Server Url: 필수. 수신 주소로 https 타입의 주소를 사용해야 합니다.
- App ID: 필수. 프로젝트의 APP ID는, TE 백그라운드 프로젝트 관리 페이지에서 확인할 수 있습니다.
- TimeZone: 선택사항. 타임존을 사용하는 경우 'Asia/Shanghai', 'UTC' 등의 표준 타임존 ID를 입력해 주십시오. 타임존을 맞출 필요가 없는 경우 입력하지 않아도 됩니다.
- Enable Encrypt: 데이터 암호화를 활성화할지 여부. 기본값은 false입니다. 활성화한 후, 데이터는 암호화되어 TE에 업로드됩니다.
- EncryptPublicKey: 선택사항. 입력하지 않은 경우, 공개 키 암호화에 기본 설정이 사용됩니다.
- EncryptVersion: 선택사항. 입력되지 않은 경우, 기본 구성 및 키 버전이 사용됩니다.
- SymmetricEncryption: 선택사항. 입력되지 않은 경우, 기본 구성, 대칭 키가 사용됩니다.
- AsymmetricEncryption: 선택사항. 입력되지 않은 경우, 기본 구성, 비대칭 키가 사용됩니다.
주의: Windows/MacOS는 시간대 조정을 지원하지 않습니다.
Config
디렉토리의DefaultEngine.ini
파일에 다음을 추가합니다.
[Analytics]
ProviderModuleName=TDAnalytics
- TDAnalytics 인터페이스를 C++ 코드로 직접 사용하는 경우, 프로젝트의 *.Build.cs 파일에 다음을 추가해야 합니다.
PrivateDependencyModuleNames.AddRange(new string[] { "TDAnalytics" });
PrivateIncludePathModuleNames.AddRange(new string[] { "TDAnalytics" });
또한, SDK를 사용하는 파일에서 TDAnalytics.h
헤더 파일을 참조합니다.
#include "TDAnalytics.h"
# 2. 초기 설정
다음은 SDK 초기 설정의 코드 예시입니다:
UTDAnalytics::Initialize();
초기 설정이 완료되면, SDK를 사용하여 이벤트를 전송할 수 있습니다.
# 3. 주요 기능
주요 기능을 사용하기 전에, 유저 식별 규칙을 확인하십시오.
SDK는 게스트 ID를 자동으로 생성하고, 로컬에 저장됩니다; 유저가 로그인하기 전까지, 게스트 ID를 신분 식별 ID로 사용됩니다.
주의: 게스트 ID는 유저가 앱을 재설치할 때 리셋됩니다.
# 3.1 계정 ID 설정
유저가 로그인할 때, login
을 호출하여 유저의 계정 ID를 설정할 수 있습니다. TE 플랫폼은 계정 ID를 신분 식별 ID로서 logout
을 호출할 때까지 유지합니다. login
을 여러 번 호출하면, 이전의 계정 ID가 덮어씌워집니다.
// 유저의 고유 로그인 식별자, 데이터 추적에서 #account_id에 해당합니다. #Account_id는 현재 TE입니다.
UTDAnalytics::Login("TE");
이 방법으로는 로그인 이벤트가 전송되지 않습니다
# 3.2 공통 이벤트 속성 설정
공통 이벤트 속성은 모든 이벤트에 포함되는 속성입니다. setSuperProperties
를 호출하여 설정할 수 있습니다. 이벤트를 전송하기 전에, 공통 이벤트 속성을 설정해 주세요.
예를 들어: 플레이어의 레벨, 전투력, 소유 자원 등의 속성
TSharedPtr<FJsonObject> Properties = MakeShareable(new FJsonObject);
Properties->SetStringField("channel", "TE");//문자열
Properties->SetNumberField("age", 1);//숫자
Properties->SetBoolField("isSuccess", true);//부울
FDateTime DateTime = FDateTime::Now();
Properties->SetStringField("birthday", FDateTime::FromUnixTimestamp(DateTime.ToUnixTimestamp()).ToString(TEXT("%Y-%m-%d %H:%M:%S.")) += *FString::Printf(TEXT("%03d"), DateTime.GetMillisecond()));//시간
TSharedPtr<FJsonObject> ItemProperties = MakeShareable(new FJsonObject);
ItemProperties->SetStringField("itemChannel", "item");
Properties->SetObjectField("object", ItemProperties);//객체
TArray< TSharedPtr<FJsonValue> > DataObjectArray;
TSharedPtr<FJsonObject> ArrayItemProperties = MakeShareable(new FJsonObject);
ArrayItemProperties->SetStringField("arrayItemChannel", "array_item");
TSharedPtr<FJsonValueObject> DataObjectValue = MakeShareable(new FJsonValueObject(ArrayItemProperties));
DataObjectArray.Add(DataObjectValue);
Properties->SetArrayField("object_arr", DataObjectArray);//배열 객체
TArray< TSharedPtr<FJsonValue> > DataArray;
TSharedPtr<FJsonValueString> DataValue = MakeShareable(new FJsonValueString("data_value"));
DataArray.Add(DataValue);
Properties->SetArrayField("arr", DataArray);//배열
UTDAnalytics::SetSuperProperties(Properties, AppID);
- Key는 해당 속성의 이름으로 문자열 타입이며, 영문자와 숫자, "_"를 포함하여 최대 50자까지 가능합니다. TE시스템은 일괄적으로 소문자로 통일됩니다.
- Value는 해당 속성의 값으로, String, Number, Boolean, Time, Object, Array, List Object를 지원합니다.
이벤트 속성, 유저 속성은 공통 이벤트 속성과 일치해야 합니다.
# 3.3 자동 수집 이벤트의 On/Off
클라이언트 SDK는 일부 이벤트를 자동으로 수집할 수 있으며, 실제 업무 상황에 따라 on/off를 설정하십시오.
UTDAnalytics::EnableAutoTrack();
# 3.4 이벤트 전송
track
을 호출하여 이벤트를 전송합니다. 데이터 플랜을 준비한 상태에서 전송해 주세요. 아래는 모델 코드입니다. 예: 아이템 구매
TSharedPtr<FJsonObject> Properties = MakeShareable(new FJsonObject);
Properties->SetStringField("product_name", "product name");
UTDAnalytics::Track("product_buy", Properties);
이벤트 이름은 문자열 타입이며, 영문자와 숫자, "_"를 포함하여 최대 50자까지 입력할 수 있습니다.
# 3.5 유저 속성 설정
일반적인 유저 속성에 대해서는, UserSet
을 사용하여 설정할 수 있으며, UserSet
은 기존 값에 덮어씌워집니다. 해당 속성에 값이 없는 경우, 새로운 속성이 생성됩니다. 아래는 코드 예제입니다.
//유저 이름이 현재 TA입니다
TSharedPtr<FJsonObject> Properties = MakeShareable(new FJsonObject);
Properties->SetStringField("username", "TA");
UTDAnalytics::UserSet(Properties);
//유저 이름이 현재 TE입니다
TSharedPtr<FJsonObject> NewProperties = MakeShareable(new FJsonObject);
NewProperties->SetStringField("username", "TE");
UTDAnalytics::UserSet(NewProperties);
# 4. 코드 예시 (Example Code)
아래의 코드 예시에 모든 작업이 포함되어 있으며, 아래 순서대로 사용하는 것을 권장합니다:
#include "TDAnalytics.h"
if (개인정보 처리방침이 승인되었다면) {
UTDAnalytics::Initialize();
//유저가 로그인한 경우, 유저의 계정 ID를 고유 식별자로 설정할 수 있습니다
UTDAnalytics::Login("TE");
//Super Properties를 설정한 후, 각 이벤트는 Super Properties를 가지게 됩니다
TSharedPtr<FJsonObject> Properties = MakeShareable(new FJsonObject);
Properties->SetStringField("channel", "TE");//문자열
Properties->SetNumberField("age", 1);//숫자
Properties->SetBoolField("isSuccess", true);//부울
FDateTime DateTime = FDateTime::Now();
Properties->SetStringField("birthday", FDateTime::FromUnixTimestamp(DateTime.ToUnixTimestamp()).ToString(TEXT("%Y-%m-%d %H:%M:%S.")) += *FString::Printf(TEXT("%03d"), DateTime.GetMillisecond()));//시간
TSharedPtr<FJsonObject> ItemProperties = MakeShareable(new FJsonObject);
ItemProperties->SetStringField("itemChannel", "item");
Properties->SetObjectField("object", ItemProperties);//객체
TArray< TSharedPtr<FJsonValue> > DataObjectArray;
TSharedPtr<FJsonObject> ArrayItemProperties = MakeShareable(new FJsonObject);
ArrayItemProperties->SetStringField("arrayItemChannel", "array_item");
TSharedPtr<FJsonValueObject> DataObjectValue = MakeShareable(new FJsonValueObject(ArrayItemProperties));
DataObjectArray.Add(DataObjectValue);
Properties->SetArrayField("object_arr", DataObjectArray);//배열 객체
TArray< TSharedPtr<FJsonValue> > DataArray;
TSharedPtr<FJsonValueString> DataValue = MakeShareable(new FJsonValueString("data_value"));
DataArray.Add(DataValue);
Properties->SetArrayField("arr", DataArray);//배열
UTDAnalytics::SetSuperProperties(Properties, AppID);
//자동 추적 활성화
UTDAnalytics::EnableAutoTrack();
//이벤트 업로드
TSharedPtr<FJsonObject> Properties = MakeShareable(new FJsonObject);
Properties->SetStringField("product_name", "제품 이름");
UTDAnalytics::Track("product_buy", Properties);
//유저 속성 설정
TSharedPtr<FJsonObject> UserProperties = MakeShareable(new FJsonObject);
UserProperties->SetStringField("username", "TE");
UTDAnalytics::UserSet(Proper);
}