Prepare for SDK v20

Google Mobile Ads SDK version 20.0.0 is planned for early 2021, and comes with a few major changes, as well as several straightforward API renames and removal of deprecated APIs.

Major changes

Full-screen format API updates

In version 20.0.0, Interstitial, Rewarded, Rewarded Interstitial, and App Open ad formats are standardized so that they all follow a similar API design pattern.

All full-screen format APIs utilize the following design:

  • A static load method
  • A similar load callback or handler mechanism
  • Reliance on the FullScreenContentCallack class for presentation callbacks

Legacy RewardedVideoAd API is removed

The newer RewardedAd API was first introduced back in March 2019 and has been the preferred rewarded API for over 18 months. It has several improvements compared to the legacy RewardedVideoAd API, including the ability to load more than one rewarded ad at a time.

The legacy API is removed in SDK version 20.0.0.

Smart banner is deprecated in favor of adaptive banner

Smart banner ads are deprecated in favor of adaptive banner ads. Adaptive banners provide superior performance and more flexibility in setting ad width. If you prefer to continue using full-width banners, that can still be done using adaptive banner, as shown in the following code snippet:

Java

public class MyActivity extends AppCompatActivity {
  ...
  private AdSize getFullWidthAdaptiveSize() {
    Display display = getWindowManager().getDefaultDisplay();
    DisplayMetrics outMetrics = new DisplayMetrics();
    display.getMetrics(outMetrics);

    float widthPixels = outMetrics.widthPixels;
    float density = outMetrics.density;

    int adWidth = (int) (widthPixels / density);
    return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth);
  }
}

Kotlin

class MyActivity : AppCompatActivity() {
  ...
  private val adaptiveAdSize: AdSize
    get() {
      val display = windowManager.defaultDisplay
      val outMetrics = DisplayMetrics()
      display.getMetrics(outMetrics)

      val density = outMetrics.density

      var adWidthPixels = ad_view_container.width.toFloat()
      if (adWidthPixels == 0f) {
        adWidthPixels = outMetrics.widthPixels.toFloat()
      }

      val adWidth = (adWidthPixels / density).toInt()
      return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth)
    }
}

Removal of the leave application callback

The onAdLeftApplication callback for all ad formats has been removed in favor of ProcessLifecycleOwner. Using OS-level APIs notify you whenever users leave your app, regardless of whether or not it is due to an ad interaction.

Note that the onAdLeftApplication callback was never intended to be an ad click handler, and relying on this callback to report clicks did not produce an accurate metric. For example, a click on the AdChoices icon that launched an external browser invoked the callback but did not count a click.

Class renames

The table below lists specific class names that have changed or been removed. In summary:

  • Most classes related to UnifiedNativeAd have been renamed to NativeAd.
  • The MobileAds.Settings, NativeExpressAdView, NativeAppInstallAd, NativeContentAd, and InstreamAd classes and views have been removed.
  • All classes with the Publisher prefix have been replaced with an AdManager prefix.
  • The InterstitialAd package name has changed.
19.5.0 Class 20.0.0 Class
com.google.android.gms.ads. com.google.android.gms.ads.
reward.RewardedVideoAd rewarded.RewardedAd
reward.RewardedVideoAdListener rewarded.RewardedAdLoadCallback and FullScreenContentCallback
reward.RewardItem rewarded.RewardItem
rewarded.RewardedAdCallback OnUserEarnedRewardListener
formats.UnifiedNativeAdView nativead.NativeAdView
formats.UnifiedNativeAd nativead.NativeAd
formats.UnifiedNativeAdAssetNames nativead.NativeAdAssetNames
formats.UnifiedNativeAd.OnUnifiedNativeAdLoadedListener nativead.NativeAd.OnNativeAdLoadedListener
formats.AdChoicesView nativead.AdChoicesView
formats.NativeAd.AdChoicesInfo nativead.NativeAd.AdChoicesInfo
formats.MediaView nativead.MediaView
formats.NativeAdViewHolder nativead.NativeAdViewHolder
formats.NativeAdOptions nativead.NativeAdOptions
formats.NativeCustomTemplateAd nativead.NativeCustomFormatAd
formats.NativeCustomTemplateAd.OnCustomTemplateAdLoadedListener nativead.NativeCustomFormatAd.OnCustomFormatAdLoadedListener
MobileAds.Settings Removed
doubleclick.PublisherAdRequest admanager.AdManagerAdRequest
doubleclick.PublisherAdView admanager.AdManagerAdView
formats.PublisherAdViewOptions formats.AdManagerAdViewOptions
doubleclick.PublisherInterstitialAd admanager.AdManagerInterstitialAd
InterstitialAd interstitial.InterstitialAd
NativeExpressAdView Removed
instream.InstreamAd Removed
mediation.admob.AdMobExtras Removed
Correlator Removed
search.SearchAdRequest Removed
Interface AdRequest.TagForUnderAgeOfConsent Removed
Interface AdRequest.MaxAdContentRating Removed
formats.NativeAppInstallAd native.NativeAd
formats.NativeAppInstallAdView native.NativeAdView
mediation.NativeAppInstallAdMapper mediation.UnifiedNativeAdMapper
formats.NativeContentAd native.NativeAd
formats.NativeContentAdView native.NativeAdView
mediation.NativeContentAdMapper mediation.UnifiedNativeAdMapper

