
This is a part of the AppLovin SDK integration guide. To show an MREC (Medium Rectangle) ad, we need to create an ad unit. Login to your AppLovin dashboard, go to MAX > Ad Units section on the left panel. Next, click on the “Create Ad Unit” button.

On the next page, type a name for the ad unit. Select the Android platform and type your app name. Your app will come up in the list. Next, select the MREC ad type. We will add the mediation networks later. Scroll down and click on the green color Save button.

It creates an ad unit along with a unique id. Copy the id.
Now, let’s do the coding. We need to create a layout for the ad. There are two ways to do this.
- Using XML layout
- Using Java/Kotlin Code
- MREC Ad in Jetpack Compose
1. Using XML Layout:
Here is the XML code for the MREC ad.
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context=".MainActivity">
<com.applovin.mediation.ads.MaxAdView xmlns:maxads="http://schemas.applovin.com/android/1.0"
android:id="@+id/max_ad_view_medium_rect"
android:layout_width="300dp"
android:layout_height="250dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
maxads:adFormat="MREC"
maxads:adUnitId="YOUR_AD_UNIT_ID" />
</androidx.constraintlayout.widget.ConstraintLayout>
Replace YOUR_AD_UNIT_ID with the actual ad unit.
MainActivity.kt (Kotlin):
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.applovin.mediation.MaxAd
import com.applovin.mediation.MaxAdViewAdListener
import com.applovin.mediation.MaxError
import com.applovin.mediation.ads.MaxAdView
import com.applovin.sdk.AppLovinSdk
import com.applovin.sdk.AppLovinSdkConfiguration
class MainActivity : AppCompatActivity(), MaxAdViewAdListener {
private var maxAdViewMediumRect: MaxAdView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
maxAdViewMediumRect = findViewById(R.id.max_ad_view_medium_rect)
initializeAdNetwork() // initialize ads only once during the app startup
loadMediumRectAd()
}
private fun initializeAdNetwork() {
AppLovinSdk.getInstance(getApplicationContext()).mediationProvider = "max"
AppLovinSdk.getInstance(getApplicationContext()).initializeSdk { configuration: AppLovinSdkConfiguration ->
}
}
private fun loadMediumRectAd() {
maxAdViewMediumRect?.loadAd()
}
override fun onDestroy() {
// Destroy the MaxAdView
maxAdViewMediumRect?.stopAutoRefresh()
maxAdViewMediumRect?.setListener(null)
maxAdViewMediumRect?.removeAllViews()
maxAdViewMediumRect?.destroy()
maxAdViewMediumRect = null
super.onDestroy()
}
// Following methods are Max Ad Listeners
override fun onAdLoaded(ad: MaxAd?) {
}
override fun onAdDisplayed(ad: MaxAd?) {
/* DO NOT USE - THIS IS RESERVED FOR FULLSCREEN ADS ONLY AND WILL BE REMOVED IN A FUTURE SDK RELEASE */
}
override fun onAdHidden(ad: MaxAd?) {
/* DO NOT USE - THIS IS RESERVED FOR FULLSCREEN ADS ONLY AND WILL BE REMOVED IN A FUTURE SDK RELEASE */
}
override fun onAdClicked(ad: MaxAd?) {
}
override fun onAdLoadFailed(adUnitId: String?, error: MaxError?) {
}
override fun onAdDisplayFailed(ad: MaxAd?, error: MaxError?) {
}
override fun onAdExpanded(ad: MaxAd?) {
}
override fun onAdCollapsed(ad: MaxAd?) {
}
}
MainActivity.java (Java):
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.applovin.mediation.MaxAd;
import com.applovin.mediation.MaxAdViewAdListener;
import com.applovin.mediation.MaxError;
import com.applovin.mediation.ads.MaxAdView;
import com.applovin.sdk.AppLovinSdk;
import com.applovin.sdk.AppLovinSdkConfiguration;
public class MainActivity extends AppCompatActivity implements MaxAdViewAdListener {
private MaxAdView maxAdViewMediumRect;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
maxAdViewMediumRect = findViewById(R.id.max_ad_view_medium_rect);
initializeAdNetwork(); // initialize ads only once during the app startup
loadMediumRectAd();
}
private void initializeAdNetwork() {
AppLovinSdk.getInstance(getApplicationContext()).setMediationProvider("max");
AppLovinSdk.initializeSdk(getApplicationContext(), new AppLovinSdk.SdkInitializationListener() {
@Override
public void onSdkInitialized(final AppLovinSdkConfiguration configuration) {
}
});
}
private void loadMediumRectAd() {
maxAdViewMediumRect.loadAd();
}
@Override
protected void onDestroy() {
// Destroy the MaxAdView
maxAdViewMediumRect.stopAutoRefresh();
maxAdViewMediumRect.setListener(null);
maxAdViewMediumRect.removeAllViews();
maxAdViewMediumRect.destroy();
maxAdViewMediumRect = null;
super.onDestroy();
}
@Override
public void onAdExpanded(MaxAd ad) {
}
@Override
public void onAdCollapsed(MaxAd ad) {
}
@Override
public void onAdLoaded(MaxAd ad) {
}
@Override
public void onAdDisplayed(MaxAd ad) {
}
@Override
public void onAdHidden(MaxAd ad) {
}
@Override
public void onAdClicked(MaxAd ad) {
}
@Override
public void onAdLoadFailed(String adUnitId, MaxError error) {
}
@Override
public void onAdDisplayFailed(MaxAd ad, MaxError error) {
}
}
2. Using Java/Kotlin Code:
If you don’t want to use XML, you can use the following Kotlin or Java code.
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:id="@+id/root_view_main"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
</LinearLayout>
MainActivity.kt (Kotlin):
import android.os.Bundle
import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import com.applovin.mediation.MaxAd
import com.applovin.mediation.MaxAdFormat
import com.applovin.mediation.MaxAdViewAdListener
import com.applovin.mediation.MaxError
import com.applovin.mediation.ads.MaxAdView
import com.applovin.sdk.AppLovinSdkUtils
import com.applovin.sdk.AppLovinSdk
import com.applovin.sdk.AppLovinSdkConfiguration
class MainActivity : AppCompatActivity(), MaxAdViewAdListener {
private var adView: MaxAdView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initializeAdNetwork() // initialize ads only once during the app startup
createMRECAd()
loadMRECAd()
}
private fun initializeAdNetwork() {
AppLovinSdk.getInstance(getApplicationContext()).mediationProvider = "max"
AppLovinSdk.getInstance(getApplicationContext()).initializeSdk { configuration: AppLovinSdkConfiguration ->
}
}
private fun createMRECAd() {
adView = MaxAdView("YOUR_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(ContextCompat.getColor(applicationContext, R.color.black))
val rootView = findViewById<ViewGroup>(R.id.root_view_main)
rootView.addView(adView)
}
private fun loadMRECAd() {
adView?.loadAd()
}
override fun onDestroy() {
// Destroy the MaxAdView
adView?.stopAutoRefresh()
adView?.setListener(null)
adView?.removeAllViews()
adView?.destroy()
adView = null
super.onDestroy()
}
// Following methods are Max Ad Listeners
override fun onAdLoaded(ad: MaxAd?) {
}
override fun onAdDisplayed(ad: MaxAd?) {
/* DO NOT USE - THIS IS RESERVED FOR FULLSCREEN ADS ONLY AND WILL BE REMOVED IN A FUTURE SDK RELEASE */
}
override fun onAdHidden(ad: MaxAd?) {
/* DO NOT USE - THIS IS RESERVED FOR FULLSCREEN ADS ONLY AND WILL BE REMOVED IN A FUTURE SDK RELEASE */
}
override fun onAdClicked(ad: MaxAd?) {
}
override fun onAdLoadFailed(adUnitId: String?, error: MaxError?) {
}
override fun onAdDisplayFailed(ad: MaxAd?, error: MaxError?) {
}
override fun onAdExpanded(ad: MaxAd?) {
}
override fun onAdCollapsed(ad: MaxAd?) {
}
}
MainActivity.java (Java):
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import com.applovin.mediation.MaxAd;
import com.applovin.mediation.MaxAdFormat;
import com.applovin.mediation.MaxAdViewAdListener;
import com.applovin.mediation.MaxError;
import com.applovin.mediation.ads.MaxAdView;
import com.applovin.sdk.AppLovinSdk;
import com.applovin.sdk.AppLovinSdkConfiguration;
import com.applovin.sdk.AppLovinSdkUtils;
public class MainActivity extends AppCompatActivity implements MaxAdViewAdListener {
private MaxAdView adView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initializeAdNetwork(); // initialize ads only once during the app startup
createMRECAd();
loadMRECAd();
}
private void initializeAdNetwork() {
AppLovinSdk.getInstance(getApplicationContext()).setMediationProvider("max");
AppLovinSdk.initializeSdk(getApplicationContext(), new AppLovinSdk.SdkInitializationListener() {
@Override
public void onSdkInitialized(final AppLovinSdkConfiguration configuration) {
}
});
}
private void createMRECAd() {
adView = new MaxAdView("YOUR_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(ContextCompat.getColor(getApplicationContext(), R.color.black));
ViewGroup rootView = findViewById(R.id.root_view_main);
rootView.addView(adView);
}
private void loadMRECAd() {
adView.loadAd();
}
@Override
protected void onDestroy() {
// Destroy the MaxAdView
adView.stopAutoRefresh();
adView.setListener(null);
adView.removeAllViews();
adView.destroy();
adView = null;
super.onDestroy();
}
@Override
public void onAdExpanded(MaxAd ad) {
}
@Override
public void onAdCollapsed(MaxAd ad) {
}
@Override
public void onAdLoaded(MaxAd ad) {
}
@Override
public void onAdDisplayed(MaxAd ad) {
}
@Override
public void onAdHidden(MaxAd ad) {
}
@Override
public void onAdClicked(MaxAd ad) {
}
@Override
public void onAdLoadFailed(String adUnitId, MaxError error) {
}
@Override
public void onAdDisplayFailed(MaxAd ad, MaxError error) {
}
}
3. MREC Ad in Jetpack Compose:
There is no dedicated composable to display MREC ads in Jetpack Compose. But, Jetpack Compose offers AndroidView. It helps us to display classic Android Views. We can use it for our MREC ad.
MainActivity.kt:
import android.os.Bundle
import android.view.View
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView
import com.applovin.mediation.MaxAdFormat
import com.applovin.mediation.ads.MaxAdView
import com.applovin.sdk.AppLovinPrivacySettings
import com.applovin.sdk.AppLovinSdk
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
initializeAdNetworks()
setContent {
YourProjectNameTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colors.background
) {
Column {
// MAX MREC ad
AndroidView(
modifier = Modifier
.size(width = 300.dp, height = 250.dp),
factory = { context ->
MaxAdView("YOUR_AD_UNIT_ID", MaxAdFormat.MREC, context).apply {
visibility = View.VISIBLE
loadAd()
startAutoRefresh()
}
}
)
}
}
}
}
}
private fun initializeAdNetworks() {
AppLovinPrivacySettings.setHasUserConsent(false, applicationContext)
AppLovinPrivacySettings.setIsAgeRestrictedUser(false, applicationContext)
AppLovinPrivacySettings.setDoNotSell(true, applicationContext)
//AdSettings.setDataProcessingOptions(arrayOf<String>())
AppLovinSdk.getInstance(this).mediationProvider = "max"
AppLovinSdk.getInstance(this).initializeSdk {
// AppLovin SDK is initialized, start loading ads
}
}
}
Don’t forget to replace YOUR_AD_UNIT_ID with your actual id.
Now, run the app. You will see a test ad. If nothing shows up, check the following things:
- AppLovin SDK key in the manifest file.
- See the network you selected in the Test Device section. You should add the network’s dependency in the build.gradle file.
- Check if the YOUR_AD_UNIT_ID is correct and belongs to the app you are testing.
If you still have problem, look at the onAdLoadFailed() and onAdDisplayFailed() methods. You have access to the error object. Log the error.getMessage() to see the problem.
This is all about AppLovin MREC ads integration in Android. If you have any doubts, comment below.