> ## 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의 업데이트에 필요한 사항을 확인할 수 있습니다. 현재 버전 이후부터 업데이트 이후 버전까지의 사항을 모두 확인하는 것을 권장합니다.

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

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

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

  | airbridge.json (v2)             | airbridge.json (v4)                               | 변경점              |
  | ------------------------------- | ------------------------------------------------- | ---------------- |
  | -                               | sdkEnabled                                        | 새로운 기능이 추가되었습니다. |
  | logLevel                        | logLevel                                          | -                |
  | autoStartTrackingEnabled        | autoStartTrackingEnabled                          | -                |
  | trackingAuthorizeTimeoutSeconds | autoDetermineTrackingAuthorizationTimeoutInSecond | 이름이 변경되었습니다.     |
  | facebookDeferredAppLinkEnabled  | trackMetaDeferredAppLinkEnabled                   | 이름이 변경되었습니다.     |
  | sessionTimeoutSeconds           | sessionTimeoutInSecond                            | 이름이 변경되었습니다.     |
  | metaInstallReferrer             | metaInstallReferrerAppID                          | 이름이 변경되었습니다.     |
  | trackAirbridgeLinkOnly          | trackAirbridgeDeeplinkOnlyEnabled                 | 이름이 변경되었습니다.     |
  | -                               | trackInSessionLifecycleEventEnabled               | 새로운 기능이 추가되었습니다. |
  | userInfoHashEnabled             | hashUserInformationEnabled                        | 이름이 변경되었습니다.     |
  | sdkSignatureSecretID            | sdkSignatureID                                    | 이름이 변경되었습니다.     |
  | sdkSignatureSecret              | sdkSignatureSecret                                | 이름이 변경되었습니다.     |
  | -                               | clearEventBufferOnInitializeEnabled               | 새로운 기능이 추가되었습니다. |
  | -                               | eventBufferCountLimit                             | 새로운 기능이 추가되었습니다. |
  | -                               | eventBufferSizeLimitInGibibyte                    | 새로운 기능이 추가되었습니다. |
  | -                               | eventTransmitIntervalInSecond                     | 새로운 기능이 추가되었습니다. |

  #### 함수 (React Native)

  | Airbridge (v2)               | Airbridge (v4)                  | 변경점                                   |
  | ---------------------------- | ------------------------------- | ------------------------------------- |
  | state.setAttributionListener | setOnAttributionReceived        | 이름이 변경되었습니다.                          |
  | deeplink.setDeeplinkListener | setOnDeeplinkReceived           | 이름이 변경되었습니다.                          |
  | event.trackEvent             | trackEvent                      | 이름이 변경되었습니다. 어트리뷰트를 입력받는 방식이 변경되었습니다. |
  | state.deviceUUID             | fetchDeviceUUID                 | 이름이 변경되었습니다. 값을 콜백으로 제공하도록 변경되었습니다.   |
  | -                            | fetchAirbridgeGeneratedUUID     | 새로운 기능이 추가되었습니다.                      |
  | -                            | isUninstallTrackingNotification | 새로운 기능이 추가되었습니다.                      |
  | placement.click              | click                           | 이름이 변경되었습니다. 콜백 기능이 추가되었습니다.          |
  | placement.impression         | impression                      | 이름이 변경되었습니다. 콜백 기능이 추가되었습니다.          |
  | state.setUser                | -                               | User 관련 함수들로 대체되었습니다.                 |
  | state.updateUser             | -                               | User 관련 함수들로 대체되었습니다.                 |
  | -                            | setUserID                       | 새로운 기능이 추가되었습니다.                      |
  | -                            | clearUserID                     | 새로운 기능이 추가되었습니다.                      |
  | -                            | setUserEmail                    | 새로운 기능이 추가되었습니다.                      |
  | -                            | clearUserEmail                  | 새로운 기능이 추가되었습니다.                      |
  | -                            | setUserPhone                    | 새로운 기능이 추가되었습니다.                      |
  | -                            | clearUserPhone                  | 새로운 기능이 추가되었습니다.                      |
  | -                            | setUserAttribute                | 새로운 기능이 추가되었습니다.                      |
  | -                            | removeUserAttribute             | 새로운 기능이 추가되었습니다.                      |
  | -                            | clearUserAttributes             | 새로운 기능이 추가되었습니다.                      |
  | -                            | setUserAlias                    | 새로운 기능이 추가되었습니다.                      |
  | -                            | removeUserAlias                 | 새로운 기능이 추가되었습니다.                      |
  | -                            | clearUserAlias                  | 새로운 기능이 추가되었습니다.                      |
  | -                            | clearUser                       | 새로운 기능이 추가되었습니다.                      |
  | setDeviceAlias               | setDeviceAlias                  | -                                     |
  | removeDeviceAlias            | removeDeviceAlias               | -                                     |
  | clearDeviceAlias             | clearDeviceAlias                | -                                     |
  | registerPushToken            | registerPushToken               | -                                     |
  | -                            | enableSDK                       | 새로운 기능이 추가되었습니다.                      |
  | -                            | disableSDK                      | 새로운 기능이 추가되었습니다.                      |
  | -                            | isSDKEnabled                    | 새로운 기능이 추가되었습니다.                      |
  | state.startTracking          | startTracking                   | 이름이 변경되었습니다.                          |
  | -                            | stopTracking                    | 새로운 기능이 추가되었습니다.                      |
  | -                            | isTrackingEnabled               | 새로운 기능이 추가되었습니다.                      |
  | createWebInterface           | -                               | WebInterface 관련 함수들로 대체되었습니다.         |
  | -                            | createWebInterfaceScript        | 새로운 기능이 추가되었습니다.                      |
  | -                            | handleWebInterfaceCommand       | 새로운 기능이 추가되었습니다.                      |

  #### 상수 (React Native)

  | AirbridgeCategory (v2)  | AirbridgeCategory (v4)  | 변경점 |
  | ----------------------- | ----------------------- | --- |
  | SIGN\_UP                | SIGN\_UP                | -   |
  | SIGN\_IN                | SIGN\_IN                | -   |
  | SIGN\_OUT               | SIGN\_OUT               | -   |
  | HOME\_VIEWED            | HOME\_VIEWED            | -   |
  | PRODUCT\_LIST\_VIEWED   | PRODUCT\_LIST\_VIEWED   | -   |
  | SEARCH\_RESULTS\_VIEWED | SEARCH\_RESULTS\_VIEWED | -   |
  | PRODUCT\_VIEWED         | PRODUCT\_VIEWED         | -   |
  | ADD\_PAYMENT\_INFO      | ADD\_PAYMENT\_INFO      | -   |
  | ADD\_TO\_WISHLIST       | ADD\_TO\_WISHLIST       | -   |
  | ADD\_TO\_CART           | ADDED\_TO\_CART         | -   |
  | INITIATE\_CHECKOUT      | INITIATE\_CHECKOUT      | -   |
  | ORDER\_COMPLETED        | ORDER\_COMPLETED        | -   |
  | 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          | -   |

  | AirbridgeAttributes (v2)              | 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                          | AD\_PARTNERS                          | -                |
  | IS\_FIRST\_PER\_USER                  | IS\_FIRST\_PER\_USER                  | -                |

  | AirbridgeProduct (v2)   | AirbridgeAttribute (v4) | 변경점 |
  | ----------------------- | ----------------------- | --- |
  | PRODUCT\_ID             | PRODUCT\_ID             | -   |
  | PRODUCT\_NAME           | PRODUCT\_NAME           | -   |
  | PRODUCT\_PRICE          | PRODUCT\_PRICE          | -   |
  | PRODUCT\_QUANTITY       | PRODUCT\_QUANTITY       | -   |
  | PRODUCT\_CURRENCY       | PRODUCT\_CURRENCY       | -   |
  | PRODUCT\_POSITION       | PRODUCT\_POSITION       | -   |
  | PRODUCT\_CATEGORY\_ID   | PRODUCT\_CATEGORY\_ID   | -   |
  | PRODUCT\_CATEGORY\_NAME | PRODUCT\_CATEGORY\_NAME | -   |
  | PRODUCT\_BRAND\_ID      | PRODUCT\_BRAND\_ID      | -   |
  | PRODUCT\_BRAND\_NAME    | PRODUCT\_BRAND\_NAME    | -   |

  #### 함수 (iOS)

  | AirbridgeRN (v2)                 | AirbridgeReactNative (v4) | 변경점          |
  | -------------------------------- | ------------------------- | ------------ |
  | getInstance                      | initializeSDK             | 이름이 변경되었습니다. |
  | deeplink.handleURLSchemeDeeplink | trackDeeplink             | 이름이 변경되었습니다. |
  | deeplink.handleUserActivity      | trackDeeplink             | 이름이 변경되었습니다. |

  #### 함수 (Android)

  | AirbridgeRN (v2)        | AirbridgeReactNative (v4) | 변경점          |
  | ----------------------- | ------------------------- | ------------ |
  | init                    | initializeSDK             | 이름이 변경되었습니다. |
  | processDeeplinkData     | trackDeeplink             | 이름이 변경되었습니다. |
  | setLifecycleIntegration |                           | -            |