Methods removed/replaced

The table below lists the specific changes in version 20.0.0. In summary:

  • Outdated initialization methods have been removed from the MobileAds class.
  • Some methods from the AdRequest.Builder() class have either been removed or moved to the RequestConfiguration class.
  • RewardedAd and InterstitialAd APIs have been updated to align with all full-screen formats.
  • Correlator features have been removed.
Class v19.5.0 API v20.0.0 API Notes
AdSize getPortraitBannerAdSizeWithWidth() getPortraitAnchoredAdaptiveBannerAdSize()
getLandscapeBannerAdSizeWithWidth() getLandscapeAnchoredAdaptiveBannerAdSize()
getCurrentOrientationBannerAdSizeWithWidth() getCurrentOrientationAnchoredAdaptiveBannerAdSize()
MobileAds initialize(String) MobileAds.initialize(Context, OnInitializationCompleteListener) The app ID is now set in the AndroidManifest.xml.
initialize(String, MobileAds.Settings) initialize(Context, OnInitializationCompleteListener) The Settings class has been deprecated.
getRewardedVideoAdInstance() Removed Use the RewardedAd API instead.
AdListener onAdFailedToLoad(int) onAdFailedToLoad(LoadAdError)
onAdLeftApplication() Removed Full-screen ad formats use FullscreenContentCallback in place of AdListener, and there is no equivalent method on FullscreenContentCallback. The method has been removed from AdListener.
VideoController getAspectRatio() MediaContent.getAspectRatio()
AdRequest getGender() Removed
getBirthday() Removed
getNetworkExtras() Removed
setManualImpressionsEnabled() Removed
updateCorrelator() Removed See Ad content filtering.
AdRequest.Builder setBirthday() Removed
setGender() Removed
setIsDesignedForFamilies() Removed See guide.
addTestDevice() RequestConfiguration.Builder.setTestDeviceIds() See Enabling test ads.
tagForChildDirectedTreatment() RequestConfiguration.Builder.setTagForChildDirectedTreatment() See Ad content filtering.
setTagForUnderAgeOfConsent() RequestConfiguration.Builder.setTagForUnderAgeOfConsent()
setMaxAdContentRating() RequestConfiguration.Builder.setMaxAdContentRating()
AdView getMediationAdapterClassName() ResponseInfo.getMediationAdapterClassName() A ResponseInfo object is now available via the AdView method getResponseInfo().
NativeAdOptions setImageOrientation() setMediaAspectRatio()
getImageOrientation getMediaAspectRatio()
RewardedAd loadAd(AdRequest, RewardedAdLoadCallback) RewardedAd.load(Context, String, AdRequest, RewardedAdLoadCallback) RewardedAd now uses the same static load approach as other full-screen formats.
loadAd(PublisherAdRequest, RewardedAdLoadCallback) RewardedAd.load(Context, String, AdManagerAdRequest, RewardedAdLoadCallback)
isLoaded() Removed The callback from the static load method provides an ad that is already loaded.
show(Activity, RewardedAdCallback) show(Activity, OnUserEarnedRewardListener) This show method adheres to the broader full-screen format approach.
RewardedAdLoadCallback onRewardedAdFailedToLoad(int) onAdFailedToLoad(LoadAdError)
onRewardedAdFailedToLoad(LoadAdError) onAdFailedToLoad(LoadAdError)
onRewardedAdLoaded() onAdLoaded(RewardedAd)
AppOpenAdLoadCallback onAppOpenAdFailedToLoad(int) onAdFailedToLoad(LoadAdError)
onAppOpenAdFailedToLoad(LoadAdError) onAdFailedToLoad(LoadAdError)
onAppOpenAdLoaded(AppOpenAd) onAdLoaded(AppOpenAd)
RewardedInterstitialAdLoadCallback onRewardedInterstitialAdFailedToLoad(int) onAdFailedToLoad(LoadAdError)
onRewardedInterstitialAdFailedToLoad(LoadAdError) onAdFailedToLoad(LoadAdError)
onRewardedInterstitialAdLoaded(RewardedInterstitialAd) onAdLoaded(RewardedInterstitialAd)
InterstitialAd new InterstitialAd() InterstitialAd.load(Context, String, AdRequest, InterstitialAdLoadCallback) InterstitialAd now uses the same static load approach as other full-screen formats.
setAdListener()
DynamicHeightSearchAdRequest getNetworkExtras() Removed The NetworkExtras class has been deprecated.
AdLoader forContentAd() Removed
forAppInstallAd() Removed
withCorrelator() Removed
getMediationAdapterClassName() Removed