Didomi - Developers documentation
  • Introduction
  • SDKs
    • Introduction
    • Web SDK
      • Getting started
      • Tags and vendors management
        • Tags management
          • Events & Variables
            • Deprecated
            • Custom events
          • Tag managers
            • Adobe Launch/DTM
            • Eulerian
            • Google Tag Manager
              • Configure the Didomi / GTM integration
              • Didomi's GTM template
            • Tealium
            • Other tag managers
        • Custom Didomi <script> tags
        • Third-party integrations
          • Google Ad Manager / AdSense
            • GDPR via Non-Personalized Ads
              • Share consent and load/refresh ads
              • Share consent without loading or refreshing ads
            • US states laws
          • Google Consent Mode V2
          • Kameleoon
          • Piano Analytics (AT Internet)
          • Prebid
            • GDPR via IAB TCF
            • US states laws
          • Salesforce DMP (Krux)
        • IAB frameworks
        • Programmatic API
      • Configuration
        • Bots (SEO & Performance tools)
        • Configuration by URL
        • Cookies and storage
        • Custom domains for events
        • Notice
          • Behavior
          • Interactions
          • Look and feel
        • Preferences
        • Theme
      • AB tests
      • Custom domain
        • Domain delegation
        • Reverse proxy
      • Share consents between domains
      • Share consents across devices
      • Pass user choices in query string
      • Serve Didomi assets from your domain
      • Reference
        • API
          • Deprecated
        • Events
      • Performance
    • Mobile and TV SDKs
      • Android and Android TV
        • Setup
        • Logging
        • Reference
          • API
            • Deprecated
          • Events
        • Versions
      • iOS and tvOS
        • Setup
        • Logging
        • App Tracking Transparency (iOS 14.5+)
        • Reference
          • API
            • Deprecated
          • Events
        • Versions
      • Unity
        • Setup
        • Reference
        • Versions
        • Troubleshooting
      • React Native
        • Setup
        • Reference
          • Deprecated
        • Versions
      • Flutter
        • Setup
        • Reference
        • Versions
      • Consent notice
        • Getting started
        • Customize the notice
        • Customize the preferences popup
        • Customize the theme & UI
        • Load notice by ID
      • Third-party SDKs
      • Share consents across devices
      • Share consent with WebViews
      • Google Consent Mode v2
      • FAQ
    • AMP SDK
      • Blocking Behaviors
        • Load immediately on page load
        • Load only after consent (positive or negative)
        • Load only after positive consent
      • Consent status for vendors
    • Help & Support
  • API
    • Introduction
      • Authentication
      • Errors
      • Pagination
      • Filters
      • Caching
      • Rate limiting
      • Quotas
      • Translations
    • Data Manager
      • Regulations
      • Configuration Tree
      • Purposes
        • Purposes & Vendors Numerical IDs
      • Preferences Library
      • User Rights
    • Widgets
      • Consent notices
        • Notices
        • Configurations
        • Multi-Regulation Configurations
          • Migration of Existing Notices and API Updates
        • Deployments
        • Tutorials
          • Create and publish a consent notice
          • Create and publish a multi-regulation consent notice
      • Privacy widgets
        • Create a widget
        • Retrieve widgets
        • Edit a widget
          • Content & Design
            • Themes & Shapes
            • Components
              • auth
              • dsar_form
              • footer
              • header
              • preference
              • preference_value
              • save
              • section
              • sections
            • Options
          • Purposes & preferences
          • Settings
        • Deploy a Widget
          • Use your own subdomain
          • Use your own domain
          • Implement an embeddable widget on your website
        • Authentication
          • Manage authentication providers
          • Authenticate your end-user
        • Archive a widget
        • Headless widgets
          • Public Methods
          • Custom elements
          • Custom events
          • Event listeners
        • Tutorial
          • Launch a Preference Center from a mobile app
    • Compliance Reports
      • Properties
      • Reports
      • CSV format reference
      • Websites
    • Consents and Preferences
      • Events
        • Generate IAB TCF consent string
      • Links
      • Proofs
      • Tokens
      • Secrets
      • Users
      • Tutorial
        • Collect and operate data
    • Privacy Requests
      • Requests
      • Notes
      • Links
      • Emails
  • Integrations
    • Introduction
      • Quotas
    • Generic integrations
      • Batch export
        • Destinations
          • AWS S3 Bucket (owned by Didomi)
          • GCP Storage Bucket
        • Exported data
          • Notices consents
        • Logs
      • Webhooks
      • Batch import
      • Analytics export
        • Destinations
          • AWS S3 Bucket (owned by Didomi)
          • GCP Storage Bucket
    • Third-party apps
      • CMP integrations
        • Didomi-mParticle integration for your CMP
        • Deploy Didomi’s SDK for your Adobe Commerce website
      • Preference Management Platform integrations
        • Actito
        • Adobe Campaign Classic
        • Adobe Experience Cloud
        • Adobe Marketo Engage
        • Adobe Source Connector
        • Braze
        • Dotdigital
        • Hubspot
        • Mailchimp
        • Microsoft Dynamics 365
        • Salesforce Marketing Cloud
        • Salesforce Sales & Service Cloud
        • Selligent
        • Brevo (ex Sendinblue)
    • Tutorials
      • Configure a HTTP webhook
      • Configure a batch export
      • Configure an analytics export
    • Emailing
      • Configurations
        • Actito Email
        • Actito SMS
        • Adobe Campaign Classic
        • Adobe Campaign Standard
      • Emails
        • Templates
        • Manage your templates
Powered by GitBook
On this page
  • Add the SDK to your project
  • Initialize the SDK
  • Use FlutterFragmentActivity instead of FlutterActivity (Android)
  • Setup the SDK UI
  • Deep links
  • Configure the SDK
  • From the Console (Recommended)
  • Local file (Deprecated)
  • Remote file
  1. SDKs
  2. Mobile and TV SDKs
  3. Flutter

Setup

PreviousFlutterNextReference

Last updated 3 months ago

Add the SDK to your project

SDK is available from pub.dev:

Add the Didomi SDK dependency:

 $ flutter pub add didomi_sdk

This will add a line like this to your package's pubspec.yaml (and run an implicit dart pub get):

dependencies:
  didomi_sdk: ^1.0.1

Afterwards, to update the dependency to the latest version, you can use the command

$ flutter pub upgrade

On Android, the error Module was compiled with an incompatible version of Kotlin. may occur. Make sure ext.kotlinVersion is set to 1.5.31 in android/build.gradle.

Then you can import project from your dart code:

import 'package:didomi_sdk/didomi_sdk.dart';

Initialize the SDK

Once our SDK has been added to your project, you need to initialize it. The initialization process will prepare the SDK for interactions with the user and your application. It is important to launch the SDK initialization as soon as possible.

In your code, call the initialize method and pass your API key:

void initDidomi() {
  // Setup a listener to know when the SDK is ready
  DidomiSdk.onReady(() => {
    // The Didomi SDK is ready to go, you can call other functions
  });
  DidomiSdk.initializeWithParameters(
      DidomiInitializeParameters(apiKey:"<Your API key>",
      noticeId: "<Your Notice ID>"));
}

Keep in mind that the SDK initialization is an asynchronous process so you must avoid interacting with the DidomiSdk object until it is actually ready to handle your requests. Use the onReady event in dart to register a listener for the ready event.

Use FlutterFragmentActivity instead of FlutterActivity (Android)

The Didomi SDK requires a FragmentActivity to display the notice. By default, Flutter projects use FlutterActivity which extends Activity: to use the SDK, it must be changed to a FlutterFragmentActivity instead.

The activity class should be present in folder android/app/src/main/kotlin/ under the package name described in android/app/src/main/AndroidManifest.xml. Update it to use FlutterFragmentActivity.

package <Your package name>

import io.flutter.embedding.android.FlutterFragmentActivity

class MainActivity: FlutterFragmentActivity() {
}

Some sdk users reported a dependency conflict after updating the MainActivity class. They solved it by adding the dependency

implementation "androidx.activity:activity-ktx:1.3.1"

in the file android/app/build.gradle .

Setup the SDK UI

Note: the setupUI method should be called only from your contexts where the application starts.

