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

8-я версия Yandex Mobile Ads SDK вносит в API ряд изменений, направленных на улучшение пользовательского опыта разработчиков.

Если ваш проект реализован на Objective-C, обратите внимание на пункт 14 с MainActor, для корректной обработки MainActor-изолированные классов. Осуществляйте работу с ними на главном потоке.

Основные изменения

1. Изменения в AdRequest

  • Используйте AdRequest для всех типов рекламы.
  • Классы AdRequestConfiguration, NativeAdRequestConfiguration и все Mutable-классы запросов удалены.
  • Свойство adUnitID теперь передается как обязательный параметр инициализации AdRequest.

Класс

Статус

AdRequestConfiguration

Удален. Используйте AdRequest

NativeAdRequestConfiguration

Удален. Используйте AdRequest и NativeAdOptions

MutableAdRequest

Удален

MutableAdRequestConfiguration

Удален

MutableNativeAdRequestConfiguration

Удален

Примеры

SDK 7

let configuration = AdRequestConfiguration(adUnitID: "R-M-XXXXX-YY")
loader.loadAd(with: configuration)

SDK 8

let request = AdRequest(adUnitID: "R-M-XXXXX-YY") loader.loadAd(with: request) {  }

SDK 7

YMAAdRequestConfiguration *configuration =
    [[YMAAdRequestConfiguration alloc] initWithAdUnitID:@"R-M-XXXXX-YY"];
[loader loadAdWithConfiguration:configuration];

SDK 8

YMAAdRequest *request =
    [[YMAAdRequest alloc] initWithAdUnitID:@"R-M-XXXXX-YY"];
[loader loadAdWithRequest:request
       completionHandler:^(YMAInterstitialAd * _Nullable ad,
                           NSError * _Nullable error) {
    if (ad) {
        // реклама загружена
    } else {
        // ошибка загрузки
    }
}];

2. Изменения в Targeting

  • Поля age, gender, location, contextQuery и contextTags удалены из AdRequest.
  • Для управления параметрами таргетинга используйте новый класс AdTargeting.

Класс AdTargetInfo переименован в AdTargeting, поле targetInfo в AdRequestTokenConfiguration и BidderTokenRequestConfiguration переименовано в targeting.

Класс

Статус

AdTargetInfo

Переименован в AdTargeting

Класс

Свойство

Статус

AdRequest

age

Удалено. Используйте AdTargeting.age

gender

Удалено. Используйте AdTargeting.gender

location

Удалено. Используйте AdTargeting.location

contextQuery

Удалено. Используйте AdTargeting.contextQuery

contextTags

Удалено. Используйте AdTargeting.contextTags

targeting

Добавлено

AdTargeting

targetInfo

Переименовано в targeting

Примеры

SDK 7

let request = AdRequest(
    adUnitID: "R-M-XXXXX-YY",
    age: 25,
    gender: kYMAGenderMale,
    location: location
)

SDK 8

let targeting = AdTargeting(
    age: 25,
    gender: .male,
    location: location
)
let request = AdRequest(adUnitID: "R-M-XXXXX-YY", targeting: targeting)

SDK 7

YMAAdRequest *request = [[YMAAdRequest alloc] initWithAdUnitID:@"R-M-XXXXX-YY"
                                                           age:@(25)
                                                        gender:kYMAGenderMale
                                                      location:location];

SDK 8

YMAAdTargeting *targeting = [[YMAAdTargeting alloc] initWithAge:@(25)
                                                         gender:YMAGender.male
                                                       location:location
                                                   contextQuery:nil
                                                    contextTags:nil];
YMAAdRequest *request = [[YMAAdRequest alloc] initWithAdUnitID:@"R-M-XXXXX-YY"
                                                      targeting:targeting];

3. Изменения в загрузчиках рекламы

  • Делегаты загрузки удалены — вместо них результат загрузки приходит в completion handler.
  • Параметр adUnitID теперь передается через AdRequest.

Класс

Загрузчик

Статус

AppOpenAdLoader

loadAd(with:) + делегат

Заменен на loadAd(with:completion:)

InterstitialAdLoader

loadAd(with:) + делегат

