Skip to main content

AppLovin MAX mediation - Native Ad

This native implementation is specifically designed to fit feed views You can customize the ad view to look like the other cells around, to offer a more immersive experience.


This article shows you how to deliver Teads Native ads in your application using the AppLovin Mediation adapter.

Sample App on GitHub Teads inApp SDK Android sample App


Prerequisites

Installation

Before installing the Teads AppLovin adapter, you will need to integrate AppLovin SDK into your application.

Gradle

project/build.gradle

allprojects {
repositories {
...
maven { url "https://teads.jfrog.io/artifactory/SDKAndroid-maven-prod" }
}
}

app/build.gradle

dependencies {
...
implementation "com.applovin:applovin-sdk:11.5.1" // or higher

// Teads inApp SDK
implementation("tv.teads.sdk.android:sdk:6.x.x@aar") {
transitive = true
}

// Teads AppLovin Adapter
implementation 'tv.teads.sdk.android:applovinadapter:6.x.x'
}

Defining a Custom network

In order to display a Teads native ad using AppLovin mediation, you need to create a new Teads custom network and a new adunit using Teads custom network.

Teads Custom Network

Follow the custom network documentation (Step. 1) on the AppLovin dashboard using the below values.

NameValue
Android Class Namecom.applovin.mediation.adapters.TeadsContextAdapter

Teads Ad Unit

Follow the custom network documentation (Step. 2) on the AppLovin dashboard using the below values.

NameValue
Placement ID (PID)See information below

Please retrieve your production PID from your local account manager.

See this page for test PIDs and creative formats.

Display an ad

Create your custom layout

Create your new layout for an ad item with your favorite ViewGroup container (eg. RelativeLayout, ConstraintLayout ...)

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android">

<TextView
android:id="@+id/ad_headline"
...
/>

<FrameLayout
android:id="@+id/media_view_container"
...
/>

// THIS CONTAINER IS MANDATORY, IT WILL BE USED AS AD_CHOICES
<FrameLayout
android:id="@+id/ad_options_view"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
android:layout_margin="10dp"
...
/>

...
</RelativeLayout>

Native Ad Elements

  • titleView (Guaranteed in every request)
  • mediaView (Guaranteed in every request)
  • adChoicesView (Mandatory)
  • bodyView
  • callToActionView
  • iconView
  • advertiserView

Request an ad

Create the View binder

Take your layout id and pass it to the builder constructor MaxNativeAdViewBinder.Builder, fill every field you need for your integration

private fun createNativeAdView(): MaxNativeAdView {
val binder: MaxNativeAdViewBinder = MaxNativeAdViewBinder.Builder(R.layout.layout_applovin_native)
.setTitleTextViewId(R.id.title_text_view) // MANDATORY
.setBodyTextViewId(R.id.body_text_view)
.setAdvertiserTextViewId(R.id.advertiser_textView)
.setIconImageViewId(R.id.icon_image_view)
.setMediaContentViewGroupId(R.id.media_view_container) // MANDATORY
.setOptionsContentViewGroupId(R.id.ad_options_view) // MANDATORY (AdChoices)
.setCallToActionButtonId(R.id.cta_button)
.build()
return MaxNativeAdView(binder, this)
}

Create the AdLoader

AppLovinSdk.getInstance(this).mediationProvider = "max"
AppLovinSdk.getInstance(this).initializeSdk {} // you will need to wait this to finish before loading an ad

val nativeAdLoader = MaxNativeAdLoader("YOUR_AD_UNIT_ID", this)

nativeAdLoader.setNativeAdListener(object : MaxNativeAdListener() {
override fun onNativeAdLoaded(nativeAdView: MaxNativeAdView, ad: MaxAd) {
// Destroy previous ad if exists
if (nativeAd != null) nativeAdLoader.destroy(nativeAd)

// Store the new ad to allow destroying it later
nativeAd = ad

// Add ad view to container
containerAdView.removeAllViews()
containerAdView.addView(nativeAdView)
}

override fun onNativeAdLoadFailed(adUnitId: String, error: MaxError) {}
override fun onNativeAdClicked(ad: MaxAd) {}
})

Load an ad

Create the TeadsMediationSettings, then add the settings to the local extra parameters

val settingsEncoded = TeadsMediationSettings.Builder()
.enableDebug()
.build().toJsonEncoded()

nativeAdLoader.setLocalExtraParameter("teadsSettings", settingsEncoded)
nativeAdLoader.loadAd(createNativeAdView())

Mediation settings

Find the full settings list in the Integration Guide and Settings Configuration

Check list

  • ✅ Ensure Brand Safety is enabled
  • ✅ Ensure you comply with privacy legal requirements (GDPR/CCPA/GPP)
  • ✅ Comply with app-ads.txt
  • ✅ Enable ad view resizing
  • ✅ Test different PIDs with various ad formats and sizes
  • ✅ Enable validation mode to ensure key features are working