תמיכה ב-Multiple Windows ב-iPad

החל מ-iOS 13, אפליקציות יכולות לתמוך במספר חלונות ב-iPad. כלומר, המשתמשים יכולים ליצור אינטראקציה עם כמה עותקים בו-זמנית של ממשק המשתמש של האפליקציה. אפשר ליצור כל חלון בגדלים שונים, ואפשר לשנות את הגודל שלו בכל שלב. לכך יש השלכות על האופן שבו המודעות נטענות ומוצגות.

במדריך הזה מפורטות שיטות מומלצות לעיבוד מודעות בצורה נכונה בתרחיש של כמה חלונות ב-iPad.

דרישות מוקדמות

הגדרת הסצנה בבקשה להצגת מודעה

כדי לקבל מודעה שתתאים לחלון ספציפי, מעבירים את 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.