Cómo implementar un adaptador de anuncios recompensados

Un adaptador de mediación recibe mensajes y solicitudes del SDK de anuncios de Google para dispositivos móviles y se comunica con un SDK de red de terceros para completar esas solicitudes.

Esta guía está destinada a las redes de publicidad que buscan crear un adaptador de mediación de anuncios recompensados para la mediación de los anuncios de Google para dispositivos móviles. En los siguientes fragmentos de código, se usa un SDK de muestra con fines de demostración. Puedes encontrar una implementación completa de un adaptador compilado para este SDK de muestra en nuestro proyecto de MediaciónAndroid. En esta guía, se explica cómo compilar el adaptador.

Define el nombre de la clase del adaptador y los parámetros del servidor

Por lo general, las redes de publicidad que se median a través de la plataforma de mediación de AdMob requieren uno o más identificadores para identificar a un editor. Estos identificadores se representan como parámetros de servidor y se definen durante la configuración de una red de publicidad de terceros para su mediación en la IU de AdMob.

Antes de desarrollar un adaptador de mediación, debes proporcionar a Google tu nombre de clase de adaptador y otros parámetros necesarios para obtener acceso a tu red de publicidad.

Cómo implementar la clase Adapter

El primer paso es implementar la clase abstracta Adapter:

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

public class SampleAdapter extends Adapter {
 ...
}

Este cambio garantiza que tu clase implemente varios métodos que se analizan a continuación.

Números de versión del informe

El adaptador debe informar al SDK de anuncios de Google para dispositivos móviles tanto la versión del adaptador como la versión del SDK de terceros. Las versiones se informan mediante VersionInfo.

Los adaptadores de código abierto y de versiones de Google usan un esquema de versión de adaptador de 4 dígitos, pero VersionInfosolo permite 3 dígitos. Para solucionar este problema, se recomienda combinar los últimos dos dígitos en la versión del parche, como se muestra a continuación:

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

public class SampleAdapter extends Adapter implements SampleRewardedAdListener {
  ...
  @Override
  public VersionInfo getVersionInfo() {
    String versionString = BuildConfig.VERSION_NAME;
    String[] splits = versionString.split("\\.");

    if (splits.length >= 4) {
      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);
    }

    return new VersionInfo(0, 0, 0);
  }

  @Override
  public VersionInfo getSDKVersionInfo() {
    String versionString = SampleAdRequest.getSDKVersion();
    String[] splits = versionString.split("\\.");

    if (splits.length >= 3) {
      int major = Integer.parseInt(splits[0]);
      int minor = Integer.parseInt(splits[1]);
      int micro = Integer.parseInt(splits[2]);
      return new VersionInfo(major, minor, micro);
    }

    return new VersionInfo(0, 0, 0);
  }
  ...
}

Inicializa el adaptador

Cuando se inicializa una app del SDK de Google Mobile Ads, se invoca a initialize() en todos los adaptadores configurados para la app dentro de la IU de AdMob.

El argumento List<MediationConfiguration> proporciona información sobre todas las posiciones configuradas para tu red de publicidad dentro de la IU de AdMob. Usa esta información para inicializar el SDK de tu red de publicidad. Una vez que se haya inicializado el SDK de tu red de publicidad, informa al SDK de anuncios de Google para dispositivos móviles si la inicialización se realizó correctamente o con errores. Para ello, invoca los métodos onInitializationSucceeded() o onInitializationFailed() en el argumento InitializationCompleteCallback proporcionado en la llamada initialize().

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

public class SampleAdapter extends Adapter {
  ...
  @Override
  public void initialize(
      Context context,
      InitializationCompleteCallback initializationCompleteCallback,
      List<MediationConfiguration> mediationConfigurations) {
    if (context == null) {
      initializationCompleteCallback.onInitializationFailed(
          "Initialization Failed: Context is null.");
      return;
    }

    // The Sample SDK doesn't have an initialization method, so this example
    // immediately reports a success callback.
    initializationCompleteCallback.onInitializationSucceeded();
  }
  ...
}

Cómo solicitar un anuncio recompensado

Usa el método loadRewardedAd() para solicitar un anuncio recompensado. Conserva una referencia a MediationAdLoadCallback, que te permite informar una carga de anuncios exitosa o fallida al SDK de anuncios de Google para dispositivos móviles.

El objeto MediationRewardedAdCallback estará disponible una vez que se invoque onSuccess(), que más adelante usarás para retransmitir otros eventos de anuncios, como clics o recompensas.