</Accordion>

### SDK 설치 및 초기화

airbridge.json 의 키값이 변경되었습니다. 아래와 같이 키값을 변경해 주세요.

| airbridge.json (v2)             | airbridge.json (v4)                               |
| ------------------------------- | ------------------------------------------------- |
| trackingAuthorizeTimeoutSeconds | autoDetermineTrackingAuthorizationTimeoutInSecond |
| facebookDeferredAppLinkEnabled  | trackMetaDeferredAppLinkEnabled                   |
| sessionTimeoutSeconds           | sessionTimeoutInSecond                            |
| metaInstallReferrer             | metaInstallReferrerAppID                          |
| trackAirbridgeLinkOnly          | trackAirbridgeDeeplinkOnlyEnabled                 |
| userInfoHashEnabled             | hashUserInformationEnabled                        |
| sdkSignatureSecretID            | sdkSignatureID                                    |
| sdkSignatureSecret              | sdkSignatureSecret                                |

iOS의 AirbridgeRN.getInstance 함수가 AirbridgeReactNative.initializeSDK 함수로 대체되었습니다. `ios/YOUR_PROJECT_NAME/AppDelegate.m` 파일을 수정해 주세요.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- import <AirbridgeRN/AirbridgeRN.h>
- ...
- - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
-     [AirbridgeRN getInstance:@"YOUR_APP_SDK_TOKEN" appName:@"YOUR_APP_NAME" withLaunchOptions:launchOptions];
-     ...
- }
+ import <AirbridgeReactNative/AirbridgeReactNative.h>
+ ...
+ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+     [AirbridgeReactNative initializeSDKWithName:@"YOUR_APP_NAME" token:@"YOUR_APP_SDK_TOKEN"];
+     ...
+ }
```

안드로이드의 AirbridgeRN.init 함수가 AirbridgeReactNative.initializeSDK 함수로 대체되었습니다. `android/app/src/main/java/.../MainApplication.kt` 파일을 수정해 주세요.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- import co.ab180.airbridge.reactnative.AirbridgeRN;
- ...
- override fun onCreate() {
-     super.onCreate()
-     AirbridgeRN.init(this, "YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
-     ...
- }
+ import co.ab180.airbridge.reactnative.AirbridgeReactNative
+ ...
+ override fun onCreate() {
+     super.onCreate()
+     AirbridgeReactNative.initializeSDK(this, "YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
+     ...
+ }
```

