На этой странице рассматриваются миграции для текущей и предыдущей версий.
Переход на SDK v21
Чтобы избежать потенциальных сбоев сборки с версией 21.0.0 SDK Google Mobile Ads (выпуск намечен на начало 2022 года), следуйте инструкциям и рекомендациям, представленным в этом руководстве.
Обновите minSdkVersion до версии 19 или выше.
Начиная с версии 21.0.0, для работы Google Mobile Ads SDK требуется, чтобы все приложения работали на Android API не ниже 19 уровня. Чтобы настроить уровень API, измените значение minSdkVersion
в файле сборки вашего приложения на 19 или выше.
Обеспечьте строгую допустимость значений NULL
В рамках подготовки к обеспечению строгой допустимости значений NULL аннотации @NonNull
добавляются во все API, которые ранее явно не определяли допустимость значений NULL.
Это изменение может нарушить работу приложений Kotlin и приложений, использующих фреймворки Java для проверки нулевых значений, если есть нарушения безопасности нулевых значений и ранее не обрабатывались безопасным образом null
значения (см. документацию Kotlin по Null-safety ).
Удаление метода 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 для предоставления информации сторонним рекламным сетям, если это необходимо.
Прекращение поддержки пользовательских интерфейсов событий
Пользовательские события позволяют издателям, использующим AdMob, добавлять каскадный агрегатор для рекламной сети, которая не входит ни в одну из рекламных сетей, поддерживаемыхAdMob.
Все пользовательские интерфейсы событий устарели, вместо них используются класс Adapter
и интерфейс MediationAdLoadCallback
.
В таблице ниже перечислены соответствующие классы или интерфейсы, которые следует использовать для каждого пользовательского интерфейса событий, начиная с версии 21.0.0:
v20.0.0 Интерфейсы | v21.0.0 Класс/ Интерфейс |
---|---|
Пользовательское событие | Адаптер |
CustomEventBanner | |
CustomEventInterstitial | |
CustomEventNative | |
CustomEventBannerListener | Адаптер , MediationAdLoadCallback |
CustomEventInterstitialListener | |
CustomEventListener | |
Кустосоевентнативелистенер |
Переход на SDK v20
В версии 20.0.0 будет много критических изменений. В версии 19.7.0 представлено много новых API, а многие классы объявлены устаревшими или переименованы при подготовке к версии 20.0.0. В этом руководстве освещаются основные изменения, внесенные в версию 19.7.0, а также то, что будет в версии 20.0.0 (начало 2021 г.).
Обновления API полноэкранного формата
Начиная с версии 20.0.0, межстраничные объявления, объявления с вознаграждением, межстраничные объявления с вознаграждением и форматы объявлений App Open стандартизированы для соответствия единому дизайну API.
Все API полноэкранного формата используют следующие принципы:
- Метод статической нагрузки
- Аналогичный механизм обратного вызова или обработчика загрузки
- Использование класса
FullScreenContentCallback
для обратных вызовов презентации
Удаление устаревшего RewardedVideoAd API
Новый API RewardedAd
был впервые представлен в марте 2019 года и уже более 18 месяцев является предпочтительным API с вознаграждением. В нем было больше улучшений по сравнению с устаревшим API RewardedVideoAd
, включая возможность загрузки более одного объявления с вознаграждением за раз.
Устаревший API RewardedVideoAd
удален из SDK версии 20.0.0.
Устаревший смарт-баннер в пользу адаптивного баннера
Смарт-баннеры устарели и заменены адаптивными баннерами . Адаптивные баннеры обеспечивают превосходную производительность и большую гибкость в настройке ширины объявления. Если вы предпочитаете продолжать использовать полноразмерные баннеры, это все равно можно сделать с помощью адаптивного баннера, как показано в следующем фрагменте кода:
Джава
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); } }
Котлин
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
никогда не предназначался для обработки кликов по объявлению, и использование этого обратного вызова для отчета о кликах не дает точной метрики. Например, щелчок по значку AdChoices, который запускал внешний браузер, вызывал обратный вызов, но не считался кликом.
Переименование класса
В таблице ниже перечислены конкретные имена классов, которые были изменены или удалены. В итоге:
- Большинство классов, связанных с
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. |
вознаграждение.RewardedVideoAd | вознаграждение.RewardedAd |
Награда.RewardedVideoAdListener | вознаграждение.RewardedAdLoadCallback и FullScreenContentCallback |
награда.RewardItem | вознаграждение.RewardItem |
вознаграждение.RewardedAdCallback | OnUserEarnedRewardListener |
форматы.UnifiedNativeAdView | нативад.NativeAdView |
форматы.UnifiedNativeAd | нативад.NativeAd |
форматы. UnifiedNativeAdAssetNames | nativead.NativeAdAssetNames |
formats.UnifiedNativeAd.OnUnifiedNativeAdLoadedListener | nativead.NativeAd.OnNativeAdLoadedListener |
форматы.AdChoicesView | nativead.AdChoicesView |
formats.NativeAd.AdChoicesInfo | nativead.NativeAd.AdChoicesInfo |
форматы.MediaView | nativead.MediaView |
форматы.NativeAdViewHolder | нативад. Нативеадвиевхолдер |
форматы.NativeAdOptions | nativead.NativeAdOptions |
форматы.NativeCustomTemplateAd | nativead.NativeCustomFormatAd |
formats.NativeCustomTemplateAd .OnCustomTemplateAdLoadedListener | nativead.NativeCustomFormatAd .OnCustomFormatAdLoadedListener |
MobileAds.Настройки | Удаленный |
doubleclick.PublisherAdRequest | менеджер рекламы.AdManagerAdRequest |
doubleclick.PublisherAdView | менеджер рекламы.AdManagerAdView |
форматы.PublisherAdViewOptions | форматы.AdManagerAdViewOptions |
doubleclick.PublisherInterstitialAd | admanager.AdManagerInterstitialAd |
Межстраничное объявление | межстраничное.InterstitialAd |
NativeExpressAdView | Удаленный |
instream.InstreamAd | Удаленный |
mediation.admob.AdMobExtras | Удаленный |
Коррелятор | Удаленный |
search.SearchAdRequest | Удаленный |
Интерфейс AdRequest.TagForUnderAgeOfConsent | Удаленный |
Интерфейс AdRequest.MaxAdContentRating | Удаленный |
форматы.NativeAppInstallAd | родной.NativeAd |
форматы.NativeAppInstallAdView | родной.NativeAdView |
посредничество.NativeAppInstallAdMapper | медиация. UnifiedNativeAdMapper |
форматы.NativeContentAd | родной.NativeAd |
форматы.NativeContentAdView | родной.NativeAdView |
посредничество.NativeContentAdMapper | медиация. UnifiedNativeAdMapper |
Методы удалены/заменены
В таблице ниже перечислены конкретные изменения в версии 20.0.0. В итоге:
- Из класса MobileAds удалены устаревшие методы инициализации.
- Некоторые методы из класса
AdRequest.Builder()
либо удалены, либо перемещены в классRequestConfiguration
. - API RewardedAd и InterstitialAd были обновлены, чтобы соответствовать всем полноэкранным форматам.
- Функции коррелятора были удалены.
Сорт | v19.5.0 API | v20.0.0 API | Примечания |
---|---|---|---|
Размер объявления | getPortraitBanner AdSizeWithWidth() | getPortraitAnchored AdaptiveBannerAdSize() | |
getLandscapeBanner AdSizeWithWidth() | getLandscapeAnchored AdaptiveBannerAdSize() | ||
getCurrentOrientation BannerAdSizeWithWidth() | getCurrentOrientationAnchored AdaptiveBannerAdSize() | ||
Мобильная реклама | инициализировать (контекст, строка) | MobileAds.initialize(Context, OnInitializationComplete Listener) | Идентификатор приложения теперь установлен в файле AndroidManifest.xml. |
инициализировать(Контекст, Строка, MobileAds.Settings) | инициализировать (контекст, слушатель OnInitializationComplete) | Класс Settings устарел. | |
getRewardedVideo AdInstance() | Удаленный | Вместо этого используйте RewardedAd API. | |
AdListener | onAdFailedToLoad (целое число) | onAd FailedToLoad (LoadAdError) | |
onAdLeftApplication() | Удаленный | Форматы полноэкранных объявлений используют FullscreenContentCallback вместо AdListener, и для FullscreenContentCallback нет эквивалентного метода. Метод был удален из AdListener. | |
ВидеоКонтроллер | получить соотношение сторон () | MediaContent.getAspectRatio() | |
AdRequest | получитьпол() | Удаленный | |
получитьдень рождения() | Удаленный | ||
получитьNetworkExtras() | Удаленный | ||
setManualImpressions включено () | Удаленный | ||
обновить коррелятор () | Удаленный | См. раздел Фильтрация содержания объявлений . | |
AdRequest.Builder | установитьдень рождения() | Удаленный | |
setGender() | Удаленный | ||
setIsDesignedForFamilies() | Удаленный | См. руководство . | |
добавитьтестовое устройство() | Конфигурация Запроса .Builder .setTestDeviceIds() | См. Включение тестовых объявлений . | |
tagForChildDirectedTreatment() | RequestConfiguration .Builder.setTagFor ChildDirectedTreatment() | См. раздел Фильтрация содержания объявлений . | |
setTagFor UnderAgeOfConsent() | RequestConfiguration .Builder.setTagFor UnderAgeOfConsent() | ||
setMaxAdContentRating() | RequestConfiguration .Builder .setMaxAdContentRating() | ||
Просмотр рекламы | getMediationAdapter ClassName() | ResponseInfo .getMediationAdapter ClassName() | Объект ResponseInfo теперь доступен через метод AdView getResponseInfo(). |
NativeAdOptions | установитьориентацию изображения() | setMediaAspectRatio() | |
getImageOrientation | getMediaAspectRatio() | ||
Объявление с вознаграждением | loadAd(AdRequest, RewardedAdLoadCallback) | RewardedAd.load(Context, String, AdRequest, RewardedAdLoadCallback) | RewardedAd теперь использует тот же метод статической загрузки, что и другие полноэкранные форматы. |
loadAd(PublisherAdRequest, RewardedAdLoadCallback) | RewardedAd.load(Context, String, AdManagerAdRequest, RewardedAdLoadCallback) | ||
isLoaded() | Удаленный | Обратный вызов из метода статической загрузки предоставляет уже загруженное объявление. | |
show(Activity, RewardedAdCallback) | показать (Активность, OnUserEarnedRewardListener) | Этот метод показа соответствует более широкому полноэкранному формату. | |
RewardedAdLoadCallback | onRewardedAd FailedToLoad (целое число) | onAd FailedToLoad (LoadAdError) | |
OnRewardedAd FailedToLoad (LoadAdError) | onAd FailedToLoad (LoadAdError) | ||
onRewardedAdLoaded() | onAdLoaded (объявление с вознаграждением) | ||
AppOpenAdLoadCallback | onAppOpenAd FailedToLoad (целое число) | onAd FailedToLoad (LoadAdError) | |
onAppOpenAd FailedToLoad (LoadAdError) | onAd FailedToLoad (LoadAdError) | ||
onAppOpenAd загружен (AppOpenAd) | onAdLoaded(AppOpenAd) | ||
Обратный вызов RewardedInterstitialAdLoad | onRewardedInterstitialAd FailedToLoad(int) | onAd FailedToLoad (LoadAdError) | |
onRewardedInterstitialAd FailedToLoad (LoadAdError) | onAd FailedToLoad (LoadAdError) | ||
onRewardedInterstitialAd загружено (RewardedInterstitialAd) | onAd Loaded (RewardedInterstitialAd) | ||
InterstitialAd | новый InterstitialAd() | InterstitialAd.load(Context, String, AdRequest, InterstitialAdLoadCallback) | InterstitialAd теперь использует тот же метод статической загрузки, что и другие полноэкранные форматы. |
setAdListener() | |||
Запрос объявления DynamicHeightSearch | получитьNetworkExtras() | Удаленный | Класс NetworkExtras устарел. |
AdLoader | forContentAd() | Удаленный | |
forAppInstallAd() | Удаленный | ||
с коррелятором() | Удаленный | ||
getMediationAdapter ClassName() | Удаленный |