رویدادهای سفارشی آگهی‌های پاداش‌دار

انتخاب پلاتفرم: Android iOS Android (قدیمی)

پیش‌نیازها

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

درخواست آگهی پاداش‌دار

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

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

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

Swift

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.

  • درحال دریافت و گزارش کردن برگشتی‌های رویداد آگهی به Google Mobile Ads SDK.

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

Swift

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 برای پارامتر خطا ارسال کنید؛ درصورت عدم موفقیت، خطایی را که با آن مواجه شده‌اید ارسال کنید.

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

Swift

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:) را پیاده‌سازی کند:

Swift

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]
  }
}

رویدادهای واسطه‌گری را به Google Mobile Ads SDK بازارسال کنید

پس‌از اینکه با GADMediationRewardedLoadCompletionHandler با آگهی بارشده تماس گرفتید، شیء نماینده GADMediationRewardedAdEventDelegate برگشتی می‌تواند توسط آداپتور برای بازارسال رویدادهای ارائه از SDK طرف سوم به Google Mobile Ads SDK استفاده شود. کلاس SampleCustomEventRewarded پروتکل SampleRewardedAdDelegate را برای بازارسال تماس‌های برگشتی از شبکه آگهی نمونه به Google Mobile Ads SDK پیاده‌سازی می‌کند.

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

Swift

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 دردسترس است. می‌توانید از آن با شبکه آگهی که ازقبل پشتیبانی می‌شود استفاده کنید یا آن را برای نمایش آگهی‌های پاداش‌دار رویداد سفارشی اصلاح کنید.