ตั้งแต่ iOS 13 เป็นต้นไป แอปพลิเคชันจะรองรับหลายหน้าต่างใน iPad ได้ ซึ่งหมายความว่าผู้ใช้จะโต้ตอบกับ UI ของแอปที่ทำงานพร้อมกันหลายสำเนาพร้อมกันได้ หน้าต่างแต่ละขนาดสามารถสร้างได้ในขนาดที่แตกต่างกัน และสามารถปรับขนาดได้ตลอดเวลา ซึ่งมีผลต่อวิธีการโหลดและนำเสนอโฆษณา
คู่มือนี้มีวัตถุประสงค์เพื่อแสดงให้คุณเห็นถึงแนวทางปฏิบัติที่ดีที่สุดในการแสดงผลโฆษณาอย่างถูกต้องในสถานการณ์ที่มีหลายหน้าต่างของ iPad
ข้อกำหนดเบื้องต้น
- SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google เวอร์ชัน 7.53.0 ขึ้นไป
- เปิดใช้การสนับสนุนฉากในโปรเจ็กต์
- ใช้โฆษณาอย่างน้อย 1 รูปแบบ
กำหนดฉากในคำขอโฆษณา
เพื่อให้ได้รับโฆษณาที่พอดีกับหน้าต่างที่เจาะจง คุณต้องส่งผ่าน 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.