Skip to content

Terms and Privacy Policy Flow

This page explains how you can use the MAX Terms & Privacy Policy Flow to prompt acceptance of your Terms of Use and Privacy Policy.

SDK 12.0.0 Release

AppLovin MAX SDK v12.0.0, when used with Google UMP, complies with TCF v2: The MAX SDK can ingest the consent string and AC string and forward the TCF v2 Consent strings / states to the mediated networks as described in TCF v2 Consent.

If you do not use Google UMP as your CMP, either through AppLovin’s automated flow or otherwise, you must ensure that the CMP you choose supports all of the mediated networks you integrate.

If you do not use a CMP, you must continue to set AppLovin’s SDK’s binary consent flags as described in Consent and Age Related Flags in GDPR and Other Regions.

Google UMP Automation

Versions 12.0.0 and above of the AppLovin MAX SDK automate the integration of Google UMP. Therefore you do not need to manually integrate the Google UMP in addition to the MAX SDK. This is completely opt-in and AppLovin will provide you instructions on how you can enable this additional Google UMP integration. Below is a visual representation of the flow:

Initialize MAX SDK. Age-restricted User? In GDPR region? Google UMP Flow. MAX Terms / Privacy Policy Flow. MAX ATT Prompt (iOS only). SDK Initialization Completion callback

  1. MAX SDK initializes.
  2. Regional Compliance Check: AppLovin determines whether the user is located in a GDPR region. If the user is in a GDPR region, the MAX SDK presents Google UMP. If the user is not in a GDPR region, MAX SDK makes a further check to ascertain whether the user is age-restricted.
  3. Age Verification: MAX uses the SetIsAgeRestrictedUser API to determine whether the user is age-restricted under COPPA. If so, the user is taken to MAX’s ATT (App Tracking Transparency) prompt. If not, MAX SDK presents the user with a Terms of Service and Privacy Policy prompt. Steps 2 and 3 ensure that users are informed about data collection and usage and that they have the option to consent or decline.
  4. If Google UMP is not configured to display the ATT prompt, or if the user did not see the Google UMP flow, MAX SDK shows the MAX ATT prompt.
  5. MAX SDK calls your initialization completion callback to signal that you can start loading ads.

Enabling Google UMP

Enabling Google CMP on AdMob Dashboard

