SDK 迁移

本页面介绍了当前版本和之前版本的迁移。

从 v22 迁移到 v23

最低 Android API 级别为 21

从版本 23.0.0 开始,Google 移动广告 SDK 要求所有应用至少必须搭载 Android API 级别 21 才能运行。如需调整 API 级别,请将应用级 build.gradle 文件中 minSdkVersion 的值更改为 21 或更高。

已移除/替换的已弃用方法

v22.0.0 API v23.0.0 API
AdRequest.Builder.addTestDevice() RequestConfiguration.Builder.setTestDeviceIds()
AdRequest.Builder.tagForChildDirectedTreatment() RequestConfiguration.Builder.setTagForChildDirectedTreatment()
AdRequest.Builder.setIsDesignedForFamilies() RequestConfiguration.Builder.setMaxAdContentRating()
AdFormat.UNKNOWN 无替代项
AdLoader.Builder.forUnifiedNativeAd() AdLoader.Builder.forNativeAd()
AdLoader.Builder.forCustomTemplateAd() AdLoader.Builder.forCustomFormatAd()
AdLoader.Builder.withNativeAdOptions(com.google.android.gms.ads.formats.NativeAdOptions) AdLoader.Builder.withNativeAdOptions(com.google.android.gms.ads.nativead.NativeAdOptions)
void MobileAds.setSameAppKeyEnabled() 布尔值 MobileAds.putPublisherFirstPartyIdEnabled()

从 v21 迁移到 v22

使用 MobileAds.getVersion() 获取 Google 移动广告 SDK 版本

版本 22.0.0 中移除了 MobileAds.getVersionString() 方法,取而代之的是 MobileAds.getVersion()

新方法会返回预期的外部版本号,例如 22.0.0。如需详细了解此变更,请参阅使用新的 Google 移动广告 SDK getVersion() 方法

已移除或替换的方法

下表列出了版本 22.0.0 中的具体更改。

v21.0.0 v22.0.0
MobileAds.getVersionString() MobileAds.getVersion()
NativeCustomFormatAd.getVideoMediaView() NativeCustomFormatAd.getMediaContent()
NativeCustomFormatAd.getVideoController() NativeCustomFormatAd.getMediaContent().getVideoController()
AdRequest.Builder.setAdInfo() AdRequest.Builder.setAdString()
MediationRewardedVideoAdAdapter 适配器
MediationRewardedVideoAdListener
com.google.android.gms.ads.mediation.VersionInfo com.google.android.gms.ads.VersionInfo
com.google.android.gms.ads.doubleclick.AppEventListener com.google.android.gms.ads.admanager.AppEventListener

从 v20 迁移到 v21

将 minSdkVersion 更新为 19 或更高版本

从版本 21.0.0 开始,Google 移动广告 SDK 要求所有应用至少必须搭载 Android API 级别 19 才能运行。如需调整 API 级别,请将应用的 build 文件中的 minSdkVersion 值更改为 19 或更高版本。

强制执行严格的可为 null 性

为准备强制执行严格的可为 null 性,@NonNull 注解已添加到之前未明确定义可为 null 性的所有 API。

如果存在 null 安全违规行为,并且之前未通过安全的方式处理 null 值,此变更可能会破坏 Kotlin 应用和使用 Java null 检查框架的应用(请参阅有关 null 安全性的 Kotlin 文档)。

移除了 addNetworkExtras() 方法

用于将额外参数作为 NetworkExtras 实例传递给特定广告联盟适配器的 addNetworkExtras() 方法在 SDK 版本 20.3.0 中已弃用,将在版本 21.0.0 中移除。请改用同一 AdRequest.Builder 类中的 addNetworkExtrasBundle() 方法。

移除了地理位置方法

以下地理位置方法将在版本 21.0.0 中移除:

  • AdRequest.Builder 类中的 setLocation(Location location) 方法,用于设置用户的地理位置,以进行中介定位。
  • AdRequest 类中的 getLocation() 方法,用于返回先前传递给 setLocation(Location location) 方法的用户地理位置定位信息。
  • MediationAdConfiguration 类中的 getLocation() 方法,该方法会返回用户的位置信息(如果由 AdRequest 定义)。

Google 不会使用位置数据来定位广告。如果需要,您应该使用第三方 API 向第三方广告联盟提供这些信息。

弃用自定义事件接口

借助自定义事件,使用AdMob 中介 的发布商可以设置 AdMob支持的广告来源以外的瀑布流广告来源。

