Пользовательские события баннерной рекламы

Выберите платформу: Android (бета-версия)Новый Android iOS

Предварительные требования

Завершите настройку пользовательских событий .

Запросить баннерную рекламу

Когда в цепочке обработки событий «водопад» достигается элемент пользовательского события, вызывается метод loadBannerAd() для класса, указанного вами при создании пользовательского события . В данном случае этот метод находится в классе SampleCustomEvent , который затем вызывает метод loadBannerAd() в SampleBannerCustomEventLoader .

Для запроса баннерной рекламы создайте или измените класс, наследующий Adapter , чтобы он реализовывал loadBannerAd() . Кроме того, создайте новый класс, реализующий MediationBannerAd .

В нашем примере с пользовательским событием класс SampleCustomEvent наследует класс Adapter , а затем делегирует обработку классу SampleBannerCustomEventLoader .

Java

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

import com.google.android.gms.ads.mediation.Adapter;
import com.google.android.gms.ads.mediation.MediationAdConfiguration;
import com.google.android.gms.ads.mediation.MediationAdLoadCallback;
import com.google.android.gms.ads.mediation.MediationBannerAd;
import com.google.android.gms.ads.mediation.MediationBannerAdCallback;
...

public class SampleCustomEvent extends Adapter {
  private SampleBannerCustomEventLoader bannerLoader;
  @Override
  public void loadBannerAd(
      @NonNull MediationBannerAdConfiguration adConfiguration,
      @NonNull MediationAdLoadCallback<MediationBannerAd, MediationBannerAdCallback> callback) {
    bannerLoader = new SampleBannerCustomEventLoader(adConfiguration, callback);
    bannerLoader.loadAd();
  }
}

SampleBannerCustomEventLoader отвечает за выполнение следующих задач:

  • Загрузка баннерной рекламы и вызов метода MediationAdLoadCallback после завершения загрузки.

  • Реализация интерфейса MediationBannerAd .

  • Получение и передача обратных вызовов событий рекламы в SDK Google Mobile Ads.

Необязательный параметр, определенный в UI включен в конфигурацию рекламы. Доступ к параметру можно получить через adConfiguration.getServerParameters().getString(MediationConfiguration.CUSTOM_EVENT_SERVER_PARAMETER_FIELD) . Этот параметр обычно представляет собой идентификатор рекламного блока, который требуется SDK рекламной сети при создании объекта рекламы.

Java

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

import com.google.android.gms.ads.mediation.Adapter;
import com.google.android.gms.ads.mediation.MediationBannerAdConfiguration;
import com.google.android.gms.ads.mediation.MediationAdLoadCallback;
import com.google.android.gms.ads.mediation.MediationBannerAd;
import com.google.android.gms.ads.mediation.MediationBannerAdCallback;
...

public class SampleBannerCustomEventLoader extends SampleAdListener implements MediationBannerAd {

  /** View to contain the sample banner ad. */
  private SampleAdView sampleAdView;

  /** Configuration for requesting the banner ad from the third-party network. */
  private final MediationBannerAdConfiguration mediationBannerAdConfiguration;

  /** Callback that fires on loading success or failure. */
  private final MediationAdLoadCallback<MediationBannerAd, MediationBannerAdCallback>
      mediationAdLoadCallback;

  /** Callback for banner ad events. */
  private MediationBannerAdCallback bannerAdCallback;

  /** Constructor. */
  public SampleBannerCustomEventLoader(
      @NonNull MediationBannerAdConfiguration mediationBannerAdConfiguration,
      @NonNull MediationAdLoadCallback<MediationBannerAd, MediationBannerAdCallback>
              mediationAdLoadCallback) {
    this.mediationBannerAdConfiguration = mediationBannerAdConfiguration;
    this.mediationAdLoadCallback = mediationAdLoadCallback;
  }

  /** Loads a banner 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 UI when defining the custom event.
    Log.i("BannerCustomEvent", "Begin loading banner ad.");
    String serverParameter =
        mediationBannerAdConfiguration.getServerParameters().getString(
        MediationConfiguration.CUSTOM_EVENT_SERVER_PARAMETER_FIELD);

    Log.d("BannerCustomEvent", "Received server parameter.");

    Context context = mediationBannerAdConfiguration.getContext();
    sampleAdView = new SampleAdView(context);

    // Assumes that the serverParameter is the ad unit of the Sample Network.
    sampleAdView.setAdUnit(serverParameter);
    AdSize size = mediationBannerAdConfiguration.getAdSize();

    // Internally, smart banners use constants to represent their ad size, which
    // means a call to AdSize.getHeight could return a negative value. You can
    // accommodate this by using AdSize.getHeightInPixels and
    // AdSize.getWidthInPixels instead, and then adjusting to match the device's
    // display metrics.
    int widthInPixels = size.getWidthInPixels(context);
    int heightInPixels = size.getHeightInPixels(context);
    DisplayMetrics displayMetrics = Resources.getSystem().getDisplayMetrics();
    int widthInDp = Math.round(widthInPixels / displayMetrics.density);
    int heightInDp = Math.round(heightInPixels / displayMetrics.density);

    sampleAdView.setSize(new SampleAdSize(widthInDp, heightInDp));
    sampleAdView.setAdListener(this);

    SampleAdRequest request = createSampleRequest(mediationBannerAdConfiguration);
    Log.i("BannerCustomEvent", "Start fetching banner ad.");
    sampleAdView.fetchAd(request);
  }

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

В зависимости от того, успешно ли загружено объявление или возникла ошибка, вы вызываете либо onSuccess() , либо onFailure() . onSuccess() вызывается путем передачи экземпляра класса, реализующего MediationBannerAd .

Как правило, эти методы реализуются внутри коллбэков стороннего SDK, который использует ваш адаптер. В этом примере в Sample SDK есть SampleAdListener с соответствующими коллбэками:

Java

@Override
public void onAdFetchSucceeded() {
  bannerAdCallback = mediationAdLoadCallback.onSuccess(this);
}

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

Для работы MediationBannerAd необходимо реализовать метод-геттер View :

Java

@Override
@NonNull
public View getView() {
  return sampleAdView;
}

Пересылайте события медиации в SDK Google Mobile Ads

После вызова метода onSuccess() возвращенный объект MediationBannerAdCallback может быть использован адаптером для пересылки событий отображения из стороннего SDK в Google Mobile Ads SDK. Класс SampleBannerCustomEventLoader расширяет интерфейс SampleAdListener для пересылки обратных вызовов из примера рекламной сети в Google Mobile Ads SDK.

Важно, чтобы ваше пользовательское событие перенаправляло как можно больше таких обратных вызовов, чтобы ваше приложение получало эквивалентные события от SDK Google Mobile Ads. Вот пример использования обратных вызовов:

Java

@Override
public void onAdFullScreen() {
  bannerAdCallback.onAdOpened();
  bannerAdCallback.reportAdClicked();
}

@Override
public void onAdClosed() {
  bannerAdCallback.onAdClosed();
}

На этом завершается реализация пользовательских событий для баннерной рекламы. Полный пример доступен на GitHub . Вы можете использовать его с уже поддерживаемой рекламной сетью или модифицировать его для отображения баннерной рекламы с пользовательскими событиями.