Заменен на loadAd(with:completion:)

RewardedAdLoader

loadAd(with:) + делегат

Заменен на loadAd(with:completion:)

NativeAdLoader

loadAd(with:) + делегат

Заменен на loadAd(with:options:completion:)

NativeBulkAdLoader

loadAds(with:adsCount:) + делегат

Заменен на loadAds(with:adsCount:options:completion:)

SliderAdLoader

loadAd(with:) + делегат

Заменен на loadAd(with:options:completion:)

Класс

Статус

AppOpenAdLoaderDelegate

Удален

InterstitialAdLoaderDelegate

RewardedAdLoaderDelegate

NativeAdLoaderDelegate

NativeBulkAdLoaderDelegate

SliderAdLoaderDelegate

Примеры

SDK 7

// Interstitial Ads
let configuration = AdRequestConfiguration(adUnitID: "R-M-XXXXX-YY")
interstitialAdLoader.delegate = self
interstitialAdLoader.loadAd(with: configuration)

// Native Ads
let nativeConfiguration = NativeAdRequestConfiguration(adUnitID: "R-M-XXXXX-YY")
nativeAdLoader.delegate = self
nativeAdLoader.loadAd(with: nativeConfiguration)

SDK 8

// Interstitial Ads
let request = AdRequest(adUnitID: "R-M-XXXXX-YY")
interstitialAdLoader.loadAd(with: request) { result in
    switch result {
    case .success(let ad):
        // ad loaded
    case .failure(let error):
        // load error
    }
}

// Native Ads
let options = NativeAdOptions()
nativeAdLoader.loadAd(with: request, options: options) { result in
    switch result {
    case .success(let ad):
        // ad loaded
    case .failure(let error):
        // load error
    }
}

SDK 7

// Interstitial Ads
YMAAdRequestConfiguration *configuration =
    [[YMAAdRequestConfiguration alloc] initWithAdUnitID:@"R-M-XXXXX-YY"];
interstitialAdLoader.delegate = self;
[interstitialAdLoader loadAdWithConfiguration:configuration];

// Native Ads
YMANativeAdRequestConfiguration *nativeConfig =
    [[YMANativeAdRequestConfiguration alloc] initWithAdUnitID:@"R-M-XXXXX-YY"];
nativeAdLoader.delegate = self;
[nativeAdLoader loadAdWithConfiguration:nativeConfig];

SDK 8

// Interstitial Ads
YMAAdRequest *request =
    [[YMAAdRequest alloc] initWithAdUnitID:@"R-M-XXXXX-YY"];
[interstitialAdLoader loadAdWithRequest:request
                      completionHandler:^(YMAInterstitialAd * _Nullable ad,
                                          NSError * _Nullable error) {
    if (ad) {
        // ad loaded
    } else {
        // load error
    }
}];

// Native Ads
YMANativeAdOptions *options = [[YMANativeAdOptions alloc] init];
[nativeAdLoader loadAdWithRequest:request
                          options:options
                completionHandler:^(id<YMANativeAd> _Nullable ad,
                                    NSError * _Nullable error) {
    if (ad) {
        // ad loaded
    } else {
        // load error
    }
}];

3.1 Поддержка Structured Concurrency

Добавлена поддержка Swift Structured Concurrency (async/await) во всех загрузчиках рекламы.

Загрузчик

Метод

Статус

AppOpenAdLoader

loadAd(with:)

Добавлен

InterstitialAdLoader

loadAd(with:)

RewardedAdLoader

loadAd(with:)

NativeAdLoader

loadAd(with:options:)

NativeBulkAdLoader

loadAds(with:adsCount:options:)

SliderAdLoader

loadAd(with:options:)

Примеры

let request = AdRequest(adUnitID: "R-M-XXXXX-YY")

// Interstitial Ads
let interstitialAd = try await interstitialAdLoader.loadAd(with: request)

// Rewarded Ads
let rewardedAd = try await rewardedAdLoader.loadAd(with: request)

// AppOpen Ads
let appOpenAd = try await appOpenAdLoader.loadAd(with: request)

// Native Ads
let options = NativeAdOptions()
let nativeAd = try await nativeAdLoader.loadAd(with: request, options: options)

