تبلیغات بنری یک نقطه را در طرحبندی برنامه اشغال میکنند، چه در بالا یا پایین صفحه دستگاه. They stay on screen while users are interacting with the app, and can refresh automatically after a certain period of time.
این راهنما شما را با تبلیغات بنری تطبیقی لنگر شروع می کند. Anchored adaptive banners optimizes the ad size for each device using an ad width you specify.
Anchored adaptive banner ads are fixed aspect ratio ads rather than fixed size ads. نسبت تصویر مشابه 320x50 است. Once you specify the full width available, the Google Mobile Ads SDK returns an ad with optimal height for that width. ارتفاع بهینه برای تبلیغ در درخواستهای مختلف آگهی ثابت میماند و محتوای اطراف آگهی در زمان تازهسازی آگهی در جای خود باقی میماند.
همیشه با تبلیغات آزمایشی تست کنید
هنگام ساخت و آزمایش برنامه های خود، مطمئن شوید که از تبلیغات آزمایشی به جای تبلیغات زنده و تولیدی استفاده می کنید. عدم انجام این کار می تواند منجر به تعلیق حساب شما شود.
The easiest way to load test ads is to use our dedicated test ad unit ID for banners:
اندروید
ca-app-pub-3940256099942544/9214589741
iOS
ca-app-pub-3940256099942544/2435281174
واحدهای آگهی آزمایشی به گونهای پیکربندی شدهاند که برای هر درخواستی، آگهیهای آزمایشی را برگردانند، و شما میتوانید هنگام کدنویسی، آزمایش و اشکالزدایی از آنها در برنامههای خود استفاده کنید. Just make sure you replace them with your own ad unit IDs before publishing your app.
اندازه آگهی را دریافت کنید
To request a banner ad with the correct ad size, follow these steps:
با استفاده از
MediaQuery.of(context)
عرض صفحهنمایش دستگاه را بر حسب پیکسلهای مستقل از چگالی (dp) دریافت کنید. If you don't want to use the full screen width, you can set your own width.Use the appropriate static method on the
AdSize
class to get anAdSize
object. For example, useAdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(int width)
to get the ad size for the current orientation.
// Get an AnchoredAdaptiveBannerAdSize before loading the ad.
final size = await AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(
MediaQuery.sizeOf(context).width.truncate());
یک تبلیغ را بارگیری کنید
مثال زیر یک بنر تبلیغاتی را نشان می دهد:
class BannerExampleState extends State<BannerExample>{
BannerAd? _bannerAd;
bool _isLoaded = false;
// TODO: replace this test ad unit with your own ad unit.
final adUnitId = Platform.isAndroid
? 'ca-app-pub-3940256099942544/9214589741'
: 'ca-app-pub-3940256099942544/2435281174';
/// Loads a banner ad.
void loadAd() async {
// Get an AnchoredAdaptiveBannerAdSize before loading the ad.
final size = await AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(
MediaQuery.sizeOf(context).width.truncate());
_bannerAd = BannerAd(
adUnitId: adUnitId,
request: const AdRequest(),
size: size,
listener: BannerAdListener(
// Called when an ad is successfully received.
onAdLoaded: (ad) {
debugPrint('$ad loaded.');
setState(() {
_isLoaded = true;
});
},
// Called when an ad request failed.
onAdFailedToLoad: (ad, err) {
debugPrint('BannerAd failed to load: $error');
// Dispose the ad here to free resources.
ad.dispose();
},
),
)..load();
}
}
رویدادهای تبلیغاتی بنری
Through the use of BannerAdListener
, you can listen for lifecycle events, such as when an ad is loaded. این مثال هر روش را پیاده سازی می کند و یک پیام را به کنسول ثبت می کند:
class BannerExampleState extends State<BannerExample> {
BannerAd? _bannerAd;
bool _isLoaded = false;
// TODO: replace this test ad unit with your own ad unit.
final adUnitId = Platform.isAndroid
? 'ca-app-pub-3940256099942544/9214589741'
: 'ca-app-pub-3940256099942544/2435281174';
/// Loads a banner ad.
void loadAd() async {
// Get an AnchoredAdaptiveBannerAdSize before loading the ad.
final size = await AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(
MediaQuery.sizeOf(context).width.truncate());
_bannerAd = BannerAd(
adUnitId: adUnitId,
request: const AdRequest(),
size: size,
listener: BannerAdListener(
// Called when an ad is successfully received.
onAdLoaded: (ad) {
debugPrint('$ad loaded.');
setState(() {
_isLoaded = true;
});
},
// Called when an ad request failed.
onAdFailedToLoad: (ad, err) {
debugPrint('BannerAd failed to load: $error');
// Dispose the ad here to free resources.
ad.dispose();
},
// Called when an ad opens an overlay that covers the screen.
onAdOpened: (Ad ad) {},
// Called when an ad removes an overlay that covers the screen.
onAdClosed: (Ad ad) {},
// Called when an impression occurs on the ad.
onAdImpression: (Ad ad) {},
),
)..load();
}
}
یک آگهی را تازه کنید
If you configured your ad unit to refresh, you don't need to request another ad when the ad fails to load. Google Mobile Ads SDK به نرخ تازهسازی که در رابط کاربری AdMob مشخص کردهاید احترام میگذارد. If you haven't enabled refresh, issue a new request. For more details on ad unit refresh, such as setting a refresh rate, see Use automatic refresh for Banner ads .
نمایش یک بنر تبلیغاتی
To display a BannerAd
as a widget, you must instantiate an AdWidget
with a supported ad after calling load()
. شما می توانید قبل از فراخوانی load()
ویجت را ایجاد کنید، اما load()
باید قبل از افزودن آن به درخت ویجت فراخوانی شود.
AdWidget
از کلاس Flutter's Widget به ارث می رسد و می تواند مانند هر ویجت دیگری استفاده شود. در iOS، مطمئن شوید که ویجت را در یک ویجت با عرض و ارتفاع مشخص قرار داده اید. در غیر این صورت ممکن است تبلیغ شما نمایش داده نشود. یک BannerAd
می توان در ظرفی با اندازه ای قرار داد که با آگهی مطابقت دارد:
if (_bannerAd != null) {
Align(
alignment: Alignment.bottomCenter,
child: SafeArea(
child: SizedBox(
width: _bannerAd!.size.width.toDouble(),
height: _bannerAd!.size.height.toDouble(),
child: AdWidget(ad: _bannerAd!),
),
),
)
}
یک آگهی زمانی که دیگر نیازی به دسترسی به آن نیست باید حذف شود. بهترین روش برای زمان فراخوانی dispose()
پس از حذف AdWidget
از درخت ویجت یا در BannerAdListener.onAdFailedToLoad()
است.
همین! اکنون برنامه شما برای نمایش تبلیغات بنری آماده است.
محدودیت پیمایش در اندروید 9 و پایین تر
میدانیم که برخی از دستگاههای قدیمیتر یا کمتوانتر دارای Android 9 یا جدیدتر ممکن است هنگام نمایش تبلیغات بنر درونخط در نماهای پیمایشی ، عملکردی کمتر از حد مطلوب داشته باشند. توصیه می کنیم فقط از این نوع بنرها در اندروید 10 یا جدیدتر استفاده کنید. بنرهای موقعیت ثابت مانند بنرهای لنگردار تحت تأثیر قرار نمی گیرند و می توانند با عملکرد مطلوب در تمام سطوح API Android استفاده شوند.
مثال کامل در GitHub
نمونه کاملی از ادغام بنر پوشش داده شده در این صفحه را در banner_example ببینید.
با سایر انواع بنر آشنا شوید
با انواع دیگر بنرهای تعریف شده در این قسمت برای اپلیکیشن فلاتر خود آشنا شوید.
بنرهای تطبیقی درون خطی
بنرهای تطبیقی درون خطی دارای ارتفاع متغیر هستند و در مقایسه با بنرهای تطبیقی لنگردار، بنرهای بزرگتر و بلندتری هستند. بنرهای تطبیقی درون خطی برای برنامههایی که آگهیهای بنر را در محتوای قابل پیمایش قرار میدهند، بیش از بنرهای تطبیقی لنگردار توصیه میشوند. برای جزئیات بیشتر، بنرهای تطبیقی درون خطی را ببینید.
بنرهای جمع شونده
بنرهای جمعشونده، بنریهایی هستند که در ابتدا به صورت یک پوشش بزرگتر ارائه میشوند و دکمهای برای جمع کردن آگهی به اندازه کوچکتر وجود دارد. از این بنر برای بهینه سازی بیشتر عملکرد خود استفاده کنید. برای جزئیات بیشتر، بنرهای تاشو را ببینید.