版本 8 迁移指南

通用变更

MobileAds 类已重命名为 YandexAds

以下属性和方法已重命名:

SDK 7

SDK 8

MobileAds.setLocationConsent(bool)

YandexAds.setLocationTracking(bool)

MobileAds.setAgeRestrictedUser(bool)

YandexAds.setAgeRestricted(bool)

广告请求

已移除 AdRequestConfiguration 类。请改用包含 adUnitIdAdRequest

定向字段(agecontextQuerycontextTagsgenderlocation)已从 AdRequest 移至新的 AdTargeting 类。

广告请求

SDK 7

final adRequestConfiguration = AdRequestConfiguration(
  adUnitId: 'your-ad-unit-id',
  age: 25,
  contextQuery: 'query',
  parameters: {'key': 'value'},
);

await adLoader.loadAd(
  adRequestConfiguration: adRequestConfiguration,
);

SDK 8

final adRequest = AdRequest(
  adUnitId: 'your-ad-unit-id',
  targeting: AdTargeting(
    age: 25,
    contextQuery: 'query',
  ),
  parameters: {'key': 'value'},
);

final ad = await adLoader.loadAd(adRequest: adRequest);

全屏广告(插屏、激励、开屏)

创建和加载全屏广告的方式已更改。加载器构造函数现为同步,loadAdFuture 直接返回已加载的广告。

已移除 InterstitialAdLoadListenerRewardedAdLoadListenerAppOpenAdLoadListener 类。

广告加载

SDK 7

使用回调的异步创建:

late final Future<InterstitialAdLoader> _adLoader =
      _createInterstitialAdLoader();
InterstitialAd? _ad;

Future<InterstitialAdLoader> _createInterstitialAdLoader() {
  return InterstitialAdLoader.create(
    onAdLoaded: (InterstitialAd interstitialAd) {
      // 广告加载成功,现在可以展示
      _ad = interstitialAd;
    },
    onAdFailedToLoad: (error) {
      // 因 AdRequestError 加载失败。
      // 强烈不建议在 onAdFailedToLoad() 中再次发起加载。
    },
  );
}

Future<void> _loadInterstitialAd() async {
  final adLoader = await _adLoader;
  await adLoader.loadAd(adRequestConfiguration: AdRequestConfiguration(adUnitId: 'your-ad-unit-id'));
}

SDK 8

同步创建,loadAd 返回已加载的广告或抛出 AdRequestError

final _adLoader = InterstitialAdLoader();
InterstitialAd? _ad;

Future<void> _loadInterstitialAd() async {
  try {
    _ad = await _adLoader.loadAd(
      adRequest: AdRequest(adUnitId: 'your-ad-unit-id'),
    );
  } on AdRequestError catch (error) {
    // 因 AdRequestError 加载失败。
    // 强烈不建议在错误处理中再次发起加载。
  }
}

RewardedAdLoaderAppOpenAdLoader 适用相同变更。

横幅

创建和加载横幅广告的方式已更改。横幅构造函数不再接受 adRequest 或回调;现在通过 load(AdRequest) 显式加载。广告状态与事件通过流传递。

横幅创建与加载

SDK 7

BannerAd? _banner;

void _createBanner() {
  _banner = BannerAd(
    adSize: BannerAdSize.stickySize(width),
    adRequest: AdRequest(),
    onAdLoaded: () {
      // 广告已加载
    },
    onAdFailedToLoad: (error) {
      // 广告加载失败
    },
    onAdClicked: () {},
    onImpression: (data) {},
  );
}

SDK 8

BannerAd? _banner;

void _createBanner() {
  final banner = BannerAd(adSize: BannerAdSize.stickySize(width));

  banner.loadStateStream.listen((state) {
    if (state is BannerAdLoadStateLoaded) {
      // 广告已加载
    } else if (state is BannerAdLoadStateError) {
      // 广告加载失败
    }
  });

  banner.events.listen((event) {
    if (event is BannerAdClickedEvent) {
      // 广告被点击
    } else if (event is BannerAdImpressionEvent) {
      // 展示
    }
  });

  banner.load(AdRequest(adUnitId: 'your-ad-unit-id'));
  _banner = banner;
}

销毁横幅

SDK 7

_banner?.destroy();

SDK 8

await _banner?.destroy();

广告信息

AdInfo 类已重构。已移除 adSize 字段,新增 creativesextraDatapartnerText 字段。

SDK 7

SDK 8

AdInfo.adSize

已移除

AdInfo.creativesList<Creative>

AdInfo.extraDataString?

AdInfo.partnerTextString?

已移除的事件

已移除回调事件 onLeftApplicationonReturnedToApplicationonAdClose