So that the MAX consent flow can display the Google GDPR form, you must first create and publish the Google GDPR message on the AdMob dashboard. To do so:

  1. Sign in to your AdMob account at apps.admob.com.
  2. Click Privacy & messaging.
  3. Click GDPR.
  4. Click Create message. The GDPR message page opens.
  5. Select the apps that you want to display your message:
    1. Click Select apps.
    2. Select the desired apps.
    3. Click Save.
  6. Select the languages in which you want to display your message.
  7. In the User consent options section, select Consent or Manage options.
  8. In the Targeting section, select Countries subject to GDPR (EEA and UK).
  9. Click Continue. The Edit message page opens.
  10. In the Message name field, enter a descriptive message name to help you identify the message later. This name appears only on the Privacy & messaging page and is not visible to users.
  11. Select the Styling tab.
    1. Under the Global section, set the Secondary color to white (#ffffff).
    2. Under the Buttons section, set the Secondary color to gray (#6e6e6e).
  12. Click Publish.
Customize Ad Partners List

To customize which ad partners show in the GDPR message:

  1. Open the GDPR settings page.
  2. Click the edit icon () under the Review your ad partners section.
  3. Select the Custom ad partners toggle. Then select all of the networks that you integrated into your app.
  4. Click Confirm.
  5. Click Save at the bottom of the GDPR settings page.

Enabling MAX Terms and Privacy Policy Flow

First, add the dependency for the Google User Messaging Platform SDK to your app’s target. Do this in your project’s Podfile:

target '«your-project-name»' do
pod 'Google-Mobile-Ads-SDK'
end

In your app’s Info.plist, create a new key named NSUserTrackingUsageDescription of type String. This string is how you inform your user why the app is requesting permission to use data that tracks the user or the device. AppLovin recommends that you set its value to “This uses device info for more personalized ads and content.”

You can enable the MAX Terms and Privacy Policy Flow programmatically or by adding a settings file to application resources. The sections below explain both of these methods.

When you submit your app to App Store Connect for review, you must notify the reviewer that you have enabled the App Tracking Transparency framework permission request for iOS 14.5+ only. Do this in the Review Notes section. If you do not do this, Apple may reject your build.

Programmatically

To enable the MAX Terms and Privacy Policy Flow programmatically, set several properties of the SDK’s settings object before you initialize the SDK. The code sample below demonstrates this:

#import <AppLovinSDK/AppLovinSDK.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
ALSdkSettings *settings = [[ALSdkSettings alloc] init];
settings.termsAndPrivacyPolicyFlowSettings.enabled = YES;
settings.termsAndPrivacyPolicyFlowSettings.privacyPolicyURL = [NSURL URLWithString: @"«https://your-company-name.com/privacy-policy»"];
// Terms of Service URL is optional
settings.termsAndPrivacyPolicyFlowSettings.termsOfServiceURL = [NSURL URLWithString: @"«https://your-company-name.com/terms-of-service»"];
ALSdk *sdk = [ALSdk sharedWithKey: sdkKey settings: settings];
// Set the mediation provider value to @"max" to ensure proper functionality
sdk.mediationProvider = @"max";
[sdk initializeSdkWithCompletionHandler:^(ALSdkConfiguration *configuration) {
}];
}
Applovin-Settings.plist

To enable the MAX Terms and Privacy Policy Flow by using your app’s AppLovin-Settings.plist, do the following:

  1. Add a new property list file named AppLovin-Settings.plist to your project’s main target.
  2. In AppLovin-Settings.plist, create a new key named ConsentFlowInfo of type Dictionary. Inside ConsentFlowInfo add the following key/value pairs:
    1. A Boolean with the key ConsentFlowEnabled and the value YES.
    2. A String with the key ConsentFlowPrivacyPolicy and the value of your Privacy Policy URL.
    3. Optionally, a String with the key ConsentFlowTermsOfService and the value of your Terms of Service URL.

The final result should look similar to this:

Root > ConsentFlowInfo > ConsentFlowEnabled (Boolean) = YES, ConsentFlowPrivacyPolicy (String) = https://lionstudios.cc/privacy/, ConsentFlowTermsOfService (String) = https://lionstudios.cc/terms/

Integration

The SDK presents the consent flow when you initialize the SDK. When the user completes the flow, the SDK calls your initialization-completion callback.

If you set the user ID in your MMP integration, set it where you set the AppLovin user ID. The code snippets below use Adjust as an example. Refer to Adjust’s documentation to learn how to initialize Adjust and set the user ID.

#import <AppLovinSDK/AppLovinSDK.h>
#import <Adjust/Adjust.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Set the mediation provider value to @"max" to ensure proper functionality
[ALSdk shared].mediationProvider = @"max";
[ALSdk shared].userIdentifier = @"«user-ID»";
[Adjust addSessionCallbackParameter: @"«your-user-ID-key»" value: @"«user-ID»"];
[[ALSdk shared] initializeSdkWithCompletionHandler:^(ALSdkConfiguration *configuration) {
// You can check app transparency tracking authorization via configuration.appTrackingTransparencyStatus
// Initialize other 3rd-party SDKs - do not initialize mediated advertising SDKs; MAX will automatically do that for you. Not following this step will result in noticeable integration issues
// Initialize the Adjust SDK inside the AppLovin SDK's initialization callback
ADJConfig *adjustConfig = [ADJConfig configWithAppToken: @"«your-Adjust-app-token»"
environment: ADJEnvironmentSandbox or ADJEnvironmentProduction];
[Adjust appDidLaunch: adjustConfig];
// Start loading ads
}];
}
Localizing NSUserTrackingUsageDescription

The table below gives you an English (base) description and a variety of localizations that you can use at your discretion. Read the Documentation > Xcode > Localization instructions to learn how to localize your app.

LocaleString
English (base)This uses device info for more personalized ads and content
Chinese Simplified (ZhHans)我们使用设备信息来提供个性化的广告和内容。
Chinese Traditional (ZhHant)我們使用設備信息來提供個性化的廣告和內容。
French (fr)Cela permet d’utiliser les informations du téléphone pour afficher des contenus publicitaires plus pertinents.
German (de)Dies benutzt Gerätinformationen für relevantere Werbeinhalte
Japan (Ja)これはユーザーデータをもとに、より関連性の高い広告コンテンツをお客様に提供します
Korean (Ko)보다 개인화된 광고 및 콘텐츠를 위해 기기 정보를 사용합니다.
Spanish (es)Esto utiliza la información del dispositivo para anuncios y contenido más personalizados
Show GDPR Flow to Existing Users

