> ## 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 Migration - Flutter SDK

This article contains the information required to update the Airbridge Flutter SDK. We recommend checking the information regarding all versions.

## Update from v3.x to v4.0

Check the information below after updating the Airbridge Flutter SDK to v4.0.

<Accordion title="List of all changes">
  #### Option

  | airbridge.json (v3)             | airbridge.json (v4)                               | Change                        |
  | ------------------------------- | ------------------------------------------------- | ----------------------------- |
  | -                               | sdkEnabled                                        | New features have been added. |
  | logLevel                        | logLevel                                          | -                             |
  | autoStartTrackingEnabled        | autoStartTrackingEnabled                          | -                             |
  | trackingAuthorizeTimeoutSeconds | autoDetermineTrackingAuthorizationTimeoutInSecond | The name has been changed.    |
  | facebookDeferredAppLinkEnabled  | trackMetaDeferredAppLinkEnabled                   | The name has been changed.    |
  | sessionTimeoutSeconds           | sessionTimeoutInSecond                            | The name has been changed.    |
  | metaInstallReferrer             | metaInstallReferrerAppID                          | The name has been changed.    |
  | trackAirbridgeLinkOnly          | trackAirbridgeDeeplinkOnlyEnabled                 | The name has been changed.    |
  | -                               | trackInSessionLifecycleEventEnabled               | New features have been added. |
  | userInfoHashEnabled             | hashUserInformationEnabled                        | The name has been changed.    |
  | sdkSignatureSecretID            | sdkSignatureID                                    | The name has been changed.    |
  | sdkSignatureSecret              | sdkSignatureSecret                                | The name has been changed.    |
  | -                               | clearEventBufferOnInitializeEnabled               | New features have been added. |
  | -                               | eventBufferCountLimit                             | New features have been added. |
  | -                               | eventBufferSizeLimitInGibibyte                    | New features have been added. |
  | -                               | eventTransmitIntervalInSecond                     | New features have been added. |

  #### Function (Flutter)

  | Airbridge (v3)         | Airbridge (v4)                  | Change                                                                |
  | ---------------------- | ------------------------------- | --------------------------------------------------------------------- |
  | setAttributionListener | setOnAttributionReceived        | The name has been changed.                                            |
  | setDeeplinkListener    | setOnDeeplinkReceived           | The name has been changed.                                            |
  | event.trackEvent       | trackEvent                      | The name has been changed. Method of inserting attributes is changed. |
  | state.deviceUUID       | fetchDeviceUUID                 | The name has been changed. DeviceUUID is now returned with callback.  |
  | -                      | fetchAirbridgeGeneratedUUID     | New features have been added.                                         |
  | -                      | isUninstallTrackingNotification | New features have been added.                                         |
  | placement.click        | click                           | The name has been changed. Callback feature is added.                 |
  | placement.impression   | impression                      | The name has been changed. Callback feature is added.                 |
  | state.setUser          | -                               | Replaced with User related functions.                                 |
  | state.updateUser       | -                               | Replaced with User related functions.                                 |
  | -                      | setUserID                       | New features have been added.                                         |
  | -                      | clearUserID                     | New features have been added.                                         |
  | -                      | setUserEmail                    | New features have been added.                                         |
  | -                      | clearUserEmail                  | New features have been added.                                         |
  | -                      | setUserPhone                    | New features have been added.                                         |
  | -                      | clearUserPhone                  | New features have been added.                                         |
  | -                      | setUserAttribute                | New features have been added.                                         |
  | -                      | removeUserAttribute             | New features have been added.                                         |
  | -                      | clearUserAttributes             | New features have been added.                                         |
  | -                      | setUserAlias                    | New features have been added.                                         |
  | -                      | removeUserAlias                 | New features have been added.                                         |
  | -                      | clearUserAlias                  | New features have been added.                                         |
  | -                      | clearUser                       | New features have been added.                                         |
  | setDeviceAlias         | setDeviceAlias                  | -                                                                     |
  | removeDeviceAlias      | removeDeviceAlias               | -                                                                     |
  | clearDeviceAlias       | clearDeviceAlias                | -                                                                     |
  | registerPushToken      | registerPushToken               | -                                                                     |
  | -                      | enableSDK                       | New features have been added.                                         |
  | -                      | disableSDK                      | New features have been added.                                         |
  | -                      | isSDKEnabled                    | New features have been added.                                         |
  | state.startTracking    | startTracking                   | The name has been changed.                                            |
  | -                      | stopTracking                    | New features have been added.                                         |
  | -                      | isTrackingEnabled               | New features have been added.                                         |
  | createWebInterface     | -                               | Replaced with WebInterface related functions.                         |
  | -                      | createWebInterfaceScript        | New features have been added.                                         |
  | -                      | handleWebInterfaceCommand       | New features have been added.                                         |

  #### Constant (Flutter)

  | AirbridgeCategory (v3)  | AirbridgeCategory (v4)  | Change |
  | ----------------------- | ----------------------- | ------ |
  | 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 (v3)              | AirbridgeAttribute (v4)               | Change                                               |
  | ------------------------------------- | ------------------------------------- | ---------------------------------------------------- |
  | -                                     | ACTION                                | New features have been added.                        |
  | -                                     | LABEL                                 | New features have been added.                        |
  | -                                     | VALUE                                 | New features have been added.                        |
  | TOTAL\_VALUE                          | -                                     | The feature has been removed. Please enter in 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 (v3)   | AirbridgeAttribute (v4) | Change |
  | ----------------------- | ----------------------- | ------ |
  | 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    | -      |

  #### Function (iOS)

  | AirbridgeFlutter (v3)            | AirbridgeFlutter (v4) | Change                     |
  | -------------------------------- | --------------------- | -------------------------- |
  | getInstance                      | initializeSDK         | The name has been changed. |
  | deeplink.handleURLSchemeDeeplink | trackDeeplink         | The name has been changed. |
  | deeplink.handleUserActivity      | trackDeeplink         | The name has been changed. |

  #### Function (Android)

  | AirbridgeFlutter (v3)   | AirbridgeFlutter (v4)   | Change                     |
  | ----------------------- | ----------------------- | -------------------------- |
  | init                    | initializeSDK           | The name has been changed. |
  | processDeeplinkData     | trackDeeplink           | The name has been changed. |
  | setLifecycleIntegration | setLifecycleIntegration | -                          |
