ข้อกำหนดเบื้องต้น
ทำการตั้งค่าเหตุการณ์ที่กำหนดเองให้เสร็จ
ขอโฆษณาแบนเนอร์
เมื่อมีการเข้าถึงรายการโฆษณาของเหตุการณ์ที่กำหนดเองในเชนสื่อกลาง Waterfall ระบบจะเรียกใช้the loadBanner:adConfiguration:completionHandler:
method ตามชื่อคลาสที่คุณระบุไว้เมื่อสร้างเหตุการณ์ที่กำหนดเอง ในกรณีนี้ วิธีการนี้จะอยู่ใน SampleCustomEvent
ซึ่งจะเรียกใช้the loadBanner:adConfiguration:completionHandler:
method ใน SampleCustomEventBanner
หากต้องการขอโฆษณาแบนเนอร์ ให้สร้างหรือแก้ไขคลาสที่ใช้งาน GADMediationAdapter
และ loadBanner:adConfiguration:completionHandler:
หากมีคลาสที่ขยาย GADMediationAdapter
อยู่แล้ว ให้ใช้ loadBanner:adConfiguration:completionHandler:
ที่นั่น นอกจากนี้ ให้สร้างคลาสใหม่เพื่อใช้ GADMediationBannerAd
ในตัวอย่างเหตุการณ์ที่กำหนดเอง SampleCustomEvent
ใช้งานthe GADMediationAdapter
interface แล้วมอบสิทธิ์ให้กับSampleCustomEventBanner
Swift
import GoogleMobileAds class SampleCustomEvent: NSObject, GADMediationAdapter { fileprivate var bannerAd: SampleCustomEventBanner? ... func loadBanner( for adConfiguration: GADMediationBannerAdConfiguration, completionHandler: @escaping GADMediationBannerLoadCompletionHandler ) { self.bannerAd = SampleCustomEventBanner() self.bannerAd?.loadBanner( for: adConfiguration, completionHandler: completionHandler) } }
Objective-C
#import "SampleCustomEvent.h" @implementation SampleCustomEvent ... SampleCustomEventBanner *sampleBanner; - (void)loadBannerForAdConfiguration: (GADMediationBannerAdConfiguration *)adConfiguration completionHandler:(GADMediationBannerLoadCompletionHandler) completionHandler { sampleBanner = [[SampleCustomEventBanner alloc] init]; [sampleBanner loadBannerForAdConfiguration:adConfiguration completionHandler:completionHandler]; }
SampleCustomEventBanner
มีหน้าที่ดังต่อไปนี้
โหลดโฆษณาแบนเนอร์และเรียกใช้
GADMediationBannerLoadCompletionHandler
method เมื่อโหลดเสร็จสมบูรณ์การใช้
GADMediationBannerAd
protocolการรับและการรายงานการเรียกกลับของเหตุการณ์โฆษณาไปยัง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google
พารามิเตอร์ที่ไม่บังคับที่กำหนดไว้ใน AdMob UI จะรวมอยู่ในการกำหนดค่าโฆษณา
คุณเข้าถึงพารามิเตอร์นี้ได้ผ่านทาง adConfiguration.credentials.settings[@"parameter"]
พารามิเตอร์นี้มักจะเป็นตัวระบุหน่วยโฆษณาที่ SDK เครือข่ายโฆษณาต้องใช้เมื่อเริ่มต้นออบเจ็กต์โฆษณา
Swift
class SampleCustomEventBanner: NSObject, GADMediationBannerAd { /// The Sample Ad Network banner ad. var bannerAd: SampleBanner? /// The ad event delegate to forward ad rendering events to the Google Mobile Ads SDK. var delegate: GADMediationBannerAdEventDelegate? /// Completion handler called after ad load var completionHandler: GADMediationBannerLoadCompletionHandler? func loadBanner( for adConfiguration: GADMediationBannerAdConfiguration, completionHandler: @escaping GADMediationBannerLoadCompletionHandler ) { // Create the bannerView with the appropriate size. let adSize = adConfiguration.adSize bannerAd = SampleBanner( frame: CGRect(x: 0, y: 0, width: adSize.size.width, height: adSize.size.height)) bannerAd?.delegate = self bannerAd?.adUnit = adConfiguration.credentials.settings["parameter"] as? String let adRequest = SampleAdRequest() adRequest.testMode = adConfiguration.isTestRequest self.completionHandler = completionHandler bannerAd?.fetchAd(adRequest) } }
Objective-C
#import "SampleCustomEventBanner.h" @interface SampleCustomEventBanner () <SampleBannerAdDelegate, GADMediationBannerAd> { /// The sample banner ad. SampleBanner *_bannerAd; /// The completion handler to call when the ad loading succeeds or fails. GADMediationBannerLoadCompletionHandler _loadCompletionHandler; /// The ad event delegate to forward ad rendering events to the Google Mobile /// Ads SDK. id <GADMediationBannerAdEventDelegate> _adEventDelegate; } @end @implementation SampleCustomEventBanner - (void)loadBannerForAdConfiguration: (GADMediationBannerAdConfiguration *)adConfiguration completionHandler:(GADMediationBannerLoadCompletionHandler) completionHandler { __block atomic_flag completionHandlerCalled = ATOMIC_FLAG_INIT; __block GADMediationBannerLoadCompletionHandler originalCompletionHandler = [completionHandler copy]; _loadCompletionHandler = ^id<GADMediationBannerAdEventDelegate>( _Nullable id<GADMediationBannerAd> ad, NSError *_Nullable error) { // Only allow completion handler to be called once. if (atomic_flag_test_and_set(&completionHandlerCalled)) { return nil; } id<GADMediationBannerAdEventDelegate> 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"]; _bannerAd = [[SampleBanner alloc] initWithFrame:CGRectMake(0, 0, adConfiguration.adSize.size.width, adConfiguration.adSize.size.height)]; _bannerAd.adUnit = adUnit; _bannerAd.delegate = self; SampleAdRequest *adRequest = [[SampleAdRequest alloc] init]; adRequest.testMode = adConfiguration.isTestRequest; [_bannerAd fetchAd:adRequest]; }
ไม่ว่าจะดึงข้อมูลโฆษณาได้สำเร็จหรือพบข้อผิดพลาด คุณก็เรียก GADMediationBannerLoadCompletionHandler
ในกรณีที่ดำเนินการสำเร็จ ให้ส่งผ่านคลาสที่ใช้ GADMediationBannerAd
ด้วยค่า nil
สำหรับพารามิเตอร์ข้อผิดพลาด ในกรณีที่ดำเนินการไม่สำเร็จ ให้ส่งผ่านข้อผิดพลาดที่คุณพบ
โดยปกติแล้ว วิธีการเหล่านี้จะใช้ภายในโค้ดเรียกกลับจาก SDK ของบุคคลที่สามที่อะแดปเตอร์ใช้ ในตัวอย่างนี้ Sample SDK มี SampleBannerAdDelegate
ที่มีโค้ดเรียกกลับที่เกี่ยวข้อง ดังนี้
Swift
func bannerDidLoad(_ banner: SampleBanner) { if let handler = completionHandler { delegate = handler(self, nil) } } func banner( _ banner: SampleBanner, didFailToLoadAdWith errorCode: SampleErrorCode ) { let error = SampleCustomEventUtilsSwift.SampleCustomEventErrorWithCodeAndDescription( code: SampleCustomEventErrorCodeSwift .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)bannerDidLoad:(SampleBanner *)banner { _adEventDelegate = _loadCompletionHandler(self, nil); } - (void)banner:(SampleBanner *)banner 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); }
GADMediationBannerAd
กำหนดให้ติดตั้งใช้งานพร็อพเพอร์ตี้ UIView
Swift
var view: UIView { return bannerAd ?? UIView() }
Objective-C
- (nonnull UIView *)view { return _bannerAd; }
ส่งต่อเหตุการณ์สื่อกลางไปยัง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google
เมื่อคุณเรียกใช้ GADMediationBannerLoadCompletionHandler
ที่มีโฆษณาที่โหลดแล้ว อะแดปเตอร์จะใช้ออบเจ็กต์การมอบสิทธิ์ GADMediationBannerAdEventDelegate
ที่แสดงผลเพื่อส่งต่อเหตุการณ์การนำเสนอจาก SDK ของบุคคลที่สามไปยัง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ได้ คลาส SampleCustomEventBanner
ใช้โปรโตคอล SampleBannerAdDelegate
เพื่อส่งต่อการเรียกกลับจากเครือข่ายโฆษณาตัวอย่างไปยัง SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google
เหตุการณ์ที่กำหนดเองของคุณจะต้องส่งต่อโค้ดเรียกกลับเหล่านี้ให้มากที่สุดเท่าที่จะเป็นไปได้ เพื่อให้แอปได้รับเหตุการณ์ที่เทียบเท่าเหล่านี้จาก SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ต่อไปนี้คือตัวอย่างของการใช้โค้ดเรียกกลับ
Swift
func bannerWillLeaveApplication(_ banner: SampleBanner) { delegate?.reportClick() }
Objective-C
- (void)bannerWillLeaveApplication:(SampleBanner *)banner { [_adEventDelegate reportClick]; }
เท่านี้ก็เสร็จสิ้นการใช้เหตุการณ์ที่กำหนดเองสำหรับโฆษณาแบนเนอร์ ดูตัวอย่างแบบเต็มได้ใน GitHub ซึ่งคุณสามารถใช้กับเครือข่ายโฆษณาที่รองรับอยู่แล้ว หรือจะแก้ไขเพื่อแสดงโฆษณาแบนเนอร์เหตุการณ์ที่กำหนดเองก็ได้