AppLovin recommends that you allow existing users in GDPR regions to reenter the GDPR flow. Typically, users do this in your app’s Settings section via an option to Manage Existing Privacy Settings. You can determine if a user is within a GDPR region with the SDK API ALSdkConfiguration.consentFlowUserGeography. The user is in GDPR region when consentFlowUserGeography is ALConsentFlowUserGeographyGDPR. If so, you can conditionally show that settings option to the user.

When the user clicks Manage Existing Privacy Settings (or its equivalent), call -[ALCMPService showCMPForExistingUserWithCompletion]. This resets the user’s existing consent information.

#import "MyViewController.h"
#import <AppLovinSDK/AppLovinSDK.h>
@interface MyViewController ()
@end
@implementation MyViewController
- (void)loadAndShowCMPFlow
{
ALCMPService *cmpService = [ALSdk shared].cmpService;
[cmpService showCMPForExistingUserWithCompletion:^(ALCMPError * _Nullable error) {
if ( !error )
{
// The CMP alert was shown successfully.
}
}];
}
@end
Testing

If you want to test the Google CMP outside the GDPR region, set the debug user geography by using one of the techniques shown below:

Programmatically

To set the debug user geography to GDPR use code like the following:

AppLovinSdkSettings.termsAndPrivacyPolicyFlowSettings.debugUserGeography = ALConsentFlowUserGeographyGDPR;
AppLovin-Settings.plist

To set the debug user geography, add the ConsentFlowDebugUserGeography key with string value gdpr under the ConsentFlowInfo object:

ConsentFlowInfo > ConsentFlowDebugUserGeography (String) = gdpr

Testing Google UMP Integration with the Mediation Debugger

Verifying Installation

Under the Privacy section of the MAX Mediation Debugger, the CMP (Consent Management Platform) row displays the name of the Google-certified CMP SDK that you integrated. If you successfully integrated the Google UMP SDK, it displays “Google consent management solutions” as the name.

MAX Mediation Debugger. CMP (Consent Management Platform): Google consent management solutions

Verifying IAB TCF Parameters

If you select the CMP (Consent Management Platform) row, you can inspect the IAB TCF parameters IABTCF_gdprApplies, IABTCF_TCString, and IABTCF_AddtlConsent. For the latter two, you can click on the row to copy or share its value.

IAB TCF Parameters: IABTCF_gdprApplies, IABTCF_TCString, IABTCF_AddtlConsent

Verifying Missing Networks

In the CMP CONFIGURATION section, you can verify which networks are integrated with or are missing from your Google UMP configuration. This is an exhaustive list of all networks that are available to MAX. You can ignore any networks that you did not integrate in your application.

On your CMP flow you must list all of the networks that you integrate in your application. To check if any of those networks are missing, and to fix this problem:

  1. Complete the CMP flow, granting consent to all networks.
  2. Open the Mediation Debugger. The Mediation Debugger parses the TC and AC strings and displays two lists:
    1. Integrated networks you listed on your CMP flow
    2. Networks that are missing which you might need to add (under Configured CMP Networks in the CMP CONFIGURATION section)
  3. You will see missing networks in the MISSING ATP NETWORKS or MISSING TCF VENDORS lists. If any of these are networks that you integrated into your application:
    1. Return to your CMP’s dashboard. Add the missing networks to those covered by the GDPR message. (See Customize Ad Partners List for how to do this in Google’s Unified Consent Flow.)
    2. Restart your app.

Repeat these steps until you verify that all of your networks are correctly included in the CMP flow.

CMP Configuration: IABTCF_CmpSdkID = 300, IABTCF_CmpSdkVersion = 2. To check which of your integrated networks are missing from your CMP, first make sure that you have granted consent to all networks through your CMP flow. Then add the following networks to your CMP network list. Configured CMP Networks: Missing 3 network(s).Configured CMP Networks: Missing TCF Vendors (TC String), Missing ATP Networks (AC String), Listed TCF Vendors (TC String)

To view the consent statuses of all networks, expand Network Consent Statuses in the Mediation Debugger. The Mediation Debugger parses the TC string and displays the consent statuses of all networks. It also displays the AppLovin consent status that it parses from the AC string that Google UMP generates.

Network Consent Statuses: TCF Vendors (TC String), ATP Networks (AC String)