Anuncios de carga de aplicación

Los anuncios de carga de aplicación tienen un formato especial pensado para editores que quieran monetizar las pantallas de carga de sus aplicaciones. Estos anuncios se pueden cerrar en cualquier momento y están diseñados para mostrarse cuando los usuarios ponen tu aplicación en primer plano.

Los anuncios de carga de aplicación muestran automáticamente una pequeña zona de branding para que los usuarios sepan que se encuentran en tu aplicación. Aquí tienes un ejemplo de anuncio de carga de aplicación:

Requisitos previos

  • Tener instalado el complemento de Unity 6.1.0 o una versión posterior.
  • Completar la guía Primeros pasos. Tu aplicación Unity ya debería tener importado el complemento para Unity de anuncios de Google para móviles.

Comprobar siempre las aplicaciones con anuncios de prueba

Cuando crees y testes 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 utilizar los IDs exclusivos de los bloques de anuncios de prueba para los anuncios bonificados de Android y iOS:

Android

ca-app-pub-3940256099942544/3419835294

iOS

ca-app-pub-3940256099942544/5662855259

Se han configurado especialmente para devolver anuncios de prueba para cada solicitud, y puedes usarlos en tus propias aplicaciones mientras las programas, haces pruebas y depuras los posibles errores. Solo tienes que sustituirlos por el ID de tu bloque 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 de anuncios de prueba.

Implementación

Los principales pasos para integrar anuncios de carga de aplicación son los siguientes:

  1. Crear una clase de utilidad que cargue los anuncios antes de que deban aparecer.
  2. Cargar anuncios.
  3. Registrar el delegado para recibir retrollamadas y mostrar anuncios.
  4. Esperar a que MonoBehavior.OnApplicationPause(bool) muestre anuncios durante eventos en primer plano.

Crear una clase de utilidad

Crea una clase llamada AppOpenAdManager para cargar anuncios. Esta clase gestiona una variable de instancia para monitorizar un anuncio cargado y el ID del bloque de anuncios de cada plataforma.

using System;
using GoogleMobileAds.Api;
using UnityEngine;

public class AppOpenAdManager
{
    #if UNITY_ANDROID
    private const string AD_UNIT_ID = "ca-app-pub-3940256099942544/3419835294";
    #elif UNITY_IOS
    private const string AD_UNIT_ID = "ca-app-pub-3940256099942544/5662855259";
    #else
    private const string AD_UNIT_ID = "unexpected_platform";
    #endif

    private static AppOpenAdManager instance;

    private AppOpenAd ad;

    private bool isShowingAd = false;

    public static AppOpenAdManager Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new AppOpenAdManager();
            }

            return instance;
        }
    }

    private bool IsAdAvailable
    {
        get
        {
            return ad != null;
        }
    }

    public void LoadAd()
    {
        // We will implement this below.
    }
}

Cargar anuncios

Tus anuncios de carga de aplicación deben estar listos antes de que los usuarios accedan a la aplicación. Implementa una clase de utilidad para hacer solicitudes de anuncios antes de que necesites mostrarlos.

Para cargar anuncios, utiliza el método LoadAd() estático de la clase AppOpenAd. El método de carga requiere un ID de bloque de anuncios, un modo ScreenOrientation, un objeto AdRequest y un controlador de finalización al que se llama cuando la carga de anuncios se realiza correctamente o da error. El objeto AppOpenAd cargado se proporciona como parámetro en el controlador de finalización. En el siguiente ejemplo se muestra cómo cargar un objeto AppOpenAd.

public class AppOpenAdManager
{
    ...

    public void LoadAd()
    {
        AdRequest request = new AdRequest.Builder().Build();

        // Load an app open ad for portrait orientation
        AppOpenAd.LoadAd(AD_UNIT_ID, ScreenOrientation.Portrait, request, ((appOpenAd, error) =>
        {
            if (error != null)
            {
                // Handle the error.
                Debug.LogFormat("Failed to load the ad. (reason: {0})", error.LoadAdError.GetMessage());
                return;
            }

            // App open ad is loaded.
            ad = appOpenAd;
        }));
    }
}

Mostrar anuncios y gestionar retrollamadas a pantalla completa

Antes de mostrar anuncios, registra el delegado para que cada gestor de eventos procese todos los eventos publicitarios correspondientes.

public class AppOpenAdManager
{
    ...

    public void ShowAdIfAvailable()
    {
        if (!IsAdAvailable || isShowingAd)
        {
            return;
        }

        ad.OnAdDidDismissFullScreenContent += HandleAdDidDismissFullScreenContent;
        ad.OnAdFailedToPresentFullScreenContent += HandleAdFailedToPresentFullScreenContent;
        ad.OnAdDidPresentFullScreenContent += HandleAdDidPresentFullScreenContent;
        ad.OnAdDidRecordImpression += HandleAdDidRecordImpression;
        ad.OnPaidEvent += HandlePaidEvent;

        ad.Show();
    }

    private void HandleAdDidDismissFullScreenContent(object sender, EventArgs args)
    {
        Debug.Log("Closed app open ad");
        // Set the ad to null to indicate that AppOpenAdManager no longer has another ad to show.
        ad = null;
        isShowingAd = false;
        LoadAd();
    }

