> ## Documentation Index
> Fetch the complete documentation index at: https://help.airbridge.io/llms.txt
> Use this file to discover all available pages before exploring further.

# SDK 마이그레이션 가이드 - 언리얼 SDK

에어브릿지 언리얼 SDK의 업데이트에 필요한 사항을 확인할 수 있습니다. 현재 버전 이후부터 업데이트 이후 버전까지의 사항을 모두 확인하는 것을 권장합니다.

## v1.x에서 v4.0으로 업데이트

에어브릿지 언리얼 SDK를 v4.0으로 업데이트하면 확인해 주세요.

<Accordion title="전체 변경사항">
  #### 옵션

  | Airbridge Settings (v1)                 | Airbridge Settings (v4)                    | 변경점                    |
  | --------------------------------------- | ------------------------------------------ | ---------------------- |
  | App Name                                | App Name                                   | -                      |
  | App Token                               | App Token                                  | -                      |
  | Log Level                               | Log Level                                  | -                      |
  | iOS URI Scheme                          | iOS URI Scheme                             | -                      |
  | Android URI Scheme                      | Android URI Scheme                         | -                      |
  | Custom Domain                           | Custom Domain                              | 다중 입력을 지원 기능이 추가되었습니다. |
  | Session Timeout Seconds                 | Session Timeout Seconds                    | -                      |
  | User Info Hash Enabled                  | User Info Hash Enabled                     | -                      |
  | Location Collection Enabled             | Location Collection Enabled                | -                      |
  | Track Airbridge Link Only               | Track Airbridge Link Only                  | -                      |
  | Auto Start Tracking Enabled             | Auto Start Tracking Enabled                | -                      |
  | -                                       | Facebook Deferred App Link Enabled         | 새로운 기능이 추가되었습니다.       |
  | iOS Tracking Authorize Timeout Seconds  | iOS Tracking Authorize Timeout Seconds     | -                      |
  | SDK Signature Secret ID                 | SDK Signature Secret ID                    | -                      |
  | SDK Signature Secret                    | SDK Signature Secret                       | -                      |
  | -                                       | Track In Session Life Cycle Event Enabled  | 새로운 기능이 추가되었습니다.       |
  | -                                       | Pause Event Transmit On Background Enabled | 새로운 기능이 추가되었습니다.       |
  | -                                       | Clear Event Buffer On Initialize Enabled   | 새로운 기능이 추가되었습니다.       |
  | -                                       | SDK Enabled                                | 새로운 기능이 추가되었습니다.       |
  | -                                       | App Market Identifier                      | 새로운 기능이 추가되었습니다.       |
  | -                                       | Event Buffer Count Limit                   | 새로운 기능이 추가되었습니다.       |
  | -                                       | Event Buffer Size Limit In Gibibyte        | 새로운 기능이 추가되었습니다.       |
  | -                                       | Event Transmit Interval Seconds            | 새로운 기능이 추가되었습니다.       |
  | Meta Install Referrer (Facebook App ID) | Meta Install Referrer (Facebook App ID)    | -                      |

  #### 함수 (Unreal)

  <Danger>
    **주의하세요**

    접근 함수 클래스의 이름이 `FAirbridgeUnreal` 에서 `FAirbridge`로 변경 되었습니다.
  </Danger>

  | FAirbridgeUnreal (v1)  | FAirbridge (v4)                 | 변경점                                   |
  | ---------------------- | ------------------------------- | ------------------------------------- |
  | -                      | EnableSDK                       | 새로운 기능이 추가되었습니다.                      |
  | -                      | DisableSDK                      | 새로운 기능이 추가되었습니다.                      |
  | -                      | IsSDKEnabled                    | 새로운 기능이 추가되었습니다.                      |
  | StartTracking          | StartTracking                   | -                                     |
  | -                      | StopTracking                    | 새로운 기능이 추가되었습니다.                      |
  | -                      | IsTrackingEnabled               | 새로운 기능이 추가되었습니다.                      |
  | SetUserID              | SetUserID                       | -                                     |
  | -                      | ClearUserID                     | 새로운 기능이 추가되었습니다.                      |
  | SetUserEmail           | SetUserEmail                    | -                                     |
  | -                      | ClearUserEmail                  | 새로운 기능이 추가되었습니다.                      |
  | SetUserPhone           | SetUserPhone                    | -                                     |
  | -                      | ClearUserPhone                  | 새로운 기능이 추가되었습니다.                      |
  | SetUserAttribute       | SetUserAttribute                | -                                     |
  | RemoveUserAttribute    | RemoveUserAttribute             | -                                     |
  | ClearUserAttributes    | ClearUserAttributes             | -                                     |
  | SetUserAlias           | SetUserAlias                    | -                                     |
  | RemoveUserAlias        | RemoveUserAlias                 | -                                     |
  | ClearUserAlias         | ClearUserAlias                  | -                                     |
  | ClearUser              | ClearUser                       | -                                     |
  | Click                  | Click                           | 콜백 기능이 추가되었습니다.                       |
  | Impression             | Impression                      | 콜백 기능이 추가되었습니다.                       |
  | SetDeeplinkCallback    | SetOnDeeplinkReceived           | 이름이 변경되었습니다. 값을 람다 형태로 제공받도록 변경되었습니다. |
  | SetAttributionCallback | SetOnAttributionReceived        | 이름이 변경되었습니다. 값을 람다 형태로 제공받도록 변경되었습니다. |
  | TrackEvent             | TrackEvent                      | 이벤트 정보를 입력받는 방식이 변경되었습니다.             |
  | SetDeviceAlias         | SetDeviceAlias                  | -                                     |
  | RemoveDeviceAlias      | RemoveDeviceAlias               | -                                     |
  | ClearDeviceAlias       | ClearDeviceAlias                | -                                     |
  | RegisterPushToken      | RegisterPushToken               | -                                     |
  | CreateWebInterface     | -                               | WebInterface 관련 함수들로 대체되었습니다.         |
  | -                      | CreateWebInterfaceScript        | 새로운 기능이 추가되었습니다.                      |
  | -                      | HandleWebInterfaceCommand       | 새로운 기능이 추가되었습니다.                      |
  | -                      | FetchAirbridgeGeneratedUUID     | 새로운 기능이 추가되었습니다.                      |
  | -                      | FetchDeviceUUID                 | 새로운 기능이 추가되었습니다.                      |
  | -                      | IsUninstallTrackingNotification | 새로운 기능이 추가되었습니다.                      |

  #### 상수 (Unreal)

  | AirbridgeConstants::CATEGORY (v1) | AirbridgeCategory (v4)  | 변경점                               |
  | --------------------------------- | ----------------------- | --------------------------------- |
  | SIGN\_UP                          | SIGN\_UP                | -                                 |
  | SIGN\_IN                          | SIGN\_IN                | -                                 |
  | SIGN\_OUT                         | SIGN\_OUT               | -                                 |
  | VIEW\_HOME                        | -                       | HOME\_VIEWED로 대체되었습니다.            |
  | HOME\_VIEWED                      | HOME\_VIEWED            | -                                 |
  | VIEW\_SEARCH\_RESULT              | -                       | SEARCH\_RESULTS\_VIEWED로 대체되었습니다. |
  | SEARCH\_RESULTS\_VIEWED           | SEARCH\_RESULTS\_VIEWED | -                                 |
  | VIEW\_PRODUCT\_LIST               | -                       | PRODUCT\_LIST\_VIEWED로 대체되었습니다.   |
  | PRODUCT\_LIST\_VIEWED             | PRODUCT\_LIST\_VIEWED   | -                                 |
  | VIEW\_PRODUCT\_DETAILS            | -                       | PRODUCT\_VIEWED로 대체되었습니다.         |
  | PRODUCT\_VIEWED                   | PRODUCT\_VIEWED         | -                                 |
  | ADD\_TO\_CART                     | -                       | ADDED\_TO\_CART로 대체되었습니다.         |
  | ADDED\_TO\_CART                   | ADDED\_TO\_CART         | -                                 |
  | ORDER\_COMPLETE                   | -                       | ORDER\_COMPLETED로 대체되었습니다.        |
  | ORDER\_COMPLETED                  | ORDER\_COMPLETED        | -                                 |
  | ADD\_PAYMENT\_INFO                | ADD\_PAYMENT\_INFO      | -                                 |
  | ADD\_TO\_WISHLIST                 | ADD\_TO\_WISHLIST       | -                                 |
  | INITIATE\_CHECKOUT                | INITIATE\_CHECKOUT      | -                                 |
  | ORDER\_CANCELED                   | ORDER\_CANCELED         | -                                 |
  | START\_TRIAL                      | START\_TRIAL            | -                                 |
  | SUBSCRIBE                         | SUBSCRIBE               | -                                 |
  | UNSUBSCRIBE                       | UNSUBSCRIBE             | -                                 |
  | AD\_IMPRESSION                    | AD\_IMPRESSION          | -                                 |
  | AD\_CLICK                         | AD\_CLICK               | -                                 |
  | COMPLETE\_TUTORIAL                | COMPLETE\_TUTORIAL      | -                                 |
  | ACHIEVE\_LEVEL                    | ACHIEVE\_LEVEL          | -                                 |
  | UNLOCK\_ACHIEVEMENT               | UNLOCK\_ACHIEVEMENT     | -                                 |
  | RATE                              | RATE                    | -                                 |
  | SHARE                             | SHARE                   | -                                 |
  | SCHEDULE                          | SCHEDULE                | -                                 |
  | SPEND\_CREDITS                    | SPEND\_CREDITS          | -                                 |

  | AirbridgeConstants::ATTRIBUTES (v1)   | AirbridgeAttribute (v4)               | 변경점              |
  | ------------------------------------- | ------------------------------------- | ---------------- |
  | -                                     | ACTION                                | 상수 키 값이 추가되었습니다. |
  | -                                     | LABEL                                 | 상수 키 값이 추가되었습니다. |
  | -                                     | VALUE                                 | 상수 키 값이 추가되었습니다. |
  | TOTAL\_VALUE                          | -                                     | VALUE로 대체되었습니다.  |
  | CURRENCY                              | CURRENCY                              | -                |
  | ORIGINAL\_CURRENCY                    | ORIGINAL\_CURRENCY                    | -                |
  | PRODUCTS                              | PRODUCTS                              | -                |
  | PERIOD                                | PERIOD                                | -                |
  | IS\_RENEWAL                           | IS\_RENEWAL                           | -                |
  | RENEWAL\_COUNT                        | RENEWAL\_COUNT                        | -                |
  | PRODUCT\_LIST\_ID                     | PRODUCT\_LIST\_ID                     | -                |
  | CART\_ID                              | CART\_ID                              | -                |
  | TRANSACTION\_ID                       | TRANSACTION\_ID                       | -                |
  | TRANSACTION\_TYPE                     | TRANSACTION\_TYPE                     | -                |
  | TRANSACTION\_PAIRED\_EVENT\_CATEGORY  | TRANSACTION\_PAIRED\_EVENT\_CATEGORY  | -                |
  | TRANSACTION\_PAIRED\_EVENT\_TIMESTAMP | TRANSACTION\_PAIRED\_EVENT\_TIMESTAMP | -                |
  | TOTAL\_QUANTITY                       | TOTAL\_QUANTITY                       | -                |
  | QUERY                                 | QUERY                                 | -                |
  | IN\_APP\_PURCHASED                    | IN\_APP\_PURCHASED                    | -                |
  | CONTRIBUTION\_MARGIN                  | CONTRIBUTION\_MARGIN                  | -                |
  | ORIGINAL\_CONTRIBUTION\_MARGIN        | ORIGINAL\_CONTRIBUTION\_MARGIN        | -                |
  | LIST\_ID                              | LIST\_ID                              | -                |
  | RATE\_ID                              | RATE\_ID                              | -                |
  | RATE                                  | RATE                                  | -                |
  | MAX\_RATE                             | MAX\_RATE                             | -                |
  | ACHIEVEMENT\_ID                       | ACHIEVEMENT\_ID                       | -                |
  | SHARED\_CHANNEL                       | SHARED\_CHANNEL                       | -                |
  | DATE\_TIME                            | DATE\_TIME                            | -                |
  | DESCRIPTION                           | DESCRIPTION                           | -                |
  | IS\_REVENUE                           | IS\_REVENUE                           | -                |
  | PLACE                                 | PLACE                                 | -                |
  | SCHEDULE\_ID                          | SCHEDULE\_ID                          | -                |
  | TYPE                                  | TYPE                                  | -                |
  | LEVEL                                 | LEVEL                                 | -                |
  | SCORE                                 | SCORE                                 | -                |
  | -                                     | AD\_PARTNERS                          | 새로운 기능이 추가되었습니다. |
  | -                                     | IS\_FIRST\_PER\_USER                  | 새로운 기능이 추가되었습니다. |

  | AirbridgeConstants::PRODUCT (v1) | AirbridgeAttribute (v4) | 변경점               |
  | -------------------------------- | ----------------------- | ----------------- |
  | ID                               | PRODUCT\_ID             | 상수 키 값으로 변경되었습니다. |
  | NAME                             | PRODUCT\_NAME           | 상수 키 값으로 변경되었습니다. |
  | PRICE                            | PRODUCT\_PRICE          | 상수 키 값으로 변경되었습니다. |
  | QUANTITY                         | PRODUCT\_QUANTITY       | 상수 키 값으로 변경되었습니다. |
  | CURRENCY                         | PRODUCT\_CURRENCY       | 상수 키 값으로 변경되었습니다. |
  | POSITION                         | PRODUCT\_POSITION       | 상수 키 값으로 변경되었습니다. |
  | CATEGORY\_ID                     | PRODUCT\_CATEGORY\_ID   | 상수 키 값으로 변경되었습니다. |
  | CATEGORY\_NAME                   | PRODUCT\_CATEGORY\_NAME | 상수 키 값으로 변경되었습니다. |
  | BRAND\_ID                        | PRODUCT\_BRAND\_ID      | 상수 키 값으로 변경되었습니다. |
  | BRAND\_NAME                      | PRODUCT\_BRAND\_NAME    | 상수 키 값으로 변경되었습니다. |

  #### 함수 (Android)

  | - (v1) | AirbridgeUnreal (v4)    | 변경점              |
  | ------ | ----------------------- | ---------------- |
  | -      | setLifecycleIntegration | 새로운 기능이 추가되었습니다. |