</Accordion>

### SDK installation and initialization

The location of `airbridge.json` has been changed. Move the `assets/airbridge.json` file to the `airbridge.json` file at the top of the Flutter project folder.

The key values of `airbridge.json` have been changed. Change the key values as follows.

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

The `AirbridgeFlutter.init` function in iOS has been replaced with the `AirbridgeFlutter.initializeSDK` function. Modify the `ios/YOUR_PROJECT_NAME/AppDelegate.swift` file.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- override func application(
-     _ application: UIApplication,
-     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
- ) -> Bool {
-     AirbridgeFlutter.init(
-         appName: "YOUR_APP_NAME",
-         appToken: "YOUR_APP_SDK_TOKEN",
-         withLaunchOptions: launchOptions
-     )
- }
+ override func application(
+     _ application: UIApplication,
+     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
+ ) -> Bool {
+     AirbridgeFlutter.initializeSDK(
+         name: "YOUR_APP_NAME",
+         token: "YOUR_APP_SDK_TOKEN",
+     )
+ }
```

The `AirbridgeFlutter.init` function in Android has been replaced with the `AirbridgeFlutter.initializeSDK` function. Modify the `android/app/src/main/java/.../MainApplication.kt` file.

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

### Deep Linking

The `Airbridge.setDeeplinkListener` function has been replaced with the `Airbridge.setOnDeeplinkReceived` function.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
- ...
- Airbridge.setDeeplinkListener((url) => {
-     // show proper content
- })
+ import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
+ ...
+ Airbridge.setOnDeeplinkReceived((url) => {
+     // show proper content
+ })
```

