To receive release updates, subscribe to the AppLovin-MAX-SDK-Android GitHub repository .
Download the Latest Android SDK
Add the SDK to the Project
Unzip the downloaded file, then drag and drop the aar
file to the libs
folder in your project.
(If your project does not have a libs
folder, you can create one inside the app
folder.)
Gradle
Add the following to your build.gradle
file:
implementation ' com.applovin:applovin-sdk: «x.y.z» @aar '
implementation ( "com.applovin:applovin-sdk: «x.y.z» @aar" )
Add the SDK Key
Add the following line into your AndroidManifest.xml
.
This needs to go inside the application
tag:
< meta-data android:name = " applovin.sdk.key " android:value = " «your-SDK-key» " />
You can find your SDK key in the Account > General > Keys section of the AppLovin dashboard.
Enable Ad Review
To enable the MAX Ad Review service, add the following to your build.gradle
files:
Additions to Root-Level build.gradle
File
maven { url ' https://artifacts.applovin.com/android ' }
classpath " com.applovin.quality:AppLovinQualityServiceGradlePlugin:+ "
maven { url = uri ( "https://artifacts.applovin.com/android" ) }
classpath ( "com.applovin.quality:AppLovinQualityServiceGradlePlugin:+" )
Additions to App-Level build.gradle
File
apply plugin : ' applovin-quality-service '
apiKey " «your-ad-review-key» "
id ( "applovin-quality-service" )
apiKey = " «your-ad-review-key» "
You can find your Ad Review Key in the Account > General > Keys section of the AppLovin dashboard.
Initialize the SDK
Initialize the SDK by calling the initializeSdk()
method, passing that method a context.
Do this as soon as possible after your app starts, for example in the onCreate()
method of your launch Activity
.
public class MainActivity extends Activity
protected void onCreate ( Bundle savedInstanceState )
// Set the mediation provider value to "max" to ensure proper functionality.
AppLovinSdk . getInstance ( this ) . setMediationProvider ( " max " ) ;
AppLovinSdk . initializeSdk ( this , new AppLovinSdk. SdkInitializationListener () {
public void onSdkInitialized ( final AppLovinSdkConfiguration configuration )
// AppLovin SDK is initialized, start loading ads
class MainActivity : Activity()
override fun onCreate (savedInstanceState: Bundle?)
// Set the mediation provider value to "max" to ensure proper functionality.
AppLovinSdk. getInstance ( this ). setMediationProvider ( "max" )
AppLovinSdk. getInstance ( this ). initializeSdk ({ configuration: AppLovinSdkConfiguration ->
// AppLovin SDK is initialized, start loading ads
Interstitial Ads
Loading an Interstitial Ad
To load an interstitial ad, instantiate a MaxInterstitialAd
object with your ad unit and call loadAd()
.
Implement MaxAdListener
so you can be notified when your ad is ready and of other ad-related events.
public class ExampleActivity extends Activity
private MaxInterstitialAd interstitialAd ;
private int retryAttempt ;
void createInterstitialAd ()
interstitialAd = new MaxInterstitialAd ( " «ad-unit-ID» " , this ) ;
interstitialAd . setListener ( this ) ;
public void onAdLoaded ( final MaxAd maxAd )
// Interstitial ad is ready to be shown. interstitialAd.isReady() will now return 'true'
public void onAdLoadFailed ( final String adUnitId , final MaxError error )
// Interstitial ad failed to load
// AppLovin recommends that you retry with exponentially higher delays up to a maximum delay (in this case 64 seconds)
long delayMillis = TimeUnit . SECONDS . toMillis ( ( long ) Math . pow ( 2 , Math . min ( 6 , retryAttempt ) ) ) ;
new Handler () . postDelayed ( new Runnable ()
public void onAdDisplayFailed ( final MaxAd maxAd , final MaxError error )
// Interstitial ad failed to display. AppLovin recommends that you load the next ad
public void onAdDisplayed ( final MaxAd maxAd ) {}
public void onAdClicked ( final MaxAd maxAd ) {}
public void onAdHidden ( final MaxAd maxAd )
// Interstitial ad is hidden. Pre-load the next ad
class ExampleActivity : Activity(), MaxAdListener
private lateinit var interstitialAd: MaxInterstitialAd
private var retryAttempt = 0.0
fun createInterstitialAd ()
interstitialAd = MaxInterstitialAd ( " «ad-unit-ID» " , this )
interstitialAd. setListener ( this )
override fun onAdLoaded (maxAd: MaxAd)
// Interstitial ad is ready to be shown. interstitialAd.isReady() will now return 'true'
override fun onAdLoadFailed (adUnitId: String?, error: MaxError?)
// Interstitial ad failed to load
// AppLovin recommends that you retry with exponentially higher delays up to a maximum delay (in this case 64 seconds)
val delayMillis = TimeUnit.SECONDS. toMillis ( Math. pow ( 2.0 , Math. min ( 6.0 , retryAttempt ) ). toLong () )
Handler (). postDelayed ( { interstitialAd. loadAd () }, delayMillis )
override fun onAdDisplayFailed (ad: MaxAd?, error: MaxError?)
// Interstitial ad failed to display. AppLovin recommends that you load the next ad
override fun onAdDisplayed (maxAd: MaxAd) {}
override fun onAdClicked (maxAd: MaxAd) {}
override fun onAdHidden (maxAd: MaxAd)
// Interstitial ad is hidden. Pre-load the next ad
Showing an Interstitial Ad
To show an interstitial ad, call showAd()
on the MaxInterstitialAd
object created above.
if ( interstitialAd . isReady () )
if ( interstitialAd.isReady )
Rewarded Ads
Loading a Rewarded Ad
To load a rewarded ad, retrieve a MaxRewardedAd
object with your rewarded ad unit and call loadAd()
on it.
Implement MaxRewardedAdListener
so you can be notified when your ad is ready and of other ad-related events.
public class ExampleActivity extends Activity
implements MaxRewardedAdListener
private MaxRewardedAd rewardedAd ;
private int retryAttempt ;
rewardedAd = MaxRewardedAd . getInstance ( " «ad-unit-ID» " , this ) ;
rewardedAd . setListener ( this ) ;
public void onAdLoaded ( final MaxAd maxAd )
// Rewarded ad is ready to be shown. rewardedAd.isReady() will now return 'true'
public void onAdLoadFailed ( final String adUnitId , final int errorCode )
// Rewarded ad failed to load
// AppLovin recommends that you retry with exponentially higher delays up to a maximum delay (in this case 64 seconds)
long delayMillis = TimeUnit . SECONDS . toMillis ( ( long ) Math . pow ( 2 , Math . min ( 6 , retryAttempt ) ) ) ;
new Handler () . postDelayed ( new Runnable ()
public void onAdDisplayFailed ( final MaxAd maxAd , final MaxError error )
// Rewarded ad failed to display. AppLovin recommends that you load the next ad
public void onAdDisplayed ( final MaxAd maxAd ) {}
public void onAdClicked ( final MaxAd maxAd ) {}
public void onAdHidden ( final MaxAd maxAd )
// rewarded ad is hidden. Pre-load the next ad
public void onUserRewarded ( final MaxAd maxAd , final MaxReward maxReward )
// Rewarded ad was displayed and user should receive the reward
class ExampleActivity : Activity(), MaxRewardedAdListener
private lateinit var rewardedAd: MaxRewardedAd
private var retryAttempt = 0.0
rewardedAd = MaxRewardedAd. getInstance ( " «ad-unit-ID» " , this )
rewardedAd. setListener ( this )
override fun onAdLoaded (maxAd: MaxAd)
// Rewarded ad is ready to be shown. rewardedAd.isReady() will now return 'true'
override fun onAdLoadFailed (adUnitId: String?, error: MaxError?)
// Rewarded ad failed to load
// AppLovin recommends that you retry with exponentially higher delays up to a maximum delay (in this case 64 seconds)
val delayMillis = TimeUnit.SECONDS. toMillis ( Math. pow ( 2.0 , Math. min ( 6.0 , retryAttempt ) ). toLong () )
Handler (). postDelayed ( { rewardedAd. loadAd () }, delayMillis )
override fun onAdDisplayFailed (ad: MaxAd?, error: MaxError?)
// Rewarded ad failed to display. AppLovin recommends that you load the next ad
override fun onAdDisplayed (maxAd: MaxAd) {}
override fun onAdClicked (maxAd: MaxAd) {}
override fun onAdHidden (maxAd: MaxAd)
// rewarded ad is hidden. Pre-load the next ad
override fun onUserRewarded (maxAd: MaxAd, maxReward: MaxReward)
// Rewarded ad was displayed and user should receive the reward
Showing a Rewarded Ad
To show a rewarded ad, call showAd()
on the MaxRewardedAd
object you created above.
if ( rewardedAd . isReady () )
if ( rewardedAd. isReady () )
Banners & MRECs
Loading and Showing Banners & MRECs Programmatically
To load a banner ad or MREC, create a MaxAdView
object with your ad unit and call loadAd()
.
To show, add the MaxAdView
object as a subview of your view hierarchy.
Implement MaxAdViewAdListener
so you can be notified when your ad is ready and of other ad-related events.
public class ExampleActivity extends Activity
implements MaxAdViewAdListener
private MaxAdView adView ;
adView = new MaxAdView ( " «ad-unit-ID» " , this ) ;
adView . setListener ( this ) ;
// Stretch to the width of the screen for banners to be fully functional
int width = ViewGroup . LayoutParams . MATCH_PARENT ;
// Banner height on phones and tablets is 50 and 90, respectively
int heightPx = getResources () . getDimensionPixelSize ( R . dimen . banner_height ) ;
adView . setLayoutParams ( new FrameLayout. LayoutParams ( width, heightPx ) ) ;
// Set background or background color for banners to be fully functional
adView . setBackgroundColor ( ... ) ;
ViewGroup rootView = findViewById ( android . R . id . content ) ;
rootView . addView ( adView ) ;
public void onAdLoaded ( final MaxAd maxAd ) {}
public void onAdLoadFailed ( final String adUnitId , final int errorCode ) {}
public void onAdDisplayFailed ( final MaxAd maxAd , final MaxError error ) {}
public void onAdClicked ( final MaxAd maxAd ) {}
public void onAdExpanded ( final MaxAd maxAd ) {}
public void onAdCollapsed ( final MaxAd maxAd ) {}
public void onAdDisplayed ( final MaxAd maxAd ) { /* use this for impression tracking */ }
public void onAdHidden ( final MaxAd maxAd ) { /* DO NOT USE - THIS IS RESERVED FOR FULLSCREEN ADS ONLY AND WILL BE REMOVED IN A FUTURE SDK RELEASE */ }
class ExampleActivity : Activity(), MaxAdViewAdListener
private var adView: MaxAdView? = null
adView = MaxAdView ( " «ad-unit-ID» " , this )
adView?. setListener ( this )
// Stretch to the width of the screen for banners to be fully functional
val width = ViewGroup.LayoutParams.MATCH_PARENT
// Banner height on phones and tablets is 50 and 90, respectively
val heightPx = resources. getDimensionPixelSize (R.dimen.banner_height)
adView?.layoutParams = FrameLayout. LayoutParams (width, heightPx)
// Set background or background color for banners to be fully functional
adView?. setBackgroundColor ( .. .)
val rootView = findViewById <ViewGroup>(android.R.id.content)
override fun onAdLoaded (maxAd: MaxAd) {}
override fun onAdLoadFailed (adUnitId: String?, error: MaxError?) {}
override fun onAdDisplayFailed (ad: MaxAd?, error: MaxError?) {}
override fun onAdClicked (maxAd: MaxAd) {}
override fun onAdExpanded (maxAd: MaxAd) {}
override fun onAdCollapsed (maxAd: MaxAd) {}
override fun onAdDisplayed (maxAd: MaxAd) { /* use this for impression tracking */ }
override fun onAdHidden (maxAd: MaxAd) { /* DO NOT USE - THIS IS RESERVED FOR FULLSCREEN ADS ONLY AND WILL BE REMOVED IN A FUTURE SDK RELEASE */ }
public class ExampleActivity extends Activity
implements MaxAdViewAdListener
private MaxAdView adView ;
adView = new MaxAdView ( " «ad-unit-ID» " , MaxAdFormat . MREC , this ) ;
adView . setListener ( this ) ;
// MREC width and height are 300 and 250 respectively, on phones and tablets
int widthPx = AppLovinSdkUtils . dpToPx ( this , 300 ) ;
int heightPx = AppLovinSdkUtils . dpToPx ( this , 250 ) ;
adView . setLayoutParams ( new FrameLayout. LayoutParams ( widthPx, heightPx ) ) ;
// Set background or background color for MRECs to be fully functional
adView . setBackgroundColor ( ... ) ;
ViewGroup rootView = findViewById ( android . R . id . content ) ;
rootView . addView ( adView ) ;
public void onAdLoaded ( final MaxAd maxAd ) {}
public void onAdLoadFailed ( final String adUnitId , final int errorCode ) {}
public void onAdDisplayFailed ( final MaxAd maxAd , final MaxError error ) {}
public void onAdClicked ( final MaxAd maxAd ) {}
public void onAdExpanded ( final MaxAd maxAd ) {}
public void onAdCollapsed ( final MaxAd maxAd ) {}
public void onAdDisplayed ( final MaxAd maxAd ) { /* use this for impression tracking */ }
public void onAdHidden ( final MaxAd maxAd ) { /* DO NOT USE - THIS IS RESERVED FOR FULLSCREEN ADS ONLY AND WILL BE REMOVED IN A FUTURE SDK RELEASE */ }
class ExampleActivity : Activity(), MaxAdViewAdListener
private var adView: MaxAdView? = null
adView = MaxAdView ( " «ad-unit-ID» " , MaxAdFormat.MREC, this )
adView?. setListener ( this )
// MREC width and height are 300 and 250 respectively, on phones and tablets
val widthPx = AppLovinSdkUtils. dpToPx ( this , 300 )
val heightPx = AppLovinSdkUtils. dpToPx ( this , 250 )
adView?.layoutParams = FrameLayout. LayoutParams (widthPx, heightPx)
// Set background or background color for MRECs to be fully functional
adView?. setBackgroundColor ( .. .)
val rootView = findViewById <ViewGroup>(android.R.id.content)
override fun onAdLoaded (maxAd: MaxAd) {}
override fun onAdLoadFailed (adUnitId: String?, error: MaxError?) {}
override fun onAdDisplayFailed (ad: MaxAd?, error: MaxError?) {}
override fun onAdClicked (maxAd: MaxAd) {}
override fun onAdExpanded (maxAd: MaxAd) {}
override fun onAdCollapsed (maxAd: MaxAd) {}
override fun onAdDisplayed (maxAd: MaxAd) { /* use this for impression tracking */ }
override fun onAdHidden (maxAd: MaxAd) { /* DO NOT USE - THIS IS RESERVED FOR FULLSCREEN ADS ONLY AND WILL BE REMOVED IN A FUTURE SDK RELEASE */ }
Loading and Showing Banners or MRECs in Layout Editor
Alternatively, you can add MAX banners or MRECs to your view layout XML.
Ensure that your ads are fully functional by setting a background or background color (android:background
).
In the case of banners, stretch the width (android:layout_width
) to the width of the screen.
In the case of MRECs, set the android:adFormat
accordingly:
< com.applovin.mediation.ads.MaxAdView
xmlns:maxads = " http://schemas.applovin.com/android/1.0 "
maxads:adUnitId = " «ad-unit-ID» "
android:background = " @color/banner_background_color "
android:layout_width = " match_parent "
android:layout_height = " @dimen/banner_height " />
< com.applovin.mediation.ads.MaxAdView
xmlns:maxads = " http://schemas.applovin.com/android/1.0 "
maxads:adUnitId = " «ad-unit-ID» "
android:background = " @color/mrec_background_color "
android:layout_width = " 300dp "
android:layout_height = " 250dp " />
Declare the base banner height of 50dp in res/values/attrs.xml
:
<? xml version = " 1.0 " encoding = " utf-8 " ?>
< dimen name = " banner_height " > 50dp </ dimen >
Declare the tablet banner height of 90dp in res/values-sw600dp/attrs.xml
:
<? xml version = " 1.0 " encoding = " utf-8 " ?>
< dimen name = " banner_height " > 90dp </ dimen >
To hide a banner or MREC ad, call the following:
adView . setVisibility ( View . GONE ) ;
adView . stopAutoRefresh () ;
adView.visibility = View.GONE
To show a banner or MREC ad, call the following:
adView . setVisibility ( View . VISIBLE ) ;
adView . startAutoRefresh () ;
adView.visibility = View.VISIBLE
adView. startAutoRefresh ()
Select the ad networks to integrate.
Then follow the specific instructions.
Migrating to AndroidX
Integrate AndroidX libraries into your project.
Refer to the Migrate to AndroidX guide for more information on how to migrate your project.
Note
Developers and publishers who use Google AdSense, AdManager, or AdMob must use a consent management platform (CMP) that is certified by Google.
The CMP must integrate with IAB’s Transparency and Consent Framework when you serve ads to users in the European Economic Area (EEA) or the UK.
See Privacy: “TCF v2 Consent” for more information.
Add Your Google Bidding and Google AdMob / Google Ad Manager App ID
In your app’s AndroidManifest.xml
, add a <meta-data>
tag inside the <application>
tag.
The example below shows you the correct attributes of this tag.
Replace «your-admob-app-id»
with your Google bidding and Google AdMob / Google Ad Manager App ID.
<? xml version = " 1.0 " encoding = " utf-8 " ?>
android:name = " com.google.android.gms.ads.APPLICATION_ID "
android:value = " «your-admob-app-id» " />
Gradle Errors
Google AdMob requires Android Gradle plugin version 4.2.0 or higher and Gradle version 6.7.1 or higher.
If you see the following error, update your Android Gradle plugin and Gradle versions:
AAPT: error: unexpected element <property> found in <manifest><application>.
compileSdkVersion
Google Mobile Ads SDK versions 23.1.0 and newer require a minimum compileSdkVersion
of 34.
Set the compileSdkVersion
to 34
or higher in your app’s build.gradle
.
Refer to the Google Mobile Ads SDK Release Notes for the latest compileSdkVersion
requirements.
Initialize the Amazon SDK
The Amazon Publisher Services SDK requires that you initialize it outside of MAX SDK:
// Amazon requires an 'Activity' instance
AdRegistration . getInstance ( " AMAZON_APP_ID " , this ) ;
AdRegistration . setAdNetworkInfo ( new DTBAdNetworkInfo ( DTBAdNetwork . MAX ) ) ;
AdRegistration . setMRAIDSupportedVersions ( new String [] { " 1.0 " , " 2.0 " , " 3.0 " } ) ;
AdRegistration . setMRAIDPolicy ( MRAIDPolicy . CUSTOM ) ;
Load a Banner or MREC Ad from Amazon’s SDK
To integrate Amazon ads into MAX, you must load the Amazon ad first.
Before you load the MAX ad, pass the DTBAdResponse
or AdError
into the instance of MaxAdView
.
You can do this by calling MaxAdView#setLocalExtraParameter()
.
if ( AppLovinSdkUtils . isTablet ( getApplicationContext () ) )
amazonAdSlotId = " «Amazon-leader-slot-ID» " ;
adFormat = MaxAdFormat . LEADER ;
amazonAdSlotId = " «Amazon-banner-slot-ID» " ;
adFormat = MaxAdFormat . BANNER ;
// Raw size will be 320x50 for BANNERs on phones, and 728x90 for LEADERs on tablets
AppLovinSdkUtils . Size rawSize = adFormat . getSize () ;
DTBAdSize size = new DTBAdSize ( rawSize .getWidth () , rawSize .getHeight () , amazonAdSlotId ) ;
DTBAdRequest adLoader = new DTBAdRequest () ;
adLoader . setSizes ( size ) ;
adLoader . loadAd ( new DTBAdCallback ()
public void onSuccess ( @ NonNull final DTBAdResponse dtbAdResponse )
// 'adView' is your instance of MaxAdView
adView . setLocalExtraParameter ( " amazon_ad_response " , dtbAdResponse ) ;
public void onFailure ( @ NonNull final AdError adError )
// 'adView' is your instance of MaxAdView
adView . setLocalExtraParameter ( " amazon_ad_error " , adError ) ;
class ExampleActivity : Activity()
private val adView: MaxAdView? = null
val amazonAdSlotId: String
val adFormat: MaxAdFormat
if (AppLovinSdkUtils. isTablet (applicationContext))
amazonAdSlotId = " «Amazon-leader-slot-ID» "
adFormat = MaxAdFormat.LEADER
amazonAdSlotId = " «Amazon-banner-slot-ID» "
adFormat = MaxAdFormat.BANNER
// Raw size will be 320x50 for BANNERs on phones, and 728x90 for LEADERs on tablets
val rawSize = adFormat.size
val size = DTBAdSize (rawSize.width, rawSize.height, amazonAdSlotId)
val adLoader = DTBAdRequest ()
adLoader. loadAd ( object : DTBAdCallback
override fun onSuccess (dtbAdResponse: DTBAdResponse)
// 'adView' is your instance of MaxAdView
adView?. setLocalExtraParameter ( "amazon_ad_response" , dtbAdResponse)
override fun onFailure (adError: AdError)
// 'adView' is your instance of MaxAdView
adView?. setLocalExtraParameter ( "amazon_ad_error" , adError)
DTBAdRequest adLoader = new DTBAdRequest () ;
adLoader . setSizes ( new DTBAdSize ( 300 , 250 , amazonAdSlotId ) ) ;
adLoader . loadAd ( new DTBAdCallback ()
public void onSuccess ( @ NonNull final DTBAdResponse dtbAdResponse )
// 'adView' is your instance of MaxAdView
adView . setLocalExtraParameter ( " amazon_ad_response " , dtbAdResponse ) ;
public void onFailure ( @ NonNull final AdError adError )
// 'adView' is your instance of MaxAdView
adView . setLocalExtraParameter ( " amazon_ad_error " , adError ) ;
class ExampleActivity : Activity()
private val adView: MaxAdView? = null
val amazonAdSlotId: String
val adLoader = DTBAdRequest ()
adLoader. setSizes ( DTBAdSize ( 300 , 250 , amazonAdSlotId))
adLoader. loadAd ( object : DTBAdCallback
override fun onSuccess (dtbAdResponse: DTBAdResponse)
// 'adView' is your instance of MaxAdView
adView !! . setLocalExtraParameter ( "amazon_ad_response" , dtbAdResponse)
override fun onFailure (adError: AdError)
// 'adView' is your instance of MaxAdView
adView !! . setLocalExtraParameter ( "amazon_ad_error" , adError)
Load an Interstitial Ad from Amazon’s SDK
To integrate Amazon interstitial ads into MAX, you must load the Amazon ad first.
Before you load the MAX ad, pass the DTBAdResponse
or AdError
into the instance of MaxInterstitialAd
.
You can do this by calling MaxInterstitialAd#setLocalExtraParameter()
.
private static MaxInterstitialAd interstitialAd ; // static to ensure only one instance exists
private static boolean isFirstLoad = true ;
if ( interstitialAd == null )
interstitialAd = new MaxInterstitialAd ( " «MAX-inter-ad-unit-ID» " , this ) ;
DTBAdRequest adLoader = new DTBAdRequest () ;
adLoader . setSizes ( new DTBAdSize. DTBInterstitialAdSize ( " «Amazon-inter-slot-ID» " ) ) ;
adLoader . loadAd ( new DTBAdCallback ()
public void onSuccess ( @ NonNull final DTBAdResponse dtbAdResponse )
// 'interstitialAd' is your instance of MaxInterstitialAd
interstitialAd . setLocalExtraParameter ( " amazon_ad_response " , dtbAdResponse ) ;
public void onFailure ( @ NonNull final AdError adError )
// 'interstitialAd' is your instance of MaxInterstitialAd
interstitialAd . setLocalExtraParameter ( " amazon_ad_error " , adError ) ;
class ExampleActivity : Activity()
private var interstitialAd: MaxInterstitialAd? = null // static to ensure only one instance exists
private var isFirstLoad = true
if (interstitialAd == null )
interstitialAd = MaxInterstitialAd ( " «MAX-inter-ad-unit-ID» " , this )
val adLoader = DTBAdRequest ()
adLoader. setSizes (DTBAdSize. DTBInterstitialAdSize ( " «Amazon-inter-slot-ID» " ))
adLoader. loadAd ( object : DTBAdCallback
override fun onSuccess (dtbAdResponse: DTBAdResponse)
// 'interstitialAd' is your instance of MaxInterstitialAd
interstitialAd !! . setLocalExtraParameter ( "amazon_ad_response" , dtbAdResponse)
interstitialAd !! . loadAd ()
override fun onFailure (adError: AdError)
// 'interstitialAd' is your instance of MaxInterstitialAd
interstitialAd !! . setLocalExtraParameter ( "amazon_ad_error" , adError)
interstitialAd !! . loadAd ()
interstitialAd !! . loadAd ()
Load a Video Interstitial Ad from Amazon’s SDK
To integrate Amazon video interstitial ads into MAX, you must load the Amazon ad first.
Before you load the MAX ad, pass the DTBAdResponse
or AdError
into the instance of MaxInterstitialAd
.
You can do this by calling MaxInterstitialAd#setLocalExtraParameter()
.
private static MaxInterstitialAd interstitialAd ; // static to ensure only one instance exists
private static boolean isFirstLoad = true ;
if ( interstitialAd == null )
interstitialAd = new MaxInterstitialAd ( " «MAX-inter-ad-unit-ID» " , this ) ;
DTBAdRequest adLoader = new DTBAdRequest () ;
// Switch video player width and height values(320, 480) depending on device orientation
adLoader . setSizes ( new DTBAdSize. DTBVideo ( 320 , 480 , " «Amazon-video-inter-slot-ID» " ) ) ;
adLoader . loadAd ( new DTBAdCallback ()
public void onSuccess ( @ NonNull final DTBAdResponse dtbAdResponse )
// 'interstitialAd' is your instance of MaxInterstitialAd
interstitialAd . setLocalExtraParameter ( " amazon_ad_response " , dtbAdResponse ) ;
public void onFailure ( @ NonNull final AdError adError )
// 'interstitialAd' is your instance of MaxInterstitialAd
interstitialAd . setLocalExtraParameter ( " amazon_ad_error " , adError ) ;
class ExampleActivity : Activity()
private var interstitialAd: MaxInterstitialAd? = null // static to ensure only one instance exists
private var isFirstLoad = true
if (interstitialAd == null )
interstitialAd = MaxInterstitialAd ( " «MAX-inter-ad-unit-iD» " , this )
val adLoader = DTBAdRequest ()
// Switch video player width and height values(320, 480) depending on device orientation
adLoader. setSizes (DTBAdSize. DTBVideo ( 320 , 480 , " «Amazon-video-inter-slot-ID» " ))
adLoader. loadAd ( object : DTBAdCallback
override fun onSuccess (dtbAdResponse: DTBAdResponse)
// 'interstitialAd' is your instance of MaxInterstitialAd
interstitialAd !! . setLocalExtraParameter ( "amazon_ad_response" , dtbAdResponse)
interstitialAd !! . loadAd ()
override fun onFailure (adError: AdError)
// 'interstitialAd' is your instance of MaxInterstitialAd
interstitialAd !! . setLocalExtraParameter ( "amazon_ad_error" , adError)
interstitialAd !! . loadAd ()
interstitialAd !! . loadAd ()
Load a Rewarded Video Ad from Amazon’s SDK
To integrate Amazon rewarded videos into MAX, first load the Amazon ad.
Before you load the MAX ad, pass the DTBAdResponse
or AdError
into the instance of MaxRewardedAd
.
You can do this by calling MaxRewardedAd#setLocalExtraParameter()
.
private static MaxRewardedAd rewardedAd ; // static to ensure only one instance exists
private static boolean isFirstLoad = true ;
if ( rewardedAd == null )
rewardedAd = MaxRewardedAd . getInstance ( " «MAX-rewarded-ad-unit-ID» " , this ) ;
DTBAdRequest adLoader = new DTBAdRequest () ;
// Switch video player width and height values(320, 480) depending on device orientation
adLoader . setSizes ( new DTBAdSize. DTBVideo ( 320 , 480 , " «Amazon-video-rewarded-slot-ID» " ) ) ;
adLoader . loadAd ( new DTBAdCallback ()
public void onSuccess ( @ NonNull final DTBAdResponse dtbAdResponse )
// 'rewardedAd' is your instance of MaxRewardedAd
rewardedAd . setLocalExtraParameter ( " amazon_ad_response " , dtbAdResponse ) ;
public void onFailure ( @ NonNull final AdError adError )
// 'rewardedAd' is your instance of MaxRewardedAd
rewardedAd . setLocalExtraParameter ( " amazon_ad_error " , adError ) ;
private static MaxRewardedAd rewardedAd; // static to ensure only one instance exists
private static boolean isFirstLoad = true ;
if ( rewardedAd == null )
rewardedAd = MaxRewardedAd. getInstance ( " «MAX-rewarded-ad-unit-ID» " , this );
DTBAdRequest adLoader = new DTBAdRequest ();
// Switch video player width and height values(320, 480) depending on device orientation
adLoader. setSizes ( new DTBAdSize. DTBVideo ( 320 , 480 , " «Amazon-video-rewarded-slot-ID» " ) );
adLoader. loadAd ( new DTBAdCallback ()
public void onSuccess (@NonNull final DTBAdResponse dtbAdResponse)
// 'rewardedAd' is your instance of MaxRewardedAd
rewardedAd. setLocalExtraParameter ( "amazon_ad_response" , dtbAdResponse );
public void onFailure (@NonNull final AdError adError)
// 'rewardedAd' is your instance of MaxRewardedAd
rewardedAd. setLocalExtraParameter ( "amazon_ad_error" , adError );
Testing Amazon Publisher Services
AppLovin recommends that you enable test mode for Amazon’s SDK.
This allows you to receive test ads.
Enable test mode by making the following calls:
AdRegistration . enableTesting ( true ) ;
AdRegistration . enableLogging ( true ) ;
You can filter your waterfalls to contain only Amazon ads.
To do this, navigate to Select Live Network in the Mediation Debugger and select the Amazon network.
Meta Audience Network Data Processing Options
If you do not want to enable Limited Data Use (LDU) mode, pass SetDataProcessingOptions()
an empty string array:
import com.facebook.ads.AdSettings ;
AdSettings . setDataProcessingOptions ( new String [] {} ) ;
import com.facebook.ads.AdSettings
AdSettings. setDataProcessingOptions ( arrayOf <String>() )
To enable LDU for users and specify user geography, call SetDataProcessingOptions()
in a form like this:
import com.facebook.ads.AdSettings ;
AdSettings . setDataProcessingOptions ( new String [] { " LDU " }, «country» , «state» ) ;
import com.facebook.ads.AdSettings
AdSettings. setDataProcessingOptions ( arrayOf ( "LDU" ), «country» , «state» )
Using Google UMP
If you use Google UMP as your CMP, you can determine whether the user has consented to Meta or not.
To do so, use code like the following:
Boolean hasMetaConsent = AppLovinPrivacySettings . getAdditionalConsentStatus ( 89 ) ;
if ( hasMetaConsent != null )
// Set Meta Data Processing Options accordingly.
// AC String is not available on disk. Please check for consent status after the user completes the CMP flow.
val hasMetaConsent = AppLovinPrivacySettings. getAdditionalConsentStatus ( 89 )
if ( hasMetaConsent != null )
// Set Meta Data Processing Options accordingly.
// AC String is not available on disk. Please check for consent status after the user completes the CMP flow.
Meta Audience Network Data Processing Options for Users in California
To learn how to implement Meta Audience Network’s “Limited Data Use” flag in California, visit the Meta for Developers documentation .
Android Manifest Merging Errors
Several network SDKs use the <queries>
element in their bundled Android Manifest files.
If you use an incompatible version of the Android Gradle plugin, this causes one of the following build errors:
com.android.builder.internal.aapt.v2.Aapt2Exception: Android resource linking failed
error: unexpected element <queries> found in <manifest>.
Missing 'package' key attribute on element package at [:com.my.target.mytarget-sdk-5.11.3:]
AndroidManifest Validation failed
To fix this error, upgrade to one of the following versions of the Android Gradle plugin.
These versions support the <queries>
element:
Current Android Gradle Plugin Version Version that Supports <queries>
Element 4.1.* All 4.0.* 4.0.1+ 3.6.* 3.6.4+ 3.5.* 3.5.4+ 3.4.* 3.4.3+ 3.3.* 3.3.3+