</Accordion>

### SDK 설치 및 초기화

`Project > Config > DefaultAirbridge.ini` 파일에 기록된 에어브릿지 설정값의 위치가 `Project > Config > DefaultEngine.ini` 파일의 `[/Script/AirbridgeEditor.AirbridgeSettings]` 섹션으로 이동하였습니다.

`FAirbridgeUnreal::StartTracking` 함수가 `FAirbridge::StartTracking` 함수로 대체되었습니다.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- FAirbridgeUnreal::StartTracking();
+ FAirbridge::StartTracking();
```

`FAirbridgeUnreal::StopTracking` 함수가 `FAirbridge::StopTracking` 함수로 대체되었습니다.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- FAirbridgeUnreal::StopTracking();
+ FAirbridge::StopTracking();
```

### 딥링크

`FAirbridgeUnreal::SetDeeplinkCallback` 함수가 `FAirbridge::SetOnDeeplinkReceived` 함수로 대체되었습니다.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- AExampleGameModeBase::AExampleGameModeBase()
- {
-   AirbridgeCallbacks = CreateDefaultSubobject<UAirbridgeCallbacks>(TEXT("AIRBRIDGE_CALLBACKS"));
- }

void AExampleGameModeBase::BeginPlay()
{
-    AirbridgeCallbacks->OnDeeplinkReceived.AddDynamic(this, &AExampleGameModeBase::OnDeeplinkReceived);
-    FAirbridgeUnreal::SetDeeplinkCallback();
+    FAirbridge::SetOnDeeplinkReceived([](const FString& Url)
+    {
+        // show proper content
+    });
}

