Я использую 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 для каждого рекламного баннера, это работает без проблем, но это заставляет меня чувствовать себя странно, я чувствую, что это что-то не так, к тому же деньги слишком малы, чем должны быть, я думаю, что это может быть не лучшее решение, используя такое
Использование одного и того же идентификатора баннера на разных экранах не является проблемой. При желании вы можете создать еще один баннер и загружать разные идентификаторы баннеров на разные экраны. Наличие нескольких баннеров дает вам больше возможностей для аналитики. Однако если вы используете один и тот же баннер несколько раз на одном экране, вы можете получить сообщение об ошибке.
спасибо за ответ, поэтому я переключусь на другие идентификаторы баннерных рекламных блоков, насколько я понимаю, это лучший вариант и лучшая аналитика :) спасибо! (Я использую их все на разных экранах)