Внедрение адаптера рекламы с вознаграждением

Адаптер медиации получает сообщения и запросы от Google Mobile Ads SDK и взаимодействует со сторонним сетевым SDK для выполнения этих запросов.

Это руководство предназначено для рекламных сетей, желающих создать адаптер посредничества рекламы с вознаграждением для Google Mobile Ads Mediation. Пример SDK используется в приведенных ниже фрагментах кода в демонстрационных целях. Полную реализацию адаптера , созданного для этого примера SDK, можно найти в нашем проекте медиацииAndroid . В этом руководстве объясняется, как собрать адаптер.

Определите имя класса адаптера и параметры сервера.

Рекламным сетям, работающим через посредническую платформу AdMob, обычно требуется один или несколько идентификаторов для идентификации издателя. Эти идентификаторы представлены как параметры сервера и определяются при настройке сторонней рекламной сети для посредничества в пользовательском интерфейсе AdMob .

Прежде чем разрабатывать адаптер медиации, вы должны предоставить Google имя класса адаптера и другие необходимые параметры, чтобы получить доступ к вашей рекламной сети.

Реализация класса адаптера

Первым шагом является реализация абстрактного класса адаптера :

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

public class SampleAdapter extends Adapter {
 ...
}

Это изменение гарантирует, что ваш класс реализует несколько методов, обсуждаемых ниже.

Номера версий отчета

Адаптер должен сообщать Google Mobile Ads SDK как версию самого адаптера, так и версию стороннего SDK. Версии сообщаются с помощью VersionInfo.

Адаптеры Google с открытым исходным кодом и версии с открытым исходным кодом используют схему версии адаптера из 4 цифр, но VersionInfoдопускает только 3 цифры. Чтобы обойти эту проблему, рекомендуется объединить последние две цифры в версию патча, как показано ниже:

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

Инициализируйте адаптер

При инициализации приложения Google Mobile Ads SDK initialize() вызывается на всех адаптерах, настроенных для приложения в пользовательском интерфейсе AdMob.

Аргумент List<MediationConfiguration> предоставляет информацию обо всех местах размещения, настроенных для вашей рекламной сети в пользовательском интерфейсе AdMob. Используйте эту информацию для инициализации SDK вашей рекламной сети. После инициализации SDK вашей рекламной сети сообщите об успешной или неудачной инициализации в SDK Google Mobile Ads, вызвав метод onInitializationSucceeded() или onInitializationFailed() для аргумента InitializationCompleteCallback , указанного в вызове 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();
  }
  ...
}

Запросить рекламу с вознаграждением

Используйте метод loadRewardedAd() для запроса рекламы с вознаграждением. Сохраните ссылку на MediationAdLoadCallback , которая позволяет сообщать об успешной или неудачной загрузке объявления в Google Mobile Ads SDK.

Объект MediationRewardedAdCallback будет доступен после вызова onSuccess() , который вы позже будете использовать для ретрансляции других рекламных событий, таких как клики или предоставленные вознаграждения.

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

Показать объявление

Google Mobile Ads SDK может вызвать метод showAd() вашего адаптера в любое время после того, как SDK получит уведомление об успешной загрузке объявления. Адаптер должен отображать рекламу с вознаграждением. Если по какой-либо причине объявление не может быть показано, вызовите обратный вызов 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);
  }
  ...
}

Сообщайте о рекламных событиях в Mobile Ads SDK

После отображения объявления адаптер должен сообщать о событиях жизненного цикла объявления соответствующим образом в Google Mobile Ads SDK, используя объект MediationRewardedAdCallback , предоставляемый во время успешной загрузки объявления.

Обычно эти обратные вызовы перенаправляются из методов обратных вызовов, запускаемых SDK вашей рекламной сети. В этом примере реализуются обратные вызовы Sample SDK и сопоставляются с обратными вызовами, доступными в 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();
  }
  ...
}

Рекламные события, о которых следует сообщать в Google Mobile Ads SDK, подробно описаны ниже:

Рекламное событие Описание
onAdOpened() Уведомляет Google Mobile Ads SDK о том, что объявление будет открыто.
onVideoStart() Уведомляет Google Mobile Ads SDK о начале воспроизведения объявления с вознаграждением.
отчетРекламное впечатление() Уведомляет Google Mobile Ads SDK о показе объявления.
onVideoComplete() Уведомляет Google Mobile Ads SDK о завершении воспроизведения объявления с вознаграждением.
onUserEarnedReward() Уведомляет Google Mobile Ads SDK о том, что пользователь получил вознаграждение.
отчет по клику по объявлению() Уведомляет Google Mobile Ads SDK о клике по объявлению.
onAdClosed() Уведомляет Google Mobile Ads SDK о том, что объявление закрыто.
onAdFailedToShow() Уведомляет Google Mobile Ads SDK о том, что объявление не удалось показать.