- void AExampleGameModeBase::OnDeeplinkReceived(const FString& Url)
- {
-     // show proper content 
- }
```

### 커스텀 도메인 설정하기

v1.x 에서는 하나의 커스텀 도메인만 입력할 수 있었지만, v4.0 부터는 여러 개의 커스텀 도메인을 입력할 수 있습니다.

### 인앱 이벤트 및 유저 정보

`FAirbridgeUnreal::TrackEvent` 함수가 `FAirbridge::TrackEvent` 함수로 대체되었습니다.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- FAirbridgeUnreal::TrackEvent(
-    AirbridgeConstants::CATEGORY::ORDER_COMPLETED,
-    UAirbridgeEventOption::CreateObject()
-    ->SetAction("Tool")
-    ->SetLabel("Hammer")
-    ->SetValue(10.0)
-    ->SetSemanticAttributes(
-        UAirbridgeMap::CreateObject()
-        ->Set(AirbridgeConstants::ATTRIBUTES::CURRENCY, "USD")
-        ->Set(AirbridgeConstants::ATTRIBUTES::PRODUCTS, UAirbridgeList::CreateObject()
-            ->Add(UAirbridgeMap::CreateObject()
-                ->Set(AirbridgeConstants::PRODUCT::ID, "12345")
-                ->Set("name", "PlasticHammer")
-            )
-        )
-        ->Set("totalQuantity", 1)
-    )
-    ->SetCustomAttributes(
-        UAirbridgeMap::CreateObject()
-        ->Set("promotion", "FirstPurchasePromotion")
-    )
- );
+ FAirbridge::TrackEvent(
+    AirbridgeCategory::ORDER_COMPLETED,
+    UAirbridgeMap::CreateObject()
+    ->Set(AirbridgeAttribute::ACTION, "Tool")
+    ->Set(AirbridgeAttribute::LABEL, "Hammer")
+    ->Set(AirbridgeAttribute::VALUE, 10)
+    ->Set(AirbridgeAttribute::CURRENCY, "USD")
+    ->Set(AirbridgeAttribute::PRODUCTS, UAirbridgeList::CreateObject()->Add(
+            UAirbridgeMap::CreateObject()
+            ->Set(AirbridgeAttribute::PRODUCT_ID, "12345")
+            ->Set("name", "PlasticHammer")
+        )
+    )
+    ->Set("totalQuantity", 1),
+    UAirbridgeMap::CreateObject()
+    ->Set("promotion", "FirstPurchasePromotion")
+ );
```