// Slider Ads
let sliderAd = try await sliderAdLoader.loadAd(with: request, options: options)

// Native Bulk Ads
let nativeAds = try await nativeBulkAdLoader.loadAds(with: request, adsCount: 3, options: options)

Structured Concurrency доступен только в Swift.

4. Изменения в Banner API

  • Класс AdView переименован в BannerAdView, протокол AdViewDelegate — в BannerAdViewDelegate.
  • Свойство adUnitID удалено из BannerAdView — теперь adUnitID передается в конструктор AdRequest перед каждой загрузкой.
  • Фабричные методы BannerAdSize переименованы.

Класс

Статус

AdView

Переименован в BannerAdView

AdViewDelegate

Переименован в BannerAdViewDelegate

Класс

Свойство

Статус

BannerAdView

adViewDidLoad

Переименовано в bannerAdViewDidLoad

adViewDidFailLoading

Переименовано в bannerAdViewDidFailLoading

adViewDidClick

Переименовано в bannerAdViewDidClick

adView(_:didTrackImpression:)

Переименовано в bannerAdView(_:didTrackImpression:)

AdView(adUnitID:adSize:)

Заменено на BannerAdView(adSize:)

AdView.adUnitID

Заменено на BannerAdView.adInfo?.adUnitID

AdView.loadAd()

Удалено

AdView.loadAd(with: AdRequest?)

Заменено на BannerAdView.loadAd(with: AdRequest)

BannerAdSize

fixedSize(withWidth:height:)

Переименовано в fixed(width:height:)

inlineSize(withWidth:maxHeight:)

Переименовано в inline(width:maxHeight:)

stickySize(withContainerWidth:)

Переименовано в sticky(containerWidth:)

Примеры

SDK 7

let adSize = BannerAdSize.stickySize(withContainerWidth: screenWidth)
let adView = AdView(adUnitID: "R-M-XXXXX-YY", adSize: adSize)
adView.delegate = self
adView.loadAd()

SDK 8

let adSize = BannerAdSize.sticky(containerWidth: screenWidth)
let bannerAdView = BannerAdView(adSize: adSize)
bannerAdView.delegate = self
let request = AdRequest(adUnitID: "R-M-XXXXX-YY")
bannerAdView.loadAd(with: request)

SDK 7

YMABannerAdSize *adSize = [YMABannerAdSize stickySizeWithContainerWidth:screenWidth];
YMAAdView *adView = [[YMAAdView alloc] initWithAdUnitID:@"R-M-XXXXX-YY"
                                                 adSize:adSize];
adView.delegate = self;
[adView loadAd];

SDK 8

YMABannerAdSize *adSize = [YMABannerAdSize stickyWithContainerWidth:screenWidth];
YMABannerAdView *bannerAdView = [[YMABannerAdView alloc] initWithAdSize:adSize];
bannerAdView.delegate = self;
YMAAdRequest *request = [[YMAAdRequest alloc] initWithAdUnitID:@"R-M-XXXXX-YY"];
[bannerAdView loadAdWithRequest:request];

5. Изменения в AdInfo

  • Свойства рекламных объектов info, adAttributes, creativeID, campaignID удалены.
  • Используйте adInfo. Также изменены имена некоторых свойств adInfo.

Класс

Свойство

Статус

AdInfo

adUnitId

Переименовано в adUnitID

data

Переименовано в extraData

adSize

Удалено

partnerText

Добавлено

BannerAdView,
NativeAd,
SliderAd,
AppOpenAd,
InterstitialAd,
RewardedAd

info

Заменено на adInfo.extraData

adAttributes

Заменено на adInfo.creatives

creativeID

Заменено на adInfo.creatives[i].creativeID

campaignID

Заменено на adInfo.creatives[i].campaignID

Creative

placeID

Добавлено

offerID

Добавлено

Примеры

SDK 7

// adAttributes и info
let attributes = nativeAd.adAttributes
let info = nativeAd.info

// creativeID и campaignID
let creativeID = interstitialAd.creativeID
let campaignID = interstitialAd.campaignID

