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

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

پیش‌نیازها

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

درخواست تبلیغ جایزه‌دار

وقتی به ردیف رویداد سفارشی در زنجیره میانجیگری آبشاری (fall mediation chain) می‌رسید، متد loadRewarded:adConfiguration:completionHandler: بر اساس نام کلاسی که هنگام ایجاد یک رویداد سفارشی ارائه کرده‌اید، فراخوانی می‌شود. در این حالت، آن متد در SampleCustomEvent قرار دارد که سپس متد loadRewarded:adConfiguration:completionHandler: را در SampleCustomEventRewarded فراخوانی می‌کند.

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

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

سویفت

import GoogleMobileAds

class SampleCustomEvent: NSObject, MediationAdapter {

  fileprivate var rewardedAd: SampleCustomEventRewarded?
  ...

  func loadRewarded(
    for adConfiguration: MediationRewardedAdConfiguration,
    completionHandler: @escaping GADMediationRewardedLoadCompletionHandler
  ) {
    self.rewardedAd = SampleCustomEventRewarded()
    self.rewardedAd?.loadRewarded(
      for: adConfiguration, completionHandler: completionHandler)
  }
}

هدف-سی

#import "SampleCustomEvent.h"

@implementation SampleCustomEvent
...

SampleCustomEventRewarded *sampleRewarded;

- (void)loadRewardedForAdConfiguration:
            (GADMediationRewardedAdConfiguration *)adConfiguration
                     completionHandler:
                         (GADMediationRewardedLoadCompletionHandler)
                             completionHandler {
  sampleRewarded = [[SampleCustomEventRewarded alloc] init];
  [sampleRewarded loadRewardedForAdConfiguration:adConfiguration
                               completionHandler:completionHandler];
}

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

  • در حال بارگذاری تبلیغ جایزه‌دار.

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

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

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

سویفت

class SampleCustomEventRewarded: NSObject, MediationRewardedAd {
  /// The Sample Ad Network rewarded ad.
  var nativeAd: SampleRewarded?

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

  /// Completion handler called after ad load.
  var completionHandler: GADMediationRewardedLoadCompletionHandler?

  func loadRewarded(
    for adConfiguration: MediationRewardedAdConfiguration,
    completionHandler: @escaping GADMediationRewardedLoadCompletionHandler
  ) {
    rewarded = SampleRewarded.init(
      adUnitID: adConfiguration.credentials.settings["parameter"] as? String)
    rewarded?.delegate = self
    let adRequest = SampleAdRequest()
    adRequest.testMode = adConfiguration.isTestRequest
    self.completionHandler = completionHandler
    rewarded?.fetchAd(adRequest)
  }
}

هدف-سی

#import "SampleCustomEventRewarded.h"

@interface SampleCustomEventRewarded () <SampleRewardedAdDelegate,
                                         GADMediationRewardedAd> {
  /// The sample rewarded ad.
  SampleRewarded *_rewardedAd;

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

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

- (void)loadRewardedAdForAdConfiguration:(GADMediationRewardedAdConfiguration *)adConfiguration
                       completionHandler:
                           (GADMediationRewardedLoadCompletionHandler)completionHandler {
  __block atomic_flag completionHandlerCalled = ATOMIC_FLAG_INIT;
  __block GADMediationRewardedLoadCompletionHandler originalCompletionHandler =
      [completionHandler copy];

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

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

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

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

سویفت

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

func rewarded(
  rewarded: SampleRewarded, didFailToLoadAdWith errorCode: SampleErrorCode
) {
  let error =
    SampleCustomEventUtils.SampleCustomEventErrorWithCodeAndDescription(
      code: SampleCustomEventErrorCode
        .SampleCustomEventErrorAdLoadFailureCallback,
      description:
        "Sample SDK returned an ad load failure callback with error code: \(errorCode)"
    )
  if let handler = completionHandler {
    delegate = handler(nil, error)
  }
}

هدف-سی

- (void)rewardedDidLoad:(SampleRewarded *)rewarded {
  _adEventDelegate = _loadCompletionHandler(self, nil);
}

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

GADMediationrewardedAd برای نمایش تبلیغ نیاز به پیاده‌سازی متد present(viewController:) دارد:

سویفت

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

هدف-سی

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

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

پس از اینکه GADMediationRewardedLoadCompletionHandler را با یک تبلیغ بارگذاری شده فراخوانی کردید، شیء نماینده GADMediationRewardedAdEventDelegate بازگردانده شده می‌تواند توسط آداپتور برای ارسال رویدادهای ارائه از SDK شخص ثالث به SDK تبلیغات موبایل گوگل استفاده شود. کلاس SampleCustomEventRewarded پروتکل SampleRewardedAdDelegate را برای ارسال تماس‌های برگشتی از شبکه تبلیغات نمونه به SDK تبلیغات موبایل گوگل پیاده‌سازی می‌کند.

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

سویفت

func rewardedAdDidPresent(_ rewarded: SampleRewardedAd) {
  delegate?.willPresentFullScreenVideo()
  delegate?.didStartVideo()
}

func rewardedAdUserDidEarnReward(_ rewarded: SampleRewardedAd) {
  AdReward aReward = AdReward("", rewarded)
  delegate.didRewardUser()
}

هدف-سی

- (void)rewardedAdDidPresent:(SampleRewardedAd *)rewardedAd {
  [_adEventDelegate willPresentFullScreenView];
  [_adEventDelegate didStartVideo];
}

- (void)rewardedAd:(nonnull SampleRewardedAd *)rewardedAd
    userDidEarnReward:(NSUInteger)reward {
  GADAdReward *aReward = [[GADAdReward alloc]
      initWithRewardType:@""
            rewardAmount:[NSDecimalNumber numberWithUnsignedInt:reward]];
  [_adEventDelegate didRewardUserWithReward];
}

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