การใช้อะแดปเตอร์โฆษณาที่มีการให้รางวัล

อะแดปเตอร์สื่อกลางจะได้รับข้อความและคำขอจาก SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google และสื่อสารกับ SDK เครือข่ายของบุคคลที่สามเพื่อดำเนินการตามคำขอเหล่านั้น

คู่มือนี้มีไว้สำหรับเครือข่ายโฆษณาที่ต้องการสร้างอะแดปเตอร์สื่อกลางโฆษณาที่มีการให้รางวัลสำหรับสื่อกลางโฆษณาบนอุปกรณ์เคลื่อนที่ของ Google SDK ตัวอย่างจะใช้ในข้อมูลโค้ดด้านล่างเพื่อวัตถุประสงค์ในการสาธิต คุณสามารถดูการใช้งานอะแดปเตอร์อย่างสมบูรณ์ที่สร้างขึ้นสำหรับ SDK ตัวอย่างนี้ได้ในโปรเจ็กต์iOSสื่อกลาง คู่มือนี้จะอธิบายวิธีสร้างอะแดปเตอร์

กำหนดชื่อคลาสอะแดปเตอร์และพารามิเตอร์เซิร์ฟเวอร์

โดยทั่วไปแล้ว เครือข่ายโฆษณาที่ใช้สื่อกลางผ่านแพลตฟอร์มสื่อกลาง AdMob จะต้องใช้ตัวระบุอย่างน้อย 1 ตัวเพื่อระบุผู้เผยแพร่โฆษณา ตัวระบุเหล่านี้จะแสดงเป็นพารามิเตอร์ของเซิร์ฟเวอร์และได้รับการกำหนดเมื่อกำหนดค่าเครือข่ายโฆษณาบุคคลที่สามสำหรับสื่อกลางใน UI ของ AdMob

ก่อนที่จะพัฒนาอะแดปเตอร์สื่อกลาง คุณต้องแจ้งชื่อคลาสอะแดปเตอร์และพารามิเตอร์ที่จำเป็นอื่นๆ แก่ Google เพื่อให้มีสิทธิ์เข้าถึงเครือข่ายโฆษณา

สอดคล้องกับโปรโตคอล GADMediationAdapter

ขั้นตอนแรกคือกำหนดให้คลาสอะแดปเตอร์ใช้โปรโตคอล GADMediationAdapter ดังนี้

#import <Foundation/Foundation.h>
#import <GoogleMobileAds/GoogleMobileAds.h>
#import <SampleAdSDK/SampleAdSDK.h>

@interface GADMediationAdapterSampleAdNetwork : NSObject <GADMediationAdapter>
@end

การเปลี่ยนแปลงนี้ช่วยให้ชั้นเรียนของคุณใช้วิธีการต่างๆ ที่อธิบายไว้ด้านล่าง

รายงานชั้นเรียนเพิ่มเติม

หากเครือข่ายบุคคลที่สามต้องการอนุญาตให้ผู้เผยแพร่โฆษณาส่งพารามิเตอร์ที่ไม่บังคับเพิ่มเติมสำหรับคำขอโฆษณา จะต้องแสดงผลคลาส extras จากเมธอด networkExtrasClass แสดงผล Nil หากบุคคลที่สามไม่รองรับที่ผู้เผยแพร่เนื้อหาจัดเตรียมให้

#import <GoogleMobileAds/GoogleMobileAds.h>

@interface SampleExtras : NSObject<GADAdNetworkExtras>

/// Use this to indicate if debug mode is on for logging.
@property(nonatomic) BOOL debugLogging;

/// Use this to indicate whether to mute audio for video ads.
@property(nonatomic) BOOL muteAudio;

@end
#import "GADMediationAdapterSampleAdNetwork.h"

@implementation GADMediationAdapterSampleAdNetwork
...
+ (Class<GADAdNetworkExtras>)networkExtrasClass {
  return [SampleExtras class];
}
...
@end

รายงานหมายเลขเวอร์ชัน

อะแดปเตอร์ต้องรายงานไปยัง Google Mobile Ads SDK ทั้งเวอร์ชันของตัวอะแดปเตอร์และเวอร์ชันของ SDK ของบุคคลที่สาม ระบบจะรายงานเวอร์ชันโดยใช้ GADVersionNumber

อะแดปเตอร์แบบโอเพนซอร์สและที่มีการกำหนดเวอร์ชันของ Google ใช้รูปแบบเวอร์ชันอะแดปเตอร์ 4 หลัก แต่ GADVersionNumber อนุญาตให้ใช้ได้เพียง 3 หลักเท่านั้น เพื่อแก้ไขปัญหานี้ ขอแนะนำให้รวมตัวเลข 2 หลักสุดท้ายไว้ในเวอร์ชันแพตช์ตามที่แสดงด้านล่าง