// adUnitId
let adUnitId = interstitialAd.adInfo.adUnitId

// adSize (доступно)
let size = bannerAdView.adInfo.adSize

SDK 8

// adInfo.creatives и adInfo.extraData
let creatives = nativeAd.adInfo.creatives
let extraData = nativeAd.adInfo.extraData

// creativeID, campaignID, placeID, offerID через creatives
if let creative = interstitialAd.adInfo.creatives.first {
    let creativeID = creative.creativeID
    let campaignID = creative.campaignID
    let placeID = creative.placeID
    let offerID = creative.offerID
}

// adUnitID (renamed)
let adUnitID = interstitialAd.adInfo.adUnitID

// partnerText (new)
let partnerText = interstitialAd.adInfo.partnerText

// adSize deleted — banner size is available in BannerAdView.adSize

SDK 7

// adAttributes and info
NSArray *attributes = nativeAd.adAttributes;
NSDictionary *info = nativeAd.info;

// creativeID and campaignID
NSString *creativeID = interstitialAd.creativeID;
NSString *campaignID = interstitialAd.campaignID;

// adUnitId
NSString *adUnitId = interstitialAd.adInfo.adUnitId;

// adSize (available)
YMAAdSize *size = bannerAdView.adInfo.adSize;

SDK 8

// adInfo.creatives and adInfo.extraData
NSArray<YMACreative *> *creatives = nativeAd.adInfo.creatives;
NSDictionary *extraData = nativeAd.adInfo.extraData;

// creativeID, campaignID, placeID, offerID via creatives
YMACreative *creative = interstitialAd.adInfo.creatives.firstObject;
if (creative != nil) {
    NSString *creativeID = creative.creativeID;
    NSString *campaignID = creative.campaignID;
    NSString *placeID = creative.placeID;
    NSString *offerID = creative.offerID;
}

// adUnitID (renamed)
NSString *adUnitID = interstitialAd.adInfo.adUnitID;

// partnerText (new)
NSString *partnerText = interstitialAd.adInfo.partnerText;

// adSize deleted — banner size is available in YMABannerAdView.adSize

6. Изменения в основном классе SDK

  • Класс MobileAds переименован в YandexAds.
  • Privacy-методы и свойства перенесены в новый класс с обновленными именами.

Класс

Статус

MobileAds

Переименован в YandexAds

MobileAds.sdkVersion

Заменен на YandexAds.sdkVersion.stringValue

MobileAds.setLocationTrackingEnabled(_:)

Переименован в YandexAds.setLocationTracking(_:)

MobileAds.setAgeRestrictedUser(_:)

Переименован в YandexAds.setAgeRestricted(_:)

MobileAds.setUserConsent(_:)

Перенесен в YandexAds.setUserConsent(_:)

YMANativeAdView

Переименован в NativeAdView

YMANativeMediaView

Переименован в NativeMediaView

Примеры

SDK 7

import YandexMobileAds
MobileAds.setLocationTrackingEnabled(true)
MobileAds.setAgeRestrictedUser(false)
MobileAds.setUserConsent(true)
let version = MobileAds.sdkVersion

SDK 8

import YandexMobileAds
YandexAds.setLocationTracking(true)
YandexAds.setAgeRestricted(false)
YandexAds.setUserConsent(true)
let version = YandexAds.sdkVersion.stringValue

SDK 7

[YMAMobileAds setLocationTrackingEnabled:YES];
[YMAMobileAds setAgeRestrictedUser:NO];
[YMAMobileAds setUserConsent:YES];
NSString *version = YMAMobileAds.sdkVersion;

SDK 8

[YMAYandexAds setLocationTracking:YES];
[YMAYandexAds setAgeRestricted:NO];
[YMAYandexAds setUserConsent:YES];
NSString *version = YMAYandexAds.sdkVersion.stringValue;

7. Изменения в делегатах рекламных объектов

Методы делегатов AppOpenAdDelegate, InterstitialAdDelegate, RewardedAdDelegate, NativeAdDelegate, SliderAdDelegate больше не опциональны — все методы теперь обязательны для реализации.

Методы показа

Класс

Метод

Статус

RewardedAdDelegate

