החל מ-iOS 13, אפליקציות יכולות לתמוך במספר חלונות ב-iPad. כלומר, המשתמשים יכולים ליצור אינטראקציה עם כמה עותקים בו-זמנית של ממשק המשתמש של האפליקציה. אפשר ליצור כל חלון בגדלים שונים, ואפשר לשנות את הגודל שלו בכל שלב. לכך יש השלכות על האופן שבו המודעות נטענות ומוצגות.
במדריך הזה מפורטות שיטות מומלצות לעיבוד מודעות בצורה נכונה בתרחיש של כמה חלונות ב-iPad.
דרישות מוקדמות
- Google Mobile Ads SDK בגרסה 7.53.0 ואילך
- הפעלת תמיכה בסצנות בפרויקט
- מטמיעים לפחות פורמט מודעה אחד
הגדרת הסצנה בבקשה להצגת מודעה
כדי לקבל מודעה שתתאים לחלון ספציפי, מעבירים את windowScene
של התצוגה לבקשת המודעה. ערכת Google Mobile Ads SDK מחזירה מודעה בגודל תקין לסצנה הזו.
Swift
func loadInterstitial() { let request = GADRequest() request.scene = view.window?.windowScene GADInterstitialAd.load(withAdUnitID: "[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(fromRootViewController: 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 = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(bannerWidth) let request = GADRequest() 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.