Руководство по миграции на версию 6

Важно

Обязательно обновите версии используемых адаптеров на актуальные (Медиация Яндекса и адаптеры для сторонних медиационных сетей). Иначе возможны ошибки неправильной интеграции адаптеров и реклама не будет показана.

Ручная инициализация

Изменился процесс ручной инициализации SDK. Теперь при инициализации SDK необходимо передавать коллбэк в метод MobileAds.initialize().

MobileAds.initialize(this) {
    // now you can use ads
}
MobileAds.initialize(this, () -> {
    // now you can use ads
});

Баннеры

Класс AdSize переименован в BannerAdSize. Удалены методы fixedSize(int width, int height), flexibleSize(int width, int maxHeight), stickySize(int width).

Используйте методы в зависимости от типа рекламного объявления:

Для создания адаптивного sticky-баннера — метод BannerAdSize.stickySize(Context context, int width).

Адаптивный sticky-баннер — небольшое, автоматически обновляемое рекламное объявление, которое располагается внизу или вверху экрана приложения.

Баннер не перекрывает основной контент приложения и часто используется в приложениях-играх.

Высота sticky-баннера определяется автоматически, адаптируясь под размер экрана устройства и не превышает 15% высоты экрана.

Важно

В адаптивном sticky-баннере с версии 6.0.0 появилось автообновление.

Если у вас ранее было реализовано автообновление для sticky-баннера, его следует отключить.

Для создания адаптивного inline-баннера — метод BannerAdSize.inlineSize(Context context, int width, int maxHeight).

Адаптивный inline-баннер — гибкий формат баннерной рекламы, обеспечивающий максимальную эффективность за счет оптимизации размера рекламы для каждого устройства.

Высота баннера подбирается автоматически и может достигать высоты экрана устройства.

Как правило, такой формат используется в приложениях-лентах или там, где допустимо обеспечить основной фокус на рекламе.

Для обратной совместимости вместо fixedSize(int width, int height) был добавлен метод fixedSize(Context context, int width, int height), однако его использование не рекомендуется. Используйте inlineSize(Context context, int width, int maxHeight) или stickySize(Context context, int width). В SDK 6.0.0 высота баннера рассчитывается автоматически и известна до отправки запроса рекламы. Эту высоту можно использовать для верстки экрана.

Реклама с вознаграждением

Был изменен подход к созданию и загрузке рекламы. Теперь есть объект-загрузчик RewardedAdLoader, который занимается загрузкой рекламных объявлений, и объект рекламы RewardedAd, получаемый с помощью методов обратного вызова загрузчика RewardedAdLoadListener.

Подробнее ознакомиться с новым апи можно в справочнике SDK.

Загрузка рекламы

SDK 5

Один объект на загрузку и показ рекламного объявления:

val rewardedAd = RewardedAd(this@Activity).apply {
    setAdUnitId("your-ad-unit-id")
    setAdEventListener(this)
    loadAd(adRequest)
}
final RewardedAd rewardedAd = new RewardedAd(this);
rewardedAd.setAdUnitId("your-ad-unit-id");
rewardedAd.setAdEventListener(this);
rewardedAd.loadAd(adRequest);

SDK 6

Загрузчик RewardedAdLoader для загрузки нескольких рекламных объявлений. Для загрузки не требуется передавать Activity context.

После загрузки рекламного объявления (вызов метода onAdLoaded(rewardedAd: RewardedAd)) сохраните ссылку на загруженную рекламу RewardedAd до окончания показа.

val loader = RewardedAdLoader(context).apply {
    setAdLoadListener(object : RewardedAdLoadListener {
        override fun onAdLoaded(rewardedAd: RewardedAd) {
            // save rewardedAd to a local variable
            // now rewardedAd is ready to show
        }

        override fun onAdFailedToLoad(adRequestError: AdRequestError) {}
    })
}
loader.loadAd(AdRequestConfiguration.Builder("your-ad-unit-id").build())
final RewardedAdLoader loader = new RewardedAdLoader(this);
loader.setAdLoadListener(new RewardedAdLoadListener() {
    @Override
    public void onAdLoaded(@NonNull RewardedAd rewardedAd) {
        // save rewardedAd to a local variable
        // now rewardedAd is ready to show
    }

    @Override
    public void onAdFailedToLoad(@NonNull AdRequestError adRequestError) {}
});
loader.loadAd(new AdRequestConfiguration.Builder("your-ad-unit-id").build());

