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