بنرهای تطبیقی نسل بعدی تبلیغات ریسپانسیو هستند که با بهینه سازی اندازه تبلیغات برای هر دستگاه، عملکرد را به حداکثر میرسانند. بنرهای تطبیقی با بهبود بنرهای با اندازه ثابت، که فقط از ارتفاع ثابت پشتیبانی میکنند، به توسعهدهندگان اجازه میدهند تا عرض آگهی را مشخص کنند و از آن برای تعیین اندازه بهینه آگهی استفاده کنند.
برای انتخاب بهترین اندازه تبلیغات، بنرهای تطبیقی درون خطی از حداکثر به جای ارتفاع ثابت استفاده می کنند. این منجر به فرصت هایی برای بهبود عملکرد می شود.
زمان استفاده از بنرهای تطبیقی درون خطی
بنرهای تطبیقی درون خطی در مقایسه با بنرهای تطبیقی لنگردار، بنرهای بزرگتر و بلندتری هستند. ارتفاع آنها متغیر است و می توانند به اندازه صفحه نمایش دستگاه باشند.
آنها در نظر گرفته شده اند که در محتوای پیمایش قرار گیرند، به عنوان مثال:
هنگام اجرای بنرهای تطبیقی در برنامه خود، به این نکات توجه کنید:
مطمئن شوید که از آخرین نسخه Google Mobile Ads SDK و در صورت استفاده از واسطه، از آخرین نسخه آداپتورهای میانجی خود استفاده میکنید.
اندازههای بنر تطبیقی درون خطی طوری طراحی شدهاند که هنگام استفاده از عرض کامل موجود، بهترین عملکرد را داشته باشند. در بیشتر موارد، این عرض تمام صفحه نمایش دستگاه در حال استفاده خواهد بود. حتماً مناطق امن قابل اجرا را در نظر بگیرید.
ممکن است برای کار با اندازههای تطبیقی نیاز به بهروزرسانی یا ایجاد موارد خط جدید داشته باشید. بیشتر بدانید .
AdSize.getInlineAdaptiveBannerAdSize(int width, int maxHeight)
هنگام استفاده از APIهای بنر تطبیقی درون خطی، Google Mobile Ads SDK یک AdSize با عرض داده شده و یک پرچم درون خطی برمی گرداند. بسته به اینکه از کدام API استفاده می کنید، ارتفاع صفر یا maxHeight است. ارتفاع واقعی آگهی پس از بازگشت در دسترس قرار می گیرد.
یک بنر تطبیقی درون خطی برای قرار دادن در محتوای قابل پیمایش طراحی شده است. بسته به API، بنر می تواند به اندازه صفحه نمایش دستگاه باشد یا با حداکثر ارتفاع محدود شود.
پیاده سازی
برای پیاده سازی یک بنر تطبیقی ساده، مراحل زیر را دنبال کنید.
اندازه تبلیغات بنر تطبیقی درون خطی دریافت کنید. اندازه ای که دریافت می کنید برای درخواست بنر تطبیقی استفاده می شود. برای دریافت اندازه آگهی تطبیقی مطمئن شوید که:
عرض دستگاه مورد استفاده را در پیکسلهای مستقل از چگالی دریافت کنید، یا اگر نمیخواهید از عرض کامل صفحه استفاده کنید، عرض خود را تنظیم کنید. می توانید از MediaQuery.of(context) برای بدست آوردن عرض صفحه استفاده کنید.
از روشهای استاتیک مناسب در کلاس اندازه آگهی، مانند AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(int width) استفاده کنید تا یک شی AdSize تطبیقی درون خطی برای جهتگیری فعلی دریافت کنید.
اگر میخواهید ارتفاع بنر را محدود کنید، میتوانید از روش استاتیک AdSize.getInlineAdaptiveBannerAdSize(int width, int maxHeight) استفاده کنید.
یک شی AdManagerBannerAd با شناسه واحد تبلیغات، اندازه آگهی تطبیقی و یک شی درخواست آگهی ایجاد کنید.
آگهی را بارگیری کنید
در پاسخ به تماس onAdLoaded ، از AdManagerBannerAd.getPlatformAdSize() برای دریافت اندازه آگهی پلت فرم به روز شده و به روز رسانی ارتفاع ظرف AdWidget استفاده کنید.
نمونه کد
در اینجا یک ویجت مثال آورده شده است که یک بنر تطبیقی درون خطی را برای تناسب با عرض صفحه بارگیری میکند و درجها را محاسبه میکند:
import'package:flutter/material.dart';import'package:google_mobile_ads/google_mobile_ads.dart';/// This example demonstrates inline adaptive banner ads.////// Loads and shows an inline adaptive banner ad in a scrolling view,/// and reloads the ad when the orientation changes.classInlineAdaptiveExampleextendsStatefulWidget{@override_InlineAdaptiveExampleStatecreateState()=>_InlineAdaptiveExampleState();}class_InlineAdaptiveExampleStateextendsState<InlineAdaptiveExample>{staticconst_insets=16.0;AdManagerBannerAd?_inlineAdaptiveAd;bool_isLoaded=false;AdSize?_adSize;lateOrientation_currentOrientation;doubleget_adWidth=>MediaQuery.of(context).size.width-(2*_insets);@overridevoiddidChangeDependencies(){super.didChangeDependencies();_currentOrientation=MediaQuery.of(context).orientation;_loadAd();}void_loadAd()async{await_inlineAdaptiveAd?.dispose();setState((){_inlineAdaptiveAd=null;_isLoaded=false;});// Get an inline adaptive size for the current orientation.AdSizesize=AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(_adWidth.truncate());_inlineAdaptiveAd=AdManagerBannerAd(// TODO: replace with your own ad unit.adUnitId:'/21775744923/example/adaptive-banner',size:size,request:AdManagerAdRequest(),listener:AdManagerBannerAdListener(onAdLoaded:(Adad)async{print('Inline adaptive banner loaded: ${ad.responseInfo}');// After the ad is loaded, get the platform ad size and use it to// update the height of the container. This is necessary because the// height can change after the ad is loaded.AdManagerBannerAdbannerAd=(adasAdManagerBannerAd);finalAdSize?size=awaitbannerAd.getPlatformAdSize();if(size==null){print('Error: getPlatformAdSize() returned null for $bannerAd');return;}setState((){_inlineAdaptiveAd=bannerAd;_isLoaded=true;_adSize=size;});},onAdFailedToLoad:(Adad,LoadAdErrorerror){print('Inline adaptive banner failedToLoad: $error');ad.dispose();},),);await_inlineAdaptiveAd!.load();}/// Gets a widget containing the ad, if one is loaded.////// Returns an empty container if no ad is loaded, or the orientation/// has changed. Also loads a new ad if the orientation changes.Widget_getAdWidget(){returnOrientationBuilder(builder:(context,orientation){if(_currentOrientation==orientation&&
_inlineAdaptiveAd!=null&&
_isLoaded&&
_adSize!=null){returnAlign(child:Container(width:_adWidth,height:_adSize!.height.toDouble(),child:AdWidget(ad:_inlineAdaptiveAd!,),));}// Reload the ad if the orientation changes.if(_currentOrientation!=orientation){_currentOrientation=orientation;_loadAd();}returnContainer();},);}@overrideWidgetbuild(BuildContextcontext)=>Scaffold(appBar:AppBar(title:Text('Inline adaptive banner example'),),body:Center(child:Padding(padding:constEdgeInsets.symmetric(horizontal:_insets),child:ListView.separated(itemCount:20,separatorBuilder:(BuildContextcontext,intindex){returnContainer(height:40,);},itemBuilder:(BuildContextcontext,intindex){if(index==10){return_getAdWidget();}returnText('Placeholder text',style:TextStyle(fontSize:24),);},),),));@overridevoiddispose(){super.dispose();_inlineAdaptiveAd?.dispose();}}
تاریخ آخرین بهروزرسانی 2025-09-02 بهوقت ساعت هماهنگ جهانی.
[null,null,["تاریخ آخرین بهروزرسانی 2025-09-02 بهوقت ساعت هماهنگ جهانی."],[[["\u003cp\u003eInline adaptive banners are responsive ads that optimize size for each device, maximizing performance by using the full available width.\u003c/p\u003e\n"],["\u003cp\u003eThese banners are designed to be placed within scrolling content and can adjust their height to fit the screen or a specified maximum height.\u003c/p\u003e\n"],["\u003cp\u003eDevelopers need to specify the ad width, accounting for device width and safe areas, for optimal sizing.\u003c/p\u003e\n"],["\u003cp\u003eImplementation involves getting the adaptive ad size, creating an \u003ccode\u003eAdManagerBannerAd\u003c/code\u003e object, loading the ad, and updating the container height based on the loaded ad's size.\u003c/p\u003e\n"]]],[],null,["Select platform: [Android](/ad-manager/mobile-ads-sdk/android/banner/inline-adaptive \"View this page for the Android platform docs.\") [iOS](/ad-manager/mobile-ads-sdk/ios/banner/inline-adaptive \"View this page for the iOS platform docs.\") [Flutter](/ad-manager/mobile-ads-sdk/flutter/banner/inline-adaptive \"View this page for the Flutter platform docs.\")\n\n\u003cbr /\u003e\n\nAdaptive banners are the next generation of responsive ads, maximizing\nperformance by optimizing ad size for each device. Improving on fixed-size\nbanners, which only supported fixed heights, adaptive banners let developers\nspecify the ad-width and use this to determine the optimal ad size.\n\nTo pick the best ad size, inline adaptive banners use maximum instead of fixed\nheights. This results in opportunities for improved performance.\n\nWhen to use inline adaptive banners\n\nInline adaptive banners are larger, taller banners compared to anchored adaptive\nbanners. They are of variable height, and can be as tall as the device screen.\n\nThey are intended to be placed in scrolling content, for example:\n\nPrerequisites\n\n- Follow the instructions from the [Get Started guide](/ad-manager/mobile-ads-sdk/flutter/quick-start) on how to [Import the Mobile Ads Flutter plugin](/ad-manager/mobile-ads-sdk/flutter/quick-start#import_the_mobile_ads_sdk).\n\nBefore you begin **Important:** You must know the width of the view that the ad will be placed in, **and this should take into account the device width and any safe areas that are\n| applicable**.\n\nWhen implementing adaptive banners in your app, note these points:\n\n- Ensure you are using the latest version of the Google Mobile Ads SDK, and if\n using mediation, the latest versions of your mediation adapters.\n\n- The inline adaptive banner sizes are designed to work best when using the\n full available width. In most cases, this will be the full width of the\n screen of the device in use. Be sure to take into account applicable safe areas.\n\n- You may need to update or create new line items to work with adaptive sizes.\n [Learn more](https://support.google.com/admanager/answer/9464128).\n\n- The methods for getting the ad size are\n\n - `AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(int width)`\n - `AdSize.getLandscapeInlineAdaptiveBannerAdSize(int width)`\n - `AdSize.getPortraitInlineAdaptiveBannerAdSize(int width)`\n - `AdSize.getInlineAdaptiveBannerAdSize(int width, int maxHeight)`\n- When using the inline adaptive banner APIs, the Google Mobile Ads SDK\n returns an `AdSize` with the given width and an\n inline flag. The height is either zero or `maxHeight`, depending on which\n API you're using. The actual height of the ad is made available when it's\n returned.\n\n- An inline adaptive banner is designed to be placed in scrollable content. The\n banner can be as tall as the device screen or limited by a maximum height,\n depending on the API.\n\nImplementation\n\nFollow the steps below to implement a simple inline adaptive banner.\n\n1. **Get an inline adaptive banner ad size.** The size you get will be used to request the adaptive banner. To get the adaptive ad size make sure that you:\n 1. Get the width of the device in use in density independent pixels, or set your own width if you don't want to use the full width of the screen. You can use `MediaQuery.of(context)` to get the screen width.\n 2. Use the appropriate static methods on the ad size class, such as `AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(int width)` to get an inline adaptive `AdSize` object for the current orientation.\n 3. If you wish to limit the height of the banner, you can use the static method `AdSize.getInlineAdaptiveBannerAdSize(int width, int maxHeight)`.\n2. Create an `AdManagerBannerAd` object with your ad unit ID, the adaptive ad size, and an ad request object.\n3. Load the ad.\n4. In the `onAdLoaded` callback, use `AdManagerBannerAd.getPlatformAdSize()` to get the updated platform ad size and update the `AdWidget` container height.\n\nCode example\n\nHere's an example widget that loads an inline adaptive banner to fit the\nwidth of the screen, accounting for insets: \n\n import 'package:flutter/material.dart';\n import 'package:google_mobile_ads/google_mobile_ads.dart';\n\n /// This example demonstrates inline adaptive banner ads.\n ///\n /// Loads and shows an inline adaptive banner ad in a scrolling view,\n /// and reloads the ad when the orientation changes.\n class InlineAdaptiveExample extends StatefulWidget {\n @override\n _InlineAdaptiveExampleState createState() =\u003e _InlineAdaptiveExampleState();\n }\n\n class _InlineAdaptiveExampleState extends State\u003cInlineAdaptiveExample\u003e {\n static const _insets = 16.0;\n AdManagerBannerAd? _inlineAdaptiveAd;\n bool _isLoaded = false;\n AdSize? _adSize;\n late Orientation _currentOrientation;\n\n double get _adWidth =\u003e MediaQuery.of(context).size.width - (2 * _insets);\n\n @override\n void didChangeDependencies() {\n super.didChangeDependencies();\n _currentOrientation = MediaQuery.of(context).orientation;\n _loadAd();\n }\n\n void _loadAd() async {\n await _inlineAdaptiveAd?.dispose();\n setState(() {\n _inlineAdaptiveAd = null;\n _isLoaded = false;\n });\n\n // Get an inline adaptive size for the current orientation.\n AdSize size = AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(\n _adWidth.truncate());\n\n _inlineAdaptiveAd = AdManagerBannerAd(\n // TODO: replace with your own ad unit.\n adUnitId: '/21775744923/example/adaptive-banner',\n size: size,\n request: AdManagerAdRequest(),\n listener: AdManagerBannerAdListener(\n onAdLoaded: (Ad ad) async {\n print('Inline adaptive banner loaded: ${ad.responseInfo}');\n\n // After the ad is loaded, get the platform ad size and use it to\n // update the height of the container. This is necessary because the\n // height can change after the ad is loaded.\n AdManagerBannerAd bannerAd = (ad as AdManagerBannerAd);\n final AdSize? size = await bannerAd.getPlatformAdSize();\n if (size == null) {\n print('Error: getPlatformAdSize() returned null for $bannerAd');\n return;\n }\n\n setState(() {\n _inlineAdaptiveAd = bannerAd;\n _isLoaded = true;\n _adSize = size;\n });\n },\n onAdFailedToLoad: (Ad ad, LoadAdError error) {\n print('Inline adaptive banner failedToLoad: $error');\n ad.dispose();\n },\n ),\n );\n await _inlineAdaptiveAd!.load();\n }\n\n /// Gets a widget containing the ad, if one is loaded.\n ///\n /// Returns an empty container if no ad is loaded, or the orientation\n /// has changed. Also loads a new ad if the orientation changes.\n Widget _getAdWidget() {\n return OrientationBuilder(\n builder: (context, orientation) {\n if (_currentOrientation == orientation &&\n _inlineAdaptiveAd != null &&\n _isLoaded &&\n _adSize != null) {\n return Align(\n child: Container(\n width: _adWidth,\n height: _adSize!.height.toDouble(),\n child: AdWidget(\n ad: _inlineAdaptiveAd!,\n ),\n ));\n }\n // Reload the ad if the orientation changes.\n if (_currentOrientation != orientation) {\n _currentOrientation = orientation;\n _loadAd();\n }\n return Container();\n },\n );\n }\n\n @override\n Widget build(BuildContext context) =\u003e Scaffold(\n appBar: AppBar(\n title: Text('Inline adaptive banner example'),\n ),\n body: Center(\n child: Padding(\n padding: const EdgeInsets.symmetric(horizontal: _insets),\n child: ListView.separated(\n itemCount: 20,\n separatorBuilder: (BuildContext context, int index) {\n return Container(\n height: 40,\n );\n },\n itemBuilder: (BuildContext context, int index) {\n if (index == 10) {\n return _getAdWidget();\n }\n return Text(\n 'Placeholder text',\n style: TextStyle(fontSize: 24),\n );\n },\n ),\n ),\n ));\n\n @override\n void dispose() {\n super.dispose();\n _inlineAdaptiveAd?.dispose();\n }\n }"]]