ข้อกำหนดเบื้องต้น
ตั้งค่าเหตุการณ์ที่กําหนดเองให้เสร็จสมบูรณ์
ขอโฆษณาที่มีการให้รางวัล
เมื่อถึงรายการโฆษณาเหตุการณ์ที่กําหนดเองในเชนสื่อกลาง Waterfall ระบบจะเรียกใช้เมธอด 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, 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
พารามิเตอร์ที่ไม่บังคับที่กำหนดไว้ใน UI ของ Ad Manager คือ
ที่รวมอยู่ในการกำหนดค่าโฆษณา
พารามิเตอร์เข้าถึงได้ผ่าน
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
ที่มี 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] } }
ส่งต่อเหตุการณ์สื่อกลางไปยัง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google
เมื่อคุณเรียกใช้ GADMediationRewardedLoadCompletionHandler
ด้วยโฆษณาที่โหลดแล้ว อะแดปเตอร์จะใช้ออบเจ็กต์ GADMediationRewardedAdEventDelegate
ที่แสดงผลเพื่อส่งต่อเหตุการณ์การแสดงจาก SDK ของบุคคลที่สามไปยัง Google Mobile Ads SDK ได้ คลาส SampleCustomEventRewarded
ใช้โปรโตคอล SampleRewardedAdDelegate
เพื่อส่งต่อการเรียกกลับจากเครือข่ายโฆษณาตัวอย่างไปยัง Google Mobile Ads SDK
เหตุการณ์ที่กําหนดเองต้องส่งต่อการเรียกกลับเหล่านี้ให้ได้มากที่สุด เพื่อให้แอปได้รับเหตุการณ์ที่เทียบเท่าเหล่านี้จาก Google Mobile Ads SDK ต่อไปนี้เป็นตัวอย่างของการใช้ Callback
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 คุณสามารถใช้กับเครือข่ายโฆษณาที่รองรับอยู่แล้ว หรือจะแก้ไขเพื่อแสดงโฆษณาที่มีการให้รางวัลสำหรับเหตุการณ์ที่กําหนดเองก็ได้