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
- Google Mobile Ads SDK'sı 7.53.0 veya daha yeni bir sürüm
- Projenizde sahne desteğini etkinleştirme
- En az bir reklam biçimi uygulayın.
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]; } }]; }
Banner
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.