Anuncios intersticiales

Los anuncios intersticiales son anuncios a pantalla completa que cubren la interfaz de la aplicación que los aloja. Suelen mostrarse en los puntos de transición naturales de una aplicación; por ejemplo, entre distintas actividades o al pasar de un nivel a otro en un juego. Cuando una aplicación muestra un anuncio intersticial, el usuario tiene la opción de tocar el anuncio e ir a la página de destino o cerrarlo y volver a la aplicación.

En esta guía se explica cómo puedes integrar anuncios intersticiales en una aplicación Android.

Requisitos previos

Crear un objeto de anuncio intersticial

Los anuncios intersticiales se solicitan y muestran mediante objetos InterstitialAd. Para empezar, debes crear una instancia de InterstitialAd y especificar el ID del bloque de anuncios. Puedes ver cómo se hace con el método onCreate() en un objeto Activity:

Java

package ...

import com.google.android.gms.ads.InterstitialAd;

public class MainActivity extends Activity {

    private InterstitialAd mInterstitialAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {}
        });
        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
    }
}

Kotlin

class MainActivity : Activity() {

    private lateinit var mInterstitialAd: InterstitialAd

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        MobileAds.initialize(this) {}
        mInterstitialAd = InterstitialAd(this)
        mInterstitialAd.adUnitId = "ca-app-pub-3940256099942544/1033173712"
    }
}

Se puede usar un solo objeto InterstitialAd para solicitar y mostrar varios anuncios intersticiales a lo largo del ciclo de vida útil de una actividad, por lo que solo es necesario crearlo una vez.

Comprobar siempre las aplicaciones con anuncios de prueba

Cuando crees y pruebes tus aplicaciones, utiliza siempre anuncios de prueba en lugar de anuncios reales que se estén publicando. De lo contrario, podríamos suspender tu cuenta.

La forma más sencilla de cargar anuncios de prueba es usar nuestro ID de bloque de anuncios de prueba para intersticiales de Android:

ca-app-pub-3940256099942544/1033173712

Lo hemos configurado especialmente para devolver anuncios de prueba a cada solicitud, y puedes usarlo para programar, probar y depurar tus propias aplicaciones. Solo tienes que sustituirlo por el ID de uno de tus bloques de anuncios antes de publicar la aplicación.

Para obtener más información sobre cómo funcionan los anuncios de prueba del SDK de anuncios para móviles, consulta la guía Anuncios de prueba.

Cargar anuncios

Para cargar un anuncio intersticial, llama al método loadAd() en un objeto InterstitialAd. Este método solo acepta el objeto AdRequest como parámetro:

Java

package ...

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;

public class MainActivity extends Activity {

    private InterstitialAd mInterstitialAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MobileAds.initialize(this,
            "ca-app-pub-3940256099942544~3347511713");
        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
        mInterstitialAd.loadAd(new AdRequest.Builder().build());
    }
}

Kotlin

class MainActivity : Activity() {

    private lateinit var mInterstitialAd: InterstitialAd

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        MobileAds.initialize(this,
            "ca-app-pub-3940256099942544~3347511713")
        mInterstitialAd = InterstitialAd(this)
        mInterstitialAd.adUnitId = "ca-app-pub-3940256099942544/1033173712"
        mInterstitialAd.loadAd(AdRequest.Builder().build())
    }
}

Mostrar anuncios

Los anuncios intersticiales deben mostrarse durante las pausas naturales de una aplicación; por ejemplo, entre los diferentes niveles de un juego o después de que el usuario haya terminado una acción concreta. Si quieres mostrar un anuncio intersticial, utiliza el método isLoaded() para verificar que ha terminado de cargarse y, después, llama a show(). El anuncio intersticial del ejemplo de código anterior podría mostrarse en el objeto OnClickListener de un botón de esta manera:

Java

mMyButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (mInterstitialAd.isLoaded()) {
            mInterstitialAd.show();
        } else {
            Log.d("TAG", "The interstitial wasn't loaded yet.");
        }
    }
});

Kotlin

mMyButton.setOnClickListener {
    if (mInterstitialAd.isLoaded) {
        mInterstitialAd.show()
    } else {
        Log.d("TAG", "The interstitial wasn't loaded yet.")
    }
}

Eventos de anuncio

Para personalizar aún más el comportamiento de tus anuncios, puedes añadir varios eventos a su ciclo de vida: carga, apertura, cierre, etc. Para procesar estos eventos, usa la clase AdListener.

Para usar la clase AdListener con un objeto InterstitialAd, solo tienes que hacer una llamada al método setAdListener():

Java

mInterstitialAd.setAdListener(new AdListener() {
    @Override
    public void onAdLoaded() {
        // Code to be executed when an ad finishes loading.
    }

    @Override
    public void onAdFailedToLoad(int errorCode) {
        // Code to be executed when an ad request fails.
    }

    @Override
    public void onAdOpened() {
        // Code to be executed when the ad is displayed.
    }

    @Override
    public void onAdClicked() {
        // Code to be executed when the user clicks on an ad.
    }

    @Override
    public void onAdLeftApplication() {
        // Code to be executed when the user has left the app.
    }

    @Override
    public void onAdClosed() {
        // Code to be executed when the interstitial ad is closed.
    }
});

Kotlin

