Implementing banner ads in Android

Note: You must initialize Unity Ads before displaying a banner ad.

Banner ads require a specific type of dedicated banner Ad Unit.

You can place the banner view object into your view hierarchy, just like you would any other view. This allows you to customize the position of each banner instance, or display multiple banners.

Note: app-ads.txt is an IAB initiative to combat fraud and create transparency in the advertising ecosystem. Ensure that you implement app-ads.txt as described. Otherwise, banner demand might be significantly decreased.

Script implementation

The following script sample is an example implementation for displaying two banner ads on the screen, and buttons for testing them.

This example uses a single listener for multiple banner view objects. You can also have a different listener for each banner view object.

Note: Unity Ads requires access to the currently running Activity, so the following example uses getApplicationContext(). Because this might not be suitable for all implementations, some customization might be required (depending on the integration).

Implementing the MREC banner format

To display a medium rectangle (MREC) sized ad format in your app, ensure the proper dimensions are used, such as 300x250, 300x300, or 450x450. In the case of a 300x250 MREC banner ad specifically, replace this in the following example code:

new UnityBannerSize(320, 50)

With this adjusted dimension:

new UnityBannerSize(300, 250)

Sample code

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

import com.unity3d.ads.IUnityAdsInitializationListener;
import com.unity3d.ads.UnityAds;
import com.unity3d.services.banners.BannerErrorInfo;
import com.unity3d.services.banners.BannerView;
import com.unity3d.services.banners.UnityBannerSize;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;

public class ShowBanners extends AppCompatActivity implements IUnityAdsInitializationListener {

  String unityGameID = "1234567";
  Boolean testMode = true;
  String topAdUnitId = "topBanner";
  String bottomAdUnitId = "bottomBanner";

  // Listener for banner events:
  private BannerView.IListener bannerListener = new BannerView.IListener() {
     @Override
     public void onBannerLoaded(BannerView bannerAdView) {
        // Called when the banner is loaded.
        Log.v("UnityAdsExample", "onBannerLoaded: " + bannerAdView.getPlacementId());
        // Enable the correct button to hide the ad
        (bannerAdView.getPlacementId().equals("topBanner") ? hideTopBannerButton : hideBottomBannerButton).setEnabled(true);
     }

     @Override
     public void onBannerFailedToLoad(BannerView bannerAdView, BannerErrorInfo errorInfo) {
        Log.e("UnityAdsExample", "Unity Ads failed to load banner for " + bannerAdView.getPlacementId() + " with error: [" + errorInfo.errorCode + "] " + errorInfo.errorMessage);
        // Note that the BannerErrorInfo object can indicate a no fill (refer to the API documentation).
     }

     @Override
     public void onBannerClick(BannerView bannerAdView) {
        // Called when a banner is clicked.
        Log.v("UnityAdsExample", "onBannerClick: " + bannerAdView.getPlacementId());
     }

     @Override
     public void onBannerLeftApplication(BannerView bannerAdView) {
        // Called when the banner links out of the application.
        Log.v("UnityAdsExample", "onBannerLeftApplication: " + bannerAdView.getPlacementId());
     }
  };

  // This banner view object will be placed at the top of the screen:
  BannerView topBanner;
  // This banner view object will be placed at the bottom of the screen:
  BannerView bottomBanner;
  // View objects to display banners:
  RelativeLayout topBannerView;
  RelativeLayout bottomBannerView;
  // Buttons to show the banners:
  Button showTopBannerButton;
  Button showBottomBannerButton;
  // Buttons to destroy the banners:
  Button hideTopBannerButton;
  Button hideBottomBannerButton;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     // Initialize Unity Ads:
     UnityAds.initialize(getApplicationContext(), unityGameID, testMode, this);

     // Set up a button to load the top banner when clicked:
     showTopBannerButton = findViewById(R.id.loadTopBanner);
     // Set up a button to load the bottom banner when clicked:
     showBottomBannerButton = findViewById(R.id.loadBottomBanner);
     // Set up a button to destroy the top banner when clicked:
     hideTopBannerButton = findViewById(R.id.hideTopBanner);
     // Set up a button to destroy the bottom banner when clicked:
     hideBottomBannerButton = findViewById(R.id.hideBottomBanner);

     showTopBannerButton.setEnabled(false);
     showBottomBannerButton.setEnabled(false);
     hideTopBannerButton.setEnabled(false);
     hideBottomBannerButton.setEnabled(false);

     showTopBannerButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           showTopBannerButton.setEnabled(false);
           // Create the top banner view object:
           topBanner = new BannerView(view.getContext(), topAdUnitId, new UnityBannerSize(320, 50));
           // Set the listener for banner lifecycle events:
           topBanner.setListener(bannerListener);
           topBannerView = findViewById(R.id.topBanner);
           LoadBannerAd(topBanner, topBannerView);
        }
     });

     showBottomBannerButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           showBottomBannerButton.setEnabled(false);
           // Create the bottom banner view object:
           bottomBanner = new BannerView(view.getContext(), bottomAdUnitId, new UnityBannerSize(320, 50));
           // Set the listener for banner lifecycle events:
           bottomBanner.setListener(bannerListener);
           bottomBannerView = findViewById(R.id.bottomBanner);
           LoadBannerAd(bottomBanner, bottomBannerView);
        }
     });

     hideTopBannerButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           // Remove content from the banner view:
           topBannerView.removeAllViews();
           // Remove the banner variables:
           topBannerView = null;
           topBanner = null;
           showTopBannerButton.setEnabled(true);
        }
     });

     hideBottomBannerButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           // Remove content from the banner view:
           bottomBannerView.removeAllViews();
           // Remove the banner variables:
           bottomBannerView = null;
           bottomBanner = null;
           showBottomBannerButton.setEnabled(true);
        }
     });
  }

  public void LoadBannerAd(BannerView bannerView, RelativeLayout bannerLayout) {
     // Request a banner ad:
     bannerView.load();
     // Associate the banner view object with the banner view:
     bannerLayout.addView(bannerView);
  }

  @Override
  public void onInitializationComplete() {
     // Enable the show ad buttons because ads can now be loaded
     showTopBannerButton.setEnabled(true);
     showBottomBannerButton.setEnabled(true);
  }

  @Override
  public void onInitializationFailed(UnityAds.UnityAdsInitializationError error, String message) {

  }
}

Next steps: Review the monetization strategy guide or test your implementation.