Unreal SDK
SDK μ€μΉ
μμ΄λΈλ¦Ώμ§ μΈλ¦¬μΌ SDKλ μ΅μ
4.23
λ²μ μ΄μμ μΈλ¦¬μΌ μμ§ λ²μ μ νμλ‘ ν©λλ€.
ν¨ν€μ§ μ€μΉ
- μ΅μ λ²μ μ Airbridge Unreal SDKλ₯Ό λ€μ΄λ‘λ λ°μμ£ΌμΈμ.
- μΈλ¦¬μΌ μμ§ νλ‘μ νΈμ λ£¨νΈ λλ ν°λ¦¬μ
Plugins
ν΄λλ₯Ό μμ±ν΄μ£ΌμΈμ. - μμ΄λΈλ¦Ώμ§ μΈλ¦¬μΌ SDK λ₯Ό μλ ꡬ쑰μ κ°μ΄ Plugins ν΄λ λ΄λΆλ‘ μ΄λμμΌμ£ΌμΈμ
<YOUR_UE_PROJECT> βββ Plugins βββ AirbridgeUnrealSDK βββ Resources βββ Source βββ AirbridgeUnrealSDK.uplugin
- μΈλ¦¬μΌ μμ§ ν΄λ°μ
Settings > Plugins
λ₯Ό ν΄λ¦νμ¬ Airbridge Unreal SDK λ₯Ό νμ±νμμΌ μ£ΌμΈμ.
- μ±μ 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 ... } }
νλ‘μ νΈ μ€μ
- μΈλ¦¬μΌ μμ§ ν΄λ°μ
Settings > Project Settings...
λ₯Ό ν΄λ¦νμ¬ Project Settings μ°½μ μ΄μ΄μ£ΌμΈμ. - Plugins νλͺ© μλμμ
Airbridge Unreal SDK
λ₯Ό ν΄λ¦νμλ©΄ μλμ κ°μ νλ©΄μ νμΈ ν μ μμ΅λλ€.
νλ μ λ ₯ μλ£ ν μ μ©μ μν΄ λ°λμ μλμ κ°μ μ²λ¦¬λ₯Ό μ§νν΄μ£ΌμΈμ.
- Plugins - Airbridge Unreal SDK μ°μΈ‘ μλ¨μ
Set as Default
λ₯Ό λ°λμ λλ¬μ£ΌμΈμ. (Project > Config > DefaultAirbridge.ini
νμΌμ μ€μ κ°μ΄ μ μ₯λ©λλ€.)
- μΈλ¦¬μΌ μμ§ ν΄λ°μ
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 λ₯λ§ν¬ λμ보λ μ€μ λ°λ‘ κ°κΈ°
- 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μ νΈλνΉ λ§ν¬λ‘ μ¬μ©ν μ μμ΅λλ€.
-
μ¬μ©ν 컀μ€ν λλ©μΈμ λ€μ κ°μ΄λμ κ°μ΄ μ€μ ν΄ μ£ΌμΈμ.
-
μμ μ€μ ν 컀μ€ν λλ©μΈ μ£Όμλ₯Ό μΈλ¦¬μΌ μλν° Project Settings μ°½μ
Plugins > Airbridge Unreal SDK > Airbridge Configure
μCustom Domain
νλμ μ λ ₯ν΄ μ£ΌμΈμ.
λ₯λ§ν¬ μ½λ°± μ€μ
μ μ κ° ν΄λ¦ν λ₯λ§ν¬ λ°μ΄ν°λ₯Ό μ μ‘λ°κΈ° μν΄ λ€μκ³Ό κ°μ μμ μ μ§νν΄μ£ΌμΈμ.
-
Content Browser > Add/Import > New C++ Class...
λ₯Ό ν΄λ¦ν ν Parent Class λ₯ΌGame Mode Base
λ‘ μ§μ νμ¬ Game Mode Base ν΄λμ€λ₯Ό μμ±νμ¬ μ£ΌμΈμ. -
μμ±λ 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; };
-
μμ±λ 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) { }
-
μΈλ¦¬μΌ μλν° 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("[email protected]");
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("[email protected]");
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("[email protected]");
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 μ¬μ© κ°μ΄λμμ μμΈν λ΄μ©μ νμΈνμΈμ.
Updated over 1 year ago