Migrar anúncios de banner

Esta página aborda as diferenças no carregamento e na exibição de um anúncio de banner entre os SDKs de anúncios para dispositivos móveis atuais e de próxima geração.

O SDK de anúncios para dispositivos móveis de próxima geração apresenta uma separação clara entre o objeto de anúncio de banner (BannerAd) e o View dele. O principal impacto dessa mudança é que a visualização do banner não fica mais disponível até que o anúncio seja carregado.

Considerando uma hierarquia de visualização com um contêiner de visualização de banner definido:

<FrameLayout
    android:id="@+id/banner_view_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:layout_alignParentBottom="true" />
Atual

Para carregar um anúncio de banner:

  1. Crie um objeto AdView com o ID e o tamanho do bloco de anúncios.
  2. Adicione o AdView à hierarquia de visualização.
  3. Carregue o anúncio.

Kotlin

import com.google.android.gms.ads.AdView

class MainActivity : AppCompatActivity() {

  private lateinit var binding: ActivityMainBinding
  private lateinit var adView: AdView

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)

    // Step 1 - Create an AdView object with ad unit ID and size.
    adView = AdView(this)
    adView.adUnitId = "AD_UNIT_ID"
    adView.setAdSize(
      AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 320)
    )
    // Step 2 - Add the AdView to view hierarchy.
    binding.bannerViewContainer.addView(adView)

    // Step 3 - Load the ad.
    val adRequest = AdRequest.Builder().build()
    adView.loadAd(adRequest)
  }
}

Java

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;

public class MainActivity extends AppCompatActivity {

  private ActivityMainBinding binding;
  private AdView adView;

  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = ActivityMainBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());

    // Step 1 - Create an AdView object with ad unit ID and size.
    adView = new AdView(this);
    adView.setAdUnitId("AD_UNIT_ID");
    adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 320));

    // Step 2 - Add the AdView to view hierarchy.
    binding.bannerViewContainer.addView(adView);

    // Step 3 - Load the ad.
    AdRequest adRequest = new AdRequest.Builder().build();
    adView.loadAd(adRequest);
  }
}
Next Gen

Para carregar um anúncio de banner:

  1. Crie um objeto BannerAdRequest com o ID e o tamanho do bloco de anúncios.
  2. Carregue o anúncio.
  3. Chame BannerAd.getView() para receber o View e adicione-o à hierarquia de visualização.

Kotlin

import com.google.android.libraries.ads.mobile.sdk.banner.AdSize
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAd
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdEventCallback
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdRefreshCallback
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdRequest
import com.google.android.libraries.ads.mobile.sdk.common.AdLoadCallback
import com.google.android.libraries.ads.mobile.sdk.common.LoadAdError

class MainActivity : AppCompatActivity() {

  private var bannerAd: BannerAd? = null
  private lateinit var binding: ActivityMainBinding
  private lateinit var adSize: AdSize
  private lateinit var bannerViewContainer: FrameLayout

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)

    // Give the banner container a placeholder height to avoid a sudden layout
    // shifts when the ad loads.
    adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 320)
    bannerViewContainer = binding.bannerViewContainer
    val bannerLayoutParams = bannerViewContainer.layoutParams
    bannerLayoutParams.height = adSize.getHeightInPixels(requireContext())
    bannerViewContainer.layoutParams = bannerLayoutParams

    // Step 1 - Create a BannerAdRequest object with ad unit ID and size.
    val adRequest = BannerAdRequest.Builder("AD_UNIT_ID", adSize).build()

    // Step 2 - Load the ad.
    BannerAd.load(
      adRequest,
      object : AdLoadCallback<BannerAd> {
        override fun onAdLoaded(ad: BannerAd) {
          // Assign the loaded ad to the BannerAd object.
          bannerAd = ad
          // Step 3 - Call BannerAd.getView() to get the View and add it
          // to view hierarchy on the UI thread.
          activity?.runOnUiThread {
            binding.bannerViewContainer.addView(ad.getView(requireActivity()))
          }
        }

        override fun onAdFailedToLoad(loadAdError: LoadAdError) {
          bannerAd = null
        }
      },
    )
  }
}

Java

