Проблема с несколькими рекламными баннерами в приложении Flutter

Я использую Flutter и рекламные баннеры в своем приложении, но только сейчас понял, что сделал интеграцию рекламы таким образом (я использую Google Admob).

Итак, мой вопрос: «Я использую один и тот же баннерAdUnitId для каждого рекламного баннера, это нормально или мне нужно использовать разные баннерные идентификаторы для каждого рекламного баннера в моем приложении?»

class AdManager {
  static final AdManager _instance = AdManager._internal();
  static AdManager get instance => _instance;

  AdManager._internal();

  BannerAd? normalModeBannerAd;
  BannerAd? categoriesAd;

final bannerAdUnitId =
      Platform.isAndroid ? AppSettings.androidBannerAdId : AppSettings.iosBannerAdId;

Future<void> loadCategoriesAd() async {
    bool result = await TrackingPermissionHandler.instance.checkTrackingPermission();
    if (result) {
      if (kDebugMode) {
        print('Tracking permission granted.');
      }

      categoriesAd = BannerAd(
        adUnitId: bannerAdUnitId,
        size: AdSize.banner,
        request: const AdRequest(nonPersonalizedAds: false),
        listener: BannerAdListener(
          // Called when an ad is successfully received.
          onAdLoaded: (Ad ad) {
            debugPrint('$BannerAd loaded.');
          },
          // Called when an ad request failed.
          onAdFailedToLoad: (Ad ad, LoadAdError error) {
            debugPrint('$BannerAd failedToLoad: $error');
            ad.dispose();
          },
          // Called when an ad opens an overlay that covers the screen.
          onAdOpened: (Ad ad) => debugPrint('$BannerAd onAdOpened.'),
          // Called when an ad removes an overlay that covers the screen.
          onAdClosed: (Ad ad) => debugPrint('$BannerAd onAdClosed.'),
          // Called when an ad is in the process of leaving the application.
        ),
      );

      categoriesAd?.load();
    } else {
      if (kDebugMode) {
        print('Tracking permission is not granted.');
      }
      categoriesAd = BannerAd(
        adUnitId: bannerAdUnitId,
        size: AdSize.banner,
        request: const AdRequest(nonPersonalizedAds: true),
        listener: BannerAdListener(
          // Called when an ad is successfully received.
          onAdLoaded: (Ad ad) {
            debugPrint('$BannerAd loaded.');
          },
          // Called when an ad request failed.
          onAdFailedToLoad: (Ad ad, LoadAdError error) {
            debugPrint('$BannerAd failedToLoad: $error');
            ad.dispose();
          },
          // Called when an ad opens an overlay that covers the screen.
          onAdOpened: (Ad ad) => debugPrint('$BannerAd onAdOpened.'),
          // Called when an ad removes an overlay that covers the screen.
          onAdClosed: (Ad ad) => debugPrint('$BannerAd onAdClosed.'),
          // Called when an ad is in the process of leaving the application.
        ),
      );

      categoriesAd?.load();
    }
  }

  Future<void> loadNormalModeBannerAd() async {
    bool result = await TrackingPermissionHandler.instance.checkTrackingPermission();
    if (result) {
      if (kDebugMode) {
        print('Tracking permission granted.');
      }

      // Dispose existing ad if it exists
      await disposeNormalModeBannerAd();

      normalModeBannerAd = BannerAd(
        adUnitId: bannerAdUnitId,
        size: AdSize.banner,
        request: const AdRequest(nonPersonalizedAds: false),
        listener: BannerAdListener(
          // Called when an ad is successfully received.
          onAdLoaded: (Ad ad) {
            debugPrint('$BannerAd loaded.');
          },
          // Called when an ad request failed.
          onAdFailedToLoad: (Ad ad, LoadAdError error) {
            debugPrint('$BannerAd failedToLoad: $error');
            ad.dispose();
          },
          // Called when an ad opens an overlay that covers the screen.
          onAdOpened: (Ad ad) => debugPrint('$BannerAd onAdOpened.'),
          // Called when an ad removes an overlay that covers the screen.
          onAdClosed: (Ad ad) => debugPrint('$BannerAd onAdClosed.'),
          // Called when an ad is in the process of leaving the application.
        ),
      );

      normalModeBannerAd?.load();
    } else {
      if (kDebugMode) {
        print('Tracking permission is not granted.');
      }

      // Dispose existing ad if it exists
      await disposeNormalModeBannerAd();

      normalModeBannerAd = BannerAd(
        adUnitId: bannerAdUnitId,
        size: AdSize.banner,
        request: const AdRequest(nonPersonalizedAds: true),
        listener: BannerAdListener(
          // Called when an ad is successfully received.
          onAdLoaded: (Ad ad) {
            debugPrint('$BannerAd loaded.');
          },
          // Called when an ad request failed.
          onAdFailedToLoad: (Ad ad, LoadAdError error) {
            debugPrint('$BannerAd failedToLoad: $error');
            ad.dispose();
          },
          // Called when an ad opens an overlay that covers the screen.
          onAdOpened: (Ad ad) => debugPrint('$BannerAd onAdOpened.'),
          // Called when an ad removes an overlay that covers the screen.
          onAdClosed: (Ad ad) => debugPrint('$BannerAd onAdClosed.'),
          // Called when an ad is in the process of leaving the application.
        ),
      );

      normalModeBannerAd?.load();
    }
  }
}

Я использую один и тот же баннерAdUnitId для каждого рекламного баннера, это работает без проблем, но это заставляет меня чувствовать себя странно, я чувствую, что это что-то не так, к тому же деньги слишком малы, чем должны быть, я думаю, что это может быть не лучшее решение, используя такое

0
0
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Использование одного и того же идентификатора баннера на разных экранах не является проблемой. При желании вы можете создать еще один баннер и загружать разные идентификаторы баннеров на разные экраны. Наличие нескольких баннеров дает вам больше возможностей для аналитики. Однако если вы используете один и тот же баннер несколько раз на одном экране, вы можете получить сообщение об ошибке.

спасибо за ответ, поэтому я переключусь на другие идентификаторы баннерных рекламных блоков, насколько я понимаю, это лучший вариант и лучшая аналитика :) спасибо! (Я использую их все на разных экранах)

Xenomy 22.03.2024 14:52

Другие вопросы по теме