rewardedAdDelegate(
  _:didFailToShowWithError:)

Переименован в

rewardedAdDelegate(
  _:didFailToShow:)

InterstitialAdDelegate

interstitialAdDelegate(
  _:didFailToShowWithError:)

Переименован в

interstitialAdDelegate(
  _:didFailToShow:)

AppOpenAdDelegate

appOpenAdDelegate(
  _:didFailToShowWithError:)

Переименован в

appOpenAdDelegate(
  _:didFailToShow:)

Методы отслеживания показов

Класс

Метод

Статус

NativeAdDelegate

nativeAd(
  _:didTrackImpressionWith:)

Переименован в

nativeAd(
  _:didTrackImpression:)

RewardedAdDelegate

rewardedAdDelegate(
  _:didTrackImpressionWith:)

Переименован в

rewardedAdDelegate(
  _:didTrackImpression:)

InterstitialAdDelegate

interstitialAdDelegate(
  _:didTrackImpressionWith:)

Переименован в

interstitialAdDelegate(
  _:didTrackImpression:)

AppOpenAdDelegate

appOpenAdDelegate(
  _:didTrackImpressionWith:)

Переименован в

appOpenAdDelegate(
  _:didTrackImpression:)

SliderAdDelegate

sliderAdDelegate(
  _:didTrackImpressionWith:)

Переименован в

sliderAdDelegate(
  _:didTrackImpression:)

Удаленные методы делегатов

Делегат

Метод

Статус

AdViewDelegate

close(_:)

Удален

viewControllerForPresentingModalView()

adViewWillLeaveApplication

adView(_:willPresentScreen:)

adView(_:didDismissScreen:)

NativeAdDelegate

close(_:)

viewControllerForPresentingModalView()

nativeAdWillLeaveApplication

nativeAd(_:willPresentScreen:)

nativeAd(_:didDismissScreen:)

SliderAdDelegate

sliderAdDidClose(_:)

sliderAdWillLeaveApplication

sliderAd(_:willPresentScreen:)

sliderAd(_:didDismissScreen:)

8. Изменения в Native Ads: Warning

  • Тип поля warning в NativeAdAssets изменен с String? на NativeAdWarning?.
  • Добавлено поле minimumRequiredArea в NativeAdWarning, которое содержит информацию о минимальной требуемой части рекламной области ассета warning.

Класс

Поле

Статус

NativeAdAssets

warning: String?

Тип изменен на warning: NativeAdWarning?

NativeAdWarning

value: String

Добавлено

minimumRequiredArea: Double

Добавлено

Примеры

SDK 7

let warningText: String? = nativeAd.adAssets.warning
label.text = warningText

SDK 8

let warning: NativeAdWarning? = nativeAd.adAssets.warning
label.text = warning?.value

SDK 7

NSString *warningText = nativeAd.adAssets.warning;
label.text = warningText;

SDK 8

YMANativeAdWarning *warning = nativeAd.adAssets.warning;
label.text = warning.value;

9. Изменения в Native Ads: Media

Добавлено свойство hasVideo в NativeAdMedia.

Класс

Свойство

Статус

NativeAdMedia

hasVideo: Bool

Добавлено

Примеры

// SDK 8
if let media = nativeAd.adAssets.media, media.hasVideo {
    // Consider video content in ads
}
// SDK 8
if (nativeAd.adAssets.media != nil && nativeAd.adAssets.media.hasVideo) {
    // Consider video content in ads
}

10. Изменения в NativeAd и SliderAd: loadImages

  • Метод loadImages() переименован в loadImages(completionHandler:).
  • Параметр completionHandler заменяет протокол-наблюдатель NativeAdImageLoadingObserver.
  • Добавлена асинхронная версия loadImages().

Класс

Статус

NativeAdImageLoadingObserver

Удален

Класс

Метод

Статус

NativeAd

loadImages() + NativeAdImageLoadingObserver

Заменен на loadImages(completionHandler:) / loadImages() (async)

SliderAd

loadImages() + NativeAdImageLoadingObserver

Заменен на loadImages(completionHandler:) / loadImages() (async)

Применимо к: NativeAd, SliderAd.

