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 8 months ago