Rewarded Ads

Rewarded ads are ads that users have the option of interacting with in exchange for in-app rewards. This guide shows you how to integrate rewarded ads from Ad Manager into an Android app.

If you'd like to get an idea of how rewarded ads work, take a look at the demo below. This demo shows the flow of rewarded video ads integrated in to a simple game.

Los anuncios bonificados permiten a los usuarios conseguir bonificaciones en una aplicación a cambio de interactuar con ellos. En esta guía, te mostramos cómo integrar este tipo de anuncios desde AdMob en una aplicación para Android.

Requisitos previos

  • Tener la versión 17.2.0 del SDK de anuncios de Google para móviles o una versión posterior.
  • Sigue la guía de inicio para importar el SDK de anuncios de Google para móviles y actualizar el manifiesto de Android.

Crear un objeto de anuncio bonificado

Los anuncios bonificados se solicitan y muestran mediante los objetos RewardedAd. Para empezar, debes crear una instancia RewardedAd. En el siguiente fragmento de código, puedes ver cómo se hace en el método onCreate() de una Activity:

import com.google.android.gms.ads.rewarded.RewardedAd;

public class MainActivity extends Activity {

    private RewardedAd rewardedAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        rewardedAd = new RewardedAd(this,
            "/6499/example/rewarded-video");
    }

}

El constructor necesita los siguientes argumentos:

Comprobar siempre las aplicaciones con anuncios de prueba

Cuando crees y pruebes tus aplicaciones, utiliza siempre anuncios de prueba en lugar de anuncios de producción activos. De lo contrario, podríamos suspender tu cuenta.

La forma más sencilla de cargar anuncios de prueba es usar el ID de bloque de anuncios de prueba que hemos creado para los anuncios bonificados de Android:

/6499/example/rewarded-video

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 Anuncios de prueba.

Cargar anuncios

Para cargar un anuncio bonificado, llama al método loadAd() del objeto RewardedAd. Este método requiere instancias de PublisherAdRequest y RewardedAdLoadCallback como argumentos.

import com.google.android.gms.ads.rewarded.RewardedAd;

public class MainActivity extends Activity {

    private RewardedAd rewardedAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        rewardedAd = new RewardedAd(this,
            "/6499/example/rewarded-video");

        RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() {
            @Override
            public void onRewardedAdLoaded() {
                // Ad successfully loaded.
            }

           @Override
            public void onRewardedAdFailedToLoad(int errorCode) {
                // Ad failed to load.
            }
        };
        rewardedAd.loadAd(new PublisherAdRequest.Builder().build(), adLoadCallback);
    }
}

Los métodos onRewardedAdLoaded() y onRewardedAdFailedToLoad() de RewardedAdLoadCallback proporcionan el resultado de la operación de carga de anuncios.

Métodos anulables
onRewardedAdLoaded() Este método se ejecuta cuando un anuncio termina de cargarse.
onRewardedAdFailedToLoad() El método se invoca cuando un anuncio no puede cargarse. Incluye un parámetro errorCode que indica qué tipo de error se ha producido. Los posibles valores se definen como constantes en la clase PublisherAdRequest:
  • ERROR_CODE_INTERNAL_ERROR: se ha producido un problema en nuestros 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, porque el ID de bloque de anuncios era incorrecto.
  • ERROR_CODE_NETWORK_ERROR: no se ha podido hacer la solicitud de anuncio debido a problemas con la conexión de red.
  • ERROR_CODE_NO_FILL: la solicitud de anuncio se ha hecho correctamente, pero no se ha devuelto ningún anuncio por falta de inventario publicitario.

Mostrar anuncios

Antes de mostrar un anuncio bonificado a los usuarios, debes ofrecerles explícitamente la posibilidad de elegir si quieren ver este tipo de contenido publicitario a cambio de una bonificación. Estos anuncios siempre deben ser una experiencia que los usuarios elijan de forma voluntaria.

Si quieres mostrar un RewardedAd, usa el método isLoaded() para verificar que la carga ha finalizado y, después, llama a show(). El método show() requiere instancias Activity y RewardedAdCallback como argumentos. La instancia Activity debe ser la actividad desde la que se ha presentado el anuncio bonificado.

El anuncio bonificado del ejemplo de código anterior podría mostrarse en el OnClickListener de un botón de esta manera:

myButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (rewardedAd.isLoaded()) {
            Activity activityContext = ...;
            RewardedAdCallback adCallback = new RewardedAdCallback() {
                public void onRewardedAdOpened() {
                    // Ad opened.
                }

                public void onRewardedAdClosed() {
                    // Ad closed.
                }

                public void onUserEarnedReward(@NonNull RewardItem reward) {
                    // User earned reward.
                }

                public void onRewardedAdFailedToShow(int errorCode) {
                    // Ad failed to display
                }
            };
            rewardedAd.show(activityContext, adCallback);
        } else {
            Log.d("TAG", "The rewarded ad wasn't loaded yet.");
        }
    }
});

