Как перенести версии SDK

На этой странице описан перенос для текущей и предыдущих версий.

Переход с версии 24 на версию 25

В следующих подразделах описаны критические изменения и различия в поведении между основными версиями 24 и 25 Google Mobile Ads SDK (Legacy).

Минимальный уровень Android API – 24.

Начиная с версии 25.5.0, для работы Google Mobile Ads SDK (Legacy) требуется, чтобы все приложения работали на минимальном уровне Android API 24. Чтобы изменить уровень API, задайте для minSdk в файле build.gradle на уровне приложения значение 24 или выше.

Удалены устаревшие обратные вызовы объявлений.

Из перечисленных ниже классов удалены следующие устаревшие обратные вызовы:

Класс Обратные вызовы удалены. Замена
SignalCallbacks onFailure(String)
onAdFailedToShow(String)
onFailure(AdError)
onAdFailedToShow(AdError)
MediationAdLoadCallback
MediationInterstitialAdCallback
MediationRewardedAdCallback

Изменения в API размеров фиксированных адаптивных баннеров

В версии 25.0.0 прекращена поддержка существующих API для размеров фиксированных адаптивных баннеров и добавлены API для размеров больших фиксированных адаптивных баннеров. Google Mobile Ads SDK (Legacy) может показывать видеорекламу в баннерах, используя новые API для больших фиксированных адаптивных баннеров.

В таблице ниже перечислены устаревшие API для работы с размерами и их замены.

v24 (поддержка прекращена) v25 (замена)
getCurrentOrientationAnchoredAdaptiveBannerAdSize(Context, int) getLargeAnchoredAdaptiveBannerAdSize(Context, int)
getLandscapeAnchoredAdaptiveBannerAdSize(Context, int) getLargeLandscapeAnchoredAdaptiveBannerAdSize(Context, int)
getPortraitAnchoredAdaptiveBannerAdSize(Context context, int width) getLargePortraitAnchoredAdaptiveBannerAdSize(Context context, int width)

Удален класс mediation.VersionInfo.

Класс VersionInfo в пакете com.google.android.gms.ads.mediation удален. Вместо этого используйте пакет com.google.android.gms.ads.VersionInfo.

Удален метод getConfiguration() в классе RtbSignalData.

Устаревший метод getConfiguration() API в RtbSignalData удален. Вместо этого используйте метод getConfigurations(), который возвращает список List<MediationConfiguration>.

Переход с версии 23 на версию 24

В следующих подразделах описаны критические изменения и различия в поведении между основными версиями 23 и 24 Google Mobile Ads SDK (Legacy).

Минимальный уровень Android API – 23.

Начиная с версии 24.0.0, для работы Google Mobile Ads SDK (Legacy) требуется, чтобы все приложения работали на Android с минимальным уровнем API 23. Чтобы изменить уровень API, укажите для параметра minSdk в файле build.gradle на уровне приложения значение 23 или выше.

Изменения в оптимизированной инициализации и загрузке

По умолчанию для параметров OPTIMIZE_INITIALIZATION и OPTIMIZE_AD_LOADING задано значение true. Подробнее об этих флагах читайте в статье Оптимизация инициализации и загрузки.

Удалены зависимости firebase-ads и firebase-ads-lite.

Начиная с версии 24.0.0 в выпусках SDK больше не распространяются зависимости firebase-ads и firebase-ads-lite. Используйте вместо нее зависимость play-services-ads.

Как задать параметры таргетинга со специальными настройками

Чтобы задать таргетинг со специальными настройками в запросе объявления, используйте addCustomTargeting().

Удалены устаревшие API ориентации для объявлений при запуске приложения.

  • Удалены методы AppOpenAd.load(), которые принимают входной параметр ориентации. Используйте методы AppOpenAd.load(), которые не принимают ориентацию.
  • Удалено перечисление AppOpenAdOrientation.

Упрощенный обратный вызов для вознаграждений в адаптерах медиации

В версии 24.0.0 в MediationRewardedAdCallback добавлен обратный вызов onUserEarnedReward(), а onUserEarnedReward(RewardItem) объявлен устаревшим. Адаптеры медиации должны вызывать onUserEarnedReward(), когда пользователь получает вознаграждение.

