# Managed Consent

### Introduction

AATKit’s Managed Consent is an easy way to facilitate [IAB TCF](https://iabeurope.eu/transparency-consent-framework/) compliant third-party [Consent Management Platforms](https://iabeurope.eu/tcf-for-cmps/) (CMPs) by providing a unified API and wrappers. In order to make use of Managed Consent, AATKit Flutter plugin provides CMP implementations.

### **Google CMP Usage**

Android requires `appId` to be added to `AndroidManifest`, like

```xml
<meta-data
          android:name="com.google.android.gms.ads.APPLICATION_ID"
          android:value="YOUR-APP-ID"/>
```

For iOS you need to set the `GADApplicationIdentifier` value to the `Info.plist` file, like:

```xml
<key>GADApplicationIdentifier</key>
<string>YOUR-APP-ID</string>
```

Set Google CMP consent type when initializing AATKit:

```dart
await _aatkitFlutterPlugin.initAATKit(
  AATKitConfiguration(
    consent: ManagedConsent(
      cmp: CMPGoogle(),
      listener: ManagedConsentListener(
          managedConsentCMPFailedToLoad: (error) {
            print("[ManagedConsentListenerFlutter] managedConsentCMPFailedToLoad error: $error");
            _aatkitFlutterPlugin.reloadConsent();
          },
          managedConsentCMPFailedToShow: (error) => print(
              "[ManagedConsentListenerFlutter] managedConsentCMPFailedToShow error: $error"),
          managedConsentCMPFinished: (state) => print(
              "[ManagedConsentListenerFlutter] managedConsentCMPFinished state: $state"),
          managedConsentNeedsUserInterface: () {
            print("[ManagedConsentListenerFlutter] managedConsentNeedsUserInterface");
            _aatkitFlutterPlugin.showConsentIfNeeded();
          }),
    ),
  ),
);
```

### **SourcePoint CMP Usage**

Add SourcePoint dependency to the Android project's `build.gradle` file.

```gradle
implementation 'com.sourcepoint.cmplibrary:cmplibrary:7.10.1'
```

Pass all required SourcePoint values as configuration parameters when initializing AATKit.

```dart
await _aatkitFlutterPlugin.initAATKit(
  AATKitConfiguration(
    consent: ManagedConsent(
      cmp: CMPSourcePoint(
        accountId: your-account-id,
        propertyId: your-property-id,
        propertyName: "your-property-name",
        pmId: "your-pm-id",
      ),
      listener: ManagedConsentListener(
          managedConsentCMPFailedToLoad: (error) {
            print("[ManagedConsentListenerFlutter] managedConsentCMPFailedToLoad error: $error");
            _aatkitFlutterPlugin.reloadConsent();
          },
          managedConsentCMPFailedToShow: (error) => print(
              "[ManagedConsentListenerFlutter] managedConsentCMPFailedToShow error: $error"),
          managedConsentCMPFinished: (state) => print(
              "[ManagedConsentListenerFlutter] managedConsentCMPFinished state: $state"),
          managedConsentNeedsUserInterface: () {
            print("[ManagedConsentListenerFlutter] managedConsentNeedsUserInterface");
            _aatkitFlutterPlugin.showConsentIfNeeded();
          }),
    ),
  ),
);
```

### SFBX/AppConsent

Make sure, your SFBX CMP has been set up at its backend dashboard. Our support recommends certain vendors to be included in your server-side setup in order to yield optimal revenues.

Add SFBX/AppConsent dependency to the Android project's `build.gradle` file.

```
implementation 'com.sfbx.appconsent:appconsent-ui-v3:5.3.0'
```

Pass API Key as configuration parameter when initializing AATKit.

```dart
await _aatkitFlutterPlugin.initAATKit(
  AATKitConfiguration(
    consent: ManagedConsent(
      cmp: CmpAppConsent(
          appKey: "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxxxxx",
      ),
      listener: ManagedConsentListener(
          managedConsentCMPFailedToLoad: (error) {
            print("[ManagedConsentListenerFlutter] managedConsentCMPFailedToLoad error: $error");
            _aatkitFlutterPlugin.reloadConsent();
          },
          managedConsentCMPFailedToShow: (error) => print(
              "[ManagedConsentListenerFlutter] managedConsentCMPFailedToShow error: $error"),
          managedConsentCMPFinished: (state) => print(
              "[ManagedConsentListenerFlutter] managedConsentCMPFinished state: $state"),
          managedConsentNeedsUserInterface: () {
            print("[ManagedConsentListenerFlutter] managedConsentNeedsUserInterface");
            _aatkitFlutterPlugin.showConsentIfNeeded();
          }),
    ),
  ),
);
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://aatkit.gitbook.io/aatkit-flutter-integration/start/consent/managed-consent.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