Показ рекламы

SDK 5

Перед показом нужно проверить, загружена ли реклама.

if (rewardedAd.isLoaded()) {
    rewardedAd.show()
}
if (rewardedAd.isLoaded()) {
    rewardedAd.show();
}

SDK 6

Проверка, загружена ли реклама, не требуется.

Реклама готова к показу после получения экземпляра RewardedAd в методе обратного вызова onAdLoaded загрузчика рекламы.

Для отображения необходимо передать Activity:

rewardedAd.show(activity)
rewardedAd.show(activity);

Рекламный объект RewardedAd

SDK 5

Класс, объединяющий в себе загрузку и показ одного рекламного объявления.

SDK 6

Инерфейс загруженного рекламного объявления. Добавился метод получения информации о рекламном объявлении getInfo().

interface RewardedAd {
    fun setAdEventListener(rewardedAdEventListener: RewardedAdEventListener)

    fun show(activity: Activity)

    fun getInfo(): AdInfo
}
interface RewardedAd {
    void setAdEventListener(@Nullable RewardedAdEventListener rewardedAdEventListener);

    void show(@NonNull Activity activity);

    @NonNull
    AdInfo getInfo();
}

Методы обратного вызова

SDK 5

Один интерфейс методов обратного вызова, объединяющий в себе события загрузки и показа:

interface RewardedAdEventListener {

    fun onLoaded()

    fun onRewarded(reward: Reward)

    fun onAdFailedToLoad(adRequestError: AdRequestError)

    fun onAdShown()

    fun onAdDismissed()

    fun onLeftApplication()

    fun onReturnedToApplication()
}
interface RewardedAdEventListener {

    public void onLoaded();

    public void onRewarded(@NonNull Reward reward);

    public void onAdFailedToLoad(@NonNull AdRequestError adRequestError);

    public void onAdShown();

    public void onAdDismissed();

    public void onLeftApplication();

    public void onReturnedToApplication();
}

SDK 6

Интерфейс RewardedAdEventListener разделен на два: методы обратного вызова загрузки RewardedAdLoadListener и показа RewardedAdEventListener.

Удалены методы onLeftApplication(), onReturnedToApplication().

Добавлен метод onAdFailedToShow(AdError).

interface RewardedAdLoadListener {
    fun onAdLoaded(rewardedAd: RewardedAd)

    fun onAdFailedToLoad(adRequestError: AdRequestError)
}

interface RewardedAdEventListener {
    fun onAdShown()

    fun onAdFailedToShow(adError: AdError)

    fun onAdDismissed()

    fun onAdClicked()

    fun onAdImpression(impressionData: ImpressionData)

    fun onRewarded(reward: Reward)
}
interface RewardedAdLoadListener {
    void onAdLoaded(@NonNull RewardedAd rewardedAd);

    void onAdFailedToLoad(@NonNull AdRequestError adRequestError);
}

interface RewardedAdEventListener {
    void onAdShown();

    void onAdFailedToShow(@NonNull AdError adError);

    void onAdDismissed();

    void onAdClicked();

    void onAdImpression(@Nullable ImpressionData impressionData);

    void onRewarded(@NonNull Reward reward);
}

Очистка рекламного объекта RewardedAd

SDK 5

Необходимо вызвать onDestroy() и перестать хранить ссылку на рекламный объект.

SDK 6

Метод onDestroy() удален.

Для очистки рекламного объекта необходимо передать null в функцию установки слушателя методов обратного вызова rewardedAd.setAdEventListener, а также перестать хранить ссылку на сам рекламный объект:

private fun destroyRewardedAd() {
    rewardedAd?.setAdEventListener(null)
    rewardedAd = null
}
private void destroyRewardedAd() {
    if (mRewardedAd != null) {
        mRewardedAd.setAdEventListener(null);
        mRewardedAd = null;
    }
}

