Mulai iOS 13, aplikasi dapat mendukung beberapa jendela di iPad, yang berarti pengguna dapat berinteraksi dengan beberapa salinan UI aplikasi secara bersamaan. Setiap jendela dapat dibuat dalam ukuran yang berbeda dan dapat diubah ukurannya kapan saja, yang memiliki implikasi terhadap cara iklan dimuat dan ditampilkan.
Panduan ini dimaksudkan untuk menunjukkan praktik terbaik dalam merender iklan dengan benar dalam skenario multi-window iPad.
Prasyarat
- Google Mobile Ads SDK 7.53.0 atau yang lebih tinggi
- Mengaktifkan dukungan adegan di project Anda
- Terapkan minimal satu format iklan
Menyetel adegan dalam permintaan iklan
Untuk menerima iklan yang sesuai dengan jendela tertentu, Anda meneruskan
windowScene
tampilan ke permintaan iklan. Google Mobile Ads SDK menampilkan iklan dengan ukuran yang valid untuk adegan tersebut.
Swift
func loadInterstitial() { let request = Request() request.scene = view.window?.windowScene InterstitialAd.load(with: "[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) {}]; }
Dalam mode pengujian, permintaan iklan akan gagal dengan error berikut jika aplikasi multiscene Anda meminta iklan tanpa meneruskan adegan:
<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.
Dalam mode produksi, permintaan iklan akan terisi, tetapi menampilkan iklan akan gagal jika iklan akan ditampilkan di jendela non-layar penuh. Pesan error dalam kasus ini adalah:
<Google> Ad cannot be presented. The full screen ad content size exceeds the current window size.
Buat permintaan iklan di viewDidAppear:
Kasus multi-aplikasi memperkenalkan persyaratan untuk memiliki adegan jendela guna mengirim permintaan iklan. Karena tampilan belum ditambahkan ke jendela di
viewDidLoad:
, Anda harus membuat permintaan iklan di viewDidAppear:
tempat adegan jendela ditetapkan pada saat itu.
Perhatikan bahwa viewDidAppear:
dapat dipanggil lebih dari sekali selama siklus proses aplikasi. Sebaiknya Anda membungkus kode inisialisasi permintaan iklan dalam
flag yang menunjukkan apakah inisialisasi telah dilakukan atau belum.
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; } }
Mengubah ukuran handle
Pengguna dapat menarik adegan kapan saja, mengubah ukuran jendela setelah permintaan iklan dilakukan. Anda dapat meminta iklan baru saat pengubahan ukuran terjadi.
Contoh kode di bawah menggunakan
viewWillTransitionToSize:withTransitionCoordinator:
untuk mendapatkan notifikasi saat jendela pengontrol tampilan root berputar atau diubah ukurannya, tetapi
Anda juga dapat memproses
windowScene:didUpdateCoordinateSpace:interfaceOrientation:traitCollection:
untuk perubahan khusus adegan jendela.
Iklan Interstisial dan Reward
Google Mobile Ads SDK menyediakan metode
canPresentFromViewController:error:
untuk menentukan apakah iklan interstisial atau
iklan reward valid atau tidak, sehingga Anda dapat memeriksa apakah iklan layar penuh
perlu dimuat ulang setiap kali ukuran jendela berubah.
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(from: 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]; } }]; }
Banner
Anda dapat menangani pengubahan ukuran jendela dengan cara yang sama seperti yang Anda lakukan untuk rotasi jendela. Aplikasi Anda bertanggung jawab untuk memastikan iklan banner sesuai dengan ukuran jendela baru.
Contoh di bawah membuat banner adaptif baru dengan lebar jendela baru:
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 = currentOrientationAnchoredAdaptiveBanner(width: bannerWidth) let request = Request() 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]; }
Iklan native
Anda memiliki kontrol atas rendering iklan native dan bertanggung jawab untuk memastikan iklan native dirender di dalam tampilan yang diubah ukurannya, mirip dengan konten aplikasi Anda yang lain.
Masalah umum
Saat ini, iklan multi-aplikasi dan layar terpisah hanya didukung dalam mode potret. Anda akan mendapatkan pesan log berikut saat meminta iklan dalam mode lanskap.
<Google> Ad cannot be presented. The full screen ad content size exceeds the
current window size.