Mendukung Beberapa Windows di iPad

Mulai iOS 13, aplikasi dapat mendukung beberapa jendela di iPad, yang berarti pengguna dapat berinteraksi dengan beberapa salinan UI aplikasi secara serentak. Setiap jendela dapat dibuat dalam berbagai ukuran dan dapat diubah ukurannya kapan saja, yang memiliki implikasi pada cara iklan dimuat dan ditampilkan.

Panduan ini dimaksudkan untuk menunjukkan praktik terbaik untuk merender iklan dengan benar dalam skenario multi-aplikasi iPad.

Prasyarat

Menetapkan tampilan 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 scene tersebut.

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) {}];
}

Dalam mode pengujian, permintaan iklan akan gagal dengan error berikut jika aplikasi multi-tampilan Anda meminta iklan tanpa meneruskan tampilan:

<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 hal 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 tampilan jendela guna mengirim permintaan iklan. Karena tampilan belum ditambahkan ke jendela di viewDidLoad:, Anda harus membuat permintaan iklan di viewDidAppear: tempat tampilan jendela ditetapkan pada titik tersebut.

Perhatikan bahwa viewDidAppear: dapat dipanggil lebih dari sekali selama siklus hidup aplikasi. Sebaiknya gabungkan kode inisialisasi permintaan iklan dalam tanda yang menunjukkan apakah kode tersebut telah dilakukan.

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 tampilan kapan saja, mengubah ukuran jendela setelah permintaan iklan dibuat. Anda dapat meminta iklan baru saat perubahan ukuran terjadi. Kode contoh di bawah menggunakan viewWillTransitionToSize:withTransitionCoordinator: untuk mendapatkan notifikasi saat jendela pengontrol tampilan root diputar atau diubah ukurannya, tetapi Anda juga dapat memproses windowScene:didUpdateCoordinateSpace:interfaceOrientation:traitCollection: untuk perubahan khusus tampilan 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(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];
    }
  }];
}

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 = 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];
}

Iklan native

Anda mengontrol rendering iklan native dan bertanggung jawab untuk memastikan iklan native dirender di dalam tampilan yang diubah ukurannya, mirip dengan konten aplikasi Anda lainnya.

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.