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

پیش نیازها

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

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

هنگامی که آیتم خط رویداد سفارشی در زنجیره واسطه آبشار به دست می‌آید، متد 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 .

  • دریافت و گزارش تماس‌های رویداد تبلیغاتی به Google Mobile Ads SDK.

پارامتر اختیاری تعریف شده در UI در پیکربندی تبلیغات گنجانده شده است. این پارامتر از طریق 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;
}

رویدادهای میانجی را به Google Mobile Ads SDK بازارسال کنید

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

مهم است که رویداد سفارشی شما تا آنجایی که ممکن است این تماس‌های پاسخگو را فوروارد کند تا برنامه شما این رویدادهای مشابه را از Google Mobile Ads SDK دریافت کند. در اینجا مثالی از استفاده از callback آورده شده است:

جاوا

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

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

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