Implementare un adattatore annunci con premio

Un adattatore di mediazione riceve messaggi e richieste dall'SDK Google Mobile Ads e comunica con un SDK di rete di terze parti per soddisfare tali richieste.

Questa guida è rivolta alle reti pubblicitarie che vogliono creare un adattatore di mediazione degli annunci con premio per la mediazione degli annunci per dispositivi mobili di Google. Negli snippet di codice riportati di seguito viene utilizzato un SDK di esempio a scopo dimostrativo. Puoi trovare l'implementazione completa di un adattatore creato per questo SDK di esempio nel nostro progetto Android Mediazione. Questa guida spiega come creare l'adattatore.

Definisci il nome della classe dell'adattatore e i parametri del server

Le reti pubblicitarie con mediazione tramite la piattaforma di mediazione AdMob in genere richiedono uno o più identificatori per identificare un publisher. Questi identificatori sono rappresentati come parametri del server e sono definiti durante la configurazione di una rete pubblicitaria di terze parti per la mediazione nell'interfaccia utente di AdMob.

Prima di sviluppare un adattatore di mediazione, devi fornire a Google il nome della classe dell'adattatore e gli altri parametri richiesti per poter accedere alla tua rete pubblicitaria.

Classe adattatore di implementazione

Il primo passaggio consiste nell'implementare la classe astratta Adapter:

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

public class SampleAdapter extends Adapter {
 ...
}

Questa modifica garantisce che il corso implementi diversi metodi illustrati di seguito.

Numeri di versione dei report

L'adattatore deve segnalare all'SDK Google Mobile Ads sia la versione dell'adattatore stesso sia la versione dell'SDK di terze parti. Le versioni vengono segnalate utilizzando VersionInfo.

Gli adattatori open source e con più versioni di Google utilizzano uno schema di versione dell'adattatore a quattro cifre, ma VersionInfo consentono solo 3 cifre. Per ovviare a questo problema, ti consigliamo di combinare le ultime due cifre nella versione della patch, come mostrato di seguito:

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

Inizializza l'adattatore

Al momento dell'inizializzazione dell'SDK Google Mobile Ads da parte di un'app, viene richiamato initialize() su tutti gli adattatori configurati per l'app nell'interfaccia utente di AdMob.

L'argomento List<MediationConfiguration> fornisce informazioni su tutti i posizionamenti configurati per la tua rete pubblicitaria nell'interfaccia utente di AdMob. Utilizza queste informazioni per inizializzare l'SDK della rete pubblicitaria. Dopo aver inizializzato l'SDK della rete pubblicitaria, segnala un'inizializzazione riuscita o non riuscita nell'SDK Google Mobile Ads richiamando il metodo onInitializationSucceeded() o onInitializationFailed() nell'InitializationCompleteCallbackargomento fornito nella chiamata 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();
  }
  ...
}

Richiedere un annuncio con premio

Utilizza il metodo loadRewardedAd() per richiedere un annuncio con premio. Mantieni un riferimento a MediationAdLoadCallback per poter segnalare un caricamento degli annunci riuscito o non riuscito all'SDK Google Mobile Ads.

L'oggetto MediationRewardedAdCallback sarà disponibile una volta richiamato onSuccess(), che utilizzerai in un secondo momento per inoltrare altri eventi relativi agli annunci come clic o premi concessi.

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

Mostra l'annuncio

L'SDK Google Mobile Ads può chiamare il metodo showAd() del tuo adattatore in qualsiasi momento dopo che l'SDK riceve la notifica di un caricamento dell'annuncio riuscito. L'adattatore dovrebbe mostrare l'annuncio con premio. Se per qualsiasi motivo l'annuncio non può essere mostrato, chiama il 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);
  }
  ...
}

Segnalare gli eventi annuncio all'SDK Mobile Ads

Dopo aver visualizzato l'annuncio, l'adattatore deve registrare gli eventi del ciclo di vita dell'annuncio in modo adeguato all'SDK Google Mobile Ads utilizzando l'oggettoMediationRewardedAdCallback fornito al momento del caricamento dell'annuncio.

In genere, questi callback vengono inoltrati dai metodi di callback attivati dall'SDK della rete pubblicitaria. Questo esempio implementa i callback dell'SDK di esempio e li mappa ai callback disponibili su 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();
  }
  ...
}

Di seguito sono riportati gli eventi annuncio che devono essere segnalati all'SDK Google Mobile Ads:

Evento annuncio Descrizione
onAdOpened() Comunica all'SDK Google Mobile Ads che l'annuncio verrà aperto.
onVideoStart() Comunica all'SDK Google Mobile Ads che la riproduzione di un annuncio con premio è iniziata.
reportAdImpression() Comunica all'SDK Google Mobile Ads che si è verificata un'impressione dell'annuncio.
onVideoComplete() Comunica all'SDK Google Mobile Ads che la riproduzione dell'annuncio con premio è terminata.
onUserEarnedReward() Comunica all'SDK Google Mobile Ads che l'utente ha guadagnato un premio.
reportAdClicked() Comunica all'SDK Google Mobile Ads che è stato fatto clic sull'annuncio.
onAdClosed() Comunica all'SDK Google Mobile Ads che l'annuncio è chiuso.
onAdFailedToShow() Comunica all'SDK Google Mobile Ads che la pubblicazione dell'annuncio non è riuscita.