迁移至版本 8 的指南

一般变更

已将 MobileAds 类重命名为 YandexAds

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

SDK 7

SDK 8

MobileAds.setLocationConsent(bool)

YandexAds.setLocationTracking(bool)

MobileAds.setAgeRestrictedUser(bool)

YandexAds.setAgeRestricted(bool)

广告请求

移除了 AdRequestConfiguration 类。 改用 AdRequest,它现在提供 adUnitId

定位字段(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 回调事件。

上一篇
下一篇