Banery adaptacyjne to nowa generacja reklam elastycznych, które maksymalizują skuteczność reklam, optymalizując rozmiar reklamy na każdym urządzeniu. Są lepsze od banerów o stałym rozmiarze, które obsługiwały tylko taką wysokość. Umożliwiają deweloperom określanie szerokości reklamy i wykorzystywanie jej do określania optymalnego rozmiaru reklamy.
Aby wybrać najlepszy rozmiar reklamy, wbudowane banery adaptacyjne używają wartości maksymalnych zamiast stałych. Daje to możliwość poprawy skuteczności.
Kiedy używać wbudowanych banerów adaptacyjnych
Banery adaptacyjne w tekście są większe i wyższe od banerów zakotwiczonych. Mają zmienną wysokość i mogą sięgać do ekranu urządzenia.
Są przeznaczone do umieszczania w przewijanych treściach, na przykład:
Wymagania wstępne
- Postępuj zgodnie z instrukcjami podanymi w przewodniku dla początkujących, aby dowiedzieć się, jak zaimportować wtyczkę Flutter reklam mobilnych.
Zanim zaczniesz
Implementując banery adaptacyjne w swojej aplikacji, pamiętaj o tych kwestiach:
Upewnij się, że używasz najnowszej wersji pakietu SDK do reklam mobilnych Google, a jeśli korzystasz z zapośredniczenia – najnowszych wersji adapterów zapośredniczenia.
Rozmiary wbudowanych banerów adaptacyjnych zaprojektowano tak, aby sprawdzały się najlepiej, gdy masz pełną dostępną szerokość. W większości przypadków będzie to pełna szerokość ekranu używanego urządzenia. Pamiętaj, aby wziąć pod uwagę odpowiednie bezpieczne obszary.
Być może trzeba będzie zaktualizować lub utworzyć nowe elementy zamówienia, by działały z rozmiarami adaptacyjnymi. Więcej informacji
Sposoby sprawdzenia rozmiaru reklamy to:
AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(int width)
AdSize.getLandscapeInlineAdaptiveBannerAdSize(int width)
AdSize.getPortraitInlineAdaptiveBannerAdSize(int width)
AdSize.getInlineAdaptiveBannerAdSize(int width, int maxHeight)
Gdy używasz interfejsów API wbudowanych banerów adaptacyjnych, pakiet SDK do reklam mobilnych Google zwraca element
AdSize
o podanej szerokości i flagi wbudowanej. W zależności od używanego interfejsu API wysokość wynosi zero lubmaxHeight
. Rzeczywista wysokość reklamy jest wyświetlana po jej zwróceniu.Wbudowany baner adaptacyjny jest zaprojektowany do umieszczania w treściach przewijanych. W zależności od interfejsu API baner może mieć wysokość ekranu urządzenia lub maksymalną wysokość.
Implementacja
Aby wdrożyć prosty śródtekstowy baner adaptacyjny, wykonaj podane niżej czynności.
- Użyj rozmiaru wbudowanego adaptacyjnego banera reklamowego. Otrzymany rozmiar będzie służyć
do żądania banera adaptacyjnego. Aby móc korzystać z rozmiaru reklamy adaptacyjnej, musisz:
- Określ szerokość używanego urządzenia w pikselach niezależnych od gęstości lub ustaw własną szerokość, jeśli nie chcesz korzystać z pełnej szerokości ekranu.
Aby określić szerokość ekranu, możesz użyć polecenia
MediaQuery.of(context)
. - Użyj odpowiednich metod statycznych klasy rozmiaru reklamy, np.
AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(int width)
, aby uzyskać wbudowany adaptacyjny obiektAdSize
dla bieżącej orientacji. - Jeśli chcesz ograniczyć wysokość banera, możesz użyć metody statycznej
AdSize.getInlineAdaptiveBannerAdSize(int width, int maxHeight)
.
- Określ szerokość używanego urządzenia w pikselach niezależnych od gęstości lub ustaw własną szerokość, jeśli nie chcesz korzystać z pełnej szerokości ekranu.
Aby określić szerokość ekranu, możesz użyć polecenia
- Utwórz obiekt
AdManagerBannerAd
z identyfikatorem jednostki reklamowej, adaptacyjnym rozmiarem reklamy i obiektem żądania reklamy. - Wczytaj reklamę.
- W wywołaniu zwrotnym
onAdLoaded
użyj funkcjiAdManagerBannerAd.getPlatformAdSize()
, aby uzyskać zaktualizowany rozmiar reklamy na platformie i zaktualizować wysokość konteneraAdWidget
.
Przykładowy kod
Oto przykładowy widżet, który wczytuje wbudowany baner adaptacyjny do szerokości ekranu, uwzględniając wstawki:
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.
class InlineAdaptiveExample extends StatefulWidget {
@override
_InlineAdaptiveExampleState createState() => _InlineAdaptiveExampleState();
}
class _InlineAdaptiveExampleState extends State<InlineAdaptiveExample> {
static const _insets = 16.0;
AdManagerBannerAd? _inlineAdaptiveAd;
bool _isLoaded = false;
AdSize? _adSize;
late Orientation _currentOrientation;
double get _adWidth => MediaQuery.of(context).size.width - (2 * _insets);
@override
void didChangeDependencies() {
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.
AdSize size = AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(
_adWidth.truncate());
_inlineAdaptiveAd = AdManagerBannerAd(
// TODO: replace with your own ad unit.
adUnitId: '<your-ad-unit>',
size: size,
request: AdManagerAdRequest(),
listener: AdManagerBannerAdListener(
onAdLoaded: (Ad ad) 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.
AdManagerBannerAd bannerAd = (ad as AdManagerBannerAd);
final AdSize? size = await bannerAd.getPlatformAdSize();
if (size == null) {
print('Error: getPlatformAdSize() returned null for $bannerAd');
return;
}
setState(() {
_inlineAdaptiveAd = bannerAd;
_isLoaded = true;
_adSize = size;
});
},
onAdFailedToLoad: (Ad ad, LoadAdError error) {
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() {
return OrientationBuilder(
builder: (context, orientation) {
if (_currentOrientation == orientation &&
_inlineAdaptiveAd != null &&
_isLoaded &&
_adSize != null) {
return Align(
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();
}
return Container();
},
);
}
@override
Widget build(BuildContext context) => Scaffold(
appBar: AppBar(
title: Text('Inline adaptive banner example'),
),
body: Center(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: _insets),
child: ListView.separated(
itemCount: 20,
separatorBuilder: (BuildContext context, int index) {
return Container(
height: 40,
);
},
itemBuilder: (BuildContext context, int index) {
if (index == 10) {
return _getAdWidget();
}
return Text(
'Placeholder text',
style: TextStyle(fontSize: 24),
);
},
),
),
));
@override
void dispose() {
super.dispose();
_inlineAdaptiveAd?.dispose();
}
}