There are many breaking changes coming in version 20.0.0. Version 19.7.0 introduced many new APIs, and deprecated or renamed many classes in preparation for version 20.0.0. This guide highlights the major changes brought about in version 19.7.0 as well as what's coming for version 20.0.0 (early 2021).
Full-screen format API updates
Starting with version 20.0.0, interstitial, rewarded, rewarded interstitial, and App Open ad formats are standardized to follow a consistent API design.
All full-screen format APIs utilize the following principles:
- A static load method
- A similar load callback or handler mechanism
- Reliance on the
FullScreenContentCallack
class for presentation callbacks
Legacy RewardedVideoAd API removal
The newer
RewardedAd
API was first introduced back in March 2019 and has been the preferred rewarded
API for over 18 months. It has had more enhancements compared to the legacy
RewardedVideoAd
API, including the ability to load more than one rewarded ad
at a time.
The legacy RewardedVideoAd
API is removed in SDK version 20.0.0.
Smart banner deprecation 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) } }
Leave application callback removal
The onAdLeftApplication
callback for all ad formats has been removed in favor
of
ProcessLifecycleOwner
.
Using an OS-level API notifies 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 as 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 toNativeAd
. - The
MobileAds.Settings
,NativeExpressAdView
,NativeAppInstallAd
,NativeContentAd
, andInstreamAd
classes and views have been removed. - All classes with the
Publisher
prefix have been replaced with anAdManager
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 |
nativead.NativeCustomFormatAd |
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 theRequestConfiguration
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 | getPortraitBanner |
getPortraitAnchored |
|
getLandscapeBanner |
getLandscapeAnchored |
||
getCurrentOrientation |
getCurrentOrientationAnchored |
||
MobileAds | initialize(Context, String) | MobileAds.initialize(Context, OnInitializationComplete |
The app ID is now set in the AndroidManifest.xml. |
initialize(Context, String, MobileAds.Settings) | initialize(Context, OnInitializationComplete |
The Settings class has been deprecated. | |
getRewardedVideo |
Removed | Use the RewardedAd API instead. | |
AdListener | onAdFailedToLoad(int) | onAd |
|
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 | ||
setManualImpressions |
Removed | ||
updateCorrelator() | Removed | See Ad content filtering. | |
AdRequest.Builder | setBirthday() | Removed | |
setGender() | Removed | ||
setIsDesignedForFamilies() | Removed | See guide. | |
addTestDevice() | RequestConfiguration |
See Enabling test ads. | |
tagForChildDirectedTreatment() | RequestConfiguration |
See Ad content filtering. | |
setTagFor |
RequestConfiguration |
||
setMaxAdContentRating() | RequestConfiguration |
||
AdView | getMediationAdapter |
ResponseInfo |
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 | onRewardedAd |
onAd |
|
onRewardedAd |
onAd |
||
onRewardedAdLoaded() | onAdLoaded(RewardedAd) | ||
AppOpenAdLoadCallback | onAppOpenAd |
onAd |
|
onAppOpenAd |
onAd |
||
onAppOpenAd |
onAdLoaded(AppOpenAd) | ||
RewardedInterstitialAdLoad |
onRewardedInterstitialAd |
onAd |
|
onRewardedInterstitialAd |
onAd |
||
onRewardedInterstitialAd |
onAd |
||
InterstitialAd | new InterstitialAd() | InterstitialAd.load(Context, String, AdRequest, InterstitialAdLoadCallback) | InterstitialAd now uses the same static load approach as other full-screen formats. |
setAdListener() | |||
DynamicHeightSearchAd |
getNetworkExtras() | Removed | The NetworkExtras class has been deprecated. |
AdLoader | forContentAd() | Removed | |
forAppInstallAd() | Removed | ||
withCorrelator() | Removed | ||
getMediationAdapter |
Removed |