Implémenter un adaptateur d'annonce avec récompense

Un adaptateur de médiation reçoit des messages et des requêtes du SDK Google Mobile Ads et communique avec un SDK de réseau tiers afin de répondre à ces requêtes.

Ce guide est destiné aux réseaux publicitaires qui souhaitent créer un adaptateur de médiation pour les annonces avec récompense pour la médiation Google Mobile Ads. Un exemple de SDK est utilisé dans les extraits de code ci-dessous à des fins de démonstration. Vous trouverez une implémentation complète d'un adaptateur conçu pour cet exemple de SDK dans notre projet de médiationAndroid. Ce guide explique comment créer l'adaptateur.

Définir le nom de la classe de l'adaptateur et les paramètres du serveur

Les réseaux publicitaires utilisés par la plate-forme de médiation AdMob nécessitent généralement un ou plusieurs identifiants pour identifier un éditeur. Ces identifiants sont représentés en tant que paramètres de serveur et sont définis lors de la configuration d'un réseau publicitaire tiers pour la médiation dans l'UI AdMob.

Avant de développer un adaptateur de médiation, vous devez fournir à Google le nom de votre classe d'adaptateur et les autres paramètres requis afin d'obtenir l'accès à votre réseau publicitaire.

Implémenter la classe Adapter

La première étape consiste à implémenter la classe abstraite Adapter:

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

public class SampleAdapter extends Adapter {
 ...
}

Cette modification garantit que votre classe implémente plusieurs méthodes décrites ci-dessous.

Numéros de version des rapports

L'adaptateur doit signaler au SDK Google Mobile Ads à la fois la version de l'adaptateur lui-même et la version du SDK tiers. Les versions sont signalées à l'aide de VersionInfo.

Les adaptateurs Open Source et versionnés de Google utilisent un schéma de version d'adaptateur à quatre chiffres, mais VersionInfon'accepte que trois chiffres. Pour contourner ce problème, il est recommandé de combiner les deux derniers chiffres dans la version du correctif, comme indiqué ci-dessous:

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

Initialiser l'adaptateur

Lors de l'initialisation du SDK Google Mobile Ads pour une application, initialize() est appelé sur tous les adaptateurs configurés pour l'application dans l'interface utilisateur AdMob.

L'argument List<MediationConfiguration> fournit des informations sur tous les emplacements configurés pour votre réseau publicitaire dans l'interface utilisateur AdMob. Initialisez votre SDK de réseau publicitaire à l'aide de ces informations. Une fois votre SDK de réseau publicitaire initialisé, signalez au SDK Google Mobile Ads si l'initialisation a réussi ou échoué en appelant la méthode onInitializationSucceeded() ou onInitializationFailed() au niveau de l'argument InitializationCompleteCallback fourni dans l'appel 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();
  }
  ...
}

Demander une annonce avec récompense

Utilisez la méthode loadRewardedAd() pour demander une annonce avec récompense. Contenir une référence à MediationAdLoadCallback, qui vous permet de signaler un chargement d'annonce réussi ou ayant échoué au SDK Google Mobile Ads.

L'objet MediationRewardedAdCallback sera disponible une fois la méthode onSuccess() appelée. Vous l'utiliserez ensuite pour transmettre d'autres événements d'annonce tels que des clics ou des récompenses accordées.

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

Diffuser l'annonce

Le SDK Google Mobile Ads peut appeler la méthode showAd() de votre adaptateur à tout moment une fois qu'il a été informé que le chargement d'annonces a réussi. L'adaptateur doit afficher l'annonce avec récompense. Si, pour une raison quelconque, l'annonce ne peut pas être diffusée, appelez le rappel 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);
  }
  ...
}

Signaler les événements d'annonce au SDK Mobile Ads

Une fois l'annonce affichée, l'adaptateur doit signaler les événements du cycle de vie de l'annonce de manière appropriée pour le SDK Google Mobile Ads à l'aide de l'objet MediationRewardedAdCallback fourni au moment du chargement réussi de l'annonce.

En règle générale, ces rappels sont transférés à partir de méthodes de rappel déclenchées par votre SDK de réseau publicitaire. Cet exemple implémente les rappels du SDK Sample et les mappe aux rappels disponibles sur 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();
  }
  ...
}

Les événements d'annonce qui doivent être signalés au SDK Google Mobile Ads sont détaillés ci-dessous:

Événement d'annonce Description
onAdOpened() Notifie le SDK Google Mobile Ads que l'annonce sera ouverte.
onVideoStart() Notifie le SDK Google Mobile Ads qu'une annonce avec récompense a commencé à être diffusée.
reportAdImpression() Notifie le SDK Google Mobile Ads qu'une impression s'est produite sur l'annonce.
onVideoComplete() Notifie le SDK Google Mobile Ads que la lecture de l'annonce avec récompense est terminée.
onUserEarnedReward() Notifie le SDK Google Mobile Ads que l'utilisateur a gagné une récompense.
reportAdClicked() Notifie le SDK Google Mobile Ads qu'un clic a été effectué sur l'annonce.
onAdClosed() Notifie le SDK Google Mobile Ads que l'annonce est fermée.
onAdFailedToShow() Notifie le SDK Google Mobile Ads que l'annonce n'a pas pu être diffusée.