Skip to main content
Version: 3.3.1



Keep in mind that it’s best to contact qualified legal professionals, if you haven’t done so already, to get more information and be well-prepared for compliance.

The General Data Protection Regulation, better known as GDPR, took effect on May 25, 2018. It’s a set of rules designed to give EU citizens more control over their personal data. Any businesses established in the EU or with users based in Europe are required to comply with GDPR or risk facing heavy fines. The California Consumer Privacy Act (CCPA) went into effect on January 1, 2020. We have put together some guidelines to help publishers understand better the steps they need to take to be GDPR compliant.

You can learn more about GDPR and CCPA and their differences here.

Step 1. Update Privacy Policy

Include Additional Information To Your Privacy Policy

Don’t forget to add information about IP address and advertising ID collection, as well as the link to Appodeal’s privacy policy to your app’s privacy policy on the App Store.

To speed up the process, you could use privacy policy generators - just insert advertising ID, IP address, and location (if you collect users’ location) in the Personally Identifiable Information you collect field (in line with other information about your app) and the link to Appodeal’s privacy policy in the Link to the privacy policy of third party service providers used by the app field.

Add A Privacy Policy To Your Mobile App

You must add your explicit privacy policies in two places: on your app’s Store Listing page and within your app.

You can find detailed instructions on adding your privacy policy to your app on legal service websites. For example, Iubenda, the solution tailored to legal compliance, provides a comprehensive guide on including a privacy policy in your app.

Make sure that your privacy policy website has an SSL certificate—this point might seem obvious, but it’s still essential.

Here are two useful resources that you can utilize while working on your app compliance:


Please note that although we’re always eager to back you up with valuable information, we’re not authorized to provide any legal advice. It’s important to address your questions to lawyers who specialize in this area.


Since Appodeal SDK 3.2.1 it is fully compatible with Google UMP and supports IAB TCF v2.

In order for Appodeal and our ad providers to deliver ads that are more relevant to your users, as a mobile app publisher, you need to collect explicit user consent in the regions covered by GDPR.

To get consent for collecting personal data of your users, we suggest you use a ready-made solution - Stack Consent Manager based on Google User Messaging Platform (UMP).

Configure Google UMP

Before you start, you need to configure Google UMP. Follow this instruction to setup a consent form.

Stack Consent Manager comes with a pre-made consent window that you can easily present to your users. That means you no longer need to create your own consent window.

Starting from Appodeal SDK 3.0, Stack Consent Manager is included by default.

Consent will be requested automatically on SDK initialization, and consent form will be shown if it is necessary without any additional calls.

Please keep in mind that Consent will be shown only in the EU region, you can use VPN for testing.

This means that Appodeal SDK integration code remains the same:

private void Start()
int adTypes = AppodealAdType.Interstitial | AppodealAdType.Banner | AppodealAdType.RewardedVideo | AppodealAdType.Mrec;
string appKey = "YOUR_APPODEAL_APP_KEY";
AppodealCallbacks.Sdk.OnInitialized += OnInitializationFinished;
Appodeal.Initialize(appKey, adTypes);

#region Initialization Callback

public void OnInitializationFinished(object sender, SdkInitializedEventArgs e) { }



If you wish, you can manage and update consent manually using Appodeal CMP Unity Plugin. To do so, first you need to install the plugin as shown below:

  1. Make sure you have Appodeal Unity Plugin v3.2.1 or newer installed via UPM.

  2. Copy the link below, head to the Window → Package Manager → "+" → Add package from git URL, paste the copied link there and press enter.
  1. Import the namespace
using AppodealStack.Cmp;

To update the consent, call the method:

private void Start()
ConsentManager.Instance.OnConsentInfoUpdateFailed += (sender, args) =>
Debug.Log($"[Appodeal CMP] OnConsentInfoUpdateFailed event triggered. Cause: {args.Cause}");

ConsentManager.Instance.OnConsentInfoUpdateSucceeded += (sender, args) =>
Debug.Log($"[Appodeal CMP] OnConsentInfoUpdateSucceeded event triggered.");

var parameters = new ConsentInfoParameters
IsUnderAgeToConsent = false,
Sdk = "Appodeal",
SdkVersion = Appodeal.GetNativeSDKVersion()


RequestConsentInfoUpdate method can be requested at any moment of the application lifecycle. We recommend call request it at the application launch. Multiple request calls are allowed.


Required parameters: YOUR_APPODEAL_APP_KEY - Appodeal app key, you can get it in your personal account;

ConsentInfoParameters - Data class representing the parameters for a consent update request in the Appodeal Consent Manager. Use this class to encapsulate the necessary information for updating consent preferences.


  • AppKey - The key associated with the user for whom the consent is being updated.
  • IsUnderAgeToConsent - Optional. Indicates whether the user is tagged for under the age of consent. Set to true if the user is under the age of consent, otherwise set to false or null.
  • Sdk - Optional. The identifier for the SDK making the consent update request.
  • SdkVersion - Optional. The version of the SDK making the consent update request.

ConsentManager.Instance.OnConsentInfoUpdateFailed, ConsentManager.Instance.OnConsentInfoUpdateSucceeded - listeners for result request.

After consent info was updated you can check the current consent status:

var status = ConsentManager.Instance.ConsentStatus;

Enum class representing the possible consent statuses in the Appodeal Consent Manager.

  • Unknown - Represents an unknown consent status;
  • Required - Represents a required consent status;
  • NotRequired - Represents a not required consent status;
  • Obtained - Represents an obtained consent status.

You can load and receive ConsentForm object using following code:

private ConsentForm consentForm;

ConsentManager.Instance.OnConsentFormLoadFailed += (sender, args) =>
Debug.Log($"[Appodeal CMP] OnConsentFormLoadFailed event triggered. Cause: {args.Cause}");

ConsentManager.Instance.OnConsentFormLoadSucceeded += (sender, args) =>
Debug.Log($"[Appodeal CMP] OnConsentFormLoadSucceeded event triggered.");
consentForm = args.ConsentForm;


After the consent window is ready you can show it.

ConsentManager.Instance.OnConsentFormDismissed += (sender, args) =>
string message = "[Appodeal CMP] OnConsentFormDismissed event triggered.";
if (args.Error != null) message += $" Error: {args.Error}";
consentForm = null;


Load And Show If Required

Alternatively, you can load the form and show it immediately if required.

ConsentManager.Instance.OnConsentFormDismissed += (sender, args) =>
string message = "[Appodeal CMP] OnConsentFormDismissed event triggered.";
if (args.Error != null) message += $" Error: {args.Error}";


You can reset the consent status to Unknown, using method: