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

پلتفرم مورد نظر را انتخاب کنید: اندروید، iOS

پیش‌نیازها

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

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

وقتی در زنجیره میانجیگری آبشاری به ردیف رویداد سفارشی می‌رسید، متد loadInterstitial:adConfiguration:completionHandler: بر اساس نام کلاسی که هنگام ایجاد یک رویداد سفارشی ارائه کرده‌اید، فراخوانی می‌شود. در این حالت، آن متد در SampleCustomEvent قرار دارد که سپس متد loadInterstitial:adConfiguration:completionHandler: را در SampleCustomEventInterstitial فراخوانی می‌کند.

برای درخواست یک تبلیغ بینابینی، کلاسی ایجاد یا اصلاح کنید که GADMediationAdapter را پیاده‌سازی کند و loadInterstitial:adConfiguration:completionHandler: اجرا کند. اگر کلاسی که GADMediationAdapter ارث‌بری می‌کند از قبل وجود دارد، loadInterstitial:adConfiguration:completionHandler: در آنجا پیاده‌سازی کنید. علاوه بر این، یک کلاس جدید برای پیاده‌سازی GADMediationInterstitialAd ایجاد کنید.

در مثال رویداد سفارشی ما، SampleCustomEvent رابط GADMediationAdapter را پیاده‌سازی می‌کند و سپس آن را به SampleCustomEventInterstitial واگذار می‌کند.

سویفت

import GoogleMobileAds

class SampleCustomEvent: NSObject, MediationAdapter {

  fileprivate var interstitialAd: SampleCustomEventInterstitial?
  ...

  func loadInterstitial(
    for adConfiguration: MediationInterstitialAdConfiguration,
    completionHandler: @escaping GADMediationInterstitialLoadCompletionHandler
  ) {
    self.interstitialAd = SampleCustomEventInterstitial()
    self.interstitialAd?.loadInterstitial(
      for: adConfiguration, completionHandler: completionHandler)
  }
}

هدف-سی

#import "SampleCustomEvent.h"

@implementation SampleCustomEvent

SampleCustomEventInterstitial *sampleInterstitial;

- (void)loadInterstitialForAdConfiguration:
            (GADMediationInterstitialAdConfiguration *)adConfiguration
                         completionHandler:
                             (GADMediationInterstitialLoadCompletionHandler)
                                 completionHandler {
  sampleInterstitial = [[SampleCustomEventInterstitial alloc] init];
  [sampleInterstitial loadInterstitialForAdConfiguration:adConfiguration
                                       completionHandler:completionHandler];
}

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

  • بارگذاری تبلیغ بینابینی و فراخوانی متد GADMediationInterstitialAdLoadCompletionHandler پس از اتمام بارگذاری.

  • پیاده‌سازی پروتکل GADMediationInterstitialAd .

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

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

سویفت

import GoogleMobileAds

class SampleCustomEventInterstitial: NSObject, MediationInterstitialAd {
  /// The Sample Ad Network interstitial ad.
  var interstitial: SampleInterstitial?

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

  var completionHandler: GADMediationInterstitialLoadCompletionHandler?

  func loadInterstitial(
    for adConfiguration: MediationInterstitialAdConfiguration,
    completionHandler: @escaping GADMediationInterstitialLoadCompletionHandler
  ) {
    interstitial = SampleInterstitial.init(
      adUnitID: adConfiguration.credentials.settings["parameter"] as? String)
    interstitial?.delegate = self
    let adRequest = SampleAdRequest()
    adRequest.testMode = adConfiguration.isTestRequest
    self.completionHandler = completionHandler
    interstitial?.fetchAd(adRequest)
  }

  func present(from viewController: UIViewController) {
    if let interstitial = interstitial, interstitial.isInterstitialLoaded {
      interstitial.show()
    }
  }
}

هدف-سی

#import "SampleCustomEventInterstitial.h"

@interface SampleCustomEventInterstitial () <SampleInterstitialAdDelegate,
                                             GADMediationInterstitialAd> {
  /// The sample interstitial ad.
  SampleInterstitial *_interstitialAd;

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

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

- (void)loadInterstitialForAdConfiguration:
            (GADMediationInterstitialAdConfiguration *)adConfiguration
                         completionHandler:
                             (GADMediationInterstitialLoadCompletionHandler)
                                 completionHandler {
  __block atomic_flag completionHandlerCalled = ATOMIC_FLAG_INIT;
  __block GADMediationInterstitialLoadCompletionHandler
      originalCompletionHandler = [completionHandler copy];

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

    id<GADMediationInterstitialAdEventDelegate> 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"];
  _interstitialAd = [[SampleInterstitial alloc] initWithAdUnitID:adUnit];
  _interstitialAd.delegate = self;
  SampleAdRequest *adRequest = [[SampleAdRequest alloc] init];
  adRequest.testMode = adConfiguration.isTestRequest;
  [_interstitialAd fetchAd:adRequest];
}

چه تبلیغ با موفقیت واکشی شود و چه با خطایی مواجه شود، شما باید GADMediationInterstitialLoadCompletionHandler فراخوانی کنید. در صورت موفقیت، کلاسی را که GADMediationInterstitialAd پیاده‌سازی می‌کند با مقدار nil برای پارامتر خطا، و در صورت شکست، خطایی را که با آن مواجه شده‌اید، منتقل کنید.

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

سویفت

func interstitialDidLoad(_ interstitial: SampleInterstitial) {
  if let handler = completionHandler {
    delegate = handler(self, nil)
  }
}

func interstitial(
  _ interstitial: SampleInterstitial,
  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)
  }
}

هدف-سی

- (void)interstitialDidLoad:(SampleInterstitial *)interstitial {
  _adEventDelegate = _loadCompletionHandler(self, nil);
}

- (void)interstitial:(SampleInterstitial *)interstitial
    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);
}

GADMediationInterstitialAd برای نمایش تبلیغ نیاز به پیاده‌سازی یک متد present دارد:

سویفت

func present(from viewController: UIViewController) {
  if let interstitial = interstitial, interstitial.isInterstitialLoaded {
    interstitial.show()
  }
}

هدف-سی

- (void)presentFromViewController:(UIViewController *)viewController {
  if ([_interstitialAd isInterstitialLoaded]) {
    [_interstitialAd show];
  } else {
    NSError *error = SampleCustomEventErrorWithCodeAndDescription(
        SampleCustomEventErrorAdNotLoaded,
        [NSString stringWithFormat:@"The interstitial ad failed to present "
                                   @"because the ad was not loaded."]);
    [_adEventDelegate didFailToPresentWithError:error]
  }
}

رویدادهای میانجیگری را به SDK تبلیغات موبایلی گوگل منتقل کنید

پس از اینکه GADMediationInterstitialLoadCompletionHandler با یک تبلیغ بارگذاری شده فراخوانی کردید، شیء نماینده GADMediationInterstitialAdEventDelegate که برگردانده شده است، می‌تواند توسط آداپتور برای ارسال رویدادهای ارائه از SDK شخص ثالث به SDK تبلیغات موبایل گوگل استفاده شود. کلاس SampleCustomEventInterstitial پروتکل SampleInterstitialAdDelegate را برای ارسال تماس‌های برگشتی از شبکه تبلیغات نمونه به SDK تبلیغات موبایل گوگل پیاده‌سازی می‌کند.

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

سویفت

func interstitialWillPresentScreen(_ interstitial: SampleInterstitial) {
  delegate?.willPresentFullScreenView()
  delegate?.reportImpression()
}

func interstitialWillDismissScreen(_ interstitial: SampleInterstitial) {
  delegate?.willDismissFullScreenView()
}

func interstitialDidDismissScreen(_ interstitial: SampleInterstitial) {
  delegate?.didDismissFullScreenView()
}

func interstitialWillLeaveApplication(_ interstitial: SampleInterstitial) {
  delegate?.reportClick()
}

هدف-سی

- (void)interstitialWillPresentScreen:(SampleInterstitial *)interstitial {
  [_adEventDelegate willPresentFullScreenView];
  [_adEventDelegate reportImpression];
}

- (void)interstitialWillDismissScreen:(SampleInterstitial *)interstitial {
  [_adEventDelegate willDismissFullScreenView];
}

- (void)interstitialDidDismissScreen:(SampleInterstitial *)interstitial {
  [_adEventDelegate didDismissFullScreenView];
}

- (void)interstitialWillLeaveApplication:(SampleInterstitial *)interstitial {
  [_adEventDelegate reportClick];
}

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