При переадресации обратных вызовов от адаптеров медиации все версии Google Mobile Ads SDK (Legacy) возвращают вознаграждение, заданное в интерфейсе Менеджера рекламы в OnUserEarnedRewardListener.

Курсы удалены.

Следующие классы были удалены без замены:

  • DynamicHeightSearchAdRequest
  • SearchAdRequest
  • SearchAdView

Способы удалены.

Следующие методы были удалены без замены:

Класс Метод
RewardedInterstitialAdLoadCallback onRewardedInterstitialAdLoaded()
onRewardedInterstitialAdFailedToLoad(int)
onRewardedInterstitialAdFailedToLoad(LoadAdError)

Устаревшие методы

Поддержка следующих методов прекращена без замены:

Класс Метод
Adapter loadInterscrollerAd()
RtbAdapter loadRtbInterscrollerAd()

Переход с версии 22 на версию 23

В следующих подразделах описаны критические изменения и различия в поведении между основными версиями 22 и 23 Google Mobile Ads SDK (Legacy).

Минимальный уровень Android API – 21.

Начиная с версии 23.0.0 для работы Google Mobile Ads SDK (Legacy) требуется, чтобы в приложениях использовался уровень API Android не ниже 21. Чтобы изменить уровень API, задайте для параметра minSdkVersion в файле build.gradle на уровне приложения значение 21 или выше.

AdManagerAdRequest.Builder методов, унаследованных от надкласса, можно объединить в цепочку

В версии 23.0.0 методы AdManagerAdRequest.Builder, унаследованные от родительского класса, можно объединять в цепочки, чтобы создавать объекты AdManagerAdRequest с помощью одного вызова:

Java

AdManagerAdRequest request = new AdManagerAdRequest.Builder()
    .addCustomTargeting("age", "25") // AdManagerAdRequest.Builder method.
    .setContentUrl("https://www.example.com") // Method inherited from parent.
    .build(); // Builds an AdManagerAdRequest.

Kotlin

var request = AdManagerAdRequest.Builder()
  .addCustomTargeting("age", "25") // AdManagerAdRequest.Builder method.
  .setContentUrl("https://www.example.com") // Method inherited from parent.
  .build() // Builds an AdManagerAdRequest.

Удаление или замена устаревших методов

API версии 22.0.0 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() boolean MobileAds.putPublisherFirstPartyIdEnabled()

Переход с версии 21 на версию 22

В следующих подразделах описаны критические изменения и различия в поведении между основными версиями 21 и 22 Google Mobile Ads SDK (Legacy).

Чтобы получить версию Google Mobile Ads SDK (Legacy), используйте MobileAds.getVersion().

Метод MobileAds.getVersionString() удален в версии 22.0.0. Вместо него используйте MobileAds.getVersion().

Новый метод возвращает ожидаемый номер внешней версии, например 22.0.0. Подробную информацию об этом изменении вы найдете в статье Использование нового метода Google Mobile Ads SDK getVersion().

Удаление устаревшего метода NativeCustomFormatAd.getVideoMediaView()

В версии 21 класс Google Mobile Ads SDK (Legacy) предоставлял метод NativeCustomFormatAd.getVideoMediaView(), позволяющий получить медиаобъект для собственного формата нативного объявления.

Начиная с версии 22, вы создаете собственный объект MediaView, задаете его медиаконтент и используете MediaContent.getVideoController(), чтобы получить элементы управления видео.

v22

// Called when a custom native ad loads.
@Override
public void onCustomFormatAdLoaded(NativeCustomFormatAd ad) {
    // Assumes you have a FrameLayout in your view hierarchy with the ID media_placeholder.
    FrameLayout mediaPlaceholder = (FrameLayout) findViewById(R.id.media_placeholder);

    MediaContent mediaContent = ad.getMediaContent();
    if (mediaContent != null && mediaContent.hasVideoContent()) {
        // Create a MediaView and set its media content.
        MediaView mediaView = new MediaView(mediaPlaceholder.getContext());
        mediaView.setMediaContent(mediaContent);
        mediaPlaceholder.addView(mediaView);
    }
}