mInterstitialAd.adListener = object: AdListener() {
    override fun onAdLoaded() {
        // Code to be executed when an ad finishes loading.
    }

    override fun onAdFailedToLoad(errorCode: Int) {
        // Code to be executed when an ad request fails.
    }

    override fun onAdOpened() {
        // Code to be executed when the ad is displayed.
    }

    override fun onAdClicked() {
        // Code to be executed when the user clicks on an ad.
    }

    override fun onAdLeftApplication() {
        // Code to be executed when the user has left the app.
    }

    override fun onAdClosed() {
        // Code to be executed when the interstitial ad is closed.
    }
}

Cada uno de los métodos anulables de AdListener se corresponde con un evento del ciclo de vida de un anuncio.

Métodos anulables
onAdLoaded() El método onAdLoaded() se ejecuta cuando el anuncio termina de cargarse.
onAdFailedToLoad() El método onAdFailedToLoad() incluye un parámetro errorCode que indica qué tipo de error se ha producido. Los valores posibles son constantes que se especifican en la clase AdRequest:
  • ERROR_CODE_INTERNAL_ERROR: se ha producido un error en los sistemas internos (por ejemplo, el servidor de anuncios ha enviado una respuesta no válida).
  • ERROR_CODE_INVALID_REQUEST: la solicitud de anuncio no era válida (por ejemplo, el ID del bloque de anuncios era incorrecto).
  • ERROR_CODE_NETWORK_ERROR: no se ha podido realizar la solicitud de anuncio debido a problemas con la conexión de red.
  • ERROR_CODE_NO_FILL: la solicitud de anuncio se ha realizado correctamente, pero no se ha devuelto ningún anuncio por falta de inventario publicitario.
onAdOpened() Este método se invoca cuando el anuncio mostrado ocupa toda la pantalla del dispositivo.
onAdLeftApplication() Este método se invoca cuando el clic de un usuario abre otra aplicación (por ejemplo, Google Play) y la aplicación que ya estaba abierta queda en segundo plano.
onAdClosed() Este método se invoca cuando el anuncio intersticial se cierra debido a que el usuario toca el icono de cerrar o el botón para volver atrás. Si la aplicación había pausado la reproducción de audio o el bucle del juego, este es un buen momento para reanudarlos.

Usar una clase AdListener para recargar anuncios

El método onAdClosed() de la clase AdListener es muy práctico para cargar un nuevo anuncio intersticial después de mostrar el anterior:

Java

...
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
        MobileAds.initialize(this,
            "ca-app-pub-3940256099942544~3347511713");
    mInterstitialAd = new InterstitialAd(this);
    mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
    mInterstitialAd.loadAd(new AdRequest.Builder().build());

    mInterstitialAd.setAdListener(new AdListener() {
        @Override
        public void onAdClosed() {
            // Load the next interstitial.
            mInterstitialAd.loadAd(new AdRequest.Builder().build());
        }

    });
}
...

Kotlin

...
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
        MobileAds.initialize(this,
            "ca-app-pub-3940256099942544~3347511713")
    mInterstitialAd = InterstitialAd(this)
    mInterstitialAd.adUnitId = "ca-app-pub-3940256099942544/1033173712"
    mInterstitialAd.adListener = object : AdListener() {
        override fun onAdClosed() {
            mInterstitialAd.loadAd(AdRequest.Builder().build())
        }
    }
}
...

Algunas prácticas recomendadas

Plantéate si los intersticiales son el tipo de anuncio más adecuado para tu aplicación.
Los anuncios intersticiales funcionan mejor en las aplicaciones con puntos de transición naturales. Por ejemplo, cuando se pueden mostrar al terminar una acción en la aplicación, como compartir una imagen o completar un nivel de un juego. En esos momentos, como el usuario espera que se produzca una interrupción, es fácil presentar un anuncio intersticial sin que su experiencia se vea afectada. Decide en qué puntos del flujo de trabajo de la aplicación se mostrarán anuncios intersticiales y analiza cómo crees que responderán los usuarios.
Recuerda pausar la acción cuando se muestra un anuncio intersticial.
Existen distintos tipos de anuncios intersticiales, como los de texto, de imagen y de vídeo. Es importante que cuando la aplicación muestre un anuncio intersticial se suspenda el uso de algunos recursos para que el anuncio pueda aprovecharlos. Por ejemplo, cuando realices la llamada para mostrar un anuncio intersticial, pausa todo el audio que se esté reproduciendo en la aplicación. La reproducción se reanuda en el gestor de eventos onAdClosed(), que se invocará cuando el usuario haya terminado de interactuar con el anuncio. Además, mientras se muestra el anuncio, es conveniente detener temporalmente cualquier tarea que consuma muchos recursos (como un bucle de juego). De esta forma, el usuario no se encontrará con gráficos lentos o que no respondan ni con vídeos entrecortados.
Define un tiempo de carga adecuado.
Evitar que el usuario tenga que esperar a que los anuncios intersticiales se carguen es igual de importante que mostrarlos en el momento adecuado. Para que la aplicación tenga un anuncio intersticial completamente cargado y listo cuando llegue el momento de mostrarlo, cárgalo por adelantado. Para ello, llama a loadAd() antes de llamar a show().
No satures al usuario con anuncios.
Aunque aumentar la frecuencia de los anuncios intersticiales en tu aplicación te parezca una excelente forma de incrementar los ingresos, también puede degradar la experiencia de usuario y provocar que disminuya el porcentaje de clics. Si interrumpes a los usuarios con demasiada frecuencia, no disfrutarán utilizando tu aplicación.

Código fuente

Otros recursos

Ejemplos en GitHub

  • Ejemplos de anuncios intersticiales en aplicaciones: Java | Kotlin

Tutoriales de vídeo de la serie Mobile Ads Garage

Pasos siguientes