ข้อกำหนดเบื้องต้น
ตั้งค่าเหตุการณ์ที่กำหนดเองให้เสร็จสมบูรณ์
ขอโฆษณาที่มีการให้รางวัล
เมื่อรายการโฆษณาเหตุการณ์ที่กำหนดเองไปถึงในเชนการแสดงโฆษณาสื่อกลางตามลำดับขั้น (Waterfall Mediation)
ระบบจะเรียกใช้เมธอด `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) } }
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รับและรายงานการเรียกกลับของเหตุการณ์โฆษณาไปยัง Google Mobile Ads SDK
ระบบจะรวมพารามิเตอร์ที่ไม่บังคับที่กำหนดไว้ใน UI ของ AdMob ไว้ในการกำหนดค่าโฆษณา
โดยคุณจะเข้าถึงพารามิเตอร์ได้ผ่าน
adConfiguration.credentials.settings[@"parameter"] ซึ่งโดยปกติแล้วพารามิเตอร์นี้จะเป็นตัวระบุหน่วยโฆษณาที่ SDK ของเครือข่ายโฆษณาต้องใช้เมื่อสร้างออบเจ็กต์โฆษณา
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) } }
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 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 สำหรับพารามิเตอร์ข้อผิดพลาด แต่หากไม่สำเร็จ ให้ส่งผ่านข้อผิดพลาดที่พบ
โดยปกติแล้วเมธอดเหล่านี้จะใช้ภายใน Callback จาก SDK ของบุคคลที่สามที่อะแดปเตอร์ของคุณใช้ สำหรับตัวอย่างนี้ SDK ตัวอย่างมี SampleRewardedAdDelegate พร้อม Callback ที่เกี่ยวข้องดังนี้
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] } }
ส่งต่อเหตุการณ์สื่อกลางไปยัง Google Mobile Ads SDK
เมื่อเรียกใช้ GADMediationRewardedLoadCompletionHandler ด้วยโฆษณาที่โหลดแล้ว อะแดปเตอร์จะใช้พร็อพเพอร์ตี้ GADMediationRewardedAdEventDelegate ที่ส่งกลับมาเพื่อส่งต่อเหตุการณ์การแสดงโฆษณาจาก SDK ของบุคคลที่สามไปยัง Google Mobile Ads SDK ได้ คลาส SampleCustomEventRewarded ใช้โปรโตคอล SampleRewardedAdDelegate เพื่อส่งต่อ Callback จากเครือข่ายโฆษณาตัวอย่างไปยัง Google Mobile Ads SDK
เหตุการณ์ที่กำหนดเองควรส่งต่อ Callback เหล่านี้ให้ได้มากที่สุด เพื่อให้แอปได้รับเหตุการณ์ที่เทียบเท่าจาก Google Mobile Ads SDK ตัวอย่างการใช้ Callback มีดังนี้
Swift
func rewardedAdDidPresent(_ rewarded: SampleRewardedAd) { delegate?.willPresentFullScreenVideo() delegate?.didStartVideo() } func rewardedAdUserDidEarnReward(_ rewarded: SampleRewardedAd) { AdReward aReward = AdReward("", 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 โดยคุณสามารถใช้ตัวอย่างนี้กับเครือข่ายโฆษณาที่รองรับอยู่แล้วหรือแก้ไขเพื่อแสดงโฆษณาที่มีการให้รางวัลจากเหตุการณ์ที่กำหนดเองก็ได้