### 딥링크

`Airbridge.setDeeplinkListener` 함수가 `Airbridge.setOnDeeplinkReceived` 함수로 대체되었습니다.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- import Airbridge from 'airbridge-react-native-sdk'
- ...
- Airbridge.setDeeplinkListener((url) => {
-     // show proper content
- })
+ import { Airbridge } from 'airbridge-react-native-sdk'
+ ...
+ Airbridge.setOnDeeplinkReceived((url) => {
+     // show proper content
+ })
```

iOS의 `AirbridgeRN.deeplink.handleURLSchemeDeeplink` , `AirbridgeRN.deeplink.handleUserActivity` 함수가 `AirbridgeReactNative.trackDeeplink` 함수로 대체되었습니다.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- import <AirbridgeRN/AirbridgeRN.h>
- ...
- (BOOL)application:(UIApplication *)application
-             openURL:(NSURL *)url
-             options:(NSDictionary<UIApplicationOpenURLOptionsKey, id>*)options
- {
-   [AirbridgeRN.deeplink handleURLSchemeDeeplink:url];
-   return YES;
- }
- 
- -  (BOOL)application:(UIApplication *)application
- continueUserActivity:(NSUserActivity *)userActivity
-   restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
- {
-   [AirbridgeRN.deeplink handleUserActivity:userActivity];
-   return YES;
- }
+ import <AirbridgeReactNative/AirbridgeReactNative.h>
+ ...
+ - (BOOL)application:(UIApplication *)application
+             openURL:(NSURL *)url
+             options:(NSDictionary<UIApplicationOpenURLOptionsKey, id>*)options
+ {
+   [AirbridgeReactNative trackDeeplinkWithUrl:url];
+   return YES;
+ }
+ 
+ -  (BOOL)application:(UIApplication *)application
+ continueUserActivity:(NSUserActivity *)userActivity
+   restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
+ {
+   [AirbridgeReactNative trackDeeplinkWithUserActivity:userActivity];
+   return YES;
+ }
```

