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