iPad'de Birden Fazla Windows Desteği

iOS 13'ten itibaren uygulamalar iPad'de birden fazla pencereyi destekleyebilir. Böylece, kullanıcılar bir uygulama kullanıcı arayüzünün aynı anda birden fazla kopyasıyla etkileşim kurabilir. Her pencere farklı boyutlarda oluşturulabilir ve istediğiniz zaman yeniden boyutlandırılabilir. Bu, reklamların yüklenme ve sunulma şeklini etkiler.

Bu kılavuz, iPad çok pencereli bir 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 uyan bir reklam almak için görünümün windowScene değerini reklam isteğine geçirirsiniz. Google Mobile Ads SDK'sı, ilgili sahne için geçerli boyuta sahip bir reklam döndürür.

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

Birden çok sahneli uygulamanız bir sahneyi geçmeden reklam isterse reklam istekleri test modunda aşağıdaki hatayı vererek 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 sunulacaksa reklam sunma başarısız olur. Bu durumda hata mesajı:

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

Reklam isteğini viewDidView'da oluşturun:

Çoklu pencere kullanımı, reklam isteği göndermek için pencere sahnesine sahip olma zorunluluğunu doğurur. viewDidLoad: bölgesindeki bir pencereye henüz görüntüleme eklenmediğinden, bunun yerine pencere sahnesinin o noktaya ayarlandığı viewDidAppear: içinde reklam istekleri oluşturmanız gerekir.

viewDidAppear: uygulamasının, uygulamanın yaşam döngüsü boyunca birden çok kez çağrılabileceğini unutmayın. Reklam isteği başlatma kodunu, işlemin zaten yapılmış olup olmadığını belirten bir işaretle sarmanı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;
  }
}

Herkese açık kullanıcı adı yeniden boyutlandırma

Kullanıcılar, reklam isteği yapıldıktan sonra pencere boyutlarını değiştirerek sahneleri istedikleri zaman sürükleyebilir. Yeniden boyutlandırma yapıldığında yeni bir reklam istemek size bağlıdır. Aşağıdaki örnek kod, kök görünümü denetleyicisinin penceresi döndüğünde veya yeniden boyutlandırıldığında bildirim almak için viewWillTransitionToSize:withTransitionCoordinator: etiketini kullanır. Bununla birlikte, pencere düzenine özel değişiklikler için windowScene:didUpdateCoordinateSpace:interfaceOrientation:traitCollection: komutunu da dinleyebilirsiniz.

Geçiş 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ğlayarak pencere boyutu değiştiğinde tam ekran reklamın yenilenmesi gerekip gerekmediğini kontrol edebilmenizi sağlar.

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

Pencere yeniden boyutlandırmasını, pencere döndürmeyle aynı şekilde yapabilirsiniz. Banner reklamın yeni pencere boyutuna sığmasını sağlamaktan uygulamanız sorumludur.

Aşağıdaki örnekte yeni pencere genişliğine sahip 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 = 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];
}

Doğal reklam

Yerel reklamların oluşturulmasının kontrolü sizdedir ve yerel reklamın, uygulama içeriğinizin geri kalanına benzer şekilde yeniden boyutlandırılan bir görünümde 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 bulunurken 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.