Questa guida spiega come caricare un annuncio banner adattivo ancorato in un'app per Android.
Prerequisiti
Esegui sempre test con annunci di prova
Quando crei e testi le tue app, assicurati di utilizzare annunci di prova anziché annunci di produzione live. In caso contrario, il tuo account potrebbe essere sospeso.
Il modo più semplice per caricare gli annunci di prova è utilizzare il nostro ID unità pubblicitaria di test dedicato per i banner Android:
ca-app-pub-3940256099942544/9214589741
È stato configurato appositamente per restituire annunci di prova per ogni richiesta e puoi utilizzarlo nelle tue app durante la codifica, i test e il debug. Assicurati di sostituirlo con il tuo ID unità pubblicitaria prima di pubblicare l'app.
Per ulteriori informazioni sul funzionamento degli annunci di prova GMA Next-Gen SDK, consulta la pagina Attivare gli annunci di prova.
Crea un oggetto AdView
Per visualizzare i banner:
Kotlin
- Crea un
AdViewoggetto. - Aggiungi l'oggetto
AdViewal layout dell'app.
Il seguente esempio crea e aggiunge l'oggetto AdView al layout di un'app:
private fun createAdView(adViewContainer: FrameLayout, activity: Activity) {
val adView = AdView(activity)
adViewContainer.addView(adView)
}
Java
- Crea un
AdViewoggetto. - Aggiungi l'oggetto
AdViewal layout dell'app.
Il seguente esempio crea e aggiunge l'oggetto AdView al layout di un'app:
private void createAdView(FrameLayout adViewContainer, Activity activity) {
AdView adView = new AdView(activity);
adViewContainer.addView(adView);
}
Layout XML
Aggiungi un elemento AdView al file XML del layout:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.libraries.ads.mobile.sdk.banner.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Jetpack Compose
- Crea un
AdViewoggetto all'interno di un bloccoremember. - Includi un elemento
AndroidViewnell'interfaccia utente di Compose per visualizzare l'oggettoAdView:
val context = LocalContext.current
val adView = remember { AdView(context) }
// The AdView is placed at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
Box(modifier = modifier.fillMaxWidth()) {
// Display the ad within an AndroidView.
AndroidView(modifier = modifier.wrapContentSize(), factory = { adView })
}
}
Carica un annuncio
Il seguente esempio carica un annuncio banner adattivo ancorato con larghezza 360 in un oggetto AdView:
Kotlin
private fun loadBannerAd(adView: AdView, activity: Activity) {
// Get a BannerAdRequest for a 360 wide large anchored adaptive banner ad.
val adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(activity, 360)
val adRequest = BannerAdRequest.Builder(AD_UNIT_ID, adSize).build()
adView.loadAd(
adRequest,
object : AdLoadCallback<BannerAd> {
override fun onAdLoaded(ad: BannerAd) {
Log.d(TAG, "Banner ad loaded.")
}
override fun onAdFailedToLoad(adError: LoadAdError) {
Log.d(TAG, "Banner ad failed to load: $adError")
}
},
)
}
Java
private void loadBannerAd(AdView adView, Activity activity) {
// Get a BannerAdRequest for a 360 wide large anchored adaptive banner ad.
AdSize adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(activity, 360);
BannerAdRequest adRequest = new BannerAdRequest.Builder(AD_UNIT_ID, adSize).build();
adView.loadAd(
adRequest,
new AdLoadCallback<BannerAd>() {
@Override
public void onAdLoaded(@NonNull BannerAd bannerAd) {
Log.d(TAG, "Banner ad loaded.");
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError adError) {
Log.d(TAG, "Banner ad failed to load: " + adError);
}
});
}
Jetpack Compose
// Request a large anchored adaptive banner with a width of 360.
val adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(context, 360)
// Load the ad when the screen is active.
val isPreviewMode = LocalInspectionMode.current
LaunchedEffect(adSize) {
if (!isPreviewMode) {
val adRequest = BannerAdRequest.Builder(AD_UNIT_ID, adSize).build()
adView.loadAd(
adRequest,
object : AdLoadCallback<BannerAd> {
override fun onAdLoaded(ad: BannerAd) {
Log.d(Constant.TAG, "Banner ad loaded.")
}
override fun onAdFailedToLoad(adError: LoadAdError) {
Log.w(Constant.TAG, "Banner ad failed to load: $adError")
}
},
)
}
}
Imposta una dimensione dell'annuncio inferiore o uguale alla dimensione dello schermo del dispositivo.
Per determinare la dimensione massima dello schermo, utilizza il
Resources.getDisplayMetrics
metodo. Le dimensioni dell'oggetto AdSize utilizzano pixel indipendenti dalla densità (dp). Quando esegui il confronto, converti la dimensione dello schermo da pixel a dp.
Per maggiori dettagli sui vincoli di dimensione, consulta la pagina
Requisiti di dimensione delle richieste di annunci.
Aggiorna un annuncio
Se hai configurato l'unità pubblicitaria per l'aggiornamento, non devi richiedere un altro annuncio se il caricamento non riesce. GMA Next-Gen SDK rispetta qualsiasi frequenza di aggiornamento specificata nell'interfaccia utente di AdMob. Se non hai attivato l'aggiornamento, invia una nuova richiesta. Per maggiori dettagli sull'aggiornamento delle unità pubblicitarie, ad esempio su ll'impostazione di una frequenza di aggiornamento, consulta la pagina Utilizzare l'aggiornamento automatico per gli annunci banner.
Rilascia una risorsa annuncio
Al termine dell'utilizzo di un annuncio banner, puoi rilasciare le risorse dell'annuncio banner.
Per rilasciare la risorsa dell'annuncio, rimuovi l'annuncio dalla gerarchia di oggetti View ed elimina tutti i relativi riferimenti:
Kotlin
private fun destroyBanner() {
// Remove banner from view hierarchy.
val parentView = adView?.parent
if (parentView is ViewGroup) {
parentView.removeView(adView)
}
// Destroy the banner ad resources.
adView?.destroy()
// Drop reference to the banner ad.
adView = null
}
Java
private void destroyBanner() {
// Remove banner from view hierarchy.
if (adView != null) {
if (adView.getParent() instanceof ViewGroup) {
((ViewGroup) adView.getParent()).removeView(adView);
}
// Destroy the banner ad resources.
adView.destroy();
}
// Drop reference to the banner ad.
adView = null;
}
Jetpack Compose
// Destroy the ad when the screen is disposed.
DisposableEffect(Unit) { onDispose { adView.destroy() } }
Eventi annuncio
Puoi ascoltare una serie di eventi nel ciclo di vita dell'annuncio, tra cui impressioni e clic, nonché apertura e chiusura dell'annuncio. Ti consigliamo di impostare il callback prima di mostrare il banner.
Kotlin
override fun onAdLoaded(ad: BannerAd) {
ad.adEventCallback =
object : BannerAdEventCallback {
override fun onAdImpression() {
// Banner ad recorded an impression.
Log.d(TAG, "Banner ad recorded an impression.")
}
override fun onAdClicked() {
// Banner ad recorded a click.
Log.d(TAG, "Banner ad clicked.")
}
override fun onAdShowedFullScreenContent() {
// Banner ad showed.
Log.d(TAG, "Banner ad showed full screen content.")
}
override fun onAdDismissedFullScreenContent() {
// Banner ad dismissed.
Log.d(TAG, "Banner ad dismissed full screen content.")
}
override fun onAdFailedToShowFullScreenContent(
fullScreenContentError: FullScreenContentError
) {
// Banner ad failed to show.
Log.w(TAG, "Banner ad failed to show full screen content: $fullScreenContentError")
}
}
}
Java
@Override
public void onAdLoaded(@NonNull BannerAd bannerAd) {
bannerAd.setAdEventCallback(
new BannerAdEventCallback() {
@Override
public void onAdImpression() {
// Banner ad recorded an impression.
Log.d(TAG, "Banner ad recorded an impression.");
}
@Override
public void onAdClicked() {
// Banner ad recorded a click.
Log.d(TAG, "Banner ad clicked.");
}
@Override
public void onAdShowedFullScreenContent() {
// Banner ad showed.
Log.d(TAG, "Banner ad showed full screen content.");
}
@Override
public void onAdDismissedFullScreenContent() {
// Banner ad dismissed.
Log.d(TAG, "Banner ad dismissed full screen content.");
}
@Override
public void onAdFailedToShowFullScreenContent(
@NonNull FullScreenContentError fullScreenContentError) {
// Banner ad failed to show.
Log.w(
TAG,
"Banner ad failed to show full screen content: " + fullScreenContentError);
}
});
}
L'interfaccia BannerAdEventCallback
gestisce gli eventi dei contenuti a schermo intero nel seguente modo:
Overlay in-app: GMA Next-Gen SDK chiama
onAdShowedFullScreenContenteonAdDismissedFullScreenContentsolo quando un annuncio banner presenta o chiude un overlay nella tua app, ad esempio un annuncio MRAID (Mobile Rich Media Ad Interface Definitions) espanso o un overlay AdChoices.Navigazione esterna: GMA Next-Gen SDK non chiama questi metodi quando un clic sull'annuncio porta l'utente al di fuori dell'app, ad esempio in un browser esterno o in un marketplace di app. Per rilevare quando un utente esce o torna alla tua app dopo aver fatto clic su un annuncio, ascolta gli eventi del ciclo di vita dell'applicazione insieme al
onAdClickedmetodo.
Callback di aggiornamento dell'annuncio
Il BannerAdRefreshCallback gestisce gli eventi di aggiornamento degli annunci se utilizzi l'aggiornamento automatico
per gli annunci banner. Assicurati di impostare il callback prima di aggiungere la visualizzazione dell'annuncio alla gerarchia di oggetti View. Per maggiori dettagli sull'aggiornamento degli annunci, consulta la pagina
Aggiornare un annuncio.
Kotlin
adView.loadAd(
adRequest,
object : AdLoadCallback<BannerAd> {
override fun onAdLoaded(ad: BannerAd) {
ad.bannerAdRefreshCallback =
object : BannerAdRefreshCallback {
override fun onAdRefreshed() {
// Banner ad refreshed.
Log.d(TAG, "Banner ad refreshed.")
}
override fun onAdFailedToRefresh(adError: LoadAdError) {
// Banner ad failed to refresh.
Log.w(TAG, "Banner ad failed to refresh: $adError")
}
}
}
override fun onAdFailedToLoad(adError: LoadAdError) {
// Banner ad failed to load.
Log.w(TAG, "Banner ad failed to load: $adError")
}
},
)
Java
adView.loadAd(
adRequest,
new AdLoadCallback<BannerAd>() {
@Override
public void onAdLoaded(@NonNull BannerAd bannerAd) {
bannerAd.setBannerAdRefreshCallback(
new BannerAdRefreshCallback() {
@Override
public void onAdRefreshed() {
// Banner ad refreshed.
Log.d(TAG, "Banner ad refreshed.");
}
@Override
public void onAdFailedToRefresh(@NonNull LoadAdError adError) {
// Banner ad failed to refresh.
Log.w(TAG, "Banner ad failed to refresh: " + adError);
}
});
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError adError) {
// Banner ad failed to load.
Log.w(TAG, "Banner ad failed to load: " + adError);
}
});
Accelerazione hardware per gli annunci video
Affinché gli annunci video vengano visualizzati correttamente nelle visualizzazioni degli annunci banner, è necessario attivare l'accelerazione hardware.
L'accelerazione hardware è attivata per impostazione predefinita, ma alcune app potrebbero scegliere di disattivarla. Se questo vale per la tua app, ti consigliamo di attivare l'accelerazione hardware per le classi Activity che utilizzano gli annunci.
Attivare l'accelerazione hardware
Se la tua app non si comporta correttamente con l'accelerazione hardware attivata a livello globale, puoi controllarla anche per le singole attività. Per attivare o
disattivare l'accelerazione hardware, puoi utilizzare l'attributo android:hardwareAccelerated
per gli
<application>
e
<activity>
elementi in AndroidManifest.xml. Il seguente esempio attiva l'accelerazione hardware per l'intera app, ma la disattiva per un'attività:
<application android:hardwareAccelerated="true">
<!-- For activities that use ads, hardwareAcceleration should be true. -->
<activity android:hardwareAccelerated="true" />
<!-- For activities that don't use ads, hardwareAcceleration can be false. -->
<activity android:hardwareAccelerated="false" />
</application>
Per ulteriori informazioni sulle opzioni per il controllo dell'accelerazione hardware, consulta la guida Accelerazione hardware. Tieni presente che le singole visualizzazioni degli annunci non possono essere attivate per l'accelerazione hardware se l'attività è disattivata, quindi l'attività stessa deve avere l'accelerazione hardware attivata.
Scarica ed esegui l' app di esempio che illustra l'utilizzo del GMA Next-Gen SDK.