การรองรับ Windows หลายอย่างใน iPad

ตั้งแต่ iOS 13 เป็นต้นไป แอปพลิเคชันจะรองรับหลายหน้าต่างใน iPad ได้ ซึ่งหมายความว่าผู้ใช้จะโต้ตอบกับ UI ของแอปที่ทำงานพร้อมกันหลายสำเนาพร้อมกันได้ หน้าต่างแต่ละขนาดสามารถสร้างได้ในขนาดที่แตกต่างกัน และสามารถปรับขนาดได้ตลอดเวลา ซึ่งมีผลต่อวิธีการโหลดและนำเสนอโฆษณา

คู่มือนี้มีวัตถุประสงค์เพื่อแสดงให้คุณเห็นถึงแนวทางปฏิบัติที่ดีที่สุดในการแสดงผลโฆษณาอย่างถูกต้องในสถานการณ์ที่มีหลายหน้าต่างของ iPad

ข้อกำหนดเบื้องต้น

กำหนดฉากในคำขอโฆษณา

เพื่อให้ได้รับโฆษณาที่พอดีกับหน้าต่างที่เจาะจง คุณต้องส่งผ่าน 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.

สร้างคำขอโฆษณาใน view DidAppear:

การใช้หลายหน้าต่างเป็นข้อกำหนดของการมีฉากหน้าต่างสำหรับส่งคำขอโฆษณา เนื่องจากยังไม่ได้เพิ่มมุมมองไปยังหน้าต่างใน viewDidLoad: คุณจึงควรสร้างคำขอโฆษณาใน viewDidAppear: แทนโดยกำหนดฉากหน้าต่างไว้ที่จุดนั้น

โปรดทราบว่าอาจมีการเรียก viewDidAppear: มากกว่า 1 ครั้งในระหว่างวงจรของแอป เราขอแนะนำให้คุณรวมโค้ดการเริ่มต้นคำขอโฆษณาไว้ในธงที่ระบุว่าได้ดำเนินการไปแล้วหรือไม่

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: เพื่อดูการเปลี่ยนแปลงเฉพาะฉากของหน้าต่างได้ด้วย

โฆษณาคั่นระหว่างหน้าและโฆษณาที่มีการให้รางวัล

SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google ใช้เมธอด 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.