דרישות מוקדמות
השלם את ההגדרה של אירועים מותאמים אישית.
בקשה למודעת מעברון
כשמגיעים לפריט של האירוע המותאם אישית בשרשרת לבחירת הרשת ב-Waterfall, המערכת מפעילה אתthe loadInterstitial:adConfiguration:completionHandler:
method לפי שם המחלקה שסיפקתם כשיוצרים אירוע בהתאמה אישית. במקרה הזה, השיטה הזו היא ב-SampleCustomEvent
, ואז קוראת ל-the loadInterstitial:adConfiguration:completionHandler:
method ב- SampleCustomEventInterstitial
.
כדי לבקש מודעת מעברון, צריך ליצור או לשנות מחלקה שמוטמעת בה
GADMediationAdapter
ו-loadInterstitial:adConfiguration:completionHandler:
.
אם כבר קיימת מחלקה שמרחיבה את GADMediationAdapter
, מטמיעים בה את loadInterstitial:adConfiguration:completionHandler:
. בנוסף, צריך ליצור מחלקה חדשה כדי להטמיע את GADMediationInterstitialAd
.
בדוגמה של האירוע בהתאמה אישית, SampleCustomEvent
מטמיעthe GADMediationAdapter
interface ואז מעניק גישה ל-SampleCustomEventInterstitial
.
Swift
import GoogleMobileAds class SampleCustomEvent: NSObject, GADMediationAdapter { fileprivate var interstitialAd: SampleCustomEventInterstitial? ... func loadInterstitial( for adConfiguration: GADMediationInterstitialAdConfiguration, completionHandler: @escaping GADMediationInterstitialLoadCompletionHandler ) { self.interstitialAd = SampleCustomEventInterstitial() self.interstitialAd?.loadInterstitial( for: adConfiguration, completionHandler: completionHandler) } }
Objective-C
#import "SampleCustomEvent.h" @implementation SampleCustomEvent SampleCustomEventInterstitial *sampleInterstitial; - (void)loadInterstitialForAdConfiguration: (GADMediationInterstitialAdConfiguration *)adConfiguration completionHandler: (GADMediationInterstitialLoadCompletionHandler) completionHandler { sampleInterstitial = [[SampleCustomEventInterstitial alloc] init]; [sampleInterstitial loadInterstitialForAdConfiguration:adConfiguration completionHandler:completionHandler]; }
SampleCustomEventInterstitial
אחראי על המשימות הבאות:
טעינה של מודעת המעברון והפעלה
GADMediationInterstitialAdLoadCompletionHandler
method לאחר סיום הטעינההטמעה של
GADMediationInterstitialAd
protocolקבלת קריאות חוזרות של אירועי מודעות ודיווח עליהן ל-Google Mobile Ads SDK
הפרמטר האופציונלי שמוגדר AdMob בממשק המשתמש כלול בהגדרות האישיות של המודעות.
אפשר לגשת לפרמטר דרך adConfiguration.credentials.settings[@"parameter"]
. הפרמטר הזה הוא בדרך כלל מזהה של יחידת מודעות שנדרש ל-SDK של רשת מודעות כשיוצרים אובייקט של מודעה.
Swift
import GoogleMobileAds class SampleCustomEventInterstitial: NSObject, GADMediationInterstitialAd { /// The Sample Ad Network interstitial ad. var interstitial: SampleInterstitial? /// The ad event delegate to forward ad rendering events to the Google Mobile Ads SDK. var delegate: GADMediationInterstitialAdEventDelegate? var completionHandler: GADMediationInterstitialLoadCompletionHandler? func loadInterstitial( for adConfiguration: GADMediationInterstitialAdConfiguration, completionHandler: @escaping GADMediationInterstitialLoadCompletionHandler ) { interstitial = SampleInterstitial.init( adUnitID: adConfiguration.credentials.settings["parameter"] as? String) interstitial?.delegate = self let adRequest = SampleAdRequest() adRequest.testMode = adConfiguration.isTestRequest self.completionHandler = completionHandler interstitial?.fetchAd(adRequest) } func present(from viewController: UIViewController) { if let interstitial = interstitial, interstitial.isInterstitialLoaded { interstitial.show() } } }
Objective-C
#import "SampleCustomEventInterstitial.h" @interface SampleCustomEventInterstitial () <SampleInterstitialAdDelegate, GADMediationInterstitialAd> { /// The sample interstitial ad. SampleInterstitial *_interstitialAd; /// The completion handler to call when the ad loading succeeds or fails. GADMediationInterstitialLoadCompletionHandler _loadCompletionHandler; /// The ad event delegate to forward ad rendering events to the Google Mobile /// Ads SDK. id <GADMediationInterstitialAdEventDelegate> _adEventDelegate; } @end - (void)loadInterstitialForAdConfiguration: (GADMediationInterstitialAdConfiguration *)adConfiguration completionHandler: (GADMediationInterstitialLoadCompletionHandler) completionHandler { __block atomic_flag completionHandlerCalled = ATOMIC_FLAG_INIT; __block GADMediationInterstitialLoadCompletionHandler originalCompletionHandler = [completionHandler copy]; _loadCompletionHandler = ^id<GADMediationInterstitialAdEventDelegate>( _Nullable id<GADMediationInterstitialAd> ad, NSError *_Nullable error) { // Only allow completion handler to be called once. if (atomic_flag_test_and_set(&completionHandlerCalled)) { return nil; } id<GADMediationInterstitialAdEventDelegate> 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"]; _interstitialAd = [[SampleInterstitial alloc] initWithAdUnitID:adUnit]; _interstitialAd.delegate = self; SampleAdRequest *adRequest = [[SampleAdRequest alloc] init]; adRequest.testMode = adConfiguration.isTestRequest; [_interstitialAd fetchAd:adRequest]; }
גם אם המודעה אוחזרה בהצלחה וגם אם מופיעה שגיאה, צריך לבצע קריאה ל-GADMediationInterstitialLoadCompletionHandler
. אם הפעולה מצליחה, מעבירים את המחלקה שמטמיעה את GADMediationInterstitialAd
עם הערך nil
לפרמטר השגיאה. במקרה של כישלון, מעבירים את השגיאה שנתקלת בה.
בדרך כלל, השיטות האלה מוטמעות בקריאות חוזרות מ-SDK של הצד השלישי שהמתאם מטמיע. בדוגמה הזו, ה-SDK לדוגמה כולל SampleInterstitialAdDelegate
עם קריאה חוזרת (callback) רלוונטית:
Swift
func interstitialDidLoad(_ interstitial: SampleInterstitial) { if let handler = completionHandler { delegate = handler(self, nil) } } func interstitial( _ interstitial: SampleInterstitial, 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)interstitialDidLoad:(SampleInterstitial *)interstitial { _adEventDelegate = _loadCompletionHandler(self, nil); } - (void)interstitial:(SampleInterstitial *)interstitial 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); }
GADMediationInterstitialAd
מחייב שימוש בשיטת present
כדי להציג את המודעה:
Swift
func present(from viewController: UIViewController) { if let interstitial = interstitial, interstitial.isInterstitialLoaded { interstitial.show() } }
Objective-C
- (void)presentFromViewController:(UIViewController *)viewController { if ([_interstitialAd isInterstitialLoaded]) { [_interstitialAd show]; } else { NSError *error = SampleCustomEventErrorWithCodeAndDescription( SampleCustomEventErrorAdNotLoaded, [NSString stringWithFormat:@"The interstitial ad failed to present " @"because the ad was not loaded."]); [_adEventDelegate didFailToPresentWithError:error] } }
העברת אירועים של תהליך בחירת הרשת (Mediation) אל Google Mobile Ads SDK
אחרי שקוראים ל-GADMediationInterstitialLoadCompletionHandler
עם מודעה שנטענה, המתאם יכול להשתמש באובייקט הגישה GADMediationInterstitialAdEventDelegate
שמוחזר כדי להעביר אירועי מצגת מה-SDK של הצד השלישי ל-Google Mobile Ads SDK. המחלקה SampleCustomEventInterstitial
מטמיעה את הפרוטוקול SampleInterstitialAdDelegate
כדי להעביר קריאות חוזרות מרשת המודעות לדוגמה אל Google Mobile Ads SDK.
חשוב שהאירוע המותאם אישית יעביר כמה שיותר קריאות חוזרות כאלה, כדי שהאפליקציה תקבל את האירועים המקבילים האלה מ-Google Mobile Ads SDK. דוגמה לשימוש בהתקשרות חזרה:
Swift
func interstitialWillPresentScreen(_ interstitial: SampleInterstitial) { delegate?.willPresentFullScreenView() delegate?.reportImpression() } func interstitialWillDismissScreen(_ interstitial: SampleInterstitial) { delegate?.willDismissFullScreenView() } func interstitialDidDismissScreen(_ interstitial: SampleInterstitial) { delegate?.didDismissFullScreenView() } func interstitialWillLeaveApplication(_ interstitial: SampleInterstitial) { delegate?.reportClick() }
Objective-C
- (void)interstitialWillPresentScreen:(SampleInterstitial *)interstitial { [_adEventDelegate willPresentFullScreenView]; [_adEventDelegate reportImpression]; } - (void)interstitialWillDismissScreen:(SampleInterstitial *)interstitial { [_adEventDelegate willDismissFullScreenView]; } - (void)interstitialDidDismissScreen:(SampleInterstitial *)interstitial { [_adEventDelegate didDismissFullScreenView]; } - (void)interstitialWillLeaveApplication:(SampleInterstitial *)interstitial { [_adEventDelegate reportClick]; }
הפעולה הזאת מסתיימת בהטמעה של אירועים מותאמים אישית במודעות מעברון. הדוגמה המלאה מופיעה ב-GitHub. ניתן להשתמש בה ברשת מודעות שכבר נתמכת, או לשנות אותה להצגת מודעות מעברון לאירועים מותאמים אישית.