Межстраничная реклама

Был изменен подход к созданию и загрузке рекламы. Теперь есть объект-загрузчик InterstitialAdLoader, который занимается загрузкой рекламных объявлений, и объект рекламы InterstitialAd, получаемый с помощью методов обратного вызова загрузчика InterstitialAdLoadListener.

Подробнее ознакомиться с новым апи можно в Справочнике SDK.

Загрузка рекламы

SDK 5

Один объект на загрузку и показ рекламного объявления:

val interstitialAd = InterstitialAd(this@Activity).apply {
setAdUnitId("your-ad-unit-id")
setAdEventListener(this)
loadAd(adRequest)
}
final InterstitialAd interstitialAd = new InterstitialAd(this);
interstitialAd.setAdUnitId("your-ad-unit-id");
interstitialAd.setAdEventListener(this);
interstitialAd.loadAd(adRequest);

SDK 6

Загрузчик InterstitialAdLoader для загрузки нескольких рекламных объявлений. Для загрузки не требуется передавать Activity context.

После загрузки рекламного объявления (вызов метода onAdLoaded(interstitialAd: InterstitialAd)) сохраните ссылку на загруженную рекламу InterstitialAd до окончания показа.

val loader = InterstitialAdLoader(context).apply {
    setAdLoadListener(object : InterstitialAdLoadListener {
        override fun onAdLoaded(interstitialAd: InterstitialAd) {
            // save interstitialAd to a local variable
            // now interstitialAd is ready to show
        }

        override fun onAdFailedToLoad(adRequestError: AdRequestError) {}
    })
}
loader.loadAd(AdRequestConfiguration.Builder("your-ad-unit-id").build())
final InterstitialAdLoader loader = new InterstitialAdLoader(this);
loader.setAdLoadListener(new InterstitialAdLoadListener() {
    @Override
    public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
        // save interstitialAd to a local variable
        // now interstitialAd is ready to show
    }

    @Override
    public void onAdFailedToLoad(@NonNull AdRequestError adRequestError) {}
});
loader.loadAd(new AdRequestConfiguration.Builder("your-ad-unit-id").build());

Показ рекламы

SDK 5

if (interstitialAd.isLoaded()) {
    interstitialAd.show()
}
if (interstitialAd.isLoaded()) {
    interstitialAd.show();
}

SDK 6

Проверка, загружена ли реклама, не требуется.

Реклама готова к показу после получения экземпляра InterstitialAd в методе обратного вызова onAdLoaded загрузчика рекламы.

Для отображения необходимо передать Activity:

interstitialAd.show(activity)
interstitialAd.show(activity);

Рекламный объект InterstitialAd

SDK 5

Класс, объединяющий в себе загрузку и показ одного рекламного объявления.

SDK 6

Инерфейс загруженного рекламного объявления. Добавлен метод получения информации о рекламном объявлении getInfo().

interface InterstitialAd {
    fun setAdEventListener(interstitialAdEventListener: InterstitialAdEventListener)

    fun show(activity: Activity)

    fun getInfo(): AdInfo
}
interface InterstitialAd {
    void setAdEventListener(@Nullable InterstitialAdEventListener interstitialAdEventListener);

    void show(@NonNull Activity activity);

    @NonNull
    AdInfo getInfo();
}

Методы обратного вызова

SDK 5

Один интерфейс методов обратного вызова, объединяющий в себе события загрузки и показа:

interface InterstitialAdEventListener {

    fun onLoaded()

    fun onAdFailedToLoad(adRequestError: AdRequestError)

    fun onAdShown()

    fun onAdDismissed()

    fun onLeftApplication()

    fun onReturnedToApplication()
}
interface InterstitialAdEventListener {

    public void onLoaded();

    public void onAdFailedToLoad(@NonNull AdRequestError adRequestError);

    public void onAdShown();

    public void onAdDismissed();

    public void onLeftApplication();

    public void onReturnedToApplication();
}

SDK 6

Интерфейс InterstitialAdEventListener разделен на два: методы обратного вызова загрузки InterstitialAdLoadListener и показа InterstitialAdEventListener.

Удалены методы onLeftApplication(), onReturnedToApplication().

Добавлен метод onAdFailedToShow(AdError).

interface InterstitialAdLoadListener {
    fun onAdLoaded(interstitialAd: InterstitialAd)

    fun onAdFailedToLoad(adRequestError: AdRequestError)
}

interface InterstitialAdEventListener {
    fun onAdShown()

    fun onAdFailedToShow(adError: AdError)

    fun onAdDismissed()

    fun onAdClicked()

    fun onAdImpression(impressionData: ImpressionData)
}
interface InterstitialAdLoadListener {
    void onAdLoaded(@NonNull InterstitialAd interstitialAd);

    void onAdFailedToLoad(@NonNull AdRequestError adRequestError);
}

interface InterstitialAdEventListener {
    void onAdShown();

    void onAdFailedToShow(@NonNull AdError adError);

    void onAdDismissed();

    void onAdClicked();

    void onAdImpression(@Nullable ImpressionData impressionData);
}

Очистка рекламного объекта InterstitialAd

SDK 5

Необходимо вызвать onDestroy() и перестать хранить ссылку на рекламный объект.

SDK 6

Метод onDestroy() удален.

Для очистки рекламного объекта необходимо передать null в функцию установки слушателя методов обратного вызова interstitialAd.setAdEventListener, а также перестать хранить ссылку на сам рекламный объект:

private fun destroyInterstitialAd() {
    interstitialAd?.setAdEventListener(null)
    interstitialAd = null
}
private void destroyInterstitialAd() {
    if (mInterstitialAd != null) {
        mInterstitialAd.setAdEventListener(null);
        mInterstitialAd = null;
    }
}

App Open Ad

Добавлен новый формат рекламных объявлений — App Open Ad. Подробнее о нем можно узнать в разделе Реклама при открытии приложения.

Медиация Яндекса

Важно

Обязательно обновите версии используемых адаптеров на актуальные (Медиация Яндекса и адаптеры для сторонних медиационных сетей). Иначе возможны ошибки неправильной интеграции адаптеров и реклама не будет показана.

Новые версии адаптеров

Актуальные версии адаптеров для медиации Яндекса (на момент выхода версии SDK 6.0.1):

"com.yandex.ads.mediation:mobileads-adcolony": "4.8.0.6",
"com.yandex.ads.mediation:mobileads-applovin": "11.11.2.0",
"com.yandex.ads.mediation:mobileads-chartboost": "9.3.1.0",
"com.yandex.ads.mediation:mobileads-google": "22.2.0.0",
"com.yandex.ads.mediation:mobileads-inmobi": "10.5.5.0",
"com.yandex.ads.mediation:mobileads-ironsource": "7.4.0.0",
"com.yandex.ads.mediation:mobileads-mintegral": "16.4.71.1",
"com.yandex.ads.mediation:mobileads-mytarget": "5.18.0.0",
"com.yandex.ads.mediation:mobileads-pangle": "5.3.0.4.1",
"com.yandex.ads.mediation:mobileads-startapp": "4.11.0.2",
"com.yandex.ads.mediation:mobileads-tapjoy": "13.1.2.0",
"com.yandex.ads.mediation:mobileads-unityads": "4.8.0.0",
"com.yandex.ads.mediation:mobileads-vungle": "6.12.1.3",

Актуальные версии адаптеров для сторонних медиационных платформ (на момент выхода версии SDK 6.0.1):

"com.yandex.ads.adapter:admob-mobileads": "6.0.1.0",
"com.yandex.ads.adapter:ironsource-mobileads": "6.0.1.0"

Переименование адаптера Google AdMob (ex. AdMob)

Артефакт com.yandex.ads.mediation:mobileads-admob был переименован в com.yandex.ads.mediation:mobileads-google.

Если вы используете единую сборку медиации Яндекса, ничего делать не нужно. В случае ручного подключения адаптеров необходимо заменить gradle-зависимость вашего проекта.

SDK 5

implementation 'com.yandex.ads.mediation:mobileads-admob:<version>'

SDK 6

implementation 'com.yandex.ads.mediation:mobileads-google:<version>'

Полные примеры интеграции можно посмотреть здесь: