Unreal SDK

SDK μ„€μΉ˜

πŸ“˜

μ—μ–΄λΈŒλ¦Ώμ§€ 언리얼 SDKλŠ” μ΅œμ†Œ 4.23 버전 μ΄μƒμ˜ 언리얼 엔진 버전을 ν•„μš”λ‘œ ν•©λ‹ˆλ‹€.

νŒ¨ν‚€μ§€ μ„€μΉ˜

  1. μ΅œμ‹  λ²„μ „μ˜ Airbridge Unreal SDKλ₯Ό λ‹€μš΄λ‘œλ“œ λ°›μ•„μ£Όμ„Έμš”.
  2. 언리얼 엔진 ν”„λ‘œμ νŠΈμ˜ 루트 디렉터리에 Plugins 폴더λ₯Ό μƒμ„±ν•΄μ£Όμ„Έμš”.
  3. μ—μ–΄λΈŒλ¦Ώμ§€ 언리얼 SDK λ₯Ό μ•„λž˜ ꡬ쑰와 같이 Plugins 폴더 λ‚΄λΆ€λ‘œ μ΄λ™μ‹œμΌœμ£Όμ„Έμš”

    <YOUR_UE_PROJECT> β”œβ”€β”€ Plugins └── AirbridgeUnrealSDK β”œβ”€β”€ Resources β”œβ”€β”€ Source └── AirbridgeUnrealSDK.uplugin
  4. 언리얼 엔진 νˆ΄λ°”μ˜ Settings > Plugins λ₯Ό ν΄λ¦­ν•˜μ—¬ Airbridge Unreal SDK λ₯Ό ν™œμ„±ν™”μ‹œμΌœ μ£Όμ„Έμš”.
  1. μ•±μ˜ Build.cs 파일 (<YOUR_UE_PROJECT>.Build.cs) 내뢀에 μžˆλŠ” PublicDependencyModuleNames 배열에 AirbridgeUnreal λ₯Ό λ‹€μŒκ³Ό 같이 μΆ”κ°€ν•΄μ£Όμ„Έμš”.

    public class <YOUR_UE_PROJECT> : ModuleRules { public <YOUR_UE_PROJECT>(ReadOnlyTargetRules Target) : base(Target) { ... PublicDependencyModuleNames.AddRange(new string[] { ... , "AirbridgeUnreal" }); // ADD DEPENDENCY ... } }

ν”„λ‘œμ νŠΈ μ„€μ •

  1. 언리얼 엔진 νˆ΄λ°”μ˜ Settings > Project Settings... λ₯Ό ν΄λ¦­ν•˜μ—¬ Project Settings 창을 μ—΄μ–΄μ£Όμ„Έμš”.
  2. Plugins ν•­λͺ© μ•„λž˜μ—μ„œ Airbridge Unreal SDK λ₯Ό ν΄λ¦­ν•˜μ‹œλ©΄ μ•„λž˜μ™€ 같은 화면을 확인 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

🚧

ν•„λ“œ μž…λ ₯ μ™„λ£Œ ν›„ μ μš©μ„ μœ„ν•΄ λ°˜λ“œμ‹œ μ•„λž˜μ™€ 같은 처리λ₯Ό μ§„ν–‰ν•΄μ£Όμ„Έμš”.

  1. Plugins - Airbridge Unreal SDK 우츑 μƒλ‹¨μ˜ Set as Default λ₯Ό λ°˜λ“œμ‹œ λˆŒλŸ¬μ£Όμ„Έμš”. (Project > Config > DefaultAirbridge.ini νŒŒμΌμ— μ„€μ • 값이 μ €μž₯λ©λ‹ˆλ‹€.)


  2. 언리얼 엔진 νˆ΄λ°”μ˜ Airbridge(Update iOS Setting & Update Android Manifest) λ²„νŠΌμ„ λ°˜λ“œμ‹œ λˆŒλŸ¬μ£Όμ„Έμš”.

🚧

Android Manifest νŒŒμΌμ„ μ‚¬μš©μžκ°€ 직접 Merge μž‘μ—…μ„ μˆ˜ν–‰ν•  경우, Project > Plugins > AirbridgeUnrealSDK > Source > AirbridgeUnreal > Airbridge_UPL_Android.xml νŒŒμΌμ„ μ°Έμ‘°ν•˜μ—¬ μ£Όμ„Έμš”.

μ•± 정보 μ„€μ •

언리얼 에디터 Project Settings 창의 Plugins > Airbridge Unreal SDK > Airbridge Configure 의 App Name 및 App Token ν•„λ“œμ— λŒ€μ‹œλ³΄λ“œμ—μ„œ μ„€μ •λœ μ•± 이름 (Unique ID)κ³Ό μ•± SDK 토큰 정보λ₯Ό 각각 μž…λ ₯ν•΄ μ£Όμ„Έμš”.

ν•΄λ‹Ή μ •λ³΄λŠ” Airbridge λŒ€μ‹œλ³΄λ“œμ˜ β†’ Settings β†’ Tokens νƒ­μ—μ„œ ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ΄ˆκΈ°ν™”

Airbridge Unreal SDK의 경우 λ³„λ„μ˜ μ΄ˆκΈ°ν™” μž‘μ—…μ€ ν•„μš”λ‘œ ν•˜μ§€ μ•ŠμœΌλ‚˜ νŠΉμˆ˜ν•œ 경우 각 ν”Œλž«νΌλ§ˆλ‹€ λ³„λ„μ˜ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ μž‘μ—…μ΄ ν•„μš”ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

SDK μ„€μΉ˜ 확인

둜그둜 확인

ν•΄λ‹Ή μ•±μ˜ μžμ„Έν•œ 둜그 정보λ₯Ό ν™•μΈν•˜κ³  μ‹ΆμœΌμ‹  경우, Airbirdge Unreal SDKμ—μ„œλŠ” 언리얼 에디터 Project Settings 창의 Plugins > Airbridge Unreal SDK > Airbridge Configure 의 Log Level ν•„λ“œμ˜ 섀정을 ν†΅ν•˜μ—¬ ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

🚧

ν•΄λ‹Ή μ‚¬μš©μžμ˜ 정보가 λ…ΈμΆœλ  수 있기 λ•Œλ¬Έμ— ν•΄λ‹Ή μ˜΅μ…˜μ€ Debug λΉŒλ“œμ—μ„œλ§Œ λ™μž‘ ν•  수 μžˆλ„λ‘ μ²˜λ¦¬ν•΄ μ£Όμ„Έμš”.

λŒ€μ‹œλ³΄λ“œμ—μ„œ 확인

섀정이 μ™„λ£Œλ˜λ©΄ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ„€μΉ˜ ν›„ Airbridge λŒ€μ‹œλ³΄λ“œμ˜ β†’ Raw Data β†’ App Real-time Log νƒ­μ—μ„œ ν•΄λ‹Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 이벀트λ₯Ό ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

🚧

Real-time LogλŠ” 졜μž₯ 5λΆ„μ˜ μ§€μ—°μ‹œκ°„μ΄ μžˆμ„ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

λ”₯링크 μ„€μ •


λŒ€μ‹œλ³΄λ“œ μ„€μ •

각각 iOS 및 Android ν”Œλž«νΌ 별 λ”₯링크 λŒ€μ‹œλ³΄λ“œ 섀정은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈ μ„€μ •

iOS λ”₯링크 μ„€μ •

언리얼 에디터 Project Settings 창의 Plugins > Airbridge Unreal SDK > Airbridge Configure 의 iOS URI Scheme ν•„λ“œμ— λŒ€μ‹œλ³΄λ“œμ—μ„œ μ„€μ •λœ iOS URI Scheme 정보λ₯Ό μž…λ ₯ν•΄ μ£Όμ„Έμš”.

ν•΄λ‹Ή μ •λ³΄λŠ” Airbridge λŒ€μ‹œλ³΄λ“œμ˜ β†’ Tracking Link β†’ Deep Link νƒ­μ—μ„œ ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

Android λ”₯링크 μ„€μ •

언리얼 에디터 Project Settings 창의 Plugins > Airbridge Unreal SDK > Airbridge Configure 의 Android URI Scheme ν•„λ“œμ— λŒ€μ‹œλ³΄λ“œμ—μ„œ μ„€μ •λœ Android URI Scheme 정보λ₯Ό μž…λ ₯ν•΄ μ£Όμ„Έμš”.

ν•΄λ‹Ή μ •λ³΄λŠ” Airbridge λŒ€μ‹œλ³΄λ“œμ˜ β†’ Tracking Link β†’ Deep Link νƒ­μ—μ„œ ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ»€μŠ€ν…€ 도메인 μ„€μ •

Airbridge λŒ€μ‹œλ³΄λ“œμ—μ„œ νŠΈλž˜ν‚Ή 링크λ₯Ό μƒμ„±ν•˜κ²Œ λ˜λŠ” 경우 deeplink.page ν˜Ήμ€ abr.ge ν˜•νƒœμ˜ νŠΈλž˜ν‚Ή 링크λ₯Ό μ‚¬μš©ν•  수 μžˆμ§€λ§Œ, κ³ κ°μ‚¬μ—μ„œλŠ” νŠΈλž˜ν‚Ή 링크의 λΈŒλžœλ”© 및 클릭λ₯ (CTR)의 ν–₯상을 μœ„ν•΄ λ‹€μŒκ³Ό 같은 섀정을 톡해 go.my_company.com/abcd와 같이 μ»€μŠ€ν„°λ§ˆμ΄μ¦ˆ 된 URL을 νŠΈλž˜ν‚Ή 링크둜 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  1. μ‚¬μš©ν•  μ»€μŠ€ν…€ 도메인을 λ‹€μŒ κ°€μ΄λ“œμ™€ 같이 μ„€μ •ν•΄ μ£Όμ„Έμš”.

  2. μ•žμ„œ μ„€μ •ν•œ μ»€μŠ€ν…€ 도메인 μ£Όμ†Œλ₯Ό 언리얼 에디터 Project Settings 창의 Plugins > Airbridge Unreal SDK > Airbridge Configure 의 Custom Domain ν•„λ“œμ— μž…λ ₯ν•΄ μ£Όμ„Έμš”.

λ”₯링크 콜백 μ„€μ •

μœ μ €κ°€ ν΄λ¦­ν•œ λ”₯링크 데이터λ₯Ό 전솑받기 μœ„ν•΄ λ‹€μŒκ³Ό 같은 μž‘μ—…μ„ μ§„ν–‰ν•΄μ£Όμ„Έμš”.

  1. Content Browser > Add/Import > New C++ Class... λ₯Ό ν΄λ¦­ν•œ ν›„ Parent Class λ₯Ό Game Mode Base 둜 μ§€μ •ν•˜μ—¬ Game Mode Base 클래슀λ₯Ό μƒμ„±ν•˜μ—¬ μ£Όμ„Έμš”.

  2. μƒμ„±λœ Game Mode Base 클래슀의 헀더 νŒŒμΌμ— λ‹€μŒκ³Ό 같은 방법을 톡해 λ”₯링크 콜백 섀정을 진행해 μ£Όμ„Έμš”.

    // ExampleGameModeBase.h #pragma once #include "AirbridgeCallbacks.h" ... UCLASS() class YOUR_UE_PROJECT_API AExampleGameModeBase : public AGameModeBase { GENERATED_BODY() public: AExampleGameModeBase(); virtual void BeginPlay() override; // Method will be called by Airbridge when deeplink detected UFUNCTION() void OnDeeplinkReceived(const FString& Url); // Register an object to receive user-clicked deep link data UPROPERTY() UAirbridgeCallbacks* AirbridgeCallbacks; };
  3. μƒμ„±λœ Game Mode Base 클래슀의 μ†ŒμŠ€ μ½”λ“œμ— λ‹€μŒκ³Ό 같은 방법을 톡해 λ”₯링크 콜백 섀정을 진행해 μ£Όμ„Έμš”.

    // ExampleGameModeBase.cpp ... #include "AirbridgeUnreal.h" AExampleGameModeBase::AExampleGameModeBase() { AirbridgeCallbacks = CreateDefaultSubobject<UAirbridgeCallbacks>(TEXT("AIRBRIDGE_CALLBACKS")); } void AExampleGameModeBase::BeginPlay() { // Register an object to receive user-clicked deep link data AirbridgeCallbacks->OnDeeplinkReceived.AddDynamic(this, &AExampleGameModeBase::OnDeeplinkReceived); // Call SetDeeplinkCallback to receive user-clicked deep link data FAirbridgeUnreal::SetDeeplinkCallback(); } // μœ„μ™€ 같이 Callback을 λ“±λ‘ν•˜κ²Œ 되면 ν•΄λ‹Ή ν΄λž˜μŠ€λŠ” λ‹€μŒκ³Ό 같은 ν•¨μˆ˜λ₯Ό 톡해 λ”₯링크 URL을 λ„˜κ²¨λ°›κ²Œ λ©λ‹ˆλ‹€. // Method will be called by Airbridge when deeplink detected void AExampleGameModeBase::OnDeeplinkReceived(const FString& Url) { }
  4. 언리얼 에디터 Project Settings 창의 Project > Maps & Modes > Default Modes 의 Default GameMode ν•„λ“œ κ°’μœΌλ‘œ λ”₯링크 콜백 섀정이 μ™„λ£Œλœ κ²Œμž„ λͺ¨λ“œ (e.g. ExampleGameModeBase) λ₯Ό 지정해 μ£Όμ„Έμš”.

λ”₯링크 μ„€μ • 확인

Airbridge Unreal SDK의 λ”₯링크 섀정이 μ™„λ£Œ ν›„ λ‹€μŒκ³Ό 같은 링크듀을 ν†΅ν•˜μ—¬ ν•΄λ‹Ή λͺ¨λ°”일 μ•±μ˜ νŽ˜μ΄μ§€λ‘œ μ˜¬λ°”λ₯΄κ²Œ 이동 λ˜λŠ”μ§€ ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

  • scheme://

λ”₯링크 μ„€μ • 및 확인이 μ™„λ£Œλ˜λ©΄ Airbridge λŒ€μ‹œλ³΄λ“œ β†’ Raw Data β†’ App Real-time Log νƒ­μ—μ„œ λ‹€μŒκ³Ό 같이 ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš©μž μ„€μ •


μ‚¬μš©μž μ‹λ³„μž 및 μ„€μ •

Airbridgeμ—μ„œλŠ” μ›Ή(Web)κ³Ό μ•±(App)κ°„μ˜ νŒŒνŽΈν™”λœ μ‚¬μš©μžμ˜ 기여도 츑정을 μœ„ν•΄ λ‹€μŒκ³Ό 같은 μ‚¬μš©μžμ˜ μ‹λ³„μž 정보듀을 μˆ˜μ§‘ν•©λ‹ˆλ‹€.

  • User Email : 이메일
  • User Phone : μ „ν™”λ²ˆν˜Έ
  • User ID : μ‚¬μš©μž 고유 ID (μ‚¬μš©μžμ˜ νŠΉμ •ν•  수 μžˆλŠ” ID κ°’μœΌλ‘œ μ›Ήκ³Ό μ•±μ—μ„œ 1:1둜 λŒ€μ‘λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€)
  • User Alias : μ‚¬μš©μžλ₯Ό λ‚˜νƒ€λ‚Ό 수 μžˆλŠ” 기타 ID (e.g. λ‘œμ—΄ν‹° ν”„λ‘œκ·Έλž¨μš© ID, 계열사 톡합 ID λ“±λ“±)

πŸ“˜

μž…λ ₯λ˜μ–΄μ§„ μ‚¬μš©μžμ˜ 이메일과 μ „ν™”λ²ˆν˜ΈλŠ” μžλ™μœΌλ‘œ ν•΄μ‹œν™”(SHA256)λ˜μ–΄ μ„œλ²„λ‘œ μ „μ†‘λ˜μ–΄ μ§‘λ‹ˆλ‹€.

Airbridge Unreal SDKμ—μ„œλŠ” λ‹€μŒκ³Ό 같은 방법을 톡해 μ‚¬μš©μžμ˜ μ‹λ³„μž 정보λ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

#include "AirbridgeUnreal.h" FAirbridgeUnreal::SetUserID("personID"); FAirbridgeUnreal::SetUserEmail("persondoe@airbridge.io"); FAirbridgeUnreal::SetUserPhone("1(123)123-1234"); FAirbridgeUnreal::SetUserAlias(TEXT("alias1"), TEXT("value"));
  • User Alias의 κ°œμˆ˜λŠ” μ΅œλŒ€ 10개 μž…λ‹ˆλ‹€.
  • User Alias의 key λŠ” String νƒ€μž…μ΄λ©°, κΈΈμ΄λŠ” μ΅œλŒ€ 128자 μž…λ‹ˆλ‹€.
  • User Alias의 key λŠ” ^[a-z_][a-z0-9_]*$ μ •κ·œμ‹μ„ λ§Œμ‘±ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • User Alias의 value λŠ” String νƒ€μž…μ΄λ©° String의 경우 μ΅œλŒ€ 128자 μž…λ‹ˆλ‹€.

μ‚¬μš©μžμ˜ μ‹λ³„μž 정보λ₯Ό ν•œλ²ˆ μ„€μ •ν•˜κ²Œ 되면 λͺ¨λ“  μ΄λ²€νŠΈμ— ν•΄λ‹Ή μ‹λ³„μž 정보가 ν•¨κ»˜ ν¬ν•¨λ˜μ–΄ μ „λ‹¬λ©λ‹ˆλ‹€.

μ‚¬μš©μž 속성 μ„€μ •

MTA(Multi-Touch Attribution) λΆ„μ„μ˜ 정확도 ν–₯상, λ‚΄λΆ€ 데이터 뢄석, μ„œλ“œνŒŒν‹°(3rd Party) μ†”λ£¨μ…˜ 연동 λ“±μ˜ λͺ©μ μœΌλ‘œ μ‚¬μš©μžμ˜ μΆ”κ°€ 속성 데이터λ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

#include "AirbridgeUnreal.h" FAirbridgeUnreal::SetUserAttribute(TEXT("int_key"), 100); FAirbridgeUnreal::SetUserAttribute(TEXT("long_key"), 1000); FAirbridgeUnreal::SetUserAttribute(TEXT("float_key"), 3.14F); FAirbridgeUnreal::SetUserAttribute(TEXT("boolean_key"), true); FAirbridgeUnreal::SetUserAttribute(TEXT("string_key"), TEXT("airbridge"));
  • User Attribute의 κ°œμˆ˜λŠ” μ΅œλŒ€ 100개 μž…λ‹ˆλ‹€.
  • User Attribute의 key λŠ” String νƒ€μž…μ΄λ©°, κΈΈμ΄λŠ” μ΅œλŒ€ 128자 μž…λ‹ˆλ‹€.
  • User Attribute의 key λŠ” ^[a-z_][a-z0-9_]*$ μ •κ·œμ‹μ„ λ§Œμ‘±ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • User Attribute의 value λŠ” Integer, Float, Long, Boolean νƒ€μž…κ³Ό String νƒ€μž…μ΄λ©° String의 경우 μ΅œλŒ€ 1024자 μž…λ‹ˆλ‹€.

μ‚¬μš©μž μ„€μ • 확인

Airbridge Unreal SDKμ—μ„œ μ„€μ •ν•œ μœ μ € μ •λ³΄λŠ” Airbridge λŒ€μ‹œλ³΄λ“œ β†’ Raw Data β†’ App Real-time Log νƒ­μ—μ„œ λ‹€μŒκ³Ό 같이 ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ””λ°”μ΄μŠ€ μ„€μ •


λ””λ°”μ΄μŠ€ μ‹λ³„μž μ„€μ •

SDK에 λ””λ°”μ΄μŠ€ μ‹λ³„μž 정보λ₯Ό μ„€μ •ν•΄ 이후 μˆ˜μ§‘λ˜λŠ” λͺ¨λ“  μ΄λ²€νŠΈμ— λ””λ°”μ΄μŠ€ 식별정보λ₯Ό ν¬ν•¨μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. λ””λ°”μ΄μŠ€ μ‹λ³„μžκ°€ μ„€μ •λ˜λ©΄ λ³„λ„λ‘œ μ‚­μ œν•˜μ§€ μ•Šμ„ 경우 μ•± μ’…λ£Œ 여뢀에 관계없이 계속 μœ μ§€λ©λ‹ˆλ‹€.

#include "AirbridgeUnreal.h" FAirbridgeUnreal::SetDeviceAlias(TEXT("ADD_YOUR_KEY"), TEXT("AND_YOUR_VALUE")); FAirbridgeUnreal::RemoveDeviceAlias(TEXT("DELETE_THIS_KEY")); FAirbridgeUnreal::ClearDeviceAlias();
λ©”μ†Œλ“œμ„€λͺ…
SetDeviceAlias(const FString& Key, const FString& Value)μ „λ‹¬ν•œ Key와 Value μŒμ„ λ””λ°”μ΄μŠ€ μ‹λ³„μžμ— μΆ”κ°€ν•©λ‹ˆλ‹€.
RemoveDeviceAlias(const FString& Key)μ „λ‹¬ν•œ Key에 ν•΄λ‹Ήν•˜λŠ” λ””λ°”μ΄μŠ€ μ‹λ³„μžλ₯Ό μ‚­μ œν•©λ‹ˆλ‹€. ν•΄λ‹Ήν•˜λŠ” μ‹λ³„μžκ°€ 없을 경우 μ•„λ¬΄λŸ° λ™μž‘μ„ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
ClearDeviceAlias()λͺ¨λ“  λ””λ°”μ΄μŠ€ μ‹λ³„μžλ₯Ό μ‚­μ œν•©λ‹ˆλ‹€.

이벀트 μ„€μ •


Airbridge Unreal SDKμ—μ„œ ν˜ΈμΆœν•˜λŠ” λͺ¨λ“  μ΄λ²€νŠΈλ“€μ€ λ‹€μŒκ³Ό 같이 6개의 ν•˜μœ„ 속성 κ°’λ“€κ³Ό ν•¨κ»˜ 전솑할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • Event Category : 이벀트의 이름 Required (FString)
  • Event Action : 이벀트 ν•˜μœ„ 속성값 1 (FString)
  • Event Label : 이벀트 ν•˜μœ„ 속성값 2 (FString)
  • Event Value : 이벀트 ν•˜μœ„ 속성값 3 (double)
  • Event Custom Attributes : 이벀트 ν•˜μœ„μ˜ μ»€μŠ€ν…€ 데이터 (UAirbridgeMap Class)
  • Event Semantic Attributes : 이벀트 ν•˜μœ„μ˜ μ‹œλ©˜ν‹± 데이터 (UAirbridgeMap Class)

μ‚¬μš©μž 이벀트 전솑

Airbridge Unreal SDKμ—μ„œλŠ” 편의λ₯Ό μœ„ν•΄ λ‹€μŒκ³Ό 같은 3가지 μœ μ € 이벀트λ₯Ό μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

  • νšŒμ›κ°€μž… (Sign up)
#include "AirbridgeUnreal.h" #include "Airbridge/AirbridgeConstants.h" FAirbridgeUnreal::SetUserID("personID"); FAirbridgeUnreal::SetUserEmail("persondoe@airbridge.io"); FAirbridgeUnreal::SetUserPhone("1(123)123-1234"); FAirbridgeUnreal::SetUserAlias(TEXT("alias1"), TEXT("value")); FAirbridgeUnreal::TrackEvent(AirbridgeConstants::CATEGORY::SIGN_UP);
  • 둜그인 (Sign in)
#include "AirbridgeUnreal.h" #include "Airbridge/AirbridgeConstants.h" FAirbridgeUnreal::SetUserID("personID"); FAirbridgeUnreal::SetUserEmail("persondoe@airbridge.io"); FAirbridgeUnreal::SetUserPhone("1(123)123-1234"); FAirbridgeUnreal::SetUserAlias(TEXT("alias1"), TEXT("value")); FAirbridgeUnreal::TrackEvent(AirbridgeConstants::CATEGORY::SIGN_IN);
  • λ‘œκ·Έμ•„μ›ƒ (Sign out)
#include "AirbridgeUnreal.h" #include "Airbridge/AirbridgeConstants.h" FAirbridgeUnreal::TrackEvent(AirbridgeConstants::CATEGORY::SIGN_OUT); FAirbridgeUnreal::ClearUser();

이컀머슀 이벀트 전솑

Airbridge Unreal SDKμ—μ„œλŠ” 편의λ₯Ό μœ„ν•΄ λ‹€μŒκ³Ό 같은 μƒν’ˆ ν΄λž˜μŠ€μ™€ ν•¨κ»˜ 이컀머슀 이벀트λ₯Ό μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

UAirbridgeMap* Cocacola = UAirbridgeMap::CreateObject() ->Set(AirbridgeConstants::PRODUCT::ID, "beverage_1") ->Set(AirbridgeConstants::PRODUCT::NAME, "Coca Cola") ->Set(AirbridgeConstants::PRODUCT::PRICE, 1.25) ->Set(AirbridgeConstants::PRODUCT::CURRENCY, "USD") ->Set(AirbridgeConstants::PRODUCT::QUANTITY, 1) ->Set(AirbridgeConstants::PRODUCT::POSITION, 0);
  • ν™ˆ ν™”λ©΄ (Home Screen)
#include "AirbridgeUnreal.h" #include "Airbridge/AirbridgeConstants.h" FAirbridgeUnreal::TrackEvent(AirbridgeConstants::CATEGORY::VIEW_HOME);
  • 검색 κ²°κ³Ό 쑰회 (Search Results)
#include "AirbridgeUnreal.h" #include "Airbridge/AirbridgeConstants.h" UAirbridgeList* Beverages = UAirbridgeList::CreateObject(); UAirbridgeMap* Cocacola = UAirbridgeMap::CreateObject() ->Set(AirbridgeConstants::PRODUCT::ID, "beverage_1") ->Set(AirbridgeConstants::PRODUCT::NAME, "Coca Cola") ->Set(AirbridgeConstants::PRODUCT::PRICE, 1.25) ->Set(AirbridgeConstants::PRODUCT::CURRENCY, "USD") ->Set(AirbridgeConstants::PRODUCT::QUANTITY, 1) ->Set(AirbridgeConstants::PRODUCT::POSITION, 0); Beverages->Add(Cocacola); UAirbridgeMap* Fanta = UAirbridgeMap::CreateObject() ->Set(AirbridgeConstants::PRODUCT::ID, "beverage_2") ->Set(AirbridgeConstants::PRODUCT::NAME, "Fanta") ->Set(AirbridgeConstants::PRODUCT::PRICE, 10.99) ->Set(AirbridgeConstants::PRODUCT::CURRENCY, "USD") ->Set(AirbridgeConstants::PRODUCT::QUANTITY, 1) ->Set(AirbridgeConstants::PRODUCT::POSITION, 1); Beverages->Add(Fanta); UAirbridgeMap* SemanticAttributes = UAirbridgeMap::CreateObject() ->Set(AirbridgeConstants::ATTRIBUTES::QUERY, "SELECT * FROM beverages") ->Set(AirbridgeConstants::ATTRIBUTES::PRODUCTS, Beverages) ->Set(AirbridgeConstants::ATTRIBUTES::TOTAL_VALUE, 12.24); FAirbridgeUnreal::TrackEvent( AirbridgeConstants::CATEGORY::VIEW_SEARCH_RESULT, UAirbridgeEventOption::CreateObject() ->SetSemanticAttributes(SemanticAttributes) ); // Optional (Remove the resource immediately) SemanticAttributes->ConditionalBeginDestroy(); Fanta->ConditionalBeginDestroy(); Cocacola->ConditionalBeginDestroy(); Fanta->ConditionalBeginDestroy(); Beverages->ConditionalBeginDestroy();
  • μƒν’ˆ 리슀트 쑰회 (Product List)
#include "AirbridgeUnreal.h" #include "Airbridge/AirbridgeConstants.h" UAirbridgeList* Beverages = UAirbridgeList::CreateObject(); UAirbridgeMap* Cocacola = UAirbridgeMap::CreateObject() ->Set(AirbridgeConstants::PRODUCT::ID, "beverage_1") ->Set(AirbridgeConstants::PRODUCT::NAME, "Coca Cola") ->Set(AirbridgeConstants::PRODUCT::PRICE, 1.25) ->Set(AirbridgeConstants::PRODUCT::CURRENCY, "USD") ->Set(AirbridgeConstants::PRODUCT::QUANTITY, 1) ->Set(AirbridgeConstants::PRODUCT::POSITION, 0); Beverages->Add(Cocacola); UAirbridgeMap* Fanta = UAirbridgeMap::CreateObject() ->Set(AirbridgeConstants::PRODUCT::ID, "beverage_3") ->Set(AirbridgeConstants::PRODUCT::NAME, "Fanta") ->Set(AirbridgeConstants::PRODUCT::PRICE, 10.99) ->Set(AirbridgeConstants::PRODUCT::CURRENCY, "USD") ->Set(AirbridgeConstants::PRODUCT::QUANTITY, 1) ->Set(AirbridgeConstants::PRODUCT::POSITION, 2); Beverages->Add(Fanta); UAirbridgeMap* SemanticAttributes = UAirbridgeMap::CreateObject() ->Set(AirbridgeConstants::ATTRIBUTES::PRODUCT_LIST_ID, "beverage_list_0") ->Set(AirbridgeConstants::ATTRIBUTES::PRODUCTS, Beverages) ->Set(AirbridgeConstants::ATTRIBUTES::TOTAL_VALUE, 12.24); FAirbridgeUnreal::TrackEvent( AirbridgeConstants::CATEGORY::VIEW_PRODUCT_LIST, UAirbridgeEventOption::CreateObject() ->SetSemanticAttributes(SemanticAttributes) ); // Optional (Remove the resource immediately) SemanticAttributes->ConditionalBeginDestroy(); Fanta->ConditionalBeginDestroy(); Cocacola->ConditionalBeginDestroy(); Beverages->ConditionalBeginDestroy();
  • μƒν’ˆ 상세 νŽ˜μ΄μ§€ 쑰회 (Product Details)
#include "AirbridgeUnreal.h" #include "Airbridge/AirbridgeConstants.h" UAirbridgeList* Products = UAirbridgeList::CreateObject(); UAirbridgeMap* Cocacola = UAirbridgeMap::CreateObject() ->Set(AirbridgeConstants::PRODUCT::ID, "beverage_1") ->Set(AirbridgeConstants::PRODUCT::NAME, "Coca Cola") ->Set(AirbridgeConstants::PRODUCT::PRICE, 1.25) ->Set(AirbridgeConstants::PRODUCT::CURRENCY, "USD") ->Set(AirbridgeConstants::PRODUCT::QUANTITY, 1) ->Set(AirbridgeConstants::PRODUCT::POSITION, 0); Products->Add(Cocacola); UAirbridgeMap* SemanticAttributes = UAirbridgeMap::CreateObject() ->Set(AirbridgeConstants::ATTRIBUTES::PRODUCTS, Products); FAirbridgeUnreal::TrackEvent( AirbridgeConstants::CATEGORY::VIEW_PRODUCT_DETAILS, UAirbridgeEventOption::CreateObject() ->SetSemanticAttributes(SemanticAttributes) ); // Optional (Remove the resource immediately) SemanticAttributes->ConditionalBeginDestroy(); Cocacola->ConditionalBeginDestroy(); Products->ConditionalBeginDestroy();
  • μž₯λ°”κ΅¬λ‹ˆ λ‹΄κΈ° (Add to Cart)
#include "AirbridgeUnreal.h" #include "Airbridge/AirbridgeConstants.h" UAirbridgeList* Products = UAirbridgeList::CreateObject(); UAirbridgeMap* Cocacola = UAirbridgeMap::CreateObject() ->Set(AirbridgeConstants::PRODUCT::ID, "beverage_1") ->Set(AirbridgeConstants::PRODUCT::NAME, "Coca Cola") ->Set(AirbridgeConstants::PRODUCT::PRICE, 1.25) ->Set(AirbridgeConstants::PRODUCT::CURRENCY, "USD") ->Set(AirbridgeConstants::PRODUCT::QUANTITY, 1) ->Set(AirbridgeConstants::PRODUCT::POSITION, 0); Products->Add(Cocacola); UAirbridgeMap* SemanticAttributes = UAirbridgeMap::CreateObject() ->Set(AirbridgeConstants::ATTRIBUTES::PRODUCTS, Products) ->Set(AirbridgeConstants::ATTRIBUTES::TOTAL_VALUE, 1.25); FAirbridgeUnreal::TrackEvent( AirbridgeConstants::CATEGORY::ADD_TO_CART, UAirbridgeEventOption::CreateObject() ->SetSemanticAttributes(SemanticAttributes) ); // Optional (Remove the resource immediately) SemanticAttributes->ConditionalBeginDestroy(); Cocacola->ConditionalBeginDestroy(); Products->ConditionalBeginDestroy();
  • 결제 μ™„λ£Œ (Order Complete)
#include "AirbridgeUnreal.h" #include "Airbridge/AirbridgeConstants.h" UAirbridgeList* Beverages = UAirbridgeList::CreateObject(); UAirbridgeMap* Cocacola = UAirbridgeMap::CreateObject() ->Set(AirbridgeConstants::PRODUCT::ID, "beverage_1") ->Set(AirbridgeConstants::PRODUCT::NAME, "Coca Cola") ->Set(AirbridgeConstants::PRODUCT::PRICE, 1.25) ->Set(AirbridgeConstants::PRODUCT::CURRENCY, "USD") ->Set(AirbridgeConstants::PRODUCT::QUANTITY, 1) ->Set(AirbridgeConstants::PRODUCT::POSITION, 0); Beverages->Add(Cocacola); UAirbridgeMap* Fanta = UAirbridgeMap::CreateObject() ->Set(AirbridgeConstants::PRODUCT::ID, "beverage_3") ->Set(AirbridgeConstants::PRODUCT::NAME, "Fanta") ->Set(AirbridgeConstants::PRODUCT::PRICE, 10.99) ->Set(AirbridgeConstants::PRODUCT::CURRENCY, "USD") ->Set(AirbridgeConstants::PRODUCT::QUANTITY, 1) ->Set(AirbridgeConstants::PRODUCT::POSITION, 2); Beverages->Add(Fanta); UAirbridgeMap* SemanticAttributes = UAirbridgeMap::CreateObject() ->Set(AirbridgeConstants::ATTRIBUTES::TRANSACTION_ID, "transaction_123") ->Set(AirbridgeConstants::ATTRIBUTES::PRODUCTS, Beverages) ->Set(AirbridgeConstants::ATTRIBUTES::IN_APP_PURCHASED, true) ->Set(AirbridgeConstants::ATTRIBUTES::TOTAL_VALUE, 12.24); FAirbridgeUnreal::TrackEvent( AirbridgeConstants::CATEGORY::ORDER_COMPLETE, UAirbridgeEventOption::CreateObject() ->SetSemanticAttributes(SemanticAttributes) ); // Optional (Remove the resource immediately) SemanticAttributes->ConditionalBeginDestroy(); Fanta->ConditionalBeginDestroy(); Cocacola->ConditionalBeginDestroy(); Fanta->ConditionalBeginDestroy(); Beverages->ConditionalBeginDestroy();

μ»€μŠ€ν…€ 이벀트 전솑

Airbridge Unreal SDKμ—μ„œλŠ” λ‹€μŒκ³Ό 같은 방법을 톡해 μ»€μŠ€ν„°λ§ˆμ΄μ¦ˆ 된 이벀트λ₯Ό 전솑할 수 μžˆμŠ΅λ‹ˆλ‹€.

#include "AirbridgeUnreal.h" #include "Airbridge/AirbridgeConstants.h" FAirbridgeUnreal::TrackEvent( "category", UAirbridgeEventOption::CreateObject() ->SetAction("action") ->SetLabel("label") ->SetValue(100.99) // Custom Attributes ->SetCustomAttributes( UAirbridgeMap::CreateObject() ->Set("model", "MMM") ->Set("report", UAirbridgeMap::CreateObject() ->Set("start_date", "2022-01-01") ->Set("end_date", "2022-12-31") ->Set("channel_attributions", UAirbridgeList::CreateObject() ->Add(UAirbridgeMap::CreateObject() ->Set("channel", "Paid Search") ->Set("attributed_conversions", 100) ->Set("attributed_revenue", 1000) ) ->Add(UAirbridgeMap::CreateObject() ->Set("channel", "Organic Search") ->Set("attributed_conversions", 75) ->Set("attributed_revenue", 500) ) ->Add(UAirbridgeMap::CreateObject() ->Set("channel", "Email") ->Set("attributed_conversions", 50) ->Set("attributed_revenue", 250) ) ) ) ) // Semantic Attributes ->SetSemanticAttributes(UAirbridgeMap::CreateObject() ->Set(AirbridgeConstants::ATTRIBUTES::QUERY, "query_123")) );

μœ„μ˜ μ½”λ“œλ₯Ό ν†΅ν•΄μ„œ μ„œλ²„μ— μ „μ†‘λ˜λŠ” 이벀트 payloadλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

{ "category": "category", "action": "action", "label": "label", "value": 100.99, "customAttributes": { "model": "MMM", "report": { "start_date": "2022-01-01", "end_date": "2022-12-31", "channel_attributions": [ { "channel": "Paid Search", "attributed_conversions": 100, "attributed_revenue": 1000 }, { "channel": "Organic Search", "attributed_conversions": 75, "attributed_revenue": 500 }, { "channel": "Email", "attributed_conversions": 50, "attributed_revenue": 250 } ] } }, "semanticAttributes": { "query": "query_123" } }

πŸ“˜

Semantic Attributesλ₯Ό 직접 κ΅¬μ„±ν•˜μ—¬ μ „λ‹¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒ νŽ˜μ΄μ§€λ₯Ό μ°Έμ‘°ν•΄ μ£Όμ„Έμš”.

이벀트 전솑 확인

Airbridge Unreal SDKμ—μ„œ μ „μ†‘λœ 이벀트 μ •λ³΄λŠ” Airbridge λŒ€μ‹œλ³΄λ“œ β†’ Raw Data β†’ App Real-time Log νƒ­μ—μ„œ λ‹€μŒκ³Ό 같이 ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

κ³ κΈ‰ μ„€μ •


SDK Signature μ„€μ •

Airbirdge Unreal SDKμ—μ„œλŠ” 언리얼 에디터 Project Settings 창의 Plugins > Airbridge Unreal SDK > Airbridge Configure 의 Sdk Signature Secret ID ν•„λ“œμ™€ Sdk Signature Secret ν•„λ“œμ˜ 섀정을 톡해 SDK λ₯Ό SDK Spoofing 으둜 λΆ€ν„° λ³΄ν˜Έν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“˜

SDK Signature λ₯Ό μ„€μ •ν•˜κΈ° μœ„ν•΄μ„œλŠ” SDK Signature Secret, SDK Signature Secret ID 2가지가 ν•„μš”ν•©λ‹ˆλ‹€.

ν•΄λ‹Ή 2가지 값을 λ°œκΈ‰λ°›κΈ° μœ„ν•΄μ„œλŠ” λ‹΄λ‹Ή μ—μ–΄λΈŒλ¦Ώμ§€ CSM μ—κ²Œ 지원을 μš”μ²­ν•΄μ£Όμ„Έμš”.

μ‚¬μš©μž 정보 ν•΄μ‹œν™” μ„€μ •

λ‚΄λΆ€μ˜ 데이터 뢄석 λ“±μ˜ λͺ©μ μ„ μœ„ν•΄ HASH(SHA256)ν•˜μ§€ μ•Šκ³  μ‚¬μš©μžμ˜ μ‹λ³„μž 정보λ₯Ό μ „μ†‘ν•˜κ³  싢은 경우, 언리얼 에디터 Project Settings 창의 Plugins > Airbridge Unreal SDK > Airbridge Configure 의 User Info Hash Enabled ν•„λ“œμ˜ 섀정을 톡해 User Email 그리고 User Phone μ •λ³΄μ˜ ν•΄μ‹œν™”(SHA256)λ₯Ό 쀑단할 수 μžˆμŠ΅λ‹ˆλ‹€.

❗️

ν•΄λ‹Ή μ˜΅μ…˜μ€ User Emailκ³Ό User Phone λ“± λ―Όκ°ν•œ κ°œμΈμ •λ³΄λ₯Ό 제 3μžμ—κ²Œ μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ— λ‚΄λΆ€μ μœΌλ‘œ λ³„λ„μ˜ λ³΄μ•ˆ μ‘°μΉ˜κ°€ μ„ ν–‰λ˜μ–΄μ Έμ•Ό ν•©λ‹ˆλ‹€.

μ„Έμ…˜ νƒ€μž„μ•„μ›ƒ μ„€μ •

Airbirdge Unreal SDKμ—μ„œλŠ” 언리얼 에디터 Project Settings 창의 Plugins > Airbridge Unreal SDK > Airbridge Configure 의 Session Timeout Seconds ν•„λ“œμ˜ 섀정을 톡해 μ„€μ •λœ μ„Έμ…˜ μ‹œκ°„ 내에 μœ μ €κ°€ 앱을 재 μ‹€ν–‰ ν•˜λ”λΌλ„ 같은 μ„Έμ…˜μœΌλ‘œ νŒλ‹¨ν•˜μ—¬ μ•± μ‹€ν–‰ 이벀트λ₯Ό λ‹€μ‹œ 보내지 μ•Šλ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ°œμΈμ •λ³΄λ³΄ν˜Έ μ„€μ •

ν•΄λ‹Ή κΈ°λŠ₯은 GDPRμ΄λ‚˜ CCPA와 같이 κ³ κ°μœΌλ‘œλΆ€ν„° κ°œμΈμ •λ³΄λ³΄ν˜Έμ— λŒ€ν•œ λ™μ˜λ₯Ό λ°›μ•„ 데이터 μˆ˜μ§‘ 및 전솑을 μ§„ν–‰ν•˜λŠ” κ²½μš°μ— μœ μš©ν•œ κΈ°λŠ₯μž…λ‹ˆλ‹€.

언리얼 에디터 Project Settings 창의 Plugins > Airbridge Unreal SDK > Airbridge Configure 의 Auto Start Tracking Enabled ν•„λ“œμ˜ 섀정을 μ΄μš©ν•˜μ—¬ 데이터 μˆ˜μ§‘κ³Ό 전솑을 λͺ…μ‹œμ μœΌλ‘œ μ‹œμž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“˜

ν•΄λ‹Ή κΈ°λŠ₯을 λΉ„ν™œμ„±ν™”ν•œ κ²½μš°μ— λ‹€μŒκ³Ό 같은 ν•¨μˆ˜λ₯Ό λͺ…μ‹œμ μœΌλ‘œ ν˜ΈμΆœν•΄μ•Ό μ˜¬λ°”λ₯΄κ²Œ 데이터 μˆ˜μ§‘μ΄ μ΄λ£¨μ–΄μ§€κ²Œ λ©λ‹ˆλ‹€.

#include "AirbridgeUnreal.h" FAirbridgeUnreal::StartTracking();

Airbridge 링크 좔적 μ„€μ •

κ΄‘κ³ μ£Όμ˜ μ•± λ‚΄μ—μ„œ λ‹€μˆ˜μ˜ λ”₯링크 λ™μž‘μœΌλ‘œ 인해 Airbridgeλ₯Ό ν†΅ν•œ Re-engagement μ„±κ³Όλ₯Ό ν•œλˆˆμ— ν™•μΈν•˜κΈ° μ–΄λ €μš΄ 경우, 언리얼 에디터 Project Settings 창의 Plugins > Airbridge Unreal SDK > Airbridge Configure 의 Track Airbridge Link Only ν•„λ“œμ˜ 섀정을 ν†΅ν•˜μ—¬ Airbridge λ”₯링크λ₯Ό 톡해 λ“€μ–΄μ˜¨ μ„±κ³Όλ§Œ ν•„ν„°λ§ν•˜λ„λ‘ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν•΄λ‹Ή κΈ°λŠ₯을 ν™œμ„±ν™”ν•  경우 μ•„λž˜μ˜ 쑰건을 λ§Œμ‘±ν•œ λ”₯링크λ₯Ό 톡해 앱이 μ˜€ν”ˆ 된 κ²½μš°μ— ν•œν•˜μ—¬ λ”₯링크 μ„±κ³Όλ‘œ μΈ‘μ •ν•©λ‹ˆλ‹€.

  • λŒ€μ‹œλ³΄λ“œμ— λ“±λ‘λœ ν˜•νƒœμ˜ λ”₯링크λ₯Ό 톡해 앱이 μ˜€ν”ˆ 된 경우
  • airbridge.io λ”₯링크λ₯Ό 톡해 앱이 μ˜€ν”ˆ 된 경우
  • deeplink.page λ”₯링크λ₯Ό 톡해 앱이 μ˜€ν”ˆ 된 경우
  • airbridge_referrer query 정보가 μ‘΄μž¬ν•˜λŠ” 경우

μœ„μΉ˜ 정보 μˆ˜μ§‘

Airbridge Unreal SDKμ—μ„œλŠ” 언리얼 에디터 Project Settings 창의 Plugins > Airbridge Unreal SDK > Airbridge Configure 의 Location Collection Enabled ν•„λ“œμ˜ 섀정을 ν†΅ν•˜μ—¬ μœ μ €μ˜ μœ„μΉ˜ 정보λ₯Ό μˆ˜μ§‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

❗️

μœ„μΉ˜ μ •λ³΄λŠ” 합법적인 λͺ©μ κ³Ό 방법을 ν†΅ν•˜μ—¬ μˆ˜μ§‘λ˜μ–΄μ•Ό ν•˜λ―€λ‘œ λ³Έ κΈ°λŠ₯ μ‚¬μš©μ— μ£Όμ˜κ°€ μš”κ΅¬λ©λ‹ˆλ‹€.

🚧

ν•΄λ‹Ή κΈ°λŠ₯은 였직 μ•ˆλ“œλ‘œμ΄λ“œμ—μ„œ μ‚¬μš© κ°€λŠ₯ν•˜λ©° λ‹€μŒκ³Ό 같은 κΆŒν•œμ΄ AndroidManifest.xml에 ν¬ν•¨λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

μ•± 좔적 ν—ˆμš© μ„€μ •

iOS 14의 μ •μ±… 변화에 따라 iOSμ—μ„œ μ•± 좔적 ν—ˆμš© μ„€μ •(App Tracking Transparency)을 ν†΅ν•˜μ—¬ μ‚¬μš©μžμ—κ²Œ λ™μ˜λ₯Ό μ–»μ–΄μ•Ό μ˜¬λ°”λ₯΄κ²Œ IDFA 정보λ₯Ό μˆ˜μ§‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Airbridge Unreal SDKμ—μ„œλŠ” 언리얼 에디터 Project Settings 창의 Plugins > Airbridge Unreal SDK > Airbridge Configure 의 iOS Tracking Authorize Timeout Seconds 섀정을 톡해 μ„€μΉ˜ 이벀트λ₯Ό μ§€μ—°ν•˜μ—¬ μ˜¬λ°”λ₯΄κ²Œ IDFAκ°€ μΈμŠ€ν†¨ μ΄λ²€νŠΈμ— ν¬ν•¨λ˜λ„λ‘ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ•± μ‚­μ œ 좔적 μ„€μ •

Uninstall Tracking μ„€μ • 방법

Android Uninstall Tracking

Firebase Cloud Messaging 섀정을 톡해 μƒμ„±λ˜μ–΄μ§€λŠ” Push Token을 λ‹€μŒ κ°€μ΄λ“œλ₯Ό μ°Έκ³ ν•˜μ—¬ 전달해 μ£Όμ„Έμš”.

#include "AirbridgeUnreal.h" FAirbridgeUnreal::RegisterPushToken("FIREBASE_PUSH_TOKEN");

iOS Uninstall Tracking

APNs Device Token을 λ‹€μŒ κ°€μ΄λ“œλ₯Ό μ°Έκ³ ν•˜μ—¬ 전달해 μ£Όμ„Έμš”.

#include "AirbridgeUnreal.h" FAirbridgeUnreal::RegisterPushToken("APNS_DEVICE_TOKEN");

ν•˜μ΄λΈŒλ¦¬λ“œ μ•± μ„€μ •

Web SDK만의 μ„€μΉ˜λ‘œλŠ” μ•± μ„€μΉ˜ 및 μ‹€ν–‰ λ˜λŠ” λ”₯링크 호좜 λ“±μ˜ 좔가적인 이벀트λ₯Ό νŠΈλž˜ν‚Ή ν•  μˆ˜κ°€ μ—†μŠ΅λ‹ˆλ‹€. Airbridge μ—μ„œλŠ” λ‹€μŒκ³Ό 같은 섀정을 ν†΅ν•˜μ—¬ μ‰½κ²Œ ν•˜μ΄λΈŒλ¦¬λ“œ μ•±μ—μ„œ 인앱 이벀트λ₯Ό ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.

#include "AirbridgeUnreal.h" TUniquePtr<IAirbridgeWebInterface> AirbridgeWebInterface; AirbridgeWebInterface = TUniquePtr<IAirbridgeWebInterface>(FAirbridgeUnreal::CreateWebInterface( TEXT("YOUR_WEB_TOKEN"), // web token [](const FString& Msg) -> FString // post command function { return TEXT("..."); } ));

FAirbridgeUnreal::CreateWebInterface λ₯Ό ν†΅ν•΄μ„œ Web Interface λ₯Ό μ œμ–΄ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Blueprints μ‚¬μš© κ°€μ΄λ“œ

Blueprints μ‚¬μš© κ°€μ΄λ“œμ—μ„œ μžμ„Έν•œ λ‚΄μš©μ„ ν™•μΈν•˜μ„Έμš”.