#import "GADMediationAdapterSampleAdNetwork.h"

@implementation GADMediationAdapterSampleAdNetwork
...
+ (GADVersionNumber)adSDKVersion {
  NSString *versionString = SampleSDKVersion;
  NSArray *versionComponents = [versionString componentsSeparatedByString:@"."];

  GADVersionNumber version = {0};
  if (versionComponents.count >= 3) {
    version.majorVersion = [versionComponents[0] integerValue];
    version.minorVersion = [versionComponents[1] integerValue];
    version.patchVersion = [versionComponents[2] integerValue];
  }
  return version;
}

+ (GADVersionNumber)version {
  NSString *versionString = SampleAdapterVersion;
  NSArray *versionComponents = [versionString componentsSeparatedByString:@"."];

  GADVersionNumber version = {0};
  if (versionComponents.count >= 4) {
    version.majorVersion = [versionComponents[0] integerValue];
    version.minorVersion = [versionComponents[1] integerValue];
    // Adapter versions have 2 patch versions. Multiply the first patch by 100.
    version.patchVersion =
        [versionComponents[2] integerValue] * 100 + [versionComponents[3] integerValue];
  }
  return version;
}
...
@end

เริ่มต้นอะแดปเตอร์

เมื่อแอปเริ่มต้น SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ระบบจะเรียกใช้ setUpWithConfiguration:completionHandler: ในอะแดปเตอร์ทั้งหมดที่กำหนดค่าไว้สำหรับแอปภายใน UI ของ AdMob

อาร์กิวเมนต์ GADMediationServerConfiguration จะให้ข้อมูลเกี่ยวกับตำแหน่งทั้งหมดที่กำหนดค่าไว้สำหรับแอปภายใน UI ของ AdMob ใช้ข้อมูลนี้ในการเริ่มต้น SDK เครือข่ายโฆษณาของคุณ เมื่อ SDK เครือข่ายโฆษณาเริ่มต้นแล้ว ให้เรียกใช้อาร์กิวเมนต์ GADMediationAdapterSetUpCompletionBlock การบล็อกนี้ช่วยให้คุณรายงานการเริ่มต้นที่สำเร็จหรือล้มเหลวไปยัง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ได้โดยเรียกใช้ตัวแฮนเดิลการเสร็จสมบูรณ์ด้วย nil หรือออบเจ็กต์ NSError

#import "SampleAdapter.h"

@implementation SampleAdapter
...
+ (void)setUpWithConfiguration:(GADMediationServerConfiguration *)configuration
             completionHandler:(GADMediationAdapterSetUpCompletionBlock)completionHandler {
  // Since the Sample SDK doesn't need to be initialized, the completion
  //handler is called directly here.
  completionHandler(nil);
}
...
@end

ขอโฆษณาที่มีการให้รางวัล

เมื่อแอปโหลดโฆษณาที่มีการให้รางวัลด้วย SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ระบบจะเรียกใช้ loadRewardedAdForAdConfiguration:completionHandler: ในอะแดปเตอร์หากเครือข่ายโฆษณาอยู่ในการแสดงโฆษณาสื่อกลางตามลำดับขั้น

GADRewardedLoadCompletionHandler ช่วยให้คุณรายงานจำนวนโฆษณาที่สำเร็จไปยัง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ได้โดยการระบุการอ้างอิงไปยังออบเจ็กต์ที่สอดคล้องกับโปรโตคอล GADMediationRewardedAd หรือจำนวนโฆษณาที่ล้มเหลวโดยระบุการอ้างอิง nil และออบเจ็กต์ NSError การเรียกใช้ตัวแฮนเดิลการเสร็จสิ้นการโหลดจะแสดงผล GADMediationRewardedAdEventDelegate ซึ่งอะแดปเตอร์ควรเก็บไว้ตลอดอายุของโฆษณาเพื่อแจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google เกี่ยวกับเหตุการณ์ที่ตามมา

#import "SampleAdapter.h"

@interface SampleAdapter () <GADMediationRewardedAd> {
  /// Rewarded ads from Sample SDK.
  SampleRewardedAd *_rewardedAd;

  /// Handles any callback when the sample rewarded ad finishes loading.
  GADMediationRewardedLoadCompletionHandler _loadCompletionHandler;

  /// Delegate for receiving rewarded ad notifications.
  __weak id<GADMediationRewardedAdEventDelegate> _rewardedAdDelegate;
}
@end