v21

// Called when a custom native ad loads.
@Override
public void onCustomFormatAdLoaded(NativeCustomFormatAd ad) {
    // Assumes you have a FrameLayout in your view hierarchy with the ID media_placeholder.
    FrameLayout mediaPlaceholder = (FrameLayout) findViewById(R.id.media_placeholder);

    VideoController videoController = ad.getVideoController();
    if (videoController.hasVideoContent()) {
        // Add the media view provided by the native ad.
        mediaPlaceholder.addView(ad.getVideoMediaView());
    }
}

Подробную информацию вы найдете в руководстве по специальным нативным объявлениям.

Удаленные или замененные методы

В таблице ниже перечислены изменения в версии 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

Переход с версии 20 на версию 21

В следующих подразделах описаны критические изменения и различия в поведении между основными версиями 20 и 21 Google Mobile Ads SDK (Legacy).

Обновите minSdkVersion до версии 19 или выше

Начиная с версии 21.0.0 для работы Google Mobile Ads SDK (Legacy) требуется, чтобы все приложения использовали Android API уровня 19 или выше. Чтобы изменить уровень API, укажите значение minSdkVersion в файле сборки приложения, равное 19 или выше.

Принудительно использовать строгую допустимость значения NULL

Чтобы обеспечить строгое соблюдение допустимости значения NULL, во все API, в которых ранее не была явно определена допустимость значения NULL, добавляются аннотации @NonNull.

Это изменение может нарушить работу приложений Kotlin и приложений, использующих фреймворки проверки значений null в Java, если в них есть нарушения безопасности null и ранее не обрабатывались значения null (см. документацию Kotlin по безопасности null).

Удаление метода addNetworkExtras()

Метод addNetworkExtras(), который передает дополнительные параметры в виде экземпляра NetworkExtras определенному адаптеру рекламной сети, был объявлен устаревшим в SDK версии 20.3.0 и будет удален в версии 21.0.0. Вместо него используйте метод addNetworkExtrasBundle() из того же класса AdRequest.Builder.

Удаление методов определения местоположения

В версии 21.0.0 будут удалены следующие методы:

  • Метод setLocation(Location location) в классе AdRequest.Builder, который задает местоположение пользователя для таргетинга медиации.
  • Метод getLocation() в классе AdRequest, который возвращает информацию о геотаргетинге, ранее переданную методу setLocation(Location location).
  • Метод getLocation() в классе MediationAdConfiguration, который возвращает местоположение пользователя, если оно определено в AdRequest.

Google не использует данные о местоположении для таргетинга рекламы. При необходимости вы можете использовать сторонние API, чтобы передавать информацию сторонним рекламным сетям.

Прекращение поддержки интерфейсов специальных событий

Специальные события позволяют издателям, использующим медиацию, настроить источник объявлений в каскаде, который не входит в число поддерживаемых источников объявлений Менеджера рекламы.

Все интерфейсы специальных событий заменены классом Adapter и интерфейсом MediationAdLoadCallback.

В таблице ниже перечислены классы и интерфейсы, которые нужно использовать для каждого интерфейса пользовательского события, начиная с версии 21.0.0.

Интерфейсы версии 20.0.0 Класс/интерфейс в версии 21.0.0
CustomEvent Адаптер
CustomEventBanner
CustomEventInterstitial
CustomEventNative
CustomEventBannerListener Adapter, MediationAdLoadCallback
CustomEventInterstitialListener
CustomEventListener
CustomEventNativeListener

Переход с версии 19 на версию 20

В версии 20.0.0 много критических изменений. В версии 19.7.0 появилось много новых API, а также были переименованы или объявлены устаревшими многие классы. Это было сделано в рамках подготовки к выпуску версии 20.0.0. В этом руководстве описаны основные изменения в версии 20.0.0.

Обновления API для полноэкранных форматов

Начиная с версии 20.0.0 межстраничные объявления, объявления с вознаграждением, межстраничные объявления с вознаграждением и объявления при запуске приложения стандартизированы в соответствии с единым дизайном API.

Все API для полноэкранных форматов работают по следующим принципам:

  • Статический метод загрузки
  • Аналогичный механизм обратного вызова или обработчика загрузки.
  • Использование класса FullScreenContentCallback для обратных вызовов показа

