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 istediğiniz zaman yeniden boyutlandırılabilir.

Bu kılavuz, iPad'de çok pencereli senaryoda reklamların doğru şekilde oluşturulmasına yönelik en iyi uygulamaları göstermeyi amaçlamaktadı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 pencere sahnesinin o noktaya kadar ayarlandığı viewDidAppear: içinde reklam istekleri oluşturmanız gerekir.

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 yöntemi canPresentFromViewController:error: 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 edersiniz 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ğlamak sizin sorumluluğunuzdadır.

Bilinen sorunlar

Şu anda çoklu pencere 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.