所有自定义事件接口都已废弃,取而代之的是 Adapter 类和 MediationAdLoadCallback 接口。

下表列出了从版本 21.0.0 开始,每个自定义事件接口应使用的相应类或接口:

v20.0.0 中的接口 v21.0.0 类/ 接口
CustomEvent 适配器
CustomEventBanner
CustomEventInterstitial
CustomEventNative
CustomEventBannerListener Adapter MediationAdLoadCallback
CustomEventInterstitialListener
CustomEventListener
CustomEventNativeListener

从 v19 迁移到 v20

我们在版本 20.0.0 中进行了多项重大更改。为做好准备迎接版本 20.0.0,版本 19.7.0 引入了许多新的 API,并废弃或重命名了许多类。本指南重点介绍了版本 20.0.0 中的主要更改。

全屏广告格式 API 更新

从版本 20.0.0 开始,对插页式广告、激励广告、插页式激励广告和开屏广告格式进行了标准化处理,以采用一致的 API 设计。

所有全屏广告格式 API 均遵循以下原则:

移除旧版 RewardedVideoAd API

新版 RewardedAd API 于 2019 年 3 月首次推出,在之后的 18 个月内一直是首选激励广告 API。与旧版 RewardedVideoAd API 相比,新版 API 增加了一些增强功能,其中包括一次加载多个激励广告的功能。

SDK 版本 20.0.0 中移除了旧版 RewardedVideoAd API。

弃用智能横幅广告,取而代之的是自适应横幅广告

智能横幅广告已被弃用,取而代之的是自适应横幅广告。自适应横幅广告可提供更出色的效果,让您能更灵活地设置广告宽度。如果您希望继续使用全宽横幅广告,仍然可以使用自适应横幅广告来实现,如以下代码段所示:

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)
    }
}

移除退出应用回调

移除了所有广告格式的 onAdLeftApplication 回调函数,改为使用 ProcessLifecycleOwner。使用操作系统级 API 时,无论用户是否因广告互动而离开您的应用,只要他们离开您的应用,您都会收到相关通知。

请注意,我们从未打算将 onAdLeftApplication 回调用作广告点击处理程序,依赖此回调报告点击次数无法生成准确的指标。例如,用户点击“广告选择”图标时启动了外部浏览器,此时调用了回调函数,但未计为一次点击。

重命名类

下表列出了已更改或移除的具体类名称。步骤简述:

  • UnifiedNativeAd 相关的大多数类均已重命名为 NativeAd
  • 移除了 MobileAds.SettingsNativeExpressAdViewNativeAppInstallAdNativeContentAdInstreamAd 类和视图。
  • 所有带 Publisher 前缀的类均已替换为 AdManager 前缀。
  • InterstitialAd 软件包名称已更改。
19.5.0 中的类 20.0.0 中的类
com.google.android.gms.ads. com.google.android.gms.ads.
reward.RewardedVideoAd rewarded.RewardedAd
reward.RewardedVideoAdListener 激励广告.RewardedAdLoadCallback 和 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
formatted.NativeCustomTemplateAd.OnCustomTemplateAdLoadedListener nativead.NativeCustomFormatAd.OnCustomFormatAdLoadedListener
MobileAds.Settings 已移除
doubleclick.PublisherAdRequest admanager.AdManagerAdRequest
doubleclick.PublisherAdView admanager.AdManagerAdView
formats.PublisherAdViewOptions formats.AdManagerAdViewOptions
doubleclick.PublisherInterstitialAd admanager.AdManagerInterstitialAd
InterstitialAd interstitial.InterstitialAd
NativeExpressAdView 已移除
instream.InstreamAd 已移除
mediation.admob.AdMobExtras 已移除
Correlator 已移除
search.SearchAdRequest 已移除
AdRequest.TagForUnderAgeOfConsent 接口 已移除
AdRequest.MaxAdContentRating 接口 已移除
formats.NativeAppInstallAd native.NativeAd
formats.NativeAppInstallAdView native.NativeAdView
mediation.NativeAppInstallAdMapper mediation.UnifiedNativeAdMapper
formats.NativeContentAd native.NativeAd
formats.NativeContentAdView native.NativeAdView
mediation.NativeContentAdMapper mediation.UnifiedNativeAdMapper

移除/替换的方法

下表列出了版本 20.0.0 中的具体更改。步骤简述:

  • 从 MobileAds 类中移除了过时的初始化方法。
  • AdRequest.Builder() 类中的某些方法已被移除或移至 RequestConfiguration 类。
  • 更新了 RewardedAd 和 InterstitialAd API,以与所有全屏广告格式保持一致。
  • 移除了 Correlator 功能。