@implementation SampleAdapter
...
- (void)loadRewardedAdForAdConfiguration:(GADMediationRewardedAdConfiguration *)adConfiguration
                       completionHandler:
                           (GADMediationRewardedLoadCompletionHandler)completionHandler {
  _loadCompletionHandler = completionHandler;

  NSString *adUnit = adConfiguration.credentials.settings[SampleSDKAdUnitIDKey];
  SampleExtras *extras = adConfiguration.extras;

  _rewardedAd = [[SampleRewardedAd alloc] initWithAdUnitID:adUnit];
  _rewardedAd.enableDebugLogging = extras.enableDebugLogging;

  /// Check the extras to see if the request should be customized.
  SampleAdRequest *request = [[SampleAdRequest alloc] init];
  request.mute = extras.muteAudio;

  /// Set the delegate on the rewarded ad to listen for callbacks from the Sample SDK.
  _rewardedAd.delegate = self;
  [_rewardedAd fetchAd:request];
}
...
@end

เหตุการณ์การโหลดโฆษณาแบบส่งต่อ

อะแดปเตอร์มีหน้าที่รับผิดชอบในการฟังการเรียกกลับของ SDK บุคคลที่สามและแมปกับโค้ดเรียกกลับของ SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ที่เหมาะสม

รายงานเหตุการณ์การโหลดโฆษณาของบุคคลที่สามที่สำเร็จหรือล้มเหลวโดยเรียกใช้ loadCompletionHandler ด้วยโฆษณาหรือข้อผิดพลาด หากมีการเรียกใช้ตัวแฮนเดิลการเสร็จสมบูรณ์แบบมีโฆษณาและไม่มีข้อผิดพลาด ระบบจะแสดงผลออบเจ็กต์ Delegate เหตุการณ์โฆษณา ใช้การอ้างอิงถึงผู้ได้รับมอบสิทธิ์นี้เพื่อให้อะแดปเตอร์สามารถส่งต่อกิจกรรมการนำเสนอในภายหลังได้

- (void)rewardedAdDidReceiveAd:(nonnull SampleRewardedAd *)rewardedAd {
  _rewardedAdDelegate = _loadCompletionHandler(self, nil);
}

- (void)rewardedAdDidFailToLoadWithError:(SampleErrorCode)errorCode {
  _loadCompletionHandler(nil, [NSError errorWithDomain:kAdapterErrorDomain
                                                  code:GADErrorNoFill
                                              userInfo:nil]);
}

แสดงโฆษณา

เมื่อแอปขอให้ SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google นำเสนอโฆษณาที่มีการให้รางวัล SDK จะเรียกใช้เมธอด presentFromViewController: ในอินสแตนซ์ของ GADMediationRewardedAd ที่ระบุไว้ในการเรียกใช้ตัวแฮนเดิลการเสร็จสิ้นการโหลด ซึ่งคุณควรนำเสนอโฆษณาที่มีการให้รางวัลดังนี้

- (void)presentFromViewController:(nonnull UIViewController *)viewController {
  if (!_rewardedAd.isReady) {
    NSError *error =
        [NSError errorWithDomain:kAdapterErrorDomain
                            code:0
                        userInfo:@{NSLocalizedDescriptionKey : @"Unable to display ad."}];
    [_rewardedAdDelegate didFailToPresentWithError:error];
    return;
  }
  [_rewardedAd presentFromRootViewController:viewController];
}

รายงานเหตุการณ์โฆษณาไปยัง SDK โฆษณาในอุปกรณ์เคลื่อนที่

หลังจากแสดงโฆษณาแล้ว อะแดปเตอร์ควรรายงานเหตุการณ์ในวงจรการนำเสนอโฆษณาโดยใช้การมอบสิทธิ์เหตุการณ์โฆษณาเดียวกันที่แสดงผลเมื่อโหลดโฆษณาสำเร็จ

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

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

รายละเอียดเหตุการณ์โฆษณาที่ควรรายงานไปยัง Google Mobile Ads SDK มีดังนี้

เหตุการณ์โฆษณา คำอธิบาย
willPresentFullScreenView แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่าโฆษณาจะแสดง
didStartVideo แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่าโฆษณาที่มีการให้รางวัลเริ่มเล่น
reportImpression แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่ามีการแสดงผลเกิดขึ้นในโฆษณา
didEndVideo แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่าโฆษณาที่มีการให้รางวัลเล่นเสร็จแล้ว
didRewardUserWithReward แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่าผู้ใช้ได้รับรางวัล
reportClick แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่ามีการคลิกโฆษณา
willDismissFullScreenView แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่าโฆษณาจะปิดลง
didDismissFullScreenView แจ้ง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ว่าโฆษณาได้ปิดแล้ว