Questa guida è rivolta ai publisher che integrano gli annunci apertura app utilizzando Google Mobile Ads SDK (Legacy).
Gli annunci apertura app sono un formato dell'annuncio speciale destinato ai publisher che vogliono monetizzare le schermate di caricamento delle app. Gli annunci apertura app possono essere chiusi in qualsiasi momento e sono progettati per essere mostrati quando gli utenti portano l'app in primo piano.
Gli annunci apertura app mostrano automaticamente una piccola area di branding, in modo che gli utenti sappiano di essere all'interno della tua app. Ecco un esempio di annuncio apertura app:

Prerequisiti
Esegui sempre i test con gli annunci di prova
Durante la creazione e il test delle tue app, assicurati di utilizzare annunci di prova anziché annunci di prodotto. 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 gli annunci apertura app:
ca-app-pub-3940256099942544/9257395921
È stato configurato appositamente per restituire annunci di prova per ogni richiesta e puoi utilizzarlo liberamente nelle tue app durante la programmazione, i test e il debug. Assicurati di sostituirlo con l'ID unità pubblicitaria prima di pubblicare l'app.
Per saperne di più sul funzionamento degli annunci di prova di Google Mobile Ads SDK (Legacy), consulta Attiva gli annunci di prova.
Estendi la classe Application
Crea una nuova classe che estende la classe Application. In questo modo, puoi gestire gli annunci in base al ciclo di vita e allo stato dell'applicazione, anziché a un singolo Activity:
Java
public class MyApplication extends Application
implements ActivityLifecycleCallbacks, DefaultLifecycleObserver {
private AppOpenAdManager appOpenAdManager;
private Activity currentActivity;
@Override
public void onCreate() {
super.onCreate();
this.registerActivityLifecycleCallbacks(this);
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
appOpenAdManager = new AppOpenAdManager();
}
Kotlin
class MyApplication :
Application(), Application.ActivityLifecycleCallbacks, DefaultLifecycleObserver {
private lateinit var appOpenAdManager: AppOpenAdManager
private var currentActivity: Activity? = null
override fun onCreate() {
super<Application>.onCreate()
registerActivityLifecycleCallbacks(this)
ProcessLifecycleOwner.get().lifecycle.addObserver(this)
appOpenAdManager = AppOpenAdManager()
}
Poi, aggiungi il seguente codice al tuo AndroidManifest.xml:
<!-- TODO: Update to reference your actual package name. -->
<application
android:name="com.google.android.gms.example.appopendemo.MyApplication" ...>
...
</application>
Implementa il componente di utilità
L'annuncio deve essere visualizzato rapidamente, quindi è meglio caricarlo prima di doverlo mostrare. In questo modo, avrai un annuncio pronto per essere pubblicato non appena l'utente accede alla tua app.
Implementa un componente di utilità AppOpenAdManager per incapsulare il lavoro relativo al caricamento e alla visualizzazione degli annunci apertura app:
Java
private class AppOpenAdManager {
private static final String LOG_TAG = "AppOpenAdManager";
private static final String AD_UNIT_ID = "ca-app-pub-3940256099942544/9257395921";
private AppOpenAd appOpenAd = null;
private boolean isLoadingAd = false;
private boolean isShowingAd = false;
/** Keep track of the time an app open ad is loaded to ensure you don't show an expired ad. */
private long loadTime = 0;
/** Constructor. */
public AppOpenAdManager() {}
Kotlin
private inner class AppOpenAdManager {
private var appOpenAd: AppOpenAd? = null
private var isLoadingAd = false
var isShowingAd = false
/** Keep track of the time an app open ad is loaded to ensure you don't show an expired ad. */
private var loadTime: Long = 0
Per utilizzare AppOpenAdManager, chiama i metodi wrapper pubblici nell'istanza singleton MyApplication. La classe Application si interfaccia con il resto del codice, delegando al gestore il lavoro di caricamento e visualizzazione dell'annuncio.
Carica un annuncio
Il passaggio successivo consiste nel compilare il metodo loadAd e gestire i callback di caricamento degli annunci.
Java
Kotlin
Sostituisci AD_UNIT_ID con l'ID della tua unità pubblicitaria.
Mostra l'annuncio
L'implementazione più comune degli annunci apertura app consiste nel tentare di mostrare un annuncio apertura app all'avvio dell'app, avviare i contenuti dell'app se l'annuncio non è pronto e precaricare un altro annuncio per la successiva opportunità di apertura app. Consulta le indicazioni per gli annunci apertura app per esempi di implementazione.
Il seguente codice mostra e successivamente ricarica un annuncio:
Java
public void showAdIfAvailable(
@NonNull final Activity activity,
@NonNull OnShowAdCompleteListener onShowAdCompleteListener) {
// If the app open ad is already showing, do not show the ad again.
if (isShowingAd) {
Log.d(TAG, "The app open ad is already showing.");
return;
}
// If the app open ad is not available yet, invoke the callback then load the ad.
if (appOpenAd == null) {
Log.d(TAG, "The app open ad is not ready yet.");
onShowAdCompleteListener.onShowAdComplete();
// Load an ad.
return;
}
isShowingAd = true;
appOpenAd.show(activity);
}
Kotlin
fun showAdIfAvailable(activity: Activity, onShowAdCompleteListener: OnShowAdCompleteListener) {
// If the app open ad is already showing, do not show the ad again.
if (isShowingAd) {
Log.d(TAG, "The app open ad is already showing.")
return
}
// If the app open ad is not available yet, invoke the callback then load the ad.
if (appOpenAd == null) {
Log.d(TAG, "The app open ad is not ready yet.")
onShowAdCompleteListener.onShowAdComplete()
// Load an ad.
return
}
isShowingAd = true
appOpenAd?.show(activity)
}
Imposta FullScreenContentCallback
FullScreenContentCallback gestisce gli eventi relativi alla visualizzazione di AppOpenAd. Prima di mostrare AppOpenAd, assicurati di impostare il callback:
Java
appOpenAd.setFullScreenContentCallback(
new FullScreenContentCallback() {
@Override
public void onAdDismissedFullScreenContent() {
// Called when full screen content is dismissed.
Log.d(TAG, "Ad dismissed fullscreen content.");
// Don't forget to set the ad reference to null so you
// don't show the ad a second time.
appOpenAd = null;
isShowingAd = false;
onShowAdCompleteListener.onShowAdComplete();
// Load an ad.
}
@Override
public void onAdFailedToShowFullScreenContent(@NonNull AdError adError) {
// Called when full screen content failed to show.
Log.d(TAG, adError.getMessage());
appOpenAd = null;
// Don't forget to set the ad reference to null so you
// don't show the ad a second time.
isShowingAd = false;
onShowAdCompleteListener.onShowAdComplete();
// Load an ad.
}
@Override
public void onAdShowedFullScreenContent() {
Log.d(TAG, "Ad showed fullscreen content.");
}
@Override
public void onAdImpression() {
// Called when an impression is recorded for an ad.
Log.d(TAG, "The ad recorded an impression.");
}
@Override
public void onAdClicked() {
// Called when ad is clicked.
Log.d(TAG, "The ad was clicked.");
}
});
Kotlin
appOpenAd?.fullScreenContentCallback =
object : FullScreenContentCallback() {
override fun onAdDismissedFullScreenContent() {
// Called when full screen content is dismissed.
Log.d(TAG, "Ad dismissed fullscreen content.")
// Don't forget to set the ad reference to null so you
// don't show the ad a second time.
appOpenAd = null
isShowingAd = false
onShowAdCompleteListener.onShowAdComplete()
// Load an ad.
}
override fun onAdFailedToShowFullScreenContent(adError: AdError) {
// Called when full screen content failed to show.
Log.d(TAG, adError.message)
// Don't forget to set the ad reference to null so you
// don't show the ad a second time.
appOpenAd = null
isShowingAd = false
onShowAdCompleteListener.onShowAdComplete()
// Load an ad.
}
override fun onAdShowedFullScreenContent() {
Log.d(TAG, "Ad showed fullscreen content.")
}
override fun onAdImpression() {
// Called when an impression is recorded for an ad.
Log.d(TAG, "The ad recorded an impression.")
}
override fun onAdClicked() {
// Called when ad is clicked.
Log.d(TAG, "The ad was clicked.")
}
}
Considera la scadenza degli annunci
Per assicurarti di non mostrare un annuncio scaduto, aggiungi un metodo a AppOpenAdManager che controlli quanto tempo è trascorso dal caricamento del riferimento dell'annuncio. Poi, utilizza questo metodo per verificare se l'annuncio è ancora valido.
Java
/** Check if ad was loaded more than n hours ago. */
private boolean wasLoadTimeLessThanNHoursAgo(long numHours) {
long dateDifference = (new Date()).getTime() - loadTime;
long numMilliSecondsPerHour = 3600000;
return (dateDifference < (numMilliSecondsPerHour * numHours));
}
/** Check if ad exists and can be shown. */
private boolean isAdAvailable() {
// For time interval details, see: https://support.google.com/admob/answer/9341964
return appOpenAd != null && wasLoadTimeLessThanNHoursAgo(4);
}
Kotlin
/** Check if ad was loaded more than n hours ago. */
private fun wasLoadTimeLessThanNHoursAgo(numHours: Long): Boolean {
val dateDifference: Long = Date().time - loadTime
val numMilliSecondsPerHour: Long = 3600000
return dateDifference < numMilliSecondsPerHour * numHours
}
/** Check if ad exists and can be shown. */
private fun isAdAvailable(): Boolean {
// For time interval details, see: https://support.google.com/admob/answer/9341964
return appOpenAd != null && wasLoadTimeLessThanNHoursAgo(4)
}
Monitora l'attività corrente
Per mostrare l'annuncio, devi avere un contesto Activity. Per tenere traccia dell'attività più recente in uso, registra e implementa Application.ActivityLifecycleCallbacks.
Java
@Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {}
@Override
public void onActivityStarted(@NonNull Activity activity) {
// An ad activity is started when an ad is showing, which could be AdActivity class from Google
// SDK or another activity class implemented by a third party mediation partner. Updating the
// currentActivity only when an ad is not showing will ensure it is not an ad activity, but the
// one that shows the ad.
if (!appOpenAdManager.isShowingAd) {
currentActivity = activity;
}
}
@Override
public void onActivityResumed(@NonNull Activity activity) {}
@Override
public void onActivityPaused(@NonNull Activity activity) {}
@Override
public void onActivityStopped(@NonNull Activity activity) {}
@Override
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {}
@Override
public void onActivityDestroyed(@NonNull Activity activity) {}
Kotlin
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}
override fun onActivityStarted(activity: Activity) {
// An ad activity is started when an ad is showing, which could be AdActivity class from Google
// SDK or another activity class implemented by a third party mediation partner. Updating the
// currentActivity only when an ad is not showing will ensure it is not an ad activity, but the
// one that shows the ad.
if (!appOpenAdManager.isShowingAd) {
currentActivity = activity
}
}
override fun onActivityResumed(activity: Activity) {}
override fun onActivityPaused(activity: Activity) {}
override fun onActivityStopped(activity: Activity) {}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
override fun onActivityDestroyed(activity: Activity) {}
registerActivityLifecycleCallbacks
ti consente di ascoltare tutti gli eventi Activity. Ascoltando l'avvio e la distruzione delle attività, puoi tenere traccia di un riferimento all'oggetto Activity corrente, che utilizzerai per presentare l'annuncio apertura app.
Ascolta gli eventi che mettono in primo piano l'app
Per rimanere in ascolto degli eventi che mettono in primo piano l'app, segui questi passaggi:
Aggiungi le librerie al file gradle
Per ricevere notifiche sugli eventi che mettono in primo piano l'app, devi registrare un
DefaultLifecycleObserver. Aggiungi la relativa dipendenza al file di build a livello di app:
Kotlin
dependencies { implementation("com.google.android.gms:play-services-ads:25.5.0") implementation("androidx.lifecycle:lifecycle-process:2.8.3") }
Groovy
dependencies { implementation 'com.google.android.gms:play-services-ads:25.5.0' implementation 'androidx.lifecycle:lifecycle-process:2.8.3' }
Implementa l'interfaccia dell'observer del ciclo di vita
Puoi ascoltare gli eventi che mettono in primo piano implementando l'interfaccia DefaultLifecycleObserver.
Implementa onStart() per mostrare l'annuncio apertura app.
Java
@Override
public void onStart(@NonNull LifecycleOwner owner) {
DefaultLifecycleObserver.super.onStart(owner);
// Show the ad (if available) when the app moves to foreground.
appOpenAdManager.showAdIfAvailable(currentActivity);
}
Kotlin
override fun onStart(owner: LifecycleOwner) {
super.onStart(owner)
currentActivity?.let {
// Show the ad (if available) when the app moves to foreground.
appOpenAdManager.showAdIfAvailable(it)
}
}
Avvii completi e schermate di caricamento
La documentazione finora presuppone che gli annunci apertura app vengano mostrati solo quando gli utenti portano l'app in primo piano quando è sospesa in memoria. Gli "avvii a freddo" si verificano quando l'app viene avviata, ma non era stata precedentemente sospesa in memoria.
Un esempio di avvio a freddo è quando un utente apre l'app per la prima volta. Con gli avvii a freddo, non avrai un annuncio apertura app caricato in precedenza pronto per essere mostrato immediatamente. Il ritardo tra la richiesta di un annuncio e la ricezione di un annuncio può creare una situazione in cui gli utenti possono utilizzare brevemente la tua app prima di essere sorpresi da un annuncio fuori contesto. Evita questa pratica perché offre un'esperienza utente scadente.
Il modo migliore per utilizzare gli annunci apertura app con avvio a freddo è utilizzare una schermata di caricamento per caricare gli asset per app del gioco o dell'app e mostrare l'annuncio solo dalla schermata di caricamento. Se l'app ha completato il caricamento e ha indirizzato l'utente ai contenuti principali dell'app, non mostrare l'annuncio.
Best practice
Gli annunci apertura app ti aiutano a monetizzare la schermata di caricamento della tua app, al primo avvio e durante i cambi di app, ma è importante tenere a mente le best practice per far sì che gli utenti continuino a utilizzare la tua app. È consigliabile:
- Mostra il primo annuncio apertura app dopo che gli utenti hanno utilizzato l'app alcune volte.
- Mostra gli annunci apertura app nei momenti in cui gli utenti dovrebbero altrimenti attendere il caricamento dell'app.
- Se sotto l'annuncio apertura app è presente una schermata di caricamento che termina prima che l'annuncio venga chiuso, ti consigliamo di chiudere la schermata di caricamento nel metodo
onAdDismissedFullScreenContent().
Esempi su GitHub
Passaggi successivi
Approfondisci i seguenti argomenti: