החל מ-iOS 13, אפליקציות יכולות לתמוך במספר חלונות ב-iPad, כלומר המשתמשים יכולים להשתמש במספר עותקים בו-זמנית של ממשק המשתמש של האפליקציה. אפשר ליצור כל חלון בגדלים שונים ולשנות את הגודל שלו בכל שלב, ויש לו השלכות על האופן שבו המודעות נטענות ומוצגות.
המדריך הזה מציג שיטות מומלצות להצגת מודעות בצורה נכונה בתרחיש של iPad עם ריבוי חלונות.
דרישות מוקדמות
- Google Mobile Ads SDK מגרסה 7.53.0 ואילך
- הפעלת תמיכה בסצנה בפרויקט
- מטמיעים לפחות פורמט מודעה אחד
הגדרת הסצנה בבקשה להצגת מודעה
כדי לקבל מודעה שמתאימה לחלון ספציפי, צריך להעביר את השדה windowScene
של התצוגה לבקשה להצגת המודעה. ה-SDK של מודעות Google לנייד מחזיר מודעה בגודל חוקי לסצנה זו.
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.
לבנות את הבקשה להצגת מודעה ב-viewDidshow:
במקרה של ריבוי חלונות, נדרשת סצנה של חלון כדי לשלוח בקשות להצגת מודעות. מאחר שעדיין לא נוספה תצוגה מפורטת לחלון ב-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.