안드로이드의 `AirbridgeRN.process` , `AirbridgeRN.deeplink.processDeeplinkData` 함수가 `AirbridgeReactNative.trackDeeplink` 함수로 대체되었습니다.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- import co.ab180.airbridge.reactnative.AirbridgeRN
- ...
- override fun onResume() {
-   super.onResume()
-   AirbridgeRN.processDeeplinkData(intent)
- }
+ import co.ab180.airbridge.reactnative.AirbridgeReactNative
+ ...
+ override fun onResume() {
+   super.onResume()
+   AirbridgeReactNative.trackDeeplink(intent)
+ }
```

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

v2.x 에서 사용 되던 커스텀 도메인 주소 플랫폼 별로 설정하던 방식이 변경되었습니다.

에어브릿지 SDK 초기화시 airbridge.json 의 `trackingLinkCustomDomains`에 커스텀 도메인 링크를 추가 할 수 있습니다

```json lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
{
    "trackingLinkCustomDomains": ["YOUR_APP_CUSTOM_DOMAIN"]
}
```

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

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

  기존 `AirbridgeAttributes.TOTAL_VALUE` 대신 `AirbridgeAttribute.VALUE` 에 값을 입력해 주세요.

  `AirbridgeAttributes.TOTAL_VALUE` 를 사용하고 `value` 를 정의하면 `AirbridgeAttributes.TOTAL_VALUE` 가 `value` 를 덮어 쓰는 로직은 v4부터 삭제되었습니다.
</Danger>

`Airbridge.event.trackEvent` 함수가 `Airbridge.trackEvent` 함수로 대체되었습니다.

아래 예시코드를 따라 `Airbridge.event.trackEvent` 함수를 `Airbridge.trackEvent`함수로 변경해 주세요.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- import Airbridge, { AirbridgeAttributes } from 'airbridge-react-native-sdk'
- ...
- Airbridge.event.trackEvent('event', {
-     action: '...',
-     label: '...',
-     value: 100,
-     semanticAttributes: {
-         [AirbridgeAttributes.QUERY]: '...',
-     },
-     customAttributes: {
-         'key1': '...',
-         'key2': '...',
-         'key3': '...',
-     },
- })
+ import { Airbridge, AirbridgeAttribute } from 'airbridge-react-native-sdk'
+ ...
+ Airbridge.trackEvent('event', {
+     [AirbridgeAttribute.ACTION]: '...',
+     [AirbridgeAttribute.LABEL]: '...',
+     [AirbridgeAttribute.VALUE]: 100,
+     [AirbridgeAttribute.QUERY]: '...',
+ }, {
+     'key1': '...',
+     'key2': '...',
+     'key3': '...',
+ })
```

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

  `Airbridge.event.trackEvent` 함수의 두 번째 파라미터에 해당하는 `action` , `label` , `value` , `semanticAttributes` 값은 `Airbridge.trackEvent` 함수의 두 번째 파라미터에 포함되어야 합니다.

  `Airbridge.event.trackEvent` 함수의 두 번째 파라미터에 해당하는 `customAttributes` 값은 `Airbridge.trackEvent` 함수의 세 번째 파라미터에 포함되어야 합니다.
</Danger>