import com.google.android.libraries.ads.mobile.sdk.banner.AdSize;
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAd;
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdRefreshCallback;
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdRequest;
import com.google.android.libraries.ads.mobile.sdk.common.AdLoadCallback;
import com.google.android.libraries.ads.mobile.sdk.common.LoadAdError;

public class MainActivity extends AppCompatActivity {

  private BannerAd bannerAd;
  private ActivityMainBinding binding;
  private AdSize adSize;
  private FrameLayout bannerViewContainer;

  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = ActivityMainBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());

    // Give the banner container a placeholder height to avoid a sudden layout
    // shifts when the ad loads.
    adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 320);
    bannerViewContainer = binding.bannerViewContainer;
    LayoutParams bannerLayoutParams = bannerViewContainer.getLayoutParams();
    bannerLayoutParams.height = adSize.getHeightInPixels(this);
    bannerViewContainer.setLayoutParams(bannerLayoutParams);

    // Step 1 - Create a BannerAdRequest object with ad unit ID and size.
    BannerAdRequest adRequest = new BannerAdRequest.Builder("AD_UNIT_ID", adSize).build();

    // Step 2 - Load the ad.
    BannerAd.load(
        adRequest,
        new AdLoadCallback<BannerAd>() {
          @Override
          public void onAdLoaded(@NonNull BannerAd ad) {
            // Assign the loaded ad to the BannerAd object.
            bannerAd = ad;
            // Step 3 - Call BannerAd.getView() to get the View and add it
            // to view hierarchy on the UI thread.
            runOnUiThread(
                () -> binding.bannerViewContainer.addView(ad.getView(MainActivity.this)));
          }

          @Override
          public void onAdFailedToLoad(@NonNull LoadAdError adError) {
            bannerAd = null;
          }
        });
  }
}

O SDK de anúncios para dispositivos móveis de próxima geração inclui um listener para atualizações automáticas de anúncios de banner:

Atual

O SDK dos anúncios para dispositivos móveis chama os callbacks onAdLoaded() e onAdFailedToLoad() para indicar o sucesso ou a falha de uma atualização de anúncio.

Kotlin

adView.adListener = object : AdListener() {
    override fun onAdLoaded() {
      // Called when an ad has loaded.
    }

    override fun onAdFailedToLoad(loadAdError : LoadAdError) {
      // Called when ad fails to load.
    }
}

Java

adView.setAdListener(
    new AdListener() {
      @Override
      public void onAdLoaded() {
        // Called when an ad has loaded.
      }

      @Override
      public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
        // Called when ad fails to load.
      }
    });
Next Gen

Defina o callback de atualização no banner carregado para detectar eventos de atualização de anúncios.

Kotlin

BannerAd.load(
  BannerAdRequest.Builder("AD_UNIT_ID", adSize).build(),
  object : AdLoadCallback<BannerAd> {
    override fun onAdLoaded(ad: BannerAd) {
      // Called when an ad has loaded.
      ad.adEventCallback =
        object : BannerAdEventCallback {
        }

      ad.bannerAdRefreshCallback =
        object : BannerAdRefreshCallback {
          // Set the ad refresh callbacks.
          override fun onAdRefreshed() {
            // Called when the ad refreshes.
          }

          override fun onAdFailedToRefresh(loadAdError: LoadAdError) {
            // Called when the ad fails to refresh.
          }
        }

      bannerAd = ad
    }

    override fun onAdFailedToLoad(loadAdError: LoadAdError) {
      // Called when ad fails to load.
    }
  }
)

Java

BannerAd.load(
    new BannerAdRequest.Builder("AD_UNIT_ID", adSize).build(),
    new AdLoadCallback<BannerAd>() {
      @Override
      public void onAdLoaded(@NonNull BannerAd ad) {
        // Called when an ad has loaded.
        ad.setAdEventCallback(new BannerAdEventCallback() {});

        ad.setBannerAdRefreshCallback(
            // Set the ad refresh callbacks.
            new BannerAdRefreshCallback() {
              @Override
              public void onAdRefreshed() {
                // Called when the ad refreshes.
              }

              @Override
              public void onAdFailedToRefresh(@NonNull LoadAdError adError) {
                // Called when the ad fails to refresh.
              }
            });

        bannerAd = ad;
      }

      @Override
      public void onAdFailedToLoad(@NonNull LoadAdError adError) {
        // Called when ad fails to load.
      }
    });