Flutter SDK (v4)

    Pub Version

    Attention

    This guide provides instructions for installing and setting up the Flutter SDK v4. For earlier versions, consult the Flutter SDK (Previous) guide.

    Install the Airbridge Flutter SDK and implement the necessary settings following the steps below.

    Install SDK

    The Airbridge Flutter SDK can be installed using the method below. After installation, you can verify whether the SDK has been properly installed through a Flutter SDK Test.

    1. Add the following code to the dependencies block in the pubspec.yaml file.

    123
    dependencies:
      # Get the latest version from https://pub.dev/packages/airbridge_flutter_sdk/versions
      airbridge_flutter_sdk: HERE_LATEST_VERSION

    2. Open the Terminal at the location at the top-level file of the relevant project and run the command below. Note that the Airbridge Flutter SDK only works on Flutter 1.20.0 and later and on Dart 2.12.0 and later.

    Shell
    1
    flutter pub get

    Install Restricted SDK

    提示

    请根据需求选择 General SDK 或 Restricted SDK, 只能安装其中一个。

    Depending on policies and environments, restrictions on collecting device IDs like GAID and IDFA may be required. When installing the Restricted SDK version, the device IDs are not collected.

    Install the Restricted SDK using the method below.

    123
    dependencies:
      # Get the latest version from https://pub.dev/packages/airbridge_flutter_sdk_restricted/versions
      airbridge_flutter_sdk_restricted: HERE_LATEST_VERSION

    1. Add the following line to the dependencies block in the pubspec.yaml file.

    2. Open the Terminal at the location of the top-level file of the relevant project and execute the command below.

    Shell
    1
    flutter pub get

    Initialize SDK

    The initialization methods for iOS and Android SDKs are different. Refer to the information below. The YOUR_APP_NAME and YOUR_APP_SDK_TOKEN can be found on the [Settings]>[Tokens] page in the Airbridge dashboard.

    iOS

    Add the following code to the ios/YOUR_PROJECT_NAME/AppDelegate.m file.

    12345678
    import airbridge_flutter_sdk
    
    override func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
      ) -> Bool {
        AirbridgeFlutter.initializeSDK(appName: "YOUR_APP_NAME", appToken: "YOUR_APP_SDK_TOKEN")
    }

    Android

    If an Application class is not defined in the Android module of the project, create an Application class.

    Add the following code to the android/app/src/main/java/.../MainApplication.kt file.

    123456789
    import co.ab180.airbridge.flutter.AirbridgeFlutter
    import io.flutter.app.FlutterApplication
    
    class MainApplication: FlutterApplication() {
        override fun onCreate() {
            super.onCreate()
            AirbridgeFlutter.initializeSDK(this, "YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
        }
    }

    Register the Application class you created earlier in the AndroidManifest.xml of the Android module of the project as follows.

    12345
    <application
        android:name=".MainApplication"
        ...>
        ...
    </application>

    Configure SDK settings

    Configure the SDK settings to use the Airbridge Flutter SDK.

    12345678910111213141516171819
    {
        "sdkEnabled": boolean,
        "logLevel": "debug" | "info" | "warning" | "error" | "fault",
        "autoStartTrackingEnabled": boolean,
        "autoDetermineTrackingAuthorizationTimeoutInSecond": number,
        "trackMetaDeferredAppLinkEnabled": boolean,
        "sessionTimeoutInSecond": number,
        "metaInstallReferrerAppID": string,
        "trackAirbridgeDeeplinkOnlyEnabled": boolean,
        "trackInSessionLifecycleEventEnabled": boolean,
        "hashUserInformationEnabled": boolean,
        "sdkSignatureID": string,
        "sdkSignatureSecret": string,
        "clearEventBufferOnInitializeEnabled": boolean,
        "eventBufferCountLimit": number,
        "eventBufferSizeLimitInGibibyte": number,
        "eventTransmitIntervalInSecond": number,
        "isHandleAirbridgeDeeplinkOnly" : boolean
    }
    1. Create an airbridge.json file at the top level of the Flutter project folder, input the JSON as above, and configure the SDK settings.

    2. Don't input values for keys that are not necessary for your service.

    For detailed guidance on the individual key values, refer to the links listed below.

    Configure ATT prompt

    提示

    为确保遵守隐私政策所需的功能,应与法律顾问共同审查。

    In the iOS environment, the IDFA can only be collected when users provide consent for data tracking through the AppTrackingTransparency (ATT) prompt.

    Event collection should be delayed until the user allows tracking. If the install event is collected before the user allows tracking through the ATT prompt, the install event data will lack an identifier, making performance measurement difficult. We recommend setting a sufficient delay time for event collection to collect identifiers.

    1. Prepare the text you will use in the ATT prompt.

    2. Provide the ATT prompt following this guide provided by Apple.

    3. If the install event is not collected, the Airbridge Flutter SDK delays collecting install events for 30 seconds until the user allows tracking each time the app is launched. If the user exits the app before deciding whether to allow tracking, the SDK will not collect the install event and will try again at the next app launch.

    In the SDK settings, configure autoDetermineTrackingAuthorizationTimeout to set a sufficient delay time for collecting install events. The default value is 300 seconds, and it can be set up to 3600 seconds (1 hour).

    注意

    请确保为延迟收集安装事件预留足够时间。在用户通过 ATT 弹窗允许追踪之前,如果延迟时间到期,SDK 将会收集不包含 IDFA 的安装事件。

    Opt-in setup

    提示

    此功能并非必需功能,请在设置前确认需求。

    The opt-in policy requires user consent before using user data.

    In the SDK settings, set autoStartTrackingEnabled to false , and call the startTracking function at the point of time when you can collect events. The SDK will start collecting events when the startTracking function is called.

    123
    import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
    ...
    Airbridge.startTracking();

    Opt-out setup

    提示

    此功能并非必需功能,请在设置前确认需求。

    The opt-out policy allows the use of user information until the user explicitly declines.

    In the SDK settings, set autoStartTrackingEnabled to true , and call the stopTracking function at the point of time when you can no longer collect events. The SDK will stop collecting events when the stopTracking function is called.

    123
    import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
    ...
    Airbridge.stopTracking();

    SDK Signature

    提示

    此功能并非必需功能,请在设置前确认需求。

    With the SDK Signature, you can prevent SDK spoofing and use verified events to measure ad performance.

    The SDK Signature credentials, which are the Secret ID and the Secret, are required for the SDK Signature setup. They can be found on the [Management]>[Fraud Validation Rules]>[SDK Signature] page in the Airbridge dashboard. For more details on how to find the SDK Signature credentials, refer to this Airbridge guide.

    Once you have the credentials, go to the SDK settings and enter the Secret ID as sdkSignatureID and the Secret as sdkSignatureSecret.

    Deep Linking

    Deep linking allows you to redirect users from ads to specific locations within your app. The data collected from the tracking link enables you to monitor the performance of the deep link in Airbridge.

    When a user clicks on the Airbridge tracking link, the scheme deep link embedded in the tracking link is converted into an Airbridge Deep Link, which can be either an HTTP deep link or a scheme deep link. This Airbridge Deep Link redirects the user to the desired app location. Then, the Airbridge SDK converts the Airbridge Deep Link back to the original scheme deep link embedded in the tracking link and passes it to the app.

    • Example scheme deep link embedded in the tracking link: YOUR_SCHEME://product/12345

    • Examples of Airbridge Deep Links

      • HTTP deep link format 1: https://YOUR_APP_NAME.airbridge.io/~~~

      • HTTP deep link format 2: https://YOUR_APP_NAME.abr.ge/~~~

      • Scheme deep link format: YOUR_SCHEME://product/12345?airbridge_referrer=~~~

    When the app is installed on the device and the tracking link is clicked, the app opens through the Airbridge Deep Link. The Airbridge SDK converts the Airbridge Deep Link into the scheme deep embedded in the tracking link and passes it to the app.

    When the app is not installed on the device and the tracking link is clicked, the Airbridge SDK saves the Airbridge Deep Link is saved. After the user is redirected to the app store or website and the app is installed and launched, the Airbridge SDK converts the saved Airbridge Deep Link into the scheme deep embedded in the tracking link and passes it to the app.

    Set up deep linking

    For the deep linking setup, the following information is required.

    • Deep link information submitted in the Airbridge dashboard

    • In-app location address for user redirection

    First, submit the deep link information to the Airbridge dashboard.

    After entering the deep link information into the Airbridge dashboard, an additional setup is required to enable the following.

    • App launch with Airbridge Deep Links

    • Airbridge Deep Link event collection

    • User redirection with Airbridge Deep Links

    For detailed instructions, refer to the information below.

    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: Delete the FlutterDeepLinkingEnabled key value in the Info.plist file.

    Set up deferred deep linking

    When a user clicks on a tracking link with deferred deep linking capabilities and the app is not installed on the device, the Airbridge SDK collects the deep link as follows.

    Deferred deep links are automatically passed to OnDeeplinkReceived, so no additional setup is required.

    In-app Events

    The Airbridge SDK collects user actions from the app as per settings and sends them as in-app events.

    Send in-app events

    SDK setup for hybrid apps

    You can set up the Flutter SDK to handle Airbridge-related tasks within the in-app website without changing the website's code for your hybrid app.

    The Airbridge.trackEvent function must be called to send events. Refer to the information below about the required Airbridge.trackEvent function components and their types.

    12345
    static void trackEvent({
        required String category,
        Map<String, dynamic>? semanticAttributes,
        Map<String, dynamic>? customAttributes
    })

    Component

    Required

    Type

    Description

    category

    Required

    String

    Event name

    semanticAttributes

    Optional

    Map<String, dynamic>

    Semantic attributes of the events

    customAttributes

    Optional

    Map<String, dynamic>

    Custom attributes of the events

    Refer to the component definition and available strings below.

    The Event Category of Standard Events and Semantic Attributes provided by the SDK are as follows.

    Refer to the example codes for each type of data below.

    1234567891011121314151617181920212223242526272829
    import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
    
    Airbridge.trackEvent(
        category: AirbridgeCategory.ORDER_COMPLETED,
        semanticAttributes: {
            // action
            AirbridgeAttribute.ACTION: 'Tool',
            // label
            AirbridgeAttribute.LABEL: 'Hammer',
            // value
            AirbridgeAttribute.VALUE: 10,
            // semantic attribute (provided by sdk)
            AirbridgeAttribute.CURRENCY: 'USD',
            AirbridgeAttribute.PRODUCTS: [
                {
                    // semantic attribute value (provided by sdk)
                    AirbridgeAttribute.PRODUCT_ID: '12345',
                    // semantic attribute value (not provided by sdk)
                    'name': 'PlasticHammer',
                },
            ],
            // semantic attribute (not provided by sdk)
            'totalQuantity': 1,
        },
        customAttributes: {
            // custom attribute
            'promotion': 'FirstPurchasePromotion',
        },
    );

    Additional in-app event settings

    提示

    如果未配置其他设置,则将应用默认设置。请查看是否需要其他设置后再继续。

    Configure additional settings for sending in-app events if necessary.

    Example codes

    Airbridge collects in-app events that are classified as Standard Events and Custom Events. Standard Events are events predefined by Airbridge. Refer to the example codes below.

    Custom Events are events defined by Airbridge users to track user actions that are unique to their services. Refer to the example code below.

    123456789101112131415
    import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
    ...
    Airbridge.trackEvent(
        category: 'event',
        semanticAttributes: {
            AirbridgeAttribute.VALUE: 10,
        },
        customAttributes: {
            'string': 'string',
            'number': 1000,
            'boolean': true,
            'object': {'key': 'value'},
            'array': ['value'],
        },
    );

    User Data

    Airbridge sends user data along with events. User data allows for a more accurate ad performance measurement.

    Set up User ID

    User IDs refer to the user identifier used in a service. User IDs should be unique IDs that can identify unique users across websites and apps.

    #{"width":"140px"}

    Function

    #{"width":"240px"}

    Description

    Airbridge.setUserID

    Inputs the user ID.

    Airbridge.clearUserID

    Deletes the user ID.

    Airbridge.setUserAlias

    Adds additional user identifiers. Up to 10 items can be added.
    - key: Up to 128 characters. Must follow the regular expression ^[a-zA-Z_][a-zA-Z0-9_]*$.
    - value: Up to 1024 characters.

    Airbridge.removeUserAlias

    Deletes only specified identifiers.

    Airbridge.clearUserAlias

    Deletes all additional user identifiers.

    Refer to the example below.

    123456789
    import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
    ...
    // identifier
    Airbridge.setUserID('string');
    Airbridge.clearUserID();
    // addtional identifier
    Airbridge.setUserAlias(key: 'string', value: 'string');
    Airbridge.removeUserAlias('string');
    Airbridge.clearUserAlias();

    Send additional user information

    注意

    可能包含敏感的用户信息。发送前请咨询法律顾问。

    Refer to the functions below to send additional user information.

    #{"width":"140px"}

    Function

    #{"width":"240px"}

    Description

    Airbridge.setUserEmail

    Inputs user's email. The data is hashed using SHA256.

    Airbridge.clearUserEmail

    Deletes the user email.

    Airbridge.setUserPhone

    Inputs user's phone number. The data is hashed using SHA256.

    Airbridge.clearUserPhone

    Deletes the user's phone number.

    Airbridge.setUserAttribute

    Adds additional user attributes. Up to 100 items can be added.

    - key: Up to 128 characters. Must satisfy the regular expression: ^[a-zA-Z_][a-zA-Z0-9_]*$.

    - value: Only supports string, number, and Boolean types. Up to 1024 characters.

    Airbridge.removeUserAttribute

    Deletes only specified attributes from the additional attributes.

    Airbridge.clearUserAttributes

    Deletes all additional user attributes.

    Refer to the example below.

    123456789101112
    import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
    ...
    // email, phone
    Airbridge.setUserEmail('string');
    Airbridge.clearUserEmail();
    Airbridge.setUserPhone('string');
    Airbridge.clearUserPhone();
    // addtional attribute
    Airbridge.setUserAttribute(key: 'string', value: 'string');
    Airbridge.setUserAttribute(key: 'number', value: 1000);
    Airbridge.removeUserAttribute('string');
    Airbridge.clearUserAttributes();

    Hash user information

    When hashUserInformationEnabled is set to false in the SDK settings, user emails and phone numbers are passed without being hashed. The default setting is true.

    Clear user data

    You can reset user information with the Airbridge.clearUser function.

    123
    import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
    ...
    Airbridge.clearUser();

    Additional SDK Settings

    Follow the instructions below for additional setup.

    提示

    此功能并非必需功能,请在设置前确认需求。

    Note

    The Airbridge Flutter SDK must be v4.1.2 or later.

    The deep links passed through the setOnDeeplinkReceived method of the Airbridge Flutter SDK include not only Airbridge Deep Links but also deep links from other solutions.

    12345
    import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
    ...
    Airbridge.setOnDeeplinkReceived((url) {
        // show proper content using url
    });

    By configuring isHandleAirbridgeDeeplinkOnly to true in the SDK settings, only Airbridge Deep Links will be passed to the setOnDeeplinkReceived callback. In this way, you can handle the deep links from other solutions separately from the Airbridge Deep Links.

    Depending on how links are opened, it may be challenging to properly use the tracking link within the app.

    By using the Airbridge.click function or the Airbridge.impression function, you can properly use the tracking link within the app without sending users to an external browser.

    Attention

    如果在 Airbridge iOS SDK 1.24.0 及以上版本的 App 中使用追踪链接,将记录 “深度链接页面浏览(Deeplink Pageview)” 目标事件(Target Event)。如果深度链接页面浏览频繁随后深度链接打开(Deeplink Open)发生,可能会影响深度链接打开的绩效。

    深度链接页面浏览的的默认归因窗口为 3 天。如果希望更改此归因窗口,请联系您的 CSM。

    Get attribution results

    注意

    Airbridge SDK 收集归因结果需要时间,因此不建议将归因结果用于需要实时处理的功能。

    Use the Airbridge.setOnAttributionReceived function to get the attribution data of install events.

    123
    Airbridge.setAttributionListener((result) { 
        // do something
    });

    Depending on whether the attribution result exists or not, data is passed as follows.

    When a user clicks a push notification, the deep link information in the payload should be passed to the Airbridge SDK to enable the collection of deep link events. Use the Airbridge.trackDeeplink function.

    iOS

    Add the following code to the ios/YOUR_PROJECT_NAME/AppDelegate.m file.

    12345678910111213141516171819202122232425262728
    import Airbridge
    
    func application(
        _ application: UIApplication,
        didReceiveRemoteNotification userInfo: [AnyHashable : Any],
        fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void
    ) {
        if UIApplication.shared.applicationState == .inactive {
            let url = // 푸시 알림 페이로드의 딥링크
    
            Airbridge.trackDeeplink(url)
        }
    }
    
    func userNotificationCenter(
        _ center: UNUserNotificationCenter,
        didReceive response: UNNotificationResponse,
        withCompletionHandlercompletionHandler: @escaping () -> Void
    ) {
        if 
            UIApplication.shared.applicationState == .inactive || UIApplication.shared.applicationState == .background,
            response.actionIdentifier == UNNotificationDefaultActionIdentifier
        {
            let url = // 푸시 알림 페이로드의 딥링크
    
            Airbridge.trackDeeplink(url)
        }
    }

    Android

    No setup is required as the events are automatically collected on Android.

    The Airbridge SDK collects deep link events when the app is opened through a deep link, even if the deep link is not an Airbridge Deep Link. Configure trackAirbridgeDeeplinkOnlyEnabled in the SDK settings to true to collect deep link events only if the app is opened through an Airbridge Deep Link and prevent unnecessary event collection.

    Collect in-session lifecycle events

    The Airbridge SDK collects Open and Foreground events that initiate a new session. These events are not collected during an ongoing session.

    By configuring the trackInSessionLifecycleEventEnabled in the SDK settings to true, the Open and Foreground events can be collected during ongoing sessions.

    All collected Foreground events are recorded as Open events.

    Compliance with Google DMA

    To comply with the Digital Markets Act (DMA), the user consent data must be sent to Airbridge. For more information about the DMA and whether it applies to your service, refer to the Airbridge user guide.

    If you are in the European Economic Area (EEA), the user consent data must be sent to Airbridge at all times.

    1. Confirm whether the end user launched the app in the EEA. If the end user did launch the app in the EEA (eea=1), confirm whether the consent values have already been stored for the session. If consent values are stored, proceed to Step 3.

    If the user launched the app from outside the EEA, user consent data collection is not mandatory.

    提示

    Airbridge 无法提供有关存储用户同意信息或实现同意弹窗的指导。请咨询法律顾问。

    2. If no consent values are stored, collect user consent data using means such as a prompt. The adPersonalization and adUserData values should be collected in this step.

    3. Configure the autoStartTrackingEnabled in the SDK settings to false.

    4. After the SDK initialization, the user consent data must be passed to Airbridge before the user data collection.

    注意

    • 必须为 eeaadPersonalizationadUserData 使用相同的名称。

    • 请根据收集的信息正确输入 01

    12345678910
    import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
    ...
    // deliver informations to sdk using device alias
    // based on actual region
    Airbridge.setDeviceAlias(key: 'eea', value: '0' or '1');
    // based on actual user consent
    Airbridge.setDeviceAlias(key: 'adPersonalization', value: '0' or '1');
    Airbridge.setDeviceAlias(key: 'adUserData', value: '0' or '1');
    // start tracking explicitly
    Airbridge.startTracking();

    Follow the steps below to use deferred deep linking in Meta ads. The Airbridge SDK collects the Meta deferred app links before the Airbridge deferred deep links. If there are no Meta deferred app links, the Airbridge deferred deep links are collected.

    Note that Meta does not support Meta deferred app links for SKAdNetwork campaigns.

    1. Install the Facebook SDK by referring to the Meta ads documentation for iOS and Android.

    2. Configure the trackMetaDeferredAppLinkEnabled in the SDK settings to true.

    Initialize the Airbridge SDK with all functions disabled

    注意

    如果 Airbridge SDK 在初始化后未立即启用,则可能无法收集安装(Install)、打开(Open)、深度链接(Deeplink)事件。

    Upon initialization, all functions of the SDK are enabled by default. By configuring sdkEnabled in the SDK settings to false, the SDK can be initialized with all functions disabled.

    You can also check the activation status of the Airbridge SDK and enable or disable all functions, as in the following example.

    12345
    import 'package:airbridge_flutter_sdk/airbridge_flutter_sdk.dart';
    ...
    Airbridge.isSDKEnabled();
    Airbridge.enableSDK();
    Airbridge.disableSDK();

    Set up Meta Install Referrer collection

    To collect the Meta Install Referrer, enter the Meta App ID as the key value for metaInstallReferrerAppID in the SDK settings.

    Note that the decryption key must be submitted to the Airbridge dashboard to read the decrypted Meta Install Referrer. Refer to this user guide to learn how to enter the decryption key.

    Set up uninstall tracking

    Airbridge sends a silent push every day between 3:00 PM and 4:00 PM (UTC) to users who performed an app event at least once in the last 6 months to check if the app has been deleted. You can check the uninstall event in the Airbridge reports and raw data export files.

    Refer to the article below for the detailed setup instructions.

    Integrate with third-party solutions

    An additional SDK setup is required to integrate with some third-party solutions. It is recommended that you complete this setup before collecting data with the Airbridge SDK.

    Refer to the articles listed below for integrating with third-party solutions.

    SDK logs

    The logs provided by the Airbridge SDK are categorized into Debug, Info, Warning, Error, and Fault levels. The Debug level is the least critical log, while the Fault level is the most critical log.

    By default, the Airbridge SDK provides logs at Warning, Error, and Fault levels. By entering a specific log level as the setLogLevel value in the SDK settings, the logs from that specified level up to the Fault level will be available.

    Was this page helpful?

    Have any questions or suggestions?