    private void HandleAdFailedToPresentFullScreenContent(object sender, AdErrorEventArgs args)
    {
        Debug.LogFormat("Failed to present the ad (reason: {0})", args.AdError.GetMessage());
        // Set the ad to null to indicate that AppOpenAdManager no longer has another ad to show.
        ad = null;
        LoadAd();
    }

    private void HandleAdDidPresentFullScreenContent(object sender, EventArgs args)
    {
        Debug.Log("Displayed app open ad");
        isShowingAd = true;
    }

    private void HandleAdDidRecordImpression(object sender, EventArgs args)
    {
        Debug.Log("Recorded ad impression");
    }

    private void HandlePaidEvent(object sender, AdValueEventArgs args)
    {
        Debug.LogFormat("Received paid event. (currency: {0}, value: {1}",
                args.AdValue.CurrencyCode, args.AdValue.Value);
    }
}

Si un usuario vuelve a tu aplicación después de haber salido tras hacer clic en un anuncio de carga de aplicación, no se le mostrará ningún otro anuncio de este tipo.

Procesar eventos de aplicación en primer plano

Para recibir notificaciones de eventos de aplicación en primer plano, debes procesar el mensaje de pausa de la aplicación. Si implementas el método MonoBehavior.OnApplicationPause(bool), se avisará a tu aplicación de los eventos de carga y de los eventos en primer plano, y se podrán mostrar anuncios en ella.

using UnityEngine;

using GoogleMobileAds.Api;

public class GoogleMobileAdsDemoScript : MonoBehaviour
{

    public void Start()
    {
        // Load an app open ad when the scene starts
        AppOpenAdManager.Instance.LoadAd();
    }

    public void OnApplicationPause(bool paused)
    {
        // Display the app open ad when the app is foregrounded
        if (!paused)
        {
            AppOpenAdManager.Instance.ShowAdIfAvailable();
        }
    }
}

Tener en cuenta la caducidad de los anuncios

Para asegurarte de que no se muestran anuncios caducados, añade un método al elemento AppOpenAdManager que compruebe cuánto tiempo ha pasado desde que se han cargado los anuncios. A continuación, utiliza ese método para verificar si los anuncios siguen siendo válidos.

public class AppOpenAdManager
{
    ...
    private DateTime loadTime;

    private bool IsAdAvailable
    {
        get
        {
            return ad != null && (System.DateTime.UtcNow - loadTime).TotalHours < 4;
        }
    }

    public void LoadAd()
    {
        if (IsAdAvailable)
        {
            return;
        }

        AdRequest request = new AdRequest.Builder().Build();
        AppOpenAd.LoadAd(AD_UNIT_ID, ScreenOrientation.Portrait, request, ((appOpenAd, error) =>
        {
            if (error != null)
            {
                Debug.LogFormat("Failed to load the ad. (reason: {0})", error.LoadAdError.GetMessage());
                return;
            }

            ad = appOpenAd;
            loadTime = DateTime.UtcNow;
        }));
    }
}

Arranques en frío y pantallas de carga

Hasta ahora, nos hemos centrado en los casos en los que solo muestras anuncios de carga de aplicación cuando los usuarios tienen tu aplicación suspendida en la memoria del dispositivo (abierta en segundo plano) y la ponen en primer plano. Sin embargo, el arranque en frío tiene lugar cuando tu aplicación se lanza sin que se encuentre en segundo plano porque se haya abierto previamente.

Un ejemplo de este tipo de arranque se da cuando un usuario abre tu aplicación por primera vez. En el caso de los arranques en frío, no tienes ningún anuncio de carga de aplicación previamente cargado que esté listo para mostrarse. Desde que se solicita el anuncio hasta que se recibe, se produce un retraso de unos instantes. Es posible que, durante ese breve periodo, los usuarios puedan usar tu aplicación antes de que les sorprenda un anuncio fuera de contexto. Este comportamiento debe evitarse porque ofrece una mala experiencia a los usuarios.

La mejor forma de utilizar anuncios de carga de aplicación en arranques en frío es usar una pantalla para cargar los recursos de la aplicación o del juego y mostrar anuncios solo en esa pantalla. Si tu aplicación ha terminado de cargarse y se ha dirigido al usuario al contenido principal, no muestres ningún anuncio.

Prácticas recomendadas

Los anuncios de carga de aplicación te ayudan a obtener ingresos con las pantallas de carga de tu aplicación, cuando la aplicación se lanza por primera vez y durante los cambios de aplicación. No obstante, es importante que tengas presentes las prácticas recomendadas para ofrecer la mejor experiencia posible. En este sentido, recuerda lo siguiente:

  • Muestra tu primer anuncio de carga de aplicación una vez que los usuarios hayan utilizado la aplicación varias veces.
  • Muestra anuncios de carga de aplicación en aquellos momentos en los que, si no lo hicieras, los usuarios tendrían que esperar a que la aplicación se cargara.
  • Si tienes una pantalla de carga debajo del anuncio de carga de la aplicación y la pantalla termina de cargarse antes de que se cierre el anuncio, te recomendamos que la cierres con el gestor de eventos OnAdDidDismissFullScreenContent.