You do not need to call onReady, isReady or shouldConsentBeCollected before calling setupUI because they are called internally. Therefore, by calling this method the consent notice will be displayed if it is required and only once the SDK is ready.

Call the setupUI function of the SDK in your context where the application starts:

class _MyHomePageState extends State<MyHomePage> {

  @override
  void initState() {
    super.initState();
    DidomiSdk.setupUI();
  }
}

Deep links

If you are using deep links or have multiple pages in your Flutter app, make sure that the setupUI function is called on every context that the user can launch the app on. This will ensure that consent is always collected as needed and there is no path where the user can launch the app without consent being collected. If setupUI is missing in some entry points, you will see lower consent rates as users will be using the app without giving consent.

Configure the SDK

We support three options for configuring the UI and the behavior of the SDK:

From the Console (Recommended)

In order to enable this option, make sure to pass the disableDidomiRemoteConfig parameter as false (default value) when calling the initialize method as shown below.

  DidomiSdk.initializeWithParameters(
      DidomiInitializeParameters(
          apiKey: "<Your API key>",
          disableDidomiRemoteConfig: false,
          noticeId: "<Your notice ID>"
      )
  );

The SDK will automatically use the remote configuration hosted by Didomi and cache it locally. The cached version is refreshed every 60 minutes. If there is no connection available to download the remote configuration and no locally cached version, the SDK will try to use a local didomi_config.json configuration file as a fallback. See the Local option below for more information on how to configure the SDK through a local configuration file.

Local file (Deprecated)

Using a local file automatically disables the TCF integration. If your app uses the TCF, you must use a configuration from the Didomi Console.

Using a local file will prevent you to support multiple regulations.

With this option, you create your own SDK configuration file and embed it in your app package.

The SDK behavior is configured in a didomi_config.json file that must be placed in the Android and iOS folders of your project.

You can create a file with the following content to get started:

{
    "app": {
        "name": "My App Name",
        "privacyPolicyURL": "http://www.website.com/privacy",
        "vendors": {
            "iab": {
                "all": true
            }
        },
        "gdprAppliesGlobally": true,
        "gdprAppliesWhenUnknown": true
    }
}

For Android, the configuration file must be placed in the assets folder of the Android platform code (in this example: android/app/src/main/assets)

For iOS, the configuration file must be placed in the Resources group (make sure project.pbxproj file is updated)

 DidomiSdk.initializeWithParameters(
      DidomiInitializeParameters(
            apiKey: "<Your API key>",
            disableDidomiRemoteConfig: true,
            noticeId: "<Your notice ID>"
      )
);

Remote file

Enabling this option will prevent the configuration from being loaded from the Didomi Console.

You can provide a remote URL for the SDK to download the didomi_config.json configuration file from. That allows you to update the SDK configuration without having to re-publish you mobile application.

When that configuration is enabled, the SDK will automatically use the remote configuration and cache it locally. The cached version is refreshed every 60 minutes. If there is no connection available to download the remote file and no locally cached version, the SDK will try to use the local didomi_config.json (described above) as a fallback.

 DidomiSdk.initializeWithParameters(
      DidomiInitializeParameters(
            apiKey: "<Your API key>",
            remoteConfigurationURL: "http://www.website.com/didomi_config.json",
            disableDidomiRemoteConfig: false
      )
);

Take a look at our to see how the setup is done.

: the SDK is configured remotely from the Didomi Console

: the SDK is configured from a didomi_config.json file embedded in your app package

: the SDK is configured from a remote didomi_config.json file

You can configure the consent notice in your app by creating a notice in your Didomi Console. It will automatically be linked to your app through your API Key and, optionally, your notice id. You can access the Didomi console .

You also need to disable loading the remote configuration to ensure that only the local file is loaded and that no HTTP request is sent. Update your call to set the disableDidomiRemoteConfig parameter to true:

Your SDK is now setup. of our Mobile SDKs to learn more about how to configure it to match your app UI and requirements.

To enable that option, change your call to to provide the remote file URL:

Also see the for more information.

https://pub.dev/packages/didomi_sdk/install
sample app
here
Read the Getting started section
Didomi Console
Local file
Remote file
initialize
initialize
reference documentation of the initialize function