`Airbridge.state.setUser` , `Airbridge.state.updateUser` 함수가 [Airbridge.setUser](/ko/developers/react-native-sdk-v4#유저-속성-설정하기) 관련 함수로 대체되었습니다. 유저 정보를 한 번에 설정하는 `setUser` , `updateUser` 함수는 지원하지 않습니다.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- import Airbridge from 'airbridge-react-native-sdk'
- ...
- Airbridge.state.setUser({ ID: '...', email: '...' })
- Airbridge.state.updateUser({ phone: '...' })
+ import { Airbridge } from 'airbridge-react-native-sdk'
+ ...
+ Airbridge.setUserID('...')
+ Airbridge.setUserEmail('...')
+ Airbridge.setUserPhone('...')
```

### 추가 설정하기

`Airbridge.setAttributionListener` 함수가 `Airbridge.SetOnAttributionReceived` 함수로 대체되었습니다.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- import Airbridge from 'airbridge-react-native-sdk'
- ...
- Airbridge.setAttribuitonListener((attribution) => {
-     // using attribution
- })
+ import { Airbridge } from 'airbridge-react-native-sdk'
+ ...
+ Airbridge.setOnAttributionReceived((attribution) => {
+     // using attribution
+ })
```

`Airbridge.placement.click` , `Airbridge.placement.impression` 함수가 `Airbridge.click` , `Airbridge.impression` 함수로 대체되었습니다.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- import Airbridge from 'airbridge-react-native-sdk'
- ...
- Airbridge.placement.click(url)
- Airbridge.placement.impression(url)
+ import { Airbridge } from 'airbridge-react-native-sdk'
+ ...
+ Airbridge.click(url)
+ Airbridge.impression(url)
```

`Airbridge.createWebInterface` 함수가 `Airbridge.createWebInterfaceScript` , `Airbridge.handleWebInterfaceCommand` 함수로 대체되었습니다.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- import Airbridge from 'airbridge-react-native-sdk'
- ...
- const { script, handle } = Airbridge.createWebInterface(
-     'YOUR_WEB_TOKEN',
-     (command) => { 
-         return `window.ReactNativeWebView.postMessage(${command})`
-     },
- )
- <WebView
-     source={{ uri: 'https://...' }}
-     onMessage={(command) => { handle(command) }}
-     injectedJavaScript={script} />
+ import { Airbridge } from 'airbridge-react-native-sdk'
+ ...
+ const script = await Airbridge.createWebInterface(
+     'YOUR_WEB_TOKEN',
+     'window.ReactNativeWebView.postMessage(payload)',
+ )
+ <WebView
+     source={{ uri: 'https://...' }}
+     onMessage={(command) => { Airbridge.handleWebInterfaceCommand(command) }}
+     injectedJavaScript={script} />
```

## v2.x 업데이트

리액트 네이티브 SDK 각 버전의 주요 변경사항을 참고해 주세요.

### v2.8.0 - 딥링크

딥링크 콜백에서 제공하는 딥링크 URL이 에어브릿지 대시보드에 입력된 내용을 2번 디코딩하는 문제가 해결됐습니다. 2.7.3에서 2.5.1 버전과 2023년 9월 4일 이후에 생성된 에어브릿지 앱이 대상입니다.

### v2.5.1 - 딥링크

2023년 9월 4일 이후에 생성된 에어브릿지 앱에는 딥링크 콜백에서 제공하는 딥링크 URL에 airbridge\_referrer가 추가되지 않습니다.

ios app을 업데이트하면 마지막으로 계산된 SKAdNetwork Conversion Value 로 확정됩니다. 추가적인 계산은 진행하지 않습니다.

* 2.5.1 미만 버전에서는 SKAdNetwork Conversion Value 를 최대 24시간 동안만 계산합니다.
* 새롭게 앱을 설치하는 유저는 해당하지 않습니다.

`deeplink.page` 가 deprecated 되었습니다. 2.5.1 부터는 `abr.ge` 로 딥링크 도메인을 사용해 코드를 작성하는 것을 권장합니다.

* deeplink.page 는 하위 호환을 위해 계속 지원 및 동작할 예정입니다.

### v2.5.0 - 개인정보보호 설정

`trackingAuthorizeTimeout` 의 기본값이 30초로 변경됩니다.

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

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