loadBannerAd method

Future<BannerAd?> loadBannerAd({
  1. AdSize size = AdSize.banner,
  2. Map<String, String>? extras,
  3. VoidCallback? onLoadSuccess,
  4. dynamic onLoadFailed(
    1. String
    )?,
  5. VoidCallback? onAdOpened,
  6. VoidCallback? onAdClosed,
})

加载Banner广告 @throws 该方法会抛出异常,请使用try-catch捕获 @param size 广告大小,默认值为AdSize.banner @param extras 额外参数,默认值为null, 例如{"collapsible": "top"} @param onLoadSuccess 广告加载成功回调,默认值为null @param onLoadFailed 广告加载失败回调,默认值为null @param onAdOpened 广告展开回调,默认值为null @param onAdClosed 广告关闭回调,默认值为null

Implementation

Future<BannerAd?> loadBannerAd({
  AdSize size = AdSize.banner,
  Map<String, String>? extras,
  VoidCallback? onLoadSuccess,
  Function(String)? onLoadFailed,
  VoidCallback? onAdOpened,
  VoidCallback? onAdClosed,
}) async {
  try {
    if (_initializationStatus != AdapterInitializationState.ready) {
      onLoadFailed?.call('广告SDK未初始化');
      return null;
    }

    var canRequestAds = await _authorizationManager.canRequestAds();
    if (!canRequestAds) {
      return null;
    }

    if (_bannerAdUnitId.isEmpty) {
      debugPrint('广告单元ID为空');
      throw Exception('广告单元ID为空');
    }

    final adRequest = AdRequest(extras: extras);

    final bannerAd = BannerAd(
      adUnitId: _bannerAdUnitId,
      size: size,
      request: adRequest,
      listener: BannerAdListener(
        onAdLoaded: (ad) {
          debugPrint('Banner广告加载成功');
          onLoadSuccess?.call();
        },
        onAdFailedToLoad: (ad, error) {
          debugPrint('Banner广告加载失败: ${error.message}');
          ad.dispose();
          onLoadFailed?.call(error.message);
        },
        onAdOpened: (ad) {
          debugPrint('Banner广告展开');
          onAdOpened?.call();
        },
        onAdClosed: (ad) {
          debugPrint('Banner广告被关闭');
          onAdClosed?.call();
        },
      ),
    );

    await bannerAd.load();
    return bannerAd;
  } catch (e) {
    debugPrint('加载Banner广告失败: $e');
    return null;
  }
}