iPad'de Birden Fazla Windows Desteği

iOS 13'ten itibaren uygulamalar iPad'de birden fazla pencere destekleyebilir. Bu sayede kullanıcılar, bir uygulamanın kullanıcı arayüzünün birden fazla kopyasıyla aynı anda etkileşim kurabilir. Her pencere farklı boyutlarda oluşturulabilir ve dilediğiniz zaman yeniden boyutlandırılabilir. Bu, reklamların nasıl yüklendiği ve sunulduğuyla ilgili sonuçlar doğurur.

Bu kılavuzun amacı, iPad çok pencereli senaryosundaki reklamları doğru şekilde oluşturmayla ilgili en iyi uygulamaları göstermektir.

Ön koşullar

Reklam isteğinde sahneyi ayarlama

Belirli bir pencereye sığacak bir reklam almak için görünümün windowScene parametresini reklam isteğine iletirsiniz. Google Mobile Ads SDK'sı, söz konusu 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) {}];
}

Çok sahneli uygulamanız bir sahne iletmeden reklam isterse test modunda 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 sunulması başarısız olur. Bu durumdaki hata mesajı:

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

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

Çoklu pencere durumunda, reklam istekleri göndermek için bir pencere sahnesi olması gerekir. viewDidLoad:'te bir pencereye henüz bir görünüm eklenmediğinden, pencere sahnesinin o noktaya kadar ayarlandığı viewDidAppear:'te reklam istekleri oluşturmanız gerekir.

viewDidAppear: işlevinin, bir uygulamanın yaşam döngüsü sırasında birden fazla kez çağrılabileceğini unutmayın. Reklam isteği başlatma kodunu, daha önce yapılıp yapılmadığını belirten bir işaret içine koymanı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;
  }
}

Yeniden boyutlandırma tutamacını kullanma

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 işlemi gerçekleştiğinde yeni bir reklam istemek size bağlıdır. Aşağıdaki örnek kod, kök görüntü denetleyicisinin penceresi döndürüldüğünde veya yeniden boyutlandırıldığında bildirim almak için viewWillTransitionToSize:withTransitionCoordinator: değerini kullanır. Ancak pencere sahnesine özgü değişiklikler için windowScene:didUpdateCoordinateSpace:interfaceOrientation:traitCollection: değerini de 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. Böylece, pencere boyutu değiştiğinde 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(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 boyutlandırma işlemini, pencere rotasyonu için yaptığınız gibi yapabilirsiniz. Banner reklamın yeni pencere boyutuna sığması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 = 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ı oluşturma işlemi sizin kontrolünüzdedir ve yerel reklamın, uygulama içeriğinizin geri kalanına benzer şekilde yeniden boyutlandırılmış bir görünümde oluşturulmasını sağlamak sizin sorumluluğunuzdadır.

Bilinen sorunlar

Çok pencereli ve bölünmüş ekran reklamlar şu anda yalnızca dikey modda desteklenmektedir. Reklamı yatay modda istediğinizde 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.