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 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(String) | MobileAds.initialize(Context, OnInitializationComplete |
The app ID is now set in the AndroidManifest.xml. |
initialize(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 |