پیشنیازها
تنظیمات رویدادهای سفارشی را تکمیل کنید.
درخواست بنر تبلیغاتی
وقتی به ردیف رویداد سفارشی در زنجیره میانجی آبشاری (fall mediation chain) میرسید، متد loadBanner:adConfiguration:completionHandler: بر اساس نام کلاسی که هنگام ایجاد یک رویداد سفارشی ارائه کردهاید، فراخوانی میشود. در این حالت، آن متد در SampleCustomEvent قرار دارد که سپس متد loadBanner:adConfiguration:completionHandler: را در SampleCustomEventBanner فراخوانی میکند.
برای درخواست یک بنر تبلیغاتی، کلاسی ایجاد یا اصلاح کنید که GADMediationAdapter پیادهسازی کند و loadBanner:adConfiguration:completionHandler: نیز در آن قرار دهید. اگر کلاسی که GADMediationAdapter را ارثبری میکند از قبل وجود دارد، loadBanner:adConfiguration:completionHandler: را در آنجا پیادهسازی کنید. علاوه بر این، یک کلاس جدید برای پیادهسازی GADMediationBannerAd ایجاد کنید.
در مثال رویداد سفارشی ما، SampleCustomEvent رابط GADMediationAdapter را پیادهسازی میکند و سپس آن را به SampleCustomEventBanner محول میکند.
سویفت
import GoogleMobileAds class SampleCustomEvent: NSObject, MediationAdapter { fileprivate var bannerAd: SampleCustomEventBanner? ... func loadBanner( for adConfiguration: MediationBannerAdConfiguration, completionHandler: @escaping GADMediationBannerLoadCompletionHandler ) { self.bannerAd = SampleCustomEventBanner() self.bannerAd?.loadBanner( for: adConfiguration, completionHandler: completionHandler) } }
هدف-سی
#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پس از اتمام بارگذاری.پیادهسازی پروتکل
GADMediationBannerAd.دریافت و گزارش فراخوانیهای رویداد تبلیغات به SDK تبلیغات موبایلی گوگل.
پارامتر اختیاری تعریف شده در رابط کاربری مدیریت تبلیغات، در پیکربندی تبلیغات گنجانده شده است. این پارامتر از طریق adConfiguration.credentials.settings[@"parameter"] قابل دسترسی است. این پارامتر معمولاً یک شناسه واحد تبلیغاتی است که یک SDK شبکه تبلیغاتی هنگام نمونهسازی یک شیء تبلیغاتی به آن نیاز دارد.
سویفت
class SampleCustomEventBanner: NSObject, MediationBannerAd { /// The Sample Ad Network banner ad. var bannerAd: SampleBanner? /// The ad event delegate to forward ad rendering events to Google Mobile Ads SDK. var delegate: MediationBannerAdEventDelegate? /// Completion handler called after ad load var completionHandler: GADMediationBannerLoadCompletionHandler? func loadBanner( for adConfiguration: MediationBannerAdConfiguration, 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) } }
هدف-سی
#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 برای پارامتر خطا، و در صورت شکست، خطایی را که با آن مواجه شدهاید، منتقل کنید.
معمولاً این متدها درون فراخوانیهای (callbacks) از SDK شخص ثالثی که آداپتور شما پیادهسازی میکند، پیادهسازی میشوند. برای این مثال، Sample SDK دارای یک SampleBannerAdDelegate با فراخوانیهای مربوطه است:
سویفت
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) } }
هدف-سی
- (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 دارد:
سویفت
var view: UIView { return bannerAd ?? UIView() }
هدف-سی
- (nonnull UIView *)view { return _bannerAd; }
رویدادهای میانجیگری را به SDK تبلیغات موبایلی گوگل منتقل کنید
پس از اینکه GADMediationBannerLoadCompletionHandler را با یک تبلیغ بارگذاری شده فراخوانی کردید، شیء نماینده GADMediationBannerAdEventDelegate بازگردانده شده میتواند توسط آداپتور برای ارسال رویدادهای ارائه از SDK شخص ثالث به SDK تبلیغات موبایل گوگل استفاده شود. کلاس SampleCustomEventBanner پروتکل SampleBannerAdDelegate را برای ارسال تماسهای برگشتی از شبکه تبلیغات نمونه به SDK تبلیغات موبایل گوگل پیادهسازی میکند.
مهم است که رویداد سفارشی شما تا حد امکان این فراخوانیهای برگشتی را ارسال کند، به طوری که برنامه شما این رویدادهای معادل را از SDK تبلیغات موبایلی گوگل دریافت کند. در اینجا مثالی از استفاده از فراخوانیهای برگشتی آورده شده است:
سویفت
func bannerWillLeaveApplication(_ banner: SampleBanner) { delegate?.reportClick() }
هدف-سی
- (void)bannerWillLeaveApplication:(SampleBanner *)banner { [_adEventDelegate reportClick]; }
این، پیادهسازی رویدادهای سفارشی برای بنرهای تبلیغاتی را تکمیل میکند. مثال کامل در GitHub موجود است. میتوانید از آن با یک شبکه تبلیغاتی که از قبل پشتیبانی میشود استفاده کنید یا آن را برای نمایش بنرهای تبلیغاتی رویدادهای سفارشی تغییر دهید.