Eventos personalizados de anúncios premiados

Pré-requisitos

Conclua a configuração dos eventos personalizados.

Solicitar um anúncio premiado

Quando o item de linha do evento personalizado é alcançado na cadeia de mediação em cascata, o método loadRewardedAd() é chamado no nome de classe que você forneceu ao criar um evento personalizado. Nesse caso, esse método está em SampleCustomEvent, que chama o método loadRewardedAd() em SampleRewardedCustomEventLoader.

Para solicitar um anúncio premiado, crie ou modifique uma classe que estenda Adapter para implementar loadRewardedAd(). Além disso, crie uma nova classe para implementar MediationRewardedAd.

Em nosso exemplo de evento personalizado, SampleCustomEvent estende a classe Adapter e a delega para SampleRewardedCustomEventLoader.

Java

package com.google.ads.mediation.sample.customevent;

import com.google.android.gms.ads.mediation.Adapter;
import com.google.android.gms.ads.mediation.MediationRewardedAdConfiguration;
import com.google.android.gms.ads.mediation.MediationAdConfiguration;
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 SampleCustomEvent extends Adapter {

  private SampleNativeCustomEventLoader nativeLoader;

  @Override
  public void loadRewardedAd(
      @NonNull MediationRewardedAdConfiguration mediationRewardedAdConfiguration,
      @NonNull
          MediationAdLoadCallback<MediationRewardedAd, MediationRewardedAdCallback>
              mediationAdLoadCallback) {
    rewardedLoader =
        new SampleRewardedCustomEventLoader(
            mediationRewardedAdConfiguration, mediationAdLoadCallback);
    rewardedLoader.loadAd();
  }
}

SampleRewardedCustomEventLoader é responsável pelas seguintes tarefas:

  • Carregar o anúncio premiado

  • Implementação da interface MediationRewardedAd.

  • Receber e informar callbacks de eventos de anúncios para o SDK dos anúncios para dispositivos móveis do Google

O parâmetro opcional definido na interface do Ad Manager é incluído na configuração do anúncio. O parâmetro pode ser acessado pela adConfiguration.getServerParameters().getString(MediationConfiguration.CUSTOM_EVENT_SERVER_PARAMETER_FIELD): Esse parâmetro normalmente é um identificador de bloco de anúncios que o SDK de uma rede de publicidade exige ao instanciar um objeto de anúncio.

Java

package com.google.ads.mediation.sample.customevent;

import com.google.android.gms.ads.mediation.Adapter;
import com.google.android.gms.ads.mediation.MediationRewardedAdConfiguration;
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 SampleRewardedCustomEventLoader extends SampleRewardedAdListener
    implements MediationRewardedAd {

  /** Configuration for requesting the rewarded ad from the third-party network. */
  private final MediationRewardedAdConfiguration mediationRewardedAdConfiguration;

  /**
   * A {@link MediationAdLoadCallback} that handles any callback when a Sample
   * rewarded ad finishes loading.
   */
  private final MediationAdLoadCallback<MediationRewardedAd, MediationRewardedAdCallback>
      mediationAdLoadCallback;

  /** Callback for rewarded ad events. */
  private MediationRewardedAdCallback rewardedAdCallback;

  /** Constructor. */
  public SampleRewardedCustomEventLoader(
      @NonNull MediationRewardedAdConfiguration mediationRewardedAdConfiguration,
      @NonNull MediationAdLoadCallback<MediationRewardedAd, MediationRewardedAdCallback>
              mediationAdLoadCallback) {
    this.mediationRewardedAdConfiguration = mediationRewardedAdConfiguration;
    this.mediationAdLoadCallback = mediationAdLoadCallback;
  }

  /** Loads the rewarded ad from the third-party ad network. */
  public void loadAd() {
    // All custom events have a server parameter named "parameter" that returns
    // back the parameter entered into the AdMob UI when defining the custom event.
    Log.i("RewardedCustomEvent", "Begin loading rewarded ad.");
    String serverParameter = mediationRewardedAdConfiguration
        .getServerParameters()
        .getString(MediationConfiguration
        .CUSTOM_EVENT_SERVER_PARAMETER_FIELD);
    Log.d("RewardedCustomEvent", "Received server parameter.");
    SampleAdRequest request = createSampleRequest(mediationRewardedAdConfiguration);
    sampleRewardedAd = new SampleRewardedAd(serverParameter);
    sampleRewardedAd.setListener(this);
    Log.i("RewardedCustomEvent", "Start fetching rewarded ad.");
    sampleRewardedAd.loadAd(request);
  }

  public SampleAdRequest createSampleRequest(
      MediationAdConfiguration mediationAdConfiguration) {
    SampleAdRequest request = new SampleAdRequest();
    request.setTestMode(mediationAdConfiguration.isTestRequest());
    request.setKeywords(mediationAdConfiguration.getMediationExtras().keySet());
    return request;
  }
}

Dependendo se o anúncio é buscado com êxito ou encontra um erro, você vai chamar onSuccess() ou onFailure(). onSuccess() é chamado transmitindo uma instância da classe que implementa MediationRewardedAd.

Normalmente, esses métodos são implementados dentro de callbacks do SDK de terceiros implementado pelo adaptador. Para este exemplo, o SDK de amostra tem um SampleAdListener com callbacks relevantes:

Java

@Override
public void onRewardedAdLoaded() {
  rewardedAdCallback = mediationAdLoadCallback.onSuccess(this);
}

@Override
public void onRewardedAdFailedToLoad(SampleErrorCode errorCode) {
    mediationAdLoadCallback.onFailure(SampleCustomEventError.createSampleSdkError(errorCode));
}

MediationRewardedAd exige a implementação de um método showAd() para mostrar o anúncio:

Java

@Override
public void showAd(Context context) {
  if (!(context instanceof Activity)) {
    rewardedAdCallback.onAdFailedToShow(
        SampleCustomEventError.createCustomEventNoActivityContextError());
    return;
  }
  Activity activity = (Activity) context;

  if (!sampleRewardedAd.isAdAvailable()) {
    rewardedAdCallback.onAdFailedToShow(
        SampleCustomEventError.createCustomEventAdNotAvailableError());
    return;
  }
  sampleRewardedAd.showAd(activity);
}

Encaminhar eventos de mediação ao SDK dos anúncios para dispositivos móveis do Google

Depois que onSuccess() é chamado, o MediationRewardedAdCallback retornado pode ser usado pelo adaptador para encaminhar eventos de apresentação do ao SDK dos anúncios para dispositivos móveis do Google. A classe SampleRewardedCustomEventLoader estende a interface SampleAdListener para encaminhar callbacks da rede de publicidade de exemplo para o SDK dos anúncios para dispositivos móveis do Google.

É importante que seu evento personalizado encaminhe o máximo possível desses callbacks possível, para que seu aplicativo receba esses eventos equivalentes do SDK de anúncios para dispositivos móveis. Veja um exemplo de como usar callbacks:

Java

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

Isso conclui a implementação dos eventos personalizados em anúncios premiados. O está disponível GitHub. É possível usá-lo com uma rede de publicidade que já tenha suporte ou modificá-lo para exibir anúncios premiados de eventos personalizados.