Support Home > SDK Integration > Flutter – SDK Integration

Flutter – SDK Integration

The Kochava Flutter SDK is a lightweight plugin which can be easily integrated into your Flutter project. The entire integration process takes less than five minutes and simply requires adding the SDK within your project and then starting the Kochava Tracker in code. If you have already integrated the SDK and started the tracker, please visit Using the SDK and choose a topic.

 

Integration Note: If targeting Android 13, collection of the ADID requires the normal permission:
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/> Please ensure this permission is added to your AndroidManifest.xml in order for ADID collection to continue to take place as of Android 13 and beyond.
Some Google Play policies, such as the Families Policy, require that apps not use the ADID. In those cases this permission should not be included as the ADID should not be collected.


Integrating the SDK

Requirements:

  • Android API 16
  • iOS Target 10.3
  • Xcode 13.3.1

 

Supported Platforms:

  • Android
  • iOS

 

Data Privacy:

 

Migration:

If you are migrating from a Kochava SDK prior to version 2.0.0 to version 2.x usage can be updated by reviewing the code samples for any given topic, as the overall usage of the SDK remains the same.


Integration:

Estimated Time to Complete
5 Minutes

(Release Notes)

 

In order to use the Kochava SDK, first add it within your project. This can be accomplished using pub.dev (recommended) or by downloading the SDK files manually and adding them.

 

  • Add the Kochava Tracker plugin to your pubspec.yaml file. Replace “x.y.z” with the latest version obtained from the Download Badge above.

    1. Download the kochava_tracker.zip from the Download Badge above.
    2. Extract the zip file into the root directory of your project.
    3. Add the Kochava Tracker plugin to your pubspec.yaml file.

 

Google Play Store:

If you wish for the SDK to collect the Google Play Ads Identifier (ADID), App Set ID (ASID) and/or make use of the Install Referrer, you must integrate Google Play Services by adding the appropriate dependencies. Collection is handled by the Kochava SDK with only the dependency itself needing to be included. The Kochava SDK does not require specific versions of its dependencies however we recommend keeping them up to date whenever possible.

 

Maven Repository —

google()

 

Dependencies —

Ads Identifier

implementation 'com.google.android.gms:play-services-ads-identifier:17.1.0'

NOTE: If using a version prior to version 17.1.0 you must also add the following permission.

<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

 

Install Referrer

implementation 'com.android.installreferrer:installreferrer:2.2'

 

App Set ID

implementation 'com.google.android.gms:play-services-appset:16.0.0'

Huawei App Gallery:

If you wish for the SDK to collect the Huawei Advertising ID (OAID) and/or make use of the Install Referrer, you must integrate the Huawei Ads SDK by adding the appropriate dependencies. Collection is handled by the Kochava SDK with only the dependency itself needing to be included. The Kochava SDK does not require specific versions of its dependencies however we recommend keeping them up to date whenever possible.

 

Maven Repository —

maven { url 'https://developer.huawei.com/repo/' }

 

Dependencies —

Ads Identifier

implementation 'com.huawei.hms:ads-identifier:3.4.39.302'

 

Install Referrer

implementation 'com.huawei.hms:ads-installreferrer:3.4.39.302'

Permissions:

The following permissions are split by module and are automatically included with the module. Optional permissions are noted and can be removed if desired using the manifest entry shown.

// Tracker Module
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

// Optionally remove the automatically included Network State permission.
<!-- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" tools:node="remove"/> -->


// Network Module
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

// Optionally remove the automatically included Wifi State permission.
<!-- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" tools:node="remove"/> -->

 

Minification (ProGuard / R8):

The following minification rules are required when code minification is enabled. They are automatically included when adding the Kochava SDK and typically do not require manual inclusion. If you are experiencing issues after enabling minification you can manually include the rules in your configuration file.

# KochavaCore: Ignore SDK warnings for missing dependencies.
-dontwarn com.kochava.core**

# KochavaCore: Uncomment only if needed. Do not run ProGuard on the SDK at all.
#-keep class com.kochava.core** { *; }

# KochavaCore: Keep annotations used for json serialization.
-keepattributes Signature
-keepattributes *Annotation*
-keepclassmembers class * {
  @com.kochava.core.json.annotation.internal.JsonSerialize ;
}
-keepclassmembers class * {
  @com.kochava.core.json.annotation.internal.JsonIgnore ;
}
-keepclassmembers class * {
  @com.kochava.core.json.annotation.internal.JsonEnumSerializedValue ;
}