Примеры

SDK 7

// NativeAd
nativeAd.addImageLoadingObserver(self)
nativeAd.loadImages()

// SliderAd
sliderAd.addImageLoadingObserver(self)
sliderAd.loadImages()

SDK 8

// NativeAd (completion handler)
nativeAd.loadImages { [weak self] in
    // resources loaded
}

// NativeAd (async/await)
await nativeAd.loadImages()

// SliderAd (completion handler)
sliderAd.loadImages { [weak self] in
    // resources loaded
}

// SliderAd (async/await)
await sliderAd.loadImages()

SDK 7

// NativeAd
[nativeAd addImageLoadingObserver:self];
[nativeAd loadImages];

// SliderAd
[sliderAd addImageLoadingObserver:self];
[sliderAd loadImages];

SDK 8

// NativeAd
[nativeAd loadImagesWithCompletionHandler:^{
    // resources loaded
}];

// SliderAd
[sliderAd loadImagesWithCompletionHandler:^{
    // resources loaded
}];

11. Удаление VideoController

Свойство videoController и связанные классы VideoController, VideoDelegate удалены.

Свойство

Статус

AdView.videoController

Удалено

BannerAdView.videoController

VideoController

VideoDelegate

12. Удаление нативных шаблонов

Нативные шаблоны полностью удалены. Все связанные классы больше не доступны.

Шаблон

Статус

NativeTemplateAppearance

Удален

MutableNativeTemplateAppearance

NativeTemplateHorizontalOffset

NativeBannerView

ButtonAppearance

MutableButtonAppearance

ImageAppearance

MutableImageAppearance

LabelAppearance

MutableLabelAppearance

RatingAppearance

MutableRatingAppearance

SizeConstraint

MutableSizeConstraint

SizeConstraintType

YMAHorizontalOffset

13. Удаленные константы и типы ошибок

Константы и типы ошибок

Статус

kYMAAdsErrorDomain

Удалено

kYMANativeAdErrorDomain

Удалено

kYMAGenderFemale, kYMAGenderMale

Заменены классом Gender

Константы из YMAVersion

Заменено на YandexAds.sdkVersion.stringValue

MobileAds.sdkVersion

Заменено на YandexAds.sdkVersion.stringValue

AdErrorCode

Удалено

NativeErrorCode

Удалено

Version.prereleaseIdentifiers

Удалено

Version.buildMetadataIdentifiers

Удалено

isYandexMobileAdsError (на Error/NSError)

Удалено

isYandexMobileNativeAdsError (на Error/NSError)

Удалено

14. Swift 6, MainActor и Sendable

  • SDK собирается с использованием Swift 6.
  • Ряд классов и протоколов теперь изолирован на MainActor, а один протокол требует Sendable.

MainActor-изолированные классы

Класс

AppOpenAd

InterstitialAd

RewardedAd

AudioSessionManager

NativeVideoPlaybackControls

MainActor-изолированные протоколы

Протокол

AppOpenAdDelegate

InterstitialAdDelegate

RewardedAdDelegate

NativeAd

NativeAdDelegate

SliderAd

SliderAdDelegate

BannerAdViewDelegate

Протокол NativeAdImageLoadingObserver удален — загрузка изображений обрабатывается через completion handler или async/await.

15. Другие изменения

Класс

Объект

Статус

Rating

setRating(_:) / rating()

Заменен на свойство Rating.rating

NativeAd

bind(toSliderView:)

Перенесен в SliderAd.bind(with:)

NativeVideoPlaybackProgressControl

reset

Удален

MobileAds

audioSessionManager()

Заменен на свойство YandexAds.audioSessionManager

Примеры

SDK 7

rating.setRating(4.5)
let value = rating.rating()

let audioManager = MobileAds.audioSessionManager()

SDK 8

rating.rating = 4.5

let audioManager = YandexAds.audioSessionManager

SDK 7

[rating setRating:4.5];
CGFloat value = [rating rating];

YMAAudioSessionManager *audioManager = [YMAMobileAds audioSessionManager];

SDK 8

rating.rating = 4.5;

YMAAudioSessionManager *audioManager = YMAYandexAds.audioSessionManager;