Удаление устаревшего API RewardedVideoAd

Новый API RewardedAd был представлен в марте 2019 года и уже более 18 месяцев является предпочтительным API для объявлений с вознаграждением. Он имеет больше улучшений по сравнению с устаревшим API RewardedVideoAd, включая возможность загружать более одного объявления с вознаграждением за раз.

Устаревший API RewardedVideoAd удален из SDK версии 20.0.0.

Прекращение поддержки смарт-баннеров в пользу адаптивных баннеров

Смарт-баннеры больше не поддерживаются. Вместо них рекомендуется использовать адаптивные баннеры. Адаптивные баннеры более эффективны и позволяют гибко настраивать ширину объявлений. Если вы хотите и дальше использовать баннеры во всю ширину экрана, это можно сделать с помощью адаптивных баннеров, как показано в следующем фрагменте кода:

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.Settings, NativeExpressAdView, NativeAppInstallAd, NativeContentAd и InstreamAd удалены.
  • Все классы с префиксом 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 rewarded.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
formats.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.
  • API RewardedAd и InterstitialAd были обновлены для поддержки всех полноэкранных форматов.
  • Функции коррелятора удалены.
Класс API версии 19.5.0 v20.0.0 API Примечания
AdSize getPortraitBannerAdSizeWithWidth() getPortraitAnchoredAdaptiveBannerAdSize()
getLandscapeBannerAdSizeWithWidth() getLandscapeAnchoredAdaptiveBannerAdSize()
getCurrentOrientationBannerAdSizeWithWidth() getCurrentOrientationAnchoredAdaptiveBannerAdSize()
MobileAds initialize(Context, String) MobileAds.initialize(Context, OnInitializationCompleteListener) Идентификатор приложения будет добавлен в файл AndroidManifest.xml.
initialize(Context, String, MobileAds.Settings) initialize(Context, OnInitializationCompleteListener) Класс Settings больше не поддерживается.
getRewardedVideoAdInstance() Удалено Вместо него используйте RewardedAd API.
AdListener onAdFailedToLoad(int) onAdFailedToLoad(LoadAdError)
onAdLeftApplication() Удалено В полноэкранных форматах объявлений вместо AdListener используется FullscreenContentCallback, и в FullscreenContentCallback нет эквивалентного метода. Метод удален из AdListener.
VideoController getAspectRatio() MediaContent.getAspectRatio()
PublisherAdRequest getGender() Удалено
getBirthday() Удалено
getNetworkExtras() Удалено
setManualImpressionsEnabled() Удалено
updateCorrelator() Удалено Подробнее о фильтрации контента объявлений…
PublisherAdRequest.Builder setBirthday() Удалено
setGender() Удалено
setIsDesignedForFamilies() Удалено руководство.
addTestDevice() RequestConfiguration.Builder.setTestDeviceIds() Подробнее о том, как включить тестовые объявления…
tagForChildDirectedTreatment() RequestConfiguration.Builder.setTagForChildDirectedTreatment() Подробнее о фильтрации контента объявлений…
setTagForUnderAgeOfConsent() RequestConfiguration.Builder.setTagForUnderAgeOfConsent()
setMaxAdContentRating() RequestConfiguration.Builder.setMaxAdContentRating()
AdView getMediationAdapterClassName() ResponseInfo.getMediationAdapterClassName() Объект ResponseInfo доступен при использовании метода AdView, getResponseInfo().
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, OnUserEarnedRewardListener) Этот метод показа соответствует общему подходу к полноэкранным форматам.
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)
PublisherInterstitialAd new PublisherInterstitialAd() InterstitialAd.load(Context, String, AdRequest, InterstitialAdLoadCallback) Теперь в InterstitialAd используется тот же подход со статической загрузкой, что и в других полноэкранных форматах.
setAdListener()
DynamicHeightSearchAdRequest getNetworkExtras() Удалено Класс NetworkExtras больше не поддерживается.
AdLoader forContentAd() Удалено
forAppInstallAd() Удалено
withCorrelator() Удалено
getMediationAdapterClassName() Удалено