الأحداث المخصّصة للإعلانات التي تضم مكافأة

المتطلبات الأساسية

أكمِل إعداد الأحداث المخصّصة.

طلب إعلان مقابل مكافأة

عند الوصول إلى عنصر الحدث المخصّص في سلسلة توسّط العرض الإعلاني بدون انقطاع، يتم استدعاء طريقة upload Rewards:adConfiguration:completeHandler: إلى اسم الفئة الذي قدّمته عند إنشاء حدث مخصّص. في هذه الحالة، تظهر هذه الطريقة في SampleCustomEvent، والتي تستدعي بدورها طريقة loadRewarded:adConfiguration:completionHandler: في SampleCustomEventRewarded.

لطلب إعلان يضم مكافأة، يجب إنشاء أو تعديل صف لتنفيذ الترميزَين GADMediationAdapter وloadRewarded:adConfiguration:completionHandler:. إذا كانت هناك فئة تمديد GADMediationAdapter متوفّرة، يمكنك تنفيذ loadRewarded:adConfiguration:completionHandler: فيها. بالإضافة إلى ذلك، أنشئ فئة جديدة لتنفيذ GADMediationRewardedAd.

في مثال الحدث المخصّص، ينفِّذ SampleCustomEvent واجهة GADMediationAdapter ثم يفوِّض المعالجة إلى SampleCustomEventRewarded.

Swift

import GoogleMobileAds

class SampleCustomEvent: NSObject, GADMediationAdapter {

  fileprivate var rewardedAd: SampleCustomEventRewarded?
  ...

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

Objective-C

#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 لإعلانات Google على الأجهزة الجوّالة"

يتم تضمين المَعلمة الاختيارية المحدّدة في واجهة مستخدم "مدير إعلانات Google" في إعداد الإعلان. يمكن الوصول إلى المَعلمة من خلال adConfiguration.credentials.settings[@"parameter"]. هذه المَعلمة هي عادةً معرّف وحدة إعلانية تتطلّبه حزمة تطوير برامج (SDK) لشبكة إعلانية عند إنشاء مثيل لعنصر إعلان.

Swift

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

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

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

  func loadRewarded(
    for adConfiguration: GADMediationRewardedAdConfiguration,
    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)
  }
}

Objective-C

#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 the 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 التابعة لجهة خارجية التي ينفّذها المحوِّل. في هذا المثال، يحتوي نموذج حزمة تطوير البرامج (SDK) على 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)
  }
}

Objective-C

- (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()
  }
}

Objective-C

- (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) لإعلانات Google على الأجهزة الجوّالة"

بعد استدعاء GADMediationRewardedLoadCompletionHandler باستخدام إعلان loaded ، يمكن للمحوِّل استخدام GADMediationRewardedAdEventDelegate المفوَّض المعروض بعد ذلك لإعادة توجيه أحداث العرض من حزمة SDK التابعة لجهة خارجية إلى حزمة "SDK لإعلانات Google على الأجهزة الجوّالة". تنفِّذ فئة SampleCustomEventRewarded بروتوكول SampleRewardedAdDelegate لإعادة توجيه عمليات تسجيل الإحالات الناجحة من نموذج شبكة المواقع الإعلانية إلى حزمة "SDK لإعلانات Google على الأجهزة الجوّالة".

من المهمّ أن يُعيد الحدث المخصّص توجيه أكبر عدد ممكن من استدعاءات الاتصالات هذه، لكي يتلقّى تطبيقك هذه الأحداث المقابلة من حزمة "SDK لإعلانات Google على الأجهزة الجوّالة". في ما يلي مثال على استخدام وظائف الاستدعاء:

Swift

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

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

Objective-C

- (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. ويمكنك استخدامه مع شبكة إعلانية متوافقة أو تعديله لعرض إعلانات مخصّصة للمكافآت مرتبطة بأحداث معيّنة.