پیش نیازها
راه اندازی رویدادهای سفارشی را کامل کنید.
درخواست بنر تبلیغاتی
هنگامی که مورد خط رویداد سفارشی در زنجیره میانجی آبشار به دست میآید، متد 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, GADMediationAdapter { fileprivate var bannerAd: SampleCustomEventBanner? ... func loadBanner( for adConfiguration: GADMediationBannerAdConfiguration, completionHandler: @escaping GADMediationBannerLoadCompletionHandler ) { self.bannerAd = SampleCustomEventBanner() self.bannerAd?.loadBanner( for: adConfiguration, completionHandler: completionHandler) } }
هدف-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
پس از اتمام بارگیری.پیاده سازی پروتکل
GADMediationBannerAd
.دریافت و گزارش تماسهای رویداد تبلیغاتی به Google Mobile Ads SDK
پارامتر اختیاری تعریف شده در رابط کاربری AdMob در پیکربندی آگهی گنجانده شده است. این پارامتر از طریق adConfiguration.credentials.settings[@"parameter"]
قابل دسترسی است. این پارامتر معمولاً یک شناسه واحد تبلیغاتی است که یک SDK شبکه تبلیغاتی هنگام نمونهبرداری از یک شی تبلیغاتی به آن نیاز دارد.
سویفت
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) } }
هدف-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
با تماسهای مربوطه است:
سویفت
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) } }
هدف-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
نیاز دارد:
سویفت
var view: UIView { return bannerAd ?? UIView() }
هدف-C
- (nonnull UIView *)view { return _bannerAd; }
رویدادهای میانجی را به Google Mobile Ads SDK بازارسال کنید
هنگامی که GADMediationBannerLoadCompletionHandler
با یک تبلیغ بارگذاری شده فراخوانی کردید، شیء نماینده بازگردانده شده GADMediationBannerAdEventDelegate
می تواند توسط آداپتور برای ارسال رویدادهای ارائه از SDK شخص ثالث به SDK تبلیغات موبایلی Google استفاده شود. کلاس SampleCustomEventBanner
پروتکل SampleBannerAdDelegate
را برای ارسال تماسهای برگشتی از شبکه تبلیغاتی نمونه به Google Mobile Ads SDK پیادهسازی میکند.
مهم است که رویداد سفارشی شما تا آنجایی که ممکن است این تماسهای پاسخگو را فوروارد کند تا برنامه شما این رویدادهای مشابه را از Google Mobile Ads SDK دریافت کند. در اینجا مثالی از استفاده از callback آورده شده است:
سویفت
func bannerWillLeaveApplication(_ banner: SampleBanner) { delegate?.reportClick() }
هدف-C
- (void)bannerWillLeaveApplication:(SampleBanner *)banner { [_adEventDelegate reportClick]; }
این پیاده سازی رویدادهای سفارشی را برای تبلیغات بنری تکمیل می کند. نمونه کامل در GitHub موجود است. میتوانید از آن با یک شبکه تبلیغاتی که قبلاً پشتیبانی میشود استفاده کنید یا آن را برای نمایش تبلیغات بنر رویداد سفارشی تغییر دهید.