Implementar um adaptador de anúncios premiados

Um adaptador de mediação recebe mensagens e solicitações do SDK dos anúncios para dispositivos móveis do Google e se comunica com um SDK de rede de terceiros para atender a essas solicitações.

Este guia é destinado a redes de publicidade que querem criar um adaptador de mediação de anúncios premiados para a mediação de anúncios para dispositivos móveis do Google. Um SDK de amostra é usado nos snippets de código abaixo para fins de demonstração. Confira uma implementação completa de um adaptador criado para este SDK de amostra no projeto de mediação doAndroid (link em inglês). Este guia explica como criar o adaptador.

Definir o nome da classe do adaptador e os parâmetros do servidor

As redes de publicidade mediadas pela plataforma de Mediação da AdMob geralmente exigem um ou mais identificadores para identificar um editor. Eles são representados como parâmetros do servidor e definidos na configuração de uma rede de publicidade de terceiros para mediação na interface da AdMob.

Antes de desenvolver um adaptador de mediação, você precisa fornecer ao Google o nome da classe do adaptador e outros parâmetros necessários para ter acesso à sua rede de anúncios.

Implementar a classe do adaptador

A primeira etapa é implementar a classe abstrata Adapter:

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

public class SampleAdapter extends Adapter {
 ...
}

Essa mudança garante que sua classe implemente vários métodos discutidos abaixo.

Informar números de versão

O adaptador precisa informar ao SDK dos anúncios para dispositivos móveis do Google a versão do adaptador e a do SDK de terceiros. As versões são informadas usando VersionInfo.

Os adaptadores de código aberto e com versões do Google usam um esquema de versão de adaptador de quatro dígitos, mas VersionInfo permite apenas três dígitos. Para contornar esse problema, é recomendável combinar os dois últimos dígitos na versão do patch, conforme mostrado abaixo:

...
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);
  }
  ...
}

Inicializar o adaptador

Após a inicialização do SDK dos anúncios para dispositivos móveis do Google de um app, o initialize() é invocado em todos os adaptadores configurados para o app na IU da AdMob.

O argumento List<MediationConfiguration> fornece informações sobre todos os canais configurados para sua rede de publicidade na IU da AdMob. Use essas informações para inicializar o SDK da rede de publicidade. Depois que o SDK da rede de publicidade for inicializado, informe o sucesso ou a falha na inicialização ao SDK de anúncios para dispositivos móveis do Google invocando o método onInitializationSucceeded() ou onInitializationFailed() no argumento InitializationCompleteCallback fornecido na chamada 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();
  }
  ...
}

Solicitar um anúncio premiado

Use o método loadRewardedAd() para solicitar um anúncio premiado. Manter uma referência a MediationAdLoadCallback, que permite informar um carregamento de anúncio bem-sucedido ou com falha ao SDK dos anúncios para dispositivos móveis do Google.

O objeto MediationRewardedAdCallback vai estar disponível quando onSuccess() for invocado, que você vai usar depois para redirecionar outros eventos de anúncios, como cliques ou recompensas concedidas.

...
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());
  }
  ...
}

Veicular o anúncio

O SDK dos anúncios para dispositivos móveis do Google pode chamar o método showAd() do seu adaptador a qualquer momento depois de ser notificado de um carregamento de anúncio bem-sucedido. O adaptador deve exibir o anúncio premiado. Se, por algum motivo, o anúncio não puder ser mostrado, chame o callback 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);
  }
  ...
}

Informar eventos de anúncios ao SDK de anúncios para dispositivos móveis

Depois de mostrar o anúncio, o adaptador deve informar os eventos de ciclo de vida do anúncio conforme adequado ao SDK dos anúncios para dispositivos móveis do Google usando o objeto MediationRewardedAdCallback fornecido no momento de carregamento do anúncio.

Normalmente, esses callbacks são encaminhados de métodos de callback disparados pelo SDK da rede de publicidade. Este exemplo implementa os callbacks do SDK de amostra e os mapeia para os callbacks disponíveis em 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();
  }
  ...
}

Os eventos de anúncios que precisam ser informados ao SDK dos anúncios para dispositivos móveis do Google estão detalhados abaixo:

Evento do anúncio Descrição
onAdOpened() Notifica o SDK dos anúncios para dispositivos móveis do Google de que o anúncio será aberto.
onVideoStart() Notifica o SDK dos anúncios para dispositivos móveis do Google de que um anúncio premiado começou a ser reproduzido.
reportAdImpression() Notifica o SDK dos anúncios para dispositivos móveis do Google de que uma impressão ocorreu no anúncio.
onVideoComplete() Notifica o SDK dos anúncios para dispositivos móveis do Google de que o anúncio premiado terminou a reprodução.
onUserEarnedReward() Notifica o SDK dos anúncios para dispositivos móveis do Google de que o usuário ganhou um prêmio.
reportAdClicked() Notifica o SDK dos anúncios para dispositivos móveis do Google de que o anúncio recebeu um clique.
onAdClosed() Notifica o SDK dos anúncios para dispositivos móveis do Google de que o anúncio está fechado.
onAdFailedToShow() Notifica o SDK dos anúncios para dispositivos móveis do Google de que o anúncio não foi exibido.