# KochavaCore: BuildConfig
-keep class com.kochava.core.BuildConfig { *; }

# KochavaCore: Google Instant Apps Collection.
-keep class com.google.android.gms.common.wrappers.InstantApps {
    boolean isInstantApp(android.content.Context);
}

# KochavaTracker: Ignore SDK warnings for missing dependencies.
-dontwarn com.kochava.tracker**

# KochavaTracker: Uncomment only if needed. Do not run ProGuard on the SDK at all.
#-keep class com.kochava.tracker** { *; }

# KochavaTracker: BuildConfig
-keep class com.kochava.tracker.BuildConfig { *; }

# KochavaTracker: Google ADID Collection.
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient {
    com.google.android.gms.ads.identifier.AdvertisingIdClient$Info getAdvertisingIdInfo(android.content.Context);
}
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info {
    java.lang.String getId();
    boolean isLimitAdTrackingEnabled();
}

# KochavaTracker: Google Install Referrer Collection.
-keep class com.android.installreferrer.api.InstallReferrerClient { *; }
-keep class com.android.installreferrer.api.InstallReferrerClient$InstallReferrerResponse { *; }
-keep class com.android.installreferrer.api.InstallReferrerStateListener { *; }
-keep class com.android.installreferrer.api.ReferrerDetails { *; }

# KochavaTracker: Google App Set ID Collection
-keep class com.google.android.gms.appset.AppSet {
    com.google.android.gms.appset.AppSetIdClient getClient(android.content.Context);
}
-keep class com.google.android.gms.appset.AppSetIdClient {
    com.google.android.gms.tasks.Task getAppSetIdInfo();
}
-keep class com.google.android.gms.appset.AppSetIdInfo {
    java.lang.String getId();
    int getScope();
}
-keep class com.google.android.gms.tasks.Tasks {
    await(com.google.android.gms.tasks.Task, long, java.util.concurrent.TimeUnit);
}

# KochavaTracker: Huawei OAID Collection.
-keep class com.huawei.hms.ads.identifier.AdvertisingIdClient {
    com.huawei.hms.ads.identifier.AdvertisingIdClient$Info getAdvertisingIdInfo(android.content.Context);
}
-keep class com.huawei.hms.ads.identifier.AdvertisingIdClient$Info {
    java.lang.String getId();
    boolean isLimitAdTrackingEnabled();
}

# KochavaTracker: Huawei Install Referrer Collection.
-keep class com.huawei.hms.ads.installreferrer.api.InstallReferrerClient { *; }
-keep class com.huawei.hms.ads.installreferrer.api.InstallReferrerClient$InstallReferrerResponse { *; }
-keep class com.huawei.hms.ads.installreferrer.api.InstallReferrerStateListener { *; }
-keep class com.huawei.hms.ads.installreferrer.api.ReferrerDetails { *; }

# KochavaTracker: Notifications Enabled Collection.
-keep class androidx.core.app.NotificationManagerCompat {
    static androidx.core.app.NotificationManagerCompat from(android.content.Context);
    boolean areNotificationsEnabled();
}

# KochavaTrackerEvents: Ignore SDK warnings for missing dependencies.
-dontwarn com.kochava.tracker.events**

# KochavaTrackerEvents: Uncomment only if needed. Do not run ProGuard on the SDK at all.
#-keep class com.kochava.tracker.events** { *; }

# KochavaTrackerEvents: BuildConfig
-keep class com.kochava.tracker.events.BuildConfig { *; }

# KochavaTrackerEvents: Internal SDK
-keep class com.kochava.tracker.events.Events {
    static com.kochava.tracker.events.EventsApi getInstance();
    void setController(com.kochava.tracker.modules.events.internal.EventsControllerApi);
    com.kochava.tracker.modules.events.internal.EventsControllerApi getController();
}

# KochavaTrackerEngagement: Ignore SDK warnings for missing dependencies.
-dontwarn com.kochava.tracker.engagement**

# KochavaTrackerEngagement: Uncomment only if needed. Do not run ProGuard on the SDK at all.
#-keep class com.kochava.tracker.engagement** { *; }

# KochavaTrackerEngagement: BuildConfig
-keep class com.kochava.tracker.engagement.BuildConfig { *; }

# KochavaTrackerEngagement: Internal SDK
-keep class com.kochava.tracker.engagement.Engagement {
    static com.kochava.tracker.engagement.EngagementApi getInstance();
    void setController(com.kochava.tracker.modules.engagement.internal.EngagementControllerApi);
    com.kochava.tracker.modules.engagement.internal.EngagementControllerApi getController();
}

