iPad'de Birden Fazla Windows Desteği

iOS 13'ten itibaren uygulamalar iPad'de birden fazla pencereyi destekleyebilir. Bu sayede kullanıcılar, bir uygulamanın kullanıcı arayüzünün eşzamanlı olarak birden fazla kopyasıyla etkileşimde bulunabilir. Her pencere farklı boyutlarda oluşturulabilir ve reklamların yüklenme ve sunulma şeklini etkileyecek şekilde herhangi bir zamanda yeniden boyutlandırılabilir.

Bu kılavuz, iPad'de çok pencereli senaryoda reklamları doğru şekilde oluşturmaya yönelik en iyi uygulamaları göstermek için hazırlanmıştır.

Ön koşullar

Reklam isteğinde sahneyi ayarlama

Belirli bir pencereye uygun bir reklam almak için görünümün windowScene değerini reklam isteğine iletirsiniz. Google Mobile Ads SDK'sı, sahne için geçerli boyutta bir reklam döndürür.

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

Test modunda, çok sahneli uygulamanız bir sahne geçirmeden reklam isteğinde bulunursa reklam istekleri aşağıdaki hatayla başarısız olur:

<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.

Üretim modunda reklam isteği doldurulur ancak reklam tam ekran olmayan bir pencerede gösterilecekse reklamın gösterilmesi başarısız olur. Bu durumda hata mesajı şöyledir:

<Google> Ad cannot be presented. The full screen ad content size exceeds the current window size.

Reklam isteğini viewDidAppear içinde oluşturun:

Çoklu pencere durumunda, reklam istekleri göndermek için pencere sahnesi olması gerekir. viewDidLoad: içindeki bir pencereye henüz görünüm eklenmediğinden, bunun yerine viewDidAppear: içinde reklam istekleri oluşturmanız gerekir. Bu noktada pencere sahnesi ayarlanır.

viewDidAppear:, bir uygulamanın yaşam döngüsü boyunca birden fazla kez çağrılabilir. Reklam isteği başlatma kodunu, işlemin yapılıp yapılmadığını belirten bir işaret içine almanızı öneririz.

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

Tutamacı yeniden boyutlandırma

Kullanıcılar, reklam isteği gönderildikten sonra pencere boyutlarını değiştirerek sahneleri istedikleri zaman sürükleyebilir. Yeniden boyutlandırma gerçekleştiğinde yeni bir reklam isteğinde bulunmak sizin sorumluluğunuzdadır. Aşağıdaki örnek kod, kök görünüm denetleyicisinin penceresi döndürüldüğünde veya yeniden boyutlandırıldığında bildirim almak için viewWillTransitionToSize:withTransitionCoordinator: kullanır. Bununla birlikte, pencere sahnesine özgü değişiklikler için windowScene:didUpdateCoordinateSpace:interfaceOrientation:traitCollection: dinleyebilirsiniz.

Geçiş reklamı ve ödüllü reklam

Google Mobile Ads SDK'sı, bir geçiş reklamının veya ödüllü reklamın geçerli olup olmadığını belirlemek için canPresentFromViewController:error: yöntemini sağlar. Bu sayede, pencere boyutu her değiştiğinde herhangi bir tam ekran reklamın yenilenmesi gerekip gerekmediğini kontrol edebilirsiniz.

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

Pencereyi yeniden boyutlandırma işlemini, pencere döndürme işleminde olduğu gibi yapabilirsiniz. Banner reklamın yeni pencere boyutuna uygun olmasını sağlamak uygulamanızın sorumluluğundadır.

Aşağıdaki örnekte, yeni pencere genişliğiyle yeni bir uyarlanabilir banner oluşturulmaktadır:

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

Doğal reklam

Doğal reklamların oluşturulmasını kontrol eder ve doğal reklamın, uygulamanızdaki diğer içeriklere benzer şekilde yeniden boyutlandırılmış bir görünüm içinde oluşturulmasını sağlamaktan sorumlusunuz.

Bilinen sorunlar

Şu anda çok pencereli ve bölünmüş ekran reklamları yalnızca dikey modda desteklenmektedir. Yatay modda reklam isteğinde bulunduğunuzda aşağıdaki günlük mesajını alırsınız.

<Google> Ad cannot be presented. The full screen ad content size exceeds the
current window size.