...
import com.google.ads.mediation.sample.sdk.SampleAdRequest;
import com.google.ads.mediation.sample.sdk.SampleRewardedAd;
import com.google.ads.mediation.sample.sdk.SampleRewardedAdListener;
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 SampleAdapter extends Adapter, SampleRewardedAdListener
    implements MediationRewardedAd {
  ...

  /**
   * A MediationAdLoadCallback that handles any callback when a Sample rewarded
   * ad finishes loading.
   */
  private MediationAdLoadCallback<MediationRewardedAd, MediationRewardedAdCallback> adLoadCallBack;

  /**
   * Represents a SampleRewardedAd.
   */
  private SampleRewardedAd sampleRewardedAd;

  /**
   * Used to forward rewarded video ad events to the Google Mobile Ads SDK..
   */
  private MediationRewardedAdCallback rewardedAdCallback;

  ...

  // Hold a reference to the MediationAdLoadCallback object to report ad load
  // events to the Google Mobile Ads SDK.
  @Override
  public void loadRewardedAd(
      MediationRewardedAdConfiguration mediationRewardedAdConfiguration,
      MediationAdLoadCallback<MediationRewardedAd, MediationRewardedAdCallback>
          mediationAdLoadCallback) {
    adLoadCallBack = mediationAdLoadCallback;
    MediationRewardedAdConfiguration adConfiguration = mediationRewardedAdConfiguration;

    String adUnitId = adConfiguration.getServerParameters().getString(SAMPLE_AD_UNIT_KEY);

    sampleRewardedAd = new SampleRewardedAd(adUnitId);
    SampleAdRequest request = new SampleAdRequest();
    sampleRewardedAd.setListener(this);
    sampleRewardedAd.loadAd(request);
  }

  // Hold a reference to the MediationRewardedAdCallback object to report ad
  // lifecycle events to the Google Mobile Ads SDK.
  @Override
  public void onRewardedAdLoaded() {
    rewardedAdCallback = mediationAdLoadCallBack.onSuccess(this);
  }

  @Override
  public void onRewardedAdFailedToLoad(SampleErrorCode error) {
    mediationAdLoadCallBack.onFailure(error.toString());
  }
  ...
}

Muestra el anuncio

El SDK de anuncios de Google para dispositivos móviles podría llamar al método showAd() de tu adaptador en cualquier momento después de que el SDK reciba una notificación sobre la carga correcta de un anuncio. El adaptador debe mostrar el anuncio recompensado. Si, por algún motivo, no se puede mostrar el anuncio, llama a la devolución de llamada onAdFailedToShow().

public class SampleAdapter extends Adapter, SampleRewardedAdListener
    implements MediationRewardedAd {
  ...
  @Override
  public void showAd(Context context) {
    if (!(context instanceof Activity)) {
      rewardedAdCallback.onAdFailedToShow(
          "An activity context is required to show Sample rewarded ad.");
      return;
    }
    Activity activity = (Activity) context;

    if (!sampleRewardedAd.isAdAvailable()) {
      rewardedAdCallback.onAdFailedToShow("No ads to show.");
      return;
    }
    sampleRewardedAd.showAd(activity);
  }
  ...
}

Informa eventos de anuncios al SDK de anuncios para dispositivos móviles

Después de mostrar el anuncio, el adaptador debe informar los eventos de ciclo de vida del anuncio según corresponda al SDK de anuncios de Google para dispositivos móviles, mediante el objeto MediationRewardedAdCallback proporcionado durante el tiempo de carga correcto del anuncio.

Por lo general, estas devoluciones de llamada se reenvían desde métodos de devoluciones de llamada que activa el SDK de tu red de publicidad. En este ejemplo, se implementan las devoluciones de llamada del SDK de muestra y se asignan a las devoluciones de llamada disponibles en MediationRewardedAdCallback.

public class SampleAdapter extends Adapter, SampleRewardedAdListener
    implements MediationRewardedAd {
  ...
  @Override
  public void onAdRewarded(final String rewardType, final int amount) {
    RewardItem rewardItem =
        new RewardItem() {
          @Override
          public String getType() {
            return rewardType;
          }

          @Override
          public int getAmount() {
            return amount;
          }
        };
    rewardedAdCallback.onUserEarnedReward(rewardItem);
  }

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

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

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

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

A continuación, se detallan los eventos de anuncios que se deben informar al SDK de anuncios de Google para dispositivos móviles:

Evento de anuncio Descripción
onAdOpened() Le notifica al SDK de anuncios de Google para dispositivos móviles que se abrirá el anuncio.
onVideoStart() Le notifica al SDK de anuncios de Google para dispositivos móviles que comenzó a reproducirse un anuncio recompensado.
reportAdImpression() Le notifica al SDK de anuncios de Google para dispositivos móviles que se produjo una impresión en el anuncio.
onVideoComplete() Le notifica al SDK de anuncios de Google para dispositivos móviles que terminó de reproducirse el anuncio recompensado.
onUserEarnedReward() Le notifica al SDK de anuncios de Google para dispositivos móviles que el usuario obtuvo una recompensa.
reportAdClicked() Le notifica al SDK de anuncios de Google para dispositivos móviles que se hizo clic en el anuncio.
onAdClosed() Le notifica al SDK de anuncios de Google para dispositivos móviles que se cerró el anuncio.
onAdFailedToShow() Le notifica al SDK de anuncios de Google para dispositivos móviles que no se pudo mostrar el anuncio.