Изменения в API медиационных сетей

1. Изменения в AdapterIdentity для медиационных адаптеров

  • Добавлен новый механизм идентификации медиационных адаптеров через AdapterIdentity.
  • Параметр mediationNetworkName больше не используется.
  • Идентификация адаптера задается глобально через YandexAds.setAdapterIdentity(_:) перед инициализацией SDK.

Класс

Параметр

Статус

BidderTokenLoader

BidderTokenLoader(mediationNetworkName:)

Заменен на BidderTokenLoader()

YandexAds

MobileAds.initialize()

Заменен на YandexAds.setAdapterIdentity(_:) + YandexAds.initializeSDK()

AdapterIdentity

AdapterIdentity(
  adapterNetworkName:adapterVersion:adapterNetworkVersion:)

Добавлен

Примеры

SDK 7

let tokenLoader = BidderTokenLoader(mediationNetworkName: "AdMob")
let config = BidderTokenRequestConfiguration(adType: .interstitial)
tokenLoader.loadBidderToken(requestConfiguration: config) { ... }

MobileAds.initialize()

SDK 8

let tokenLoader = BidderTokenLoader()
let request = BidderTokenRequest.interstitial()
tokenLoader.loadBidderToken(request: request) { ... }

let adapterIdentity = AdapterIdentity(
    adapterNetworkName: "AdMob",
    adapterVersion: "1.0.0",
    adapterNetworkVersion: "23.5.0"
)
YandexAds.setAdapterIdentity(adapterIdentity)
YandexAds.initializeSDK()

SDK 7

YMABidderTokenLoader *tokenLoader =
    [[YMABidderTokenLoader alloc] initWithMediationNetworkName:@"AdMob"];
YMABidderTokenRequestConfiguration *config =
    [[YMABidderTokenRequestConfiguration alloc] initWithAdType:YMAAdTypeInterstitial];
[tokenLoader loadBidderTokenWithRequestConfiguration:config
                                 completionHandler:^(NSString *token) { ... }];

[YMAMobileAds initialize];

SDK 8

YMABidderTokenLoader *tokenLoader = [[YMABidderTokenLoader alloc] init];
YMABidderTokenRequest *request = [YMABidderTokenRequest interstitial];
[tokenLoader loadBidderTokenWithRequest:request
                      completionHandler:^(NSString *token) { ... }];

YMAAdapterIdentity *identity =
    [[YMAAdapterIdentity alloc] initWithAdapterNetworkName:@"AdMob"
                                           adapterVersion:@"1.0.0"
                                    adapterNetworkVersion:@"23.5.0"];
[YMAYandexAds setAdapterIdentity:identity];
[YMAYandexAds initializeSDK];

2. Изменения в BidderTokenRequest

  • Класс BidderTokenRequestConfiguration переименован в BidderTokenRequest.
  • Инициализатор и публичные свойства (targetInfo, bannerAdSize, parameters) перенесены в параметры фабричных методов.

Класс

Статус

BidderTokenRequestConfiguration

Переименован в BidderTokenRequest

Класс

Свойство

Статус

BidderTokenRequestConfiguration

init(adType: .banner) + .bannerAdSize

Заменено на

BidderTokenRequest.banner(
  size:targeting:parameters:)

BidderTokenRequestConfiguration

init(adType: .interstitial) + .targetInfo

Заменено на

BidderTokenRequest.interstitial(
  targeting:parameters:)

BidderTokenRequestConfiguration

init(adType: .rewarded) + .targetInfo

Заменено на

BidderTokenRequest.rewarded(
  targeting:parameters:)

BidderTokenRequestConfiguration

init(adType: .native) + .targetInfo

Заменено на

BidderTokenRequest.native(
  targeting:parameters:)

BidderTokenRequestConfiguration

init(adType: .appOpenAd) + .targetInfo

Заменено на

BidderTokenRequest.appOpenAd(
  targeting:parameters:)

BidderTokenLoader

loadBidderToken(
  requestConfiguration:completionHandler:)

Переименовано в

loadBidderToken(
  request:completionHandler:)

Применимо к: Адаптеры медиации, использующие BidderTokenLoader.