<Accordion title="주의하세요">
  `AirbridgeConstants::CATEGORY` Namespace가 `ArbridgeCategory`로, `AirbridgeConstants::ATTRIBUTES` Namespace가 `AirbridgeAttribute`로 변경 되었습니다.

  `FAirbridge::TrackEvent` 함수의 첫 번째 파라미터에 `category` 정보가 포함되어야 합니다.

  `FAirbridge::TrackEvent` 함수의 두 번째 파라미터에 `Semantic Attributes` 값들이 포함되어야 합니다.

  `FAirbridge::TrackEvent` 함수의 세 번째 파라미터에 `Custom Attributes` 값들이 포함되어야 합니다.
</Accordion>

`FAirbridgeUnreal::SetUser` 함수가 `FAirbridge::SetUser` 관련 함수로 대체되었습니다.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- FAirbridgeUnreal::SetUserID("personID");
- FAirbridgeUnreal::SetUserEmail("persondoe@airbridge.io");
- FAirbridgeUnreal::SetUserPhone("1(123)123-1234");
- FAirbridgeUnreal::SetUserAttribute("key", "value");
- FAirbridgeUnreal::SetUserAlias("key", "value");
+ FAirbridge::SetUserID("personID");
+ FAirbridge::SetUserEmail("persondoe@airbridge.io");
+ FAirbridge::SetUserPhone("1(123)123-1234");
+ FAirbridge::SetUserAttribute("key", "value");
+ FAirbridge::SetUserAlias("key", "value");
```

### 추가 설정하기

`FAirbridgeUnreal::Impression` 함수가 `FAirbridge::Impression` 함수로 대체되었습니다.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- FAirbridgeUnreal::Impression(TEXT("https://abr.ge/~~~"));
+ FAirbridge::Impression(
+    TEXT("https://abr.ge/~~~"),
+    []() 
+    {
+        // Handle on success
+    },
+    [](const FString& Error)
+    {
+        // Handle on failure
+    }
+);
```

`FAirbridgeUnreal::Click` 함수가 `FAirbridge::Click` 함수로 대체되었습니다.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- FAirbridgeUnreal::Click(TEXT("https://abr.ge/~~~"));
+ FAirbridge::Click(
+    TEXT("https://abr.ge/~~~"),
+    []() 
+    {
+        // Handle on success
+    },
+    [](const FString& Error)
+    {
+        // Handle on failure
+    }
+);
```

`FAirbridgeUnreal::SetAttributionCallback` 함수가 `FAirbridge::SetOnAttributionReceived` 함수로 대체되었습니다.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- AExampleGameModeBase::AExampleGameModeBase()
- {
-   AirbridgeCallbacks = CreateDefaultSubobject<UAirbridgeCallbacks>(TEXT("AIRBRIDGE_CALLBACKS"));
- }

void AExampleGameModeBase::BeginPlay()
{
-    AirbridgeCallbacks->OnAttributionReceived.AddDynamic(this, &AExampleGameModeBase::OnAttributionReceived);
-    FAirbridgeUnreal::SetAttributionCallback();
+    FAirbridge::SetOnAttributionReceived([this](const TMap<FString, FString>& AttributionResult)
+    {
+        // using attribution
+    });
}

- void AExampleGameModeBase::OnAttributionReceived(const FAirbridgeAttribution& Attribution)
- {
-     // using attribution
- }
```