# KochavaTrackerDatapointNetwork: Ignore SDK warnings for missing dependencies.
-dontwarn com.kochava.tracker.datapointnetwork**

# KochavaTrackerDatapointNetwork: Uncomment only if needed. Do not run ProGuard on the SDK at all.
#-keep class com.kochava.tracker.datapointnetwork** { *; }

# KochavaTrackerDatapointNetwork: BuildConfig
-keep class com.kochava.tracker.datapointnetwork.BuildConfig { *; }

# KochavaTrackerDatapointNetwork: Internal SDK
-keep class com.kochava.tracker.datapointnetwork.internal.DataPointCollectionNetwork {
    public ;
}

# KochavaTrackerLegacyReferrer: Ignore SDK warnings for missing dependencies.
-dontwarn com.kochava.tracker.legacyreferrer**

# KochavaTrackerLegacyReferrer: Uncomment only if needed. Do not run ProGuard on the SDK at all.
-keep class com.kochava.tracker.legacyreferrer** { *; }

# KochavaTrackerLegacyReferrer: BuildConfig
-keep class com.kochava.tracker.legacyreferrer.BuildConfig { *; }

# KochavaTrackerLegacyReferrer: Referrer Receiver
-keep class com.kochava.tracker.legacyreferrer.LegacyReferrerReceiver {
    onReceive(android.content.Context, android.content.Intent);
}


Starting the Tracker

Estimated Time to Complete
1 Minute

Once you have added the Kochava SDK to your project, the next step is to configure and start the Kochava Tracker in code. Only your App GUID is required to start the tracker with the default settings, which is the case for typical integrations.

We recommend starting the tracker as soon as the application starts, although this can be done later if needed. Starting the tracker as early as possible will ensure it’s started before use, provide more accurate session reporting, and quicker deeplink results.

 


Confirm the Integration:

Estimated Time to Complete
5 Minutes

After integrating the SDK or creating a new App GUID, we suggest performing these tests to ensure the SDK has been integrated successfully and is functioning as expected within your app.

 

Validate the Install:

The SDK will send an install for the app once, after a fresh install. This test ensures the SDK was configured properly and successfully sent the install to Kochava.

  1. Double check the SDK configuration in code, ensuring the correct App GUID.
  2. Run the app for approximately 30 seconds, which will allow more than enough time for the SDK to start and send an install to Kochava under typical conditions.
  3. Wait a minute or two and visit the Install Feed Validation page for your app within the Kochava dashboard, under Apps & Assets > Install Feed Validation. Within that page, look for the Integration Success! message which indicates integration was successful and that Kochava did receive an install from the SDK. At this point you have confirmed a successful SDK integration and can move ahead to Validate Post Install Events below.
  4. If instead you see a Integration Not Complete! message, wait a few more minutes and refresh the page. After refreshing, if the Integration Not Complete! message persists, double check the following, then repeat this test:
    • Correct App GUID is used within SDK code configuration.
    • Ensure the SDK configuration and startup code is being reached.
    • Ensure the network connection from the test device is not limited behind a firewall or otherwise.

Validate Event Tracking:

If you are tracking user events, you can use this test to ensure the SDK was configured properly and is successfully sending these events to Kochava.

  1. Double check the SDK configuration in code, ensuring the correct App GUID.
  2. Double check your event tracking code and ensure it is reachable.
  3. Launch the app and perform necessary actions within the app to trigger the event(s) you wish to test. After performing these actions, wait 60 seconds to allow more than enough time for the SDK to send these events.
  4. Wait a minute or two and visit the Event Manager page for your app within the Kochava dashboard, under Apps & Assets > Event Manager. Within that page, ensure the tested event names are displayed here, in which case you have confirmed the SDK is successfully tracking these events.
  5. If your event names are not displayed here after waiting a few minutes, double check the following, then repeat this test:
    • Correct App GUID is used within SDK code configuration.
    • Ensure the SDK configuration and startup code is being reached prior to any event code.
    • Ensure the SDK event code is being reached.
    • Ensure the network connection from the test device is not limited behind a firewall or otherwise.

Where to Go From Here:

Now that you have completed integration you are ready to utilize the many features offered by the Kochava SDK. Continue on to Using the SDK and choose a topic.

 
 

Last Modified: Aug 31, 2022 at 3:34 pm