رویدادهای سفارشی تبلیغات بنری

پیش‌نیازها

تنظیمات رویدادهای سفارشی را تکمیل کنید.

درخواست بنر تبلیغاتی

وقتی به ردیف رویداد سفارشی در زنجیره میانجی آبشاری (waterfall mediation chain) می‌رسید، متد loadBannerAd() بر اساس نام کلاسی که هنگام ایجاد یک رویداد سفارشی ارائه کرده‌اید، فراخوانی می‌شود. در این حالت، آن متد در SampleCustomEvent قرار دارد که سپس متد loadBannerAd() را در SampleBannerCustomEventLoader فراخوانی می‌کند.

برای درخواست یک بنر تبلیغاتی، کلاسی ایجاد یا اصلاح کنید که Adapter ارث‌بری کند تا loadBannerAd() پیاده‌سازی کند. علاوه بر این، یک کلاس جدید برای پیاده‌سازی MediationBannerAd ایجاد کنید.

در مثال رویداد سفارشی ما، SampleCustomEvent کلاس Adapter ارث‌بری می‌کند و سپس آن را به SampleBannerCustomEventLoader واگذار می‌کند.

جاوا

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 .

  • دریافت و گزارش فراخوانی‌های رویداد تبلیغاتی به GMA Next Gen SDK.

پارامتر اختیاری تعریف شده در رابط کاربری در پیکربندی تبلیغ گنجانده شده است. این پارامتر از طریق adConfiguration.getServerParameters().getString(MediationConfiguration.CUSTOM_EVENT_SERVER_PARAMETER_FIELD) قابل دسترسی است. این پارامتر معمولاً یک شناسه واحد تبلیغ است که یک SDK شبکه تبلیغاتی هنگام نمونه‌سازی یک شیء تبلیغ به آن نیاز دارد.

جاوا

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 با فراخوانی‌های مربوطه است:

جاوا

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

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

MediationBannerAd نیاز به پیاده‌سازی یک متد View getter دارد:

جاوا

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

رویدادهای میانجیگری را به GMA Next Gen SDK ارسال کنید

پس از فراخوانی onSuccess() ، شیء MediationBannerAdCallback برگردانده شده می‌تواند توسط آداپتور برای ارسال رویدادهای ارائه از SDK شخص ثالث به GMA Next Gen SDK استفاده شود. کلاس SampleBannerCustomEventLoader رابط SampleAdListener را برای ارسال تماس‌های برگشتی از شبکه تبلیغاتی نمونه به GMA Next Gen SDK بسط می‌دهد.

مهم است که رویداد سفارشی شما تا حد امکان این فراخوانی‌های برگشتی را ارسال کند، به طوری که برنامه شما این رویدادهای معادل را از SDK تبلیغات موبایلی گوگل دریافت کند. در اینجا مثالی از استفاده از فراخوانی‌های برگشتی آورده شده است:

جاوا

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

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

این، پیاده‌سازی رویدادهای سفارشی برای بنرهای تبلیغاتی را تکمیل می‌کند. مثال کامل در GitHub موجود است. می‌توانید از آن با یک شبکه تبلیغاتی که از قبل پشتیبانی می‌شود استفاده کنید یا آن را برای نمایش بنرهای تبلیغاتی رویدادهای سفارشی تغییر دهید.