v19.5.0 中的 API v20.0.0 中的 API 备注
AdSize getPortraitBannerAdSizeWithWidth() getPortraitAnchoredAdaptiveBannerAdSize()
getLandscapeBannerAdSizeWithWidth() getLandscapeAnchoredAdaptiveBannerAdSize()
getCurrentOrientationBannerAdSizeWithWidth() getCurrentOrientationAnchoredAdaptiveBannerAdSize()
MobileAds initialize(Context, String) MobileAds.initialize(Context, OnInitializationCompleteListener) 现在,在 AndroidManifest.xml 中设置应用 ID。
initialize(Context, String, MobileAds.Settings) initialize(Context, OnInitializationCompleteListener) Settings 类已废弃。
getRewardedVideoAdInstance() 已移除 请改用 RewardedAd API。
AdListener onAdFailedToLoad(int) onAdFailedToLoad(LoadAdError)
onAdLeftApplication() 已移除 全屏广告格式使用 FullscreenContentCallback 代替 AdListener,而 FullscreenContentCallback 中没有对应的方法。此方法已从 AdListener 移除。
VideoController getAspectRatio() MediaContent.getAspectRatio()
AdRequest getGender() 已移除
getBirthday() 已移除
getNetworkExtras() 已移除
setManualImpressionsEnabled() 已移除
updateCorrelator() 已移除 请参阅广告内容过滤
AdRequest.Builder setBirthday() 已移除
setGender() 已移除
setIsDesignedForFamilies() 已移除 请参阅指南
addTestDevice() RequestConfiguration.Builder.setTestDeviceIds() 请参阅启用测试广告
tagForChildDirectedTreatment() RequestConfiguration.Builder.setTagForChildDirectedTreatment() 请参阅广告内容过滤
setTagForUnderAgeOfConsent() RequestConfiguration.Builder.setTagForUnderAgeOfConsent()
setMaxAdContentRating() RequestConfiguration.Builder.setMaxAdContentRating()
AdView getMediationAdapterClassName() ResponseInfo.getMediationAdapterClassName() 现在,您可以通过 AdView 方法 getResponseInfo() 获取 ResponseInfo 对象。
NativeAdOptions setImageOrientation() setMediaAspectRatio()
getImageOrientation getMediaAspectRatio()
RewardedAd loadAd(AdRequest, RewardedAdLoadCallback) RewardedAd.load(Context, String, AdRequest, RewardedAdLoadCallback) 现在,RewardedAd 与其他全屏广告格式使用相同的静态加载方法。
loadAd(PublisherAdRequest, RewardedAdLoadCallback) RewardedAd.load(Context, String, AdManagerAdRequest, RewardedAdLoadCallback)
isLoaded() 已移除 静态加载方法中的回调会提供已加载的广告。
show(Activity, RewardedAdCallback) show(Activity, OnUserGainedRewardListener) 此 show 方法遵循更广泛的全屏广告格式方法。
RewardedAdLoadCallback onRewardedAdFailedToLoad(int) onAdFailedToLoad(LoadAdError)
onRewardedAdFailedToLoad(LoadAdError) onAdFailedToLoad(LoadAdError)
onRewardedAdLoaded() onAdLoaded(RewardedAd)
AppOpenAdLoadCallback onAppOpenAdFailedToLoad(int) onAdFailedToLoad(LoadAdError)
onAppOpenAdFailedToLoad(LoadAdError) onAdFailedToLoad(LoadAdError)
onAppOpenAd已加载(AppOpenAd) onAdLoaded(AppOpenAd)
Rewarded 插页式广告 AdLoad回调 onRewarded 插页式广告FailedToLoad(int) onAdFailedToLoad(LoadAdError)
onRewarded 插页式广告FailedToLoad(LoadAdError) onAdFailedToLoad(LoadAdError)
onRewarded 插页式广告已加载(RewardedInterstitialAd) onAdLoaded(Rewarded 插页式广告)
InterstitialAd 新 InterstitialAd() InterstitialAd.load(Context, String, AdRequest, InterstitialAdLoadCallback) 现在,插页式广告与其他全屏广告格式使用相同的静态加载方法。
setAdListener()
DynamicHeightSearchAd请求 getNetworkExtras() 已移除 NetworkExtras 类已废弃。
AdLoader forContentAd() 已移除
forAppInstallAd() 已移除
withCorrelator() 已移除
getMediationAdapterClassName() 已移除