#### 디바이스 식별자 설정

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- FAirbridgeUnreal::SetDeviceAlias("ADD_YOUR_KEY", "AND_YOUR_VALUE");
+ FAirbridge::SetDeviceAlias("ADD_YOUR_KEY", "AND_YOUR_VALUE");
- FAirbridgeUnreal::RemoveDeviceAlias("DELETE_THIS_KEY");
+ FAirbridge::RemoveDeviceAlias("DELETE_THIS_KEY");
- FAirbridgeUnreal::ClearDeviceAlias();
+ FAirbridge::ClearDeviceAlias();
```

### 하이브리드 앱 설정

`FAirbridgeUnreal::CreateWebInterface` 함수가 `FAirbridge::CreateWebInterfaceScript` , `FAirbridge::HandleWebInterfaceCommand` 함수로 대체되었습니다.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- TUniquePtr<IAirbridgeWebInterface> AirbridgeWebInterface;
+ FString WebInterfaceScript;
- AirbridgeWebInterface = TUniquePtr<IAirbridgeWebInterface>(FAirbridgeUnreal::CreateWebInterface(
-     TEXT("YOUR_WEB_TOKEN"),             
-     [](const FString& Msg) -> FString   
-     {
-         return TEXT("...");
-     }
- ));
+ WebInterfaceScript = FAirbridge::CreateWebInterfaceScript(
+     TEXT("YOUR_WEB_TOKEN"),
+     [](const FString& Msg) -> FString
+     {
+         return TEXT("...");
+     }("payload")
+ );
```

<link rel="alternate" hrefLang="en" href="https://help.airbridge.io/en/developers/migration-guide-for-unreal-sdk-v4" />

<link rel="alternate" hrefLang="ko" href="https://help.airbridge.io/ko/developers/migration-guide-for-unreal-sdk-v4" />
