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

پیش نیازها

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

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

هنگامی که مورد خط رویداد سفارشی در زنجیره واسطه آبشار به دست می‌آید،the loadBanner:adConfiguration:completionHandler: method با نام کلاسی که هنگام ایجاد یک رویداد سفارشی ارائه کرده‌اید فراخوانی می‌شود. در این مورد، آن متد در SampleCustomEvent است، که سپسthe loadBanner:adConfiguration:completionHandler: method را در SampleCustomEventBannerفراخوانی می کند.

برای درخواست تبلیغات بنری، کلاسی را ایجاد یا تغییر دهید که GADMediationAdapter و loadBanner:adConfiguration:completionHandler: را اجرا می کند. اگر کلاسی که GADMediationAdapter گسترش می‌دهد از قبل وجود دارد، loadBanner:adConfiguration:completionHandler: در آنجا پیاده‌سازی کنید. علاوه بر این، یک کلاس جدید برای پیاده سازی GADMediationBannerAd کنید.

در مثال رویداد سفارشی ما، SampleCustomEventthe GADMediationAdapter interface پیاده سازی می کند و سپس بهSampleCustomEventBannerواگذار می کند.

سریع

import GoogleMobileAds

class SampleCustomEvent: NSObject, GADMediationAdapter {

  fileprivate var bannerAd: SampleCustomEventBanner?
  ...

  func loadBanner(
    for adConfiguration: GADMediationBannerAdConfiguration,
    completionHandler: @escaping GADMediationBannerLoadCompletionHandler
  ) {
    self.bannerAd = SampleCustomEventBanner()
    self.bannerAd?.loadBanner(
      for: adConfiguration, completionHandler: completionHandler)
  }
}

هدف-C

#import "SampleCustomEvent.h"

@implementation SampleCustomEvent
...

SampleCustomEventBanner *sampleBanner;

- (void)loadBannerForAdConfiguration:
            (GADMediationBannerAdConfiguration *)adConfiguration
                   completionHandler:(GADMediationBannerLoadCompletionHandler)
                                         completionHandler {
  sampleBanner = [[SampleCustomEventBanner alloc] init];
  [sampleBanner loadBannerForAdConfiguration:adConfiguration
                           completionHandler:completionHandler];
}

SampleCustomEventBanner مسئول وظایف زیر است:

  • بارگیری بنر تبلیغاتی و فراخوانیGADMediationBannerLoadCompletionHandler method پس از اتمام بارگذاری

  • پیاده سازی GADMediationBannerAd protocol

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

پارامتر اختیاری تعریف شده در رابط کاربری AdMob به عنوان بخشی از the loadBanner:adConfiguration:completionHandler: methodبه رویداد سفارشی شما منتقل می شود. این پارامتر از طریق adConfiguration.credentials.settings[@"parameter"] قابل دسترسی است. این پارامتر معمولاً یک شناسه واحد تبلیغاتی است که یک SDK شبکه تبلیغاتی هنگام نمونه‌برداری از یک شی تبلیغاتی به آن نیاز دارد.

سریع

class SampleCustomEventBanner: NSObject, GADMediationBannerAd {
  /// The Sample Ad Network banner ad.
  var bannerAd: SampleBanner?

  /// The ad event delegate to forward ad rendering events to the Google Mobile Ads SDK.
  var delegate: GADMediationBannerAdEventDelegate?

  /// Completion handler called after ad load
  var completionHandler: GADMediationBannerLoadCompletionHandler?

  func loadBanner(
    for adConfiguration: GADMediationBannerAdConfiguration,
    completionHandler: @escaping GADMediationBannerLoadCompletionHandler
  ) {
    // Create the bannerView with the appropriate size.
    let adSize = adConfiguration.adSize
    bannerAd = SampleBanner(
      frame: CGRect(x: 0, y: 0, width: adSize.size.width, height: adSize.size.height))
    bannerAd?.delegate = self
    bannerAd?.adUnit = adConfiguration.credentials.settings["parameter"] as? String
    let adRequest = SampleAdRequest()
    adRequest.testMode = adConfiguration.isTestRequest
    self.completionHandler = completionHandler
    bannerAd?.fetchAd(adRequest)
  }
}

هدف-C

#import "SampleCustomEventBanner.h"

@interface SampleCustomEventBanner () <SampleBannerAdDelegate,
                                       GADMediationBannerAd> {
  /// The sample banner ad.
  SampleBanner *_bannerAd;

  /// The completion handler to call when the ad loading succeeds or fails.
  GADMediationBannerLoadCompletionHandler _loadCompletionHandler;

  /// The ad event delegate to forward ad rendering events to the Google Mobile
  /// Ads SDK.
  id <GADMediationBannerAdEventDelegate> _adEventDelegate;
}
@end