Recibir notificaciones de eventos de anuncio

El elemento RewardedAdCallback proporcionado al método show() recibe notificaciones de los eventos de anuncios bonificados. Cada uno de los métodos anulables de RewardedAdCallback se corresponde con un evento del ciclo de vida de un anuncio bonificado. Por ejemplo, el método onUserEarnedReward() es el lugar perfecto para ofrecer al usuario su recompensa. A continuación te facilitamos más detalles sobre cada método de evento de anuncio.

Métodos anulables
onRewardedAdOpened() Este método se invoca cuando el anuncio mostrado ocupa toda la pantalla del dispositivo.
onRewardedAdClosed() Este método se invoca cuando el anuncio de vídeo bonificado se cierra debido a que el usuario toca el icono de cerrar o el botón para volver atrás. Si la aplicación detiene la salida de audio o el bucle del juego, este es un buen lugar para reanudarlos.
onUserEarnedReward() Este método se invoca cuando debe recompensarse al usuario por interactuar con el anuncio. Puedes acceder a los detalles de la recompensa que se han configurado en tu bloque de anuncios a través de los métodos getType() y getAmount() del parámetro RewardItem.
onRewardedAdFailedToShow() Este método se invoca cuando un anuncio no puede mostrarse. Incluye un parámetro errorCode que indica qué tipo de error se ha producido. Los valores posibles se definen como constantes en la clase RewardedAdCallback:
  • ERROR_CODE_INTERNAL_ERROR: se ha producido un problema en nuestros sistemas internos.
  • ERROR_CODE_AD_REUSED: el anuncio bonificado se ha mostrado ya. Los objetos RewardedAd son de un solo uso y solo pueden mostrarse una vez. Crea una instancia y carga un RewardedAd nuevo para mostrarlo.
  • ERROR_CODE_NOT_READY: el anuncio no se ha cargado correctamente.
  • ERROR_CODE_APP_NOT_FOREGROUND: el anuncio no puede mostrarse cuando la aplicación no se ejecuta en primer plano.

Usar RewardedAdCallback para precargar el siguiente anuncio bonificado

RewardedAd es un objeto de un solo uso. Esto quiere decir que, una vez que se muestre un anuncio bonificado, dicho objeto no podrá usarse para cargar otro anuncio de este tipo. Para solicitar otro anuncio bonificado, deberás crear otro objeto RewardedAd.

Como práctica recomendada, puedes cargar otro anuncio bonificado en el método onRewardedAdClosed() de RewardedAdCallback, de forma que el siguiente anuncio de este tipo empiece a cargarse en cuanto el anterior se haya cerrado, tal como se muestra en este fragmento de código:

public RewardedAd createAndLoadRewardedAd() {
        RewardedAd rewardedAd = new RewardedAd(this,
                "/6499/example/rewarded-video");
        RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() {
            @Override
            public void onRewardedAdLoaded() {
                // Ad successfully loaded.
            }

            @Override
            public void onRewardedAdFailedToLoad(int errorCode) {
                // Ad failed to load.
            }
        };
        rewardedAd.loadAd(new PublisherAdRequest.Builder().build(), adLoadCallback);
        return rewardedAd;
}

@Override
public void onRewardedAdClosed() {
    this.rewardedAd = createAndLoadRewardedAd();
}

Cargar varios anuncios bonificados

Si quieres cargar varios anuncios bonificados, sigue los pasos que se describen en las secciones Crear un objeto de anuncio bonificado y Cargar anuncios para cada uno de los anuncios en cuestión. En el siguiente fragmento de código se muestra cómo cargar dos anuncios bonificados en dos emplazamientos publicitarios diferentes:

package ...

import com.google.android.gms.ads.PublisherAdRequest;
import com.google.android.gms.ads.rewarded.RewardedAd;

public class MainActivity extends Activity {

    private RewardedAd gameOverRewardedAd;
    private RewardedAd extraCoinsRewardedAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        gameOverRewardedAd = createAndLoadRewardedAd(
          "/6499/example/rewarded-video");
        extraCoinsRewardedAd = createAndLoadRewardedAd(
          "/6499/example/rewarded-video");
    }

    public RewardedAd createAndLoadRewardedAd(String adUnitId) {
        RewardedAd rewardedAd = new RewardedAd(this, adUnitId);
        RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() {
            @Override
            public void onRewardedAdLoaded() {
                // Ad successfully loaded.
            }

            @Override
            public void onRewardedAdFailedToLoad(int errorCode) {
                // Ad failed to load.
            }
        };
        rewardedAd.loadAd(new PublisherAdRequest.Builder().build(), adLoadCallback);
        return rewardedAd;
    }
}

Pasos siguientes

  • Crea tu propio bloque de anuncios de vídeo bonificados en la interfaz de AdMob.

  • Prueba otro formato de anuncio: