> For the complete documentation index, see [llms.txt](https://aatkit.gitbook.io/android-integration/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://aatkit.gitbook.io/android-integration/start/consent/managed-consent/sfbx-appconsent-cmp.md).

# SFBX (AppConsent) CMP

### Requirements <a href="#requirements" id="requirements"></a>

* Add the needed maven repository to your list:

  ```
  maven { // SFBX CMP
          url "https://artifactory.datalf.chat/artifactory/app-consent-v2-release"
  }
  ```
* Add the SFBX CMP dependency to your build.gradle:

```
implementation 'com.sfbx.appconsent:appconsent-ui-v3:<version>'
```

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.

### Usage

Follow the instructions in the Managed Consent [introduction section](/android-integration/start/consent/managed-consent.md).

{% hint style="info" %}
SFBX CMP needs an Activity instance when being created.
{% endhint %}

* Create an instance of `CMPAppConsent` (`CMPAppConsent` implements `CMP`interface).
* Pass the created `CMPAppConsent` instance while creating the ManagedConsent using the `public constructor ManagedConsent(cmp: CMP, context: Context, delegate: ManagedConsent.ManagedConsentDelegate)`.

{% tabs %}
{% tab title="Java" %}

```java
private ManagedConsent managedConsent;

public void onActivityReady(Activity activity) {
    if (managedConsent == null) { //we want to do it only once
        CMP cmp = new CMPAppConsent(activity, "<APP_KEY>");
        managedConsent = new ManagedConsent(cmp, this, this);
        AATKitRuntimeConfiguration newConf = new AATKitRuntimeConfiguration();
        newConf.setConsent(managedConsent);
        AATKit.reconfigure(newConf);
        managedConsent.showIfNeeded(activity);
        OR
        managedConsent.showIfNeededOrRejected(10, activity);
    }
}

// ManagedConsentDelegate implementation
@Override
public void managedConsentNeedsUserInterface(@NonNull ManagedConsent managedConsent) {
    // CMP is loaded and ready to be shown
    // Show the CMP using active Activity
    managedConsent.showIfNeeded(<ACTIVITY_INSTANCE>);
    OR
    managedConsent.showIfNeededOrRejected(10, <ACTIVITY_INSTANCE>);
}

@Override
public void managedConsentCMPFinished(@NonNull ManagedConsent.ManagedConsentState state) {
    // The user finished his action with CMP with the state as the user chosen state
}

@Override
public void managedConsentCMPFailedToLoad(@NonNull ManagedConsent managedConsent, String error) {
    // CMP failed to load with the error message.
    // Consider reloading the CMP using the active Activity:
    // managedConsent.reload(<ACTIVITY_INSTANCE>);
    // if you know that the user is in GDPR region
}

@Override
public void managedConsentCMPFailedToShow(@NonNull ManagedConsent managedConsent, String error) {
    // CMP failed to show with the error message
}
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
private var managedConsent: ManagedConsent? = null

fun onActivityReady(activity: Activity) {
    if (managedConsent == null) { //we want to do it only once
        val cmp: CMP = CMPAppConsent(activity, "<APP_KEY>")
        managedConsent = ManagedConsent(cmp, this, this)
        val newConf = AATKitRuntimeConfiguration()
        newConf.consent = managedConsent
        AATKit.reconfigure(newConf)
        managedConsent?.showIfNeeded(activity)
        OR
        managedConsent?.showIfNeededOrRejected(10, activity)
    }
}

// ManagedConsentDelegate implementation
fun managedConsentNeedsUserInterface(managedConsent: ManagedConsent) {
    // CMP is loaded and ready to be shown
    // Show the CMP using active Activity
    managedConsent.showIfNeeded(<ACTIVITY_INSTANCE>)
    OR
    managedConsent.showIfNeededOrRejected(10, <ACTIVITY_INSTANCE>)
}

fun managedConsentCMPFinished(state: ManagedConsentState) {
    // The user finished his action with CMP with the state as the user chosen state
}

fun managedConsentCMPFailedToLoad(managedConsent: ManagedConsent, error: String?) {
    // CMP failed to load with the error message.
    // Consider reloading the CMP using the active Activity:
    // managedConsent.reload(<ACTIVITY_INSTANCE>);
    // if you know that the user is in GDPR region
}

fun managedConsentCMPFailedToShow(managedConsent: ManagedConsent, error: String?) {
    // CMP failed to show with the error message
}
```

{% endtab %}
{% endtabs %}
