החל מ-iOS 13, אפליקציות יכולות לתמוך בכמה חלונות באייפד, כלומר משתמשים יכולים ליצור אינטראקציה עם כמה עותקים מקבילים של ממשק המשתמש של האפליקציה. אפשר ליצור כל חלון בגדלים שונים ולשנות את הגודל שלו בכל שלב. יש לכך השלכות על אופן הטעינה וההצגה של המודעות.
המדריך הזה נועד להציג שיטות מומלצות להצגת מודעות בצורה נכונה בתרחיש של ריבוי חלונות באייפד.
דרישות מוקדמות
- Google Mobile Ads SDK 7.53.0 ואילך
- הפעלת התמיכה בסצנות בפרויקט
- צריך להטמיע לפחות פורמט מודעה אחד
הגדרת הסצנה בבקשה להצגת מודעה
כדי לקבל מודעה שמתאימה לחלון מסוים, מעבירים את הערך של windowScene
של התצוגה לבקשת המודעה. Google Mobile Ads SDK מחזיר מודעה עם גודל תקין לסצנה הזו.
Swift
func loadInterstitial() { let request = Request() request.scene = view.window?.windowScene InterstitialAd.load(with: "[AD_UNIT_ID]", request: request) { ad, error in } }
Objective-C
- (void)loadInterstitial { GADRequest *request = [GADRequest request]; request.scene = self.view.window.windowScene; [GADInterstitialAd loadWithAdUnitID:@"[AD_UNIT_ID]" request:request completionHandler:^(GADInterstitialAd *ad, NSError *error) {}]; }
במצב בדיקה, בקשות להצגת מודעות ייכשלו עם השגיאה הבאה אם האפליקציה מרובת הסצנות שלכם תבקש להציג מודעה בלי להעביר סצנה:
<Google> Invalid Request. The GADRequest scene property should be set for
applications that support multi-scene. Treating the unset property as an error
while in test mode.
במצב הפקה, הבקשה להצגת מודעה מתקבלת, אבל הצגת המודעה תיכשל אם המודעה תוצג בחלון שלא במסך מלא. הודעת השגיאה במקרה הזה היא:
<Google> Ad cannot be presented. The full screen ad content size exceeds the current window size.
יוצרים את הבקשה להצגת מודעה בפונקציה viewDidAppear:
במקרה של ריבוי חלונות, נדרש להגדיר סצנת חלון כדי לשלוח בקשות להצגת מודעות. מכיוון שעדיין לא נוספה תצוגה לחלון ב-viewDidLoad:
, עליך ליצור בקשות להצגת מודעות ב-viewDidAppear:
, שבה סצנת החלון מוגדרת עד לנקודה הזו.
שימו לב: יכול להיות שהפונקציה viewDidAppear:
תיקרא יותר מפעם אחת במהלך מחזור החיים של האפליקציה. מומלץ להוסיף לקוד האתחול של בקשת המודעה דגל שמציין אם הפעולה כבר בוצעה.
Swift
override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) if !requestInitialized { loadInterstitial() requestInitialized = true } }
Objective-C
- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; if (!_requestInitialized) { [self loadInterstitial]; _requestInitialized = YES; } }
שינוי גודל של נקודות אחיזה
המשתמשים יכולים לגרור סצנות בכל שלב ולשנות את גודל החלון אחרי שליחת בקשה להצגת מודעה. אם משנים את הגודל של המודעה, אתם צריכים לשלוח בקשה למודעה חדשה.
בדוגמת הקוד שבהמשך נעשה שימוש ב-viewWillTransitionToSize:withTransitionCoordinator:
כדי לקבל התראה כשהחלון של בקר התצוגה הבסיסי מסתובב או משנה את הגודל, אבל אפשר גם להאזין ל-windowScene:didUpdateCoordinateSpace:interfaceOrientation:traitCollection:
כדי לקבל התראות על שינויים ספציפיים בסצנת החלון.
מודעת מעברון ומודעה מתגמלת
Google Mobile Ads SDK מספק את השיטה
canPresentFromViewController:error:
כדי לקבוע אם מודעה מתגמלת או מודעת מעברון תקפה או לא. כך אתם יכולים לבדוק אם צריך לרענן מודעה במסך מלא בכל פעם שגודל החלון משתנה.
Swift
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { super.viewWillTransition(to: size, with: coordinator) coordinator.animate(alongsideTransition: nil) { [self] context in do { try interstitial?.canPresent(from: self) } catch { loadInterstitial() } } }
Objective-C
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator { [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; [coordinator animateAlongsideTransition:nil completion:^(id _Nonnull context) { if (![self.interstitial canPresentFromRootViewController:self error:nil]) { [self loadInterstitial]; } }]; }
מודעת באנר
אפשר לשנות את גודל החלון באותה דרך שבה משנים את כיוון החלון. באחריות האפליקציה לוודא שמודעת הבאנר מתאימה לגודל החלון החדש.
בדוגמה הבאה נוצרת מודעת באנר מותאמת חדשה עם רוחב החלון החדש:
Swift
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { super.viewWillTransition(to: size, with: coordinator) coordinator.animate(alongsideTransition: nil) { [self] context in loadBanner() } } func loadBanner() { let bannerWidth = view.frame.size.width bannerView.adSize = currentOrientationAnchoredAdaptiveBanner(width: bannerWidth) let request = Request() request.scene = view.window?.windowScene bannerView.load(request) }
Objective-C
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator { [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; [coordinator animateAlongsideTransition:nil completion:^(id _Nonnull context) { [self loadBannerAd]; }]; } - (void)loadBannerAd { CGFloat bannerWidth = self.view.frame.size.width; self.bannerView.adSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(bannerWidth); GADRequest *request = [GADRequest request]; request.scene = self.view.window.windowScene; [self.bannerView loadRequest:request]; }
מודעה מותאמת
אתם שולטים בעיבוד של מודעות מותאמות ואחראים לוודא שהמודעה המותאמת מעובדת בתוך תצוגה שגודלה השתנה, בדומה לשאר התוכן באפליקציה.
בעיות מוכרות
בשלב הזה יש תמיכה במודעות בחלונות מרובים ובמסך מפוצל רק במצב לאורך. כשמבקשים להציג מודעה במצב לרוחב, מופיעה הודעת היומן הבאה.
<Google> Ad cannot be presented. The full screen ad content size exceeds the
current window size.