In iOS, the `AirbridgeFlutter.deeplink.handleURLSchemeDeeplink` and the `AirbridgeFlutter.deeplink.handleUserActivity` functions have been replaced with the `AirbridgeFlutter.trackDeeplink` function.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- override func application(
-     _ application: UIApplication,
-     continue userActivity: NSUserActivity,
-     restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
- ) -> Bool {
-     AirbridgeFlutter.deeplink.handle(userActivity)
-     
-     return true
- }
- 
- override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
-     AirbridgeFlutter.deeplink.handleURLSchemeDeeplink(url)
-     
-     return true
- }
+ override func application(
+     _ application: UIApplication,
+     continue userActivity: NSUserActivity,
+     restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
+ ) -> Bool {
+     AirbridgeFlutter.trackDeeplink(userActivity: userActivity)
+     
+     return true
+ }
+ 
+ override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
+     AirbridgeFlutter.trackDeeplink(url: url)
+     
+     return true
+ }
```

In Android, the `AirbridgeFlutter.processDeeplinkData` function has been replaced with the `AirbridgeFlutter.trackDeeplink` function.

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

<Danger>
  **Attention**

  From Flutter SDK v.3.7, the deep linking feature has been improved to handle deep links directly within the app without external plugins.

  However, the following actions are required for each platform to prevent malfunction.

  * Android: Include `<meta-data android:name="flutter_deeplinking_enabled" android:value="false" />`in the AndroidManifest.xml file.
  * iOS: Set the `FlutterDeepLinkingEnabled` key's value as `NO` in the Info.plist file.
</Danger>

### Set up custom domain

The method of specifying custom domain URLs in used in version 2.x, has been changed. You can now add custom domain links to the `trackingLinkCustomDomains`in the airbridge.json during Airbridge SDK initialization.

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

### In-app events and user data

<Danger>
  **Attention**

  Please input the value into `AirbridgeAttribute.VALUE` instead of the existing `AirbridgeAttributes.TOTAL_VALUE`.

  If you're using `AirbridgeAttributes.TOTAL_VALUE` and defining a `value`, the logic that `AirbridgeAttributes.TOTAL_VALUE` overwrites the `value` has been removed from Flutter SDK v4 onwards.
</Danger>

The function Airbridge.event.trackEvent has been replaced with Airbridge.trackEvent.

Please change the function Airbridge.event.trackEvent to Airbridge.trackEvent following the example code below.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
- ...
- Airbridge.event.trackEvent(
-     'event',
-     AirbridgeEventOption(
-         action: '...',
-         label: '...',
-         value: 100,
-         semanticAttributes: {
-             AirbridgeAttributes.QUERY: '...',
-         },
-         customAttributes: {
-             'key1': '...',
-             'key2': '...',
-             'key3': '...',
-         },
-     ));
+ import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
+ ...
+ Airbridge.trackEvent(
+     category: 'event',
+     semanticAttributes: {
+         AirbridgeAttribute.ACTION: '...',
+         AirbridgeAttribute.LABEL: '...',
+         AirbridgeAttribute.VALUE: 100,
+         AirbridgeAttribute.QUERY: '...',
+     },
+     customAttributes: {
+             'key1': '...',
+             'key2': '...',
+             'key3': '...',
+     });
```

<Danger>
  **Attention**

  The `action` , `label` , `value` , `semanticAttributes` values, which are in the second parameter of the `Airbridge.event.trackEvent` function must be included in the second parameter of the `Airbridge.trackEvent` function.

  The `customAttributes` value, which is the second parameter of the `Airbridge.event.trackEvent` function must be included in the third parameter of the `Airbridge.trackEvent` function.
</Danger>