Примеры

SDK 7

let config = BidderTokenRequestConfiguration(adType: .banner)
config.bannerAdSize = adSize
config.targetInfo = adTargetInfo
tokenLoader.loadBidderToken(requestConfiguration: config) { ... }

SDK 8

let targeting = AdTargeting()
let request = BidderTokenRequest.banner(
    size: adSize,
    targeting: targeting,
    parameters: ["key": "value"]
)
tokenLoader.loadBidderToken(request: request) { ... }

// Other ad types:
let interstitialRequest = BidderTokenRequest.interstitial()
let rewardedRequest = BidderTokenRequest.rewarded()
let nativeRequest = BidderTokenRequest.native()
let appOpenRequest = BidderTokenRequest.appOpenAd()

SDK 7

YMABidderTokenRequestConfiguration *config =
    [[YMABidderTokenRequestConfiguration alloc] initWithAdType:YMAAdTypeBanner];
config.bannerAdSize = adSize;
config.targetInfo = adTargetInfo;
[tokenLoader loadBidderTokenWithRequestConfiguration:config
                                 completionHandler:^(NSString *token) { ... }];

SDK 8

YMAAdTargeting *targeting = [[YMAAdTargeting alloc] initWithAge:nil
                                                         gender:nil
                                                       location:nil
                                                   contextQuery:nil
                                                    contextTags:nil];
YMABidderTokenRequest *request = [YMABidderTokenRequest bannerWithSize:adSize
                                                               targeting:targeting
                                                             parameters:@{@"key": @"value"}];
[tokenLoader loadBidderTokenWithRequest:request
                      completionHandler:^(NSString *token) { ... }];

// Other ad types:
YMABidderTokenRequest *interstitialRequest = [YMABidderTokenRequest interstitial];
YMABidderTokenRequest *rewardedRequest = [YMABidderTokenRequest rewarded];
YMABidderTokenRequest *nativeRequest = [YMABidderTokenRequest native];
YMABidderTokenRequest *appOpenRequest = [YMABidderTokenRequest appOpenAd];

SwiftUI интеграция

Поддержана интеграция через SwiftUI. См. раздел SwiftUI в конце меню документации iOS:

Миграция с помощью AI-инструментов

Для упрощения процесса миграции с SDK 7.x на 8.x вы можете использовать AI-ассистентов с готовым скиллом миграции.

Как использовать

  1. Загрузите скилл

    Скилл для миграции доступен в GitHub Yandex Ads SDK iOS.

    • Для Claude Desktop

      Cкопируйте папку скилла в директорию skills вашего агента, например:

      cp -r Skills/migrate-yandex-ads-sdk-from-7-to-8 .claude/skills/
      
    • Для Cursor IDE

      Cкопируйте папку скилла в ваш проект и используйте ссылку на файл SKILL.md через @, например:

      @migrate-yandex-ads-sdk-from-7-to-8/SKILL.md
      
    • Альтернативный способ

      Cкопируйте содержимое SKILL.md и всех связанных файлов в диалог с AI-ассистентом (однако это может превысить лимиты сообщения).

  2. Используйте промпт

    После загрузки скилла используйте следующий промпт в диалоге с AI-ассистентом:

    Мигрируй мой проект с Yandex Mobile Ads SDK 7.x на 8.x
    

Всегда тщательно проверяйте изменения, сгенерированные AI.

Хотя скиллы помогают AI-ассистентам корректно выполнять задачи, вы должны лично проверять и верифицировать все изменения, внесенные агентом. AI-ассистенты могут допускать ошибки, поэтому ручная проверка кода необходима.

SKAdNetwork

Актуализирован список идентификаторов SKAdNetwork и добавлены инструменты для автоматизации его обновления. Подробнее о способах внедрения и использовании см. в разделе SKAdNetwork.

Требования

  • Xcode: 26.0 и выше
  • AppMetricaCore: 6.0.0 и выше
  • AppMetricaLibraryAdapter: 6.0.0 и выше
  • AppMetricaAdSupport: 6.0.0 и выше
  • AppMetricaIDSync: 6.0.0 и выше
Предыдущая