Implementing banner ads in Android

Ad Unit configuration

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

app-ads.txt

app-ads.txt is an IAB initiative to combat fraud and create transparency in the advertising ecosystem. Be sure to implement app-ads.txt as described. Otherwise, banner demand may be significantly decreased.

Script implementation

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

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

Copy
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 (see 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 since ads can now be loaded
     showTopBannerButton.setEnabled(true);
     showBottomBannerButton.setEnabled(true);
  }

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

  }
}

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

Banner position

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.

Next steps: See documentation on implementing AR ads in Android, review the monetization strategy guide, or test your implementation.