@implementation SampleCustomEventBanner

- (void)loadBannerForAdConfiguration:
            (GADMediationBannerAdConfiguration *)adConfiguration
                   completionHandler:(GADMediationBannerLoadCompletionHandler)
                                         completionHandler {
  __block atomic_flag completionHandlerCalled = ATOMIC_FLAG_INIT;
  __block GADMediationBannerLoadCompletionHandler originalCompletionHandler =
      [completionHandler copy];

  _loadCompletionHandler = ^id<GADMediationBannerAdEventDelegate>(
      _Nullable id<GADMediationBannerAd> ad, NSError *_Nullable error) {
    // Only allow completion handler to be called once.
    if (atomic_flag_test_and_set(&completionHandlerCalled)) {
      return nil;
    }

    id<GADMediationBannerAdEventDelegate> delegate = nil;
    if (originalCompletionHandler) {
      // Call original handler and hold on to its return value.
      delegate = originalCompletionHandler(ad, error);
    }

    // Release reference to handler. Objects retained by the handler will also
    // be released.
    originalCompletionHandler = nil;

    return delegate;
  };

  NSString *adUnit = adConfiguration.credentials.settings[@"parameter"];
  _bannerAd = [[SampleBanner alloc]
      initWithFrame:CGRectMake(0, 0, adConfiguration.adSize.size.width,
                               adConfiguration.adSize.size.height)];
  _bannerAd.adUnit = adUnit;
  _bannerAd.delegate = self;
  SampleAdRequest *adRequest = [[SampleAdRequest alloc] init];
  adRequest.testMode = adConfiguration.isTestRequest;
  [_bannerAd fetchAd:adRequest];
}

خواه تبلیغ با موفقیت واکشی شود یا با خطا مواجه شود، باید با GADMediationBannerLoadCompletionHandler تماس بگیرید. در صورت موفقیت، از کلاسی که GADMediationBannerAd را پیاده سازی می کند با مقدار nil برای پارامتر خطا عبور دهید. در صورت عدم موفقیت، از خطایی که با آن مواجه شدید عبور کنید.

به طور معمول، این روش‌ها در داخل فراخوان‌های SDK شخص ثالثی که آداپتور شما پیاده‌سازی می‌کند، پیاده‌سازی می‌شود. برای این مثال، Sample SDK دارای SampleBannerAdDelegate با تماس‌های مربوطه است:

سریع

func bannerDidLoad(_ banner: SampleBanner) {
  if let handler = completionHandler {
    delegate = handler(self, nil)
  }
}

func banner(
  _ banner: SampleBanner, didFailToLoadAdWith errorCode: SampleErrorCode
) {
  let error =
    SampleCustomEventUtilsSwift.SampleCustomEventErrorWithCodeAndDescription(
      code: SampleCustomEventErrorCodeSwift
        .SampleCustomEventErrorAdLoadFailureCallback,
      description:
        "Sample SDK returned an ad load failure callback with error code: \(errorCode)"
    )
  if let handler = completionHandler {
    delegate = handler(nil, error)
  }
}

هدف-C

- (void)bannerDidLoad:(SampleBanner *)banner {
  _adEventDelegate = _loadCompletionHandler(self, nil);
}

- (void)banner:(SampleBanner *)banner
    didFailToLoadAdWithErrorCode:(SampleErrorCode)errorCode {
  NSError *error = SampleCustomEventErrorWithCodeAndDescription(
      SampleCustomEventErrorAdLoadFailureCallback,
      [NSString stringWithFormat:@"Sample SDK returned an ad load failure "
                                 @"callback with error code: %@",
                                 errorCode]);
  _adEventDelegate = _loadCompletionHandler(nil, error);
}

GADMediationBannerAd به پیاده سازی ویژگی UIView نیاز دارد:

سریع

var view: UIView {
  return bannerAd ?? UIView()
}

هدف-C

- (nonnull UIView *)view {
  return _bannerAd;
}

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

هنگامی که GADMediationBannerLoadCompletionHandler با یک تبلیغ بارگذاری شده فراخوانی کردید، شیء نماینده بازگردانده GADMediationBannerAdEventDelegate می تواند توسط آداپتور برای ارسال رویدادهای ارائه از SDK شخص ثالث به SDK تبلیغات موبایلی Google استفاده شود. کلاس SampleCustomEventBanner پروتکل SampleBannerAdDelegate را برای ارسال تماس‌های برگشتی از شبکه تبلیغاتی نمونه به Google Mobile Ads SDK پیاده‌سازی می‌کند.

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

سریع

func bannerWillLeaveApplication(_ banner: SampleBanner) {
  delegate?.reportClick()
}

هدف-C

- (void)bannerWillLeaveApplication:(SampleBanner *)banner {
  [_adEventDelegate reportClick];
}

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