Banery adaptacyjne to nowa generacja reklam elastycznych, które zapewniają maksymalną skuteczność dzięki optymalizacji rozmiaru reklamy na każdym urządzeniu. Banery adaptacyjne są ulepszoną wersją banerów o stałym rozmiarze, które obsługiwały tylko stałe wysokości. Banery adaptacyjne pozwalają programistom określić szerokość reklamy i wykorzystują te dane do wyznaczenia optymalnego rozmiaru reklamy.
Aby dobrać najlepszy rozmiar reklamy, banery adaptacyjne w tekście używają maksymalnych wysokości zamiast stałych. Dzięki temu można zwiększyć skuteczność.
Kiedy stosować banery adaptacyjne w tekście
Banery adaptacyjne w tekście są większe i wyższe niż zakotwiczone banery adaptacyjne. Mają zmienną wysokość i mogą zajmować całą wysokość ekranu urządzenia.
Są przeznaczone do umieszczania w treściach przewijanych, np.:

Wymagania wstępne
- Postępuj zgodnie z instrukcjami w przewodniku dla początkujących dotyczącymi importowania.Google Mobile Ads Flutter Plugin
Zanim zaczniesz
Podczas implementowania banerów adaptacyjnych w aplikacji pamiętaj o tych kwestiach:
Upewnij się, że używasz najnowszej wersji Google Mobile Ads Flutter Plugin, a jeśli korzystasz z mediacji, najnowszych wersji adapterów mediacji.
Rozmiary banerów adaptacyjnych w tekście są najlepiej dostosowane do używania pełnej dostępnej szerokości. W większości przypadków będzie to pełna szerokość ekranu używanego urządzenia. Pamiętaj o uwzględnieniu odpowiednich bezpiecznych obszarów.
Aby korzystać z rozmiarów adaptacyjnych, może być konieczne zaktualizowanie lub utworzenie nowych elementów zamówienia. Więcej informacji.
Metody uzyskiwania 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 banerów adaptacyjnych w tekście, Google Mobile Ads Flutter Plugin zwraca obiekt
AdSizeo podanej szerokości i fladze w tekście. Wysokość wynosi zero lubmaxHeightw zależności od używanego interfejsu API. Rzeczywista wysokość reklamy jest dostępna po jej zwróceniu.Baner adaptacyjny w tekście jest przeznaczony do umieszczania w treściach przewijanych. Baner może zajmować całą wysokość ekranu urządzenia lub mieć określoną maksymalną wysokość zależnie od ustawień w interfejsie API.
Implementacja
Aby zaimplementować prosty baner adaptacyjny w tekście, wykonaj te czynności:
- Uzyskaj rozmiar adaptacyjnego banera reklamowego w tekście. Uzyskany rozmiar będzie używany do wysyłania żądań banera adaptacyjnego. Aby uzyskać rozmiar reklamy adaptacyjnej:
- Uzyskaj szerokość używanego urządzenia w pikselach niezależnych od gęstości lub ustaw własną, jeśli nie chcesz, aby reklama zajęła całą szerokość ekranu.
Aby uzyskać szerokość ekranu, możesz użyć
MediaQuery.of(context). - Zastosuj odpowiednie metody statyczne klasy AdSize, np.
AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(int width)aby uzyskać adaptacyjny obiekt klasyAdSizew tekście dla bieżącej orientacji ekranu. - Jeśli chcesz ograniczyć wysokość banera, możesz użyć metody statycznej
AdSize.getInlineAdaptiveBannerAdSize(int width, int maxHeight).
- Uzyskaj szerokość używanego urządzenia w pikselach niezależnych od gęstości lub ustaw własną, jeśli nie chcesz, aby reklama zajęła całą szerokość ekranu.
Aby uzyskać szerokość ekranu, możesz użyć
- Utwórz obiekt
AdManagerBannerAdz identyfikatorem jednostki reklamowej, rozmiarem reklamy adaptacyjnej i obiektem żądania reklamy. - Załaduj reklamę.
- W wywołaniu zwrotnym
onAdLoadedużyjAdManagerBannerAd.getPlatformAdSize(), aby uzyskać zaktualizowany rozmiar reklamy na platformie i zaktualizować wysokość konteneraAdWidget.
Przykładowy kod
Oto przykładowy widżet, który wczytuje baner adaptacyjny w tekście, aby dopasować go do szerokości ekranu, uwzględniając wcięcia:
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: '/21775744923/example/adaptive-banner',
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();
}
}