The functions `Airbridge.state.setUser` and `Airbridge.state.updateUser` have been replaced with the [Airbridge.setUser](/en/developers/react-native-sdk-v4#set-additional-user-information) related functions. The `setUser` , `updateUser` functions, which set user information all at once, are no longer supported.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
- ...
- Airbridge.state.setUser(
-     User(
-         id: '...',
-         email: '...'
-     ));
- Airbridge.state.updateUser(
-     User(
-         phone: '...'
-     ));
+ import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
+ ...
+ Airbridge.setUserID('...')
+ Airbridge.setUserEmail('...')
+ Airbridge.setUserPhone('...')
```

### Additional settings

The `Airbridge.setAttributionListener` function has been replaced with the `Airbridge.setOnAttributionReceived` function.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
- ...
- Airbridge.setAttributionListener((attribution) {
-     // using attribution
- });
+ import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
+ ...
+ Airbridge.setOnAttributionReceived((attribution) {
+     // using attribution
+ });
```

The `Airbridge.placement.click` , `Airbridge.placement.impression` functions have been replaced with the `Airbridge.click` , `Airbridge.impression` functions.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
- ...
- Airbridge.placement.click(url);
- Airbridge.placement.impression(url);
+ import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
+ ...
+ Airbridge.click(url);
+ Airbridge.impression(url);
```

The `Airbridge.createWebInterface` function has been replaced with the `Airbridge.createWebInterfaceScript` , `Airbridge.handleWebInterfaceCommand` functions.

```diff lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
- var webInterface = Airbridge.createWebInterface(
-     webToken: 'YOUR_WEB_TOKEN',
-     postCommandFunction: (arg) {
-       return """window.flutter_inappwebview.callHandler('postMessage', $arg);"""; 
-   });
- ...
- InAppWebView(
-   initialUrlRequest: URLRequest(url: WebUri('https://...')),
-   onWebViewCreated: (controller) async {
-     controller.addJavaScriptHandler(handlerName: 'postMessage', callback: (args) {
-       webInterface.handle(args[0]);
-       return args;
-     });
-   },
-   initialUserScripts: UnmodifiableListView<UserScript>([
-     UserScript(
-       source: webInterface.script, 
-       injectionTime: UserScriptInjectionTime.AT_DOCUMENT_START)
-   ]),
-   ...
- )
- ...
+ Future<String?> getJavascriptInterface() async {
+     return await Airbridge.createWebInterfaceScript(
+       webToken: 'YOUR_WEB_TOKEN',
+       postMessageScript: 'window.flutter_inappwebview.callHandler(payload);',
+     );
+   }
+ ...
+ FutureBuilder(
+   future: getJavascriptInterface(),
+   builder: (BuildContext context, AsyncSnapshot snapshot) {
+     return 
+       ...
+       InAppWebView(
+         initialUrlRequest: URLRequest(url: WebUri('https://...')),
+         onWebViewCreated: (controller) async {
+           controller.addJavaScriptHandler(handlerName: 'postMessage', callback: (args) {
+             Airbridge.handleWebInterfaceCommand(args[0]);
+             return args;
+           });
+         },
+         initialUserScripts: UnmodifiableListView<UserScript>([
+           UserScript(
+             source: snapshot.data ?? "", 
+             injectionTime: UserScriptInjectionTime.AT_DOCUMENT_START)
+         ]),
+       )
+       ...
+   });
+ ...
```

## Update within v3.x

See the major changes in each version of the Flutter SDK.

### v3.5.0 - Deep Link

For apps registered with Airbridge after September 4, 2023, an issue where the deep link URL provided in the deep link callback was decoded twice from the content entered in the Airbridge dashboard has been resolved. This issue was found in versions v3.4.2 to v3.4.7.

### v3.4.2 - Deep Link

For apps registered with Airbridge after September 4, 2023, the "airbridge\_referrer" will no longer be added to the deep link URL provided in the deep link callback.

In the case of an iOS app update, the last calculated SKAdNetwork Conversion Value is finalized. No additional calculations are processed.

* In versions earlier than v3.4.2, the SKAdNetwork Conversion Value is only calculated for up to 24 hours.
* This does not affect users who newly installed the app.

`deeplink.page` has been deprecated. From v3.4.2, we recommend writing code using the deep link domain, `abr.ge`.

* `deeplink.page` will still be supported and functioning for backward compatibility.

### v3.4.1 - kotlin

The Kotlin plugin version has been updated to 1.5.21.

### v3.4.0 - User privacy

The default value of `trackingAuthorizeTimeout` has been changed to 30 seconds.

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

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