Eventos personalizados de anuncios bonificados

Requisitos previos

Para poder crear eventos personalizados, primero debes integrar el formato de anuncio bonificado en tu aplicación.

Crear un evento personalizado

Para definir un evento personalizado, primero debes crearlo en la interfaz de AdMob. Encontrarás instrucciones sobre cómo hacerlo en Añadir un evento personalizado.

Una vez que se ha definido, el adaptador de eventos personalizados apunta a una clase dentro de tu aplicación que implementa la interfaz de Adapter para publicar un anuncio bonificado. El evento personalizado también mostrará un parámetro de servidor que se transferirá al adaptador del anuncio bonificado.

En esta captura de pantalla se muestran algunos ejemplos de ajustes de eventos personalizados:

En la captura de pantalla se muestran las siguientes entradas:

Nombre de clase
El nombre cualificado de la clase que implementa el adaptador de eventos personalizados.
Etiqueta
El nombre único que define la fuente del anuncio.
Parámetro
Argumento de cadena opcional transferido al adaptador de eventos personalizados.

Implementar el evento personalizado

Un evento personalizado es una clase que implementa Adapter para publicar anuncios de terceros. En los siguientes pasos se explica cómo implementar un evento personalizado para solicitar y mostrar anuncios bonificados de la red publicitaria de ejemplo.

Proporcionar los números de versión

Todos los eventos personalizados deben proporcionar al SDK de anuncios de Google para móviles su número de versión y el del SDK de terceros con el que interactúan. Las versiones se indican con VersionInfo:

...
import com.google.android.gms.ads.AdFormat;
import com.google.android.gms.ads.mediation.Adapter;
import com.google.android.gms.ads.mediation.VersionInfo;
...

public class SampleAdNetworkCustomEvent extends Adapter implements
    SampleAdNetworkInitCompletionListener, SampleRewardedVideoAdListener {
...
    @Override
    public VersionInfo getVersionInfo() {
        String versionString = SampleAdNetwork.VERSION_NAME;
        String splits[] = versionString.split("\\.");
        int major = Integer.parseInt(splits[0]);
        int minor = Integer.parseInt(splits[1]);
        int micro = Integer.parseInt(splits[2]) * 100 + Integer.parseInt(splits[3]);
        return new VersionInfo(major, minor, micro);
    }

    @Override
    public VersionInfo getSDKVersionInfo() {
        String versionString = com.SampleAdNetwork.VERSION_NAME;
        String splits[] = versionString.split("\\.");
        int major = Integer.parseInt(splits[0]);
        int minor = Integer.parseInt(splits[1]);
        int micro = Integer.parseInt(splits[2]);
        return new VersionInfo(major, minor, micro);
    }
...
}

Inicializar el adaptador

Cuando una aplicación inicializa el SDK de anuncios de Google para móviles, initialize() se invoca en todos los adaptadores que se han configurado para dicha aplicación en la interfaz de AdMob. Por el momento, esta función no se admite en los eventos personalizados, pero la clase Adapter requiere que se implemente el método. Para solucionar este problema, invoca la retrollamada de onInitializationSucceeded() como una implementación del marcador de posición.

...
import com.google.android.gms.ads.AdFormat;
import com.google.android.gms.ads.mediation.Adapter;
import com.google.android.gms.ads.mediation.InitializationCompleteCallback;
import com.google.android.gms.ads.mediation.MediationConfiguration;
...

public class SampleAdNetworkCustomEvent extends Adapter implements
        SampleRewardedVideoAdListener {

    private static final String SAMPLE_AD_UNIT_KEY = "parameter";

    private InitializationCompleteCallback initializationCallback;

    @Override
    public void initialize(Context context,
            InitializationCompleteCallback initializationCompleteCallback,
            List<MediationConfiguration> mediationConfigurations) {
        // This method currently does not get invoked. As a placeholder, call
        // onInitializationSucceeded(). This way, when this feature gets
        // implemented in the future, your custom events returns a success
        // callback for initialization instead of timing out, which would
        // delay the Google Mobile Ads SDK calling back your application with
        // the initialization complete callback.
        initializationCompleteCallback.onInitializationSucceeded();
    }
}

Solicitar un anuncio bonificado

Las solicitudes que hace tu aplicación para cargar anuncios bonificados invocan el método loadRewardedAd() del evento personalizado.

Informa de cualquier carga de anuncios, tanto si se realiza correctamente como si no, al SDK de anuncios de Google para móviles. Para ello, invoca los métodos onSuccess o onFailure en el argumento MediationAdLoadCallback que se ha proporcionado durante la llamada a loadRewardedAd(). Al informar de las cargas que se han realizado con éxito, aporta una referencia a un objeto que se ajuste a MediationRewardedAd. La invocación del método onSuccess devuelve un objeto MediationRewardedAdCallback. Los eventos personalizados deben conservar la referencia a este objeto para informar al SDK de anuncios de Google para móviles de los eventos de ciclo de vida de los anuncios. Este proceso se describe detalladamente en la sección Mostrar anuncios.

Aquí tienes un ejemplo de implementación de loadRewardedAd():

...
import com.google.ads.mediation.sample.sdk.SampleRewardedVideo;
import com.google.android.gms.ads.mediation.InitializationCompleteCallback;
import com.google.android.gms.ads.mediation.MediationAdLoadCallback;
import com.google.android.gms.ads.mediation.MediationRewardedAd;
import com.google.android.gms.ads.mediation.MediationRewardedAdCallback;
...

public class SampleAdNetworkCustomEvent extends Adapter implements
    SampleAdNetworkInitCompletionListener, MediationRewardedAd {
    private static final String SAMPLE_AD_UNIT_KEY = "parameter";
    // Domain for your custom event. Typically represented by the package name.
    private static final String DOMAIN = "com.google.ads.mediation.sample.customevent";
    // Error code indicating the Sample SDK does not have an ad available.
    private static final int ERROR_CODE_NOT_AVAILABLE = 0;

    private InitializationCompleteCallback initializationCallback;
    private MediationRewardedAdCallback rewardedAdCallback;
...
    @Override
    public void loadRewardedAd(MediationRewardedAdConfiguration adConfiguration,
        MediationAdLoadCallback<MediationRewardedAd, MediationRewardedAdCallback> adLoadCallback) {
        // Gets the custom event parameter from thd ad configuration.
        String adUnit = adConfiguration.getServerParameters().getString(SAMPLE_AD_UNIT_KEY);
        if (SampleRewardedVideo.isAdAvailable()) {
            this.rewardedAdCallback = adLoadCallback.onSuccess(this);
        } else {
            AdError error = new AdError(ERROR_CODE_NOT_AVAILABLE,
                    "Sample SDK does not have a rewarded video ad available", DOMAIN);
            adLoadCallback.onFailure(error);
        }
    }
...
}

Mostrar anuncios

El SDK de anuncios de Google para móviles puede llamar al método showAd() de tu evento personalizado en cualquier momento después de que dicho evento informe al SDK de que un anuncio se ha cargado correctamente. Después de invocar este método, el adaptador debe mostrar el anuncio bonificado.

...
public class SampleAdNetworkCustomEvent extends Adapter implements
    SampleAdNetworkInitCompletionListener, MediationRewardedAd {
...
    private MediationRewardedAdCallback rewardedAdCallback;
...
    @Override
    public void showAd(Context context) {
        // Show the rewarded ad.
        if (SampleRewardedVideo.isAdAvailable()) {
            // Rewarded ad available, show ad.
            SampleRewardedVideo.showAd();
        }
    }
...
}

Informar de los eventos de anuncio

Después de mostrar un anuncio, el evento personalizado debe informar al SDK de anuncios de Google para móviles sobre los eventos de ciclo de vida relacionados con dicho anuncio según corresponda, por medio del objeto MediationRewardedAdCallback que se proporciona cuando el anuncio se carga correctamente.

...
public class SampleAdNetworkCustomEvent extends Adapter implements
    SampleAdNetworkInitCompletionListener, MediationRewardedAd {
...
    private MediationRewardedAdCallback rewardedAdCallback;
...
    @Override
    public void showAd(Context context) {
        // Show the rewarded ad.
        if (SampleRewardedVideo.isAdAvailable()) {
            // Rewarded ad available, show ad.
            SampleRewardedVideo.showAd();
        } else {
            // Report that ad cannot be shown.
            AdError error = new AdError(ERROR_CODE_NOT_AVAILABLE,
                    "Sample SDK does not have a rewarded video ad available", DOMAIN);
            this.rewardedAdCallback.onAdFailedToShow(error);
        }
    }

    @Override
    public void onAdFullScreen() {
        this.rewardedAdCallback.onAdOpened();
        this.rewardedAdCallback.onVideoStart();
        this.rewardedAdCallback.reportAdImpression();
    }

    @Override
    public void onAdRewarded(final String rewardType, final int amount) {
        /*
         * AdMob requires a reward item with a reward type and
         * amount to be sent when sending the rewarded callback. If your SDK does
         * not have a reward amount you need to do the following:
         *
         * 1. AdMob provides an ability to override the
         *    reward value in the UI. Ask the publisher to override the reward
         *    value on AdMob's UI.
         * 2. Send a reward item with default values for the type (an empty string
         *    "") and reward amount (1).
         */
        this.rewardedAdCallback.onUserEarnedReward(new SampleRewardItem(rewardType,
            amount));
    }

    @Override
    public void onVideoComplete() {
        this.rewardedAdCallback.onVideoComplete();
    }

    @Override
    public void onAdClicked() {
        this.rewardedAdCallback.reportAdClicked();
    }

    @Override
    public void onAdClosed() {
        this.rewardedAdCallback.onAdClosed();
    }
...
}

Estos son los eventos de anuncio que deben comunicarse al SDK de anuncios de Google para móviles:

Evento de anuncio Descripción
onAdOpened() Informa al SDK de anuncios de Google para móviles de que el anuncio se ha abierto.
onAdFailedToShow() Informa al SDK de anuncios de Google para móviles de que el anuncio bonificado no ha podido mostrarse.
onVideoStart() Informa al SDK de anuncios de Google para móviles de que el anuncio bonificado ha empezado a reproducirse.
reportAdImpression() Informa al SDK de anuncios de Google para móviles de que se ha conseguido una impresión con el anuncio.
onVideoComplete() Informa al SDK de anuncios de Google para móviles de que el anuncio bonificado ha terminado de reproducirse.
onUserEarnedReward() Informa al SDK de anuncios de Google para móviles de que el usuario ha obtenido una bonificación.
reportAdClicked() Informa al SDK de anuncios de Google para móviles de que se ha hecho clic en el anuncio.
onAdClosed() Informa al SDK de anuncios de Google para móviles de que el anuncio se ha cerrado.