Ab iOS 13 können Apps mehrere Fenster auf dem iPad unterstützen. Nutzer können also mit mehreren gleichzeitigen Kopien der Benutzeroberfläche einer App interagieren. Jedes Fenster kann in verschiedenen Größen erstellt und jederzeit angepasst werden. Das hat Auswirkungen darauf, wie Anzeigen geladen und präsentiert werden.
In diesem Leitfaden erfahren Sie, wie Sie Anzeigen in einem iPad-Szenario mit mehreren Fenstern richtig rendern.
Vorbereitung
- Google Mobile Ads SDK 7.53.0 oder höher
- Szenenunterstützung in Ihrem Projekt aktivieren
- Mindestens ein Anzeigenformat implementieren
Szene in einer Anzeigenanfrage festlegen
Damit Sie eine Anzeige erhalten, die in ein bestimmtes Fenster passt, übergeben Sie die windowScene
der Ansicht an die Anzeigenanfrage. Das Google Mobile Ads SDK gibt eine Anzeige mit einer gültigen Größe für diese Szene zurück.
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) {}]; }
Im Testmodus schlagen Anzeigenanfragen mit dem folgenden Fehler fehl, wenn in Ihrer App mit mehreren Szenen eine Anzeige angefordert wird, ohne dass eine Szene übergeben wird:
<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.
Im Produktionsmodus wird die Anzeigenanfrage ausgeführt, aber die Anzeige kann nicht präsentiert werden, wenn sie in einem Fenster angezeigt werden soll, das nicht den Vollbildmodus verwendet. Die Fehlermeldung lautet in diesem Fall:
<Google> Ad cannot be presented. The full screen ad content size exceeds the current window size.
Erstellen Sie die Anzeigenanfrage in viewDidAppear:
Im Fall von mehreren Fenstern ist eine Fensterszene zum Senden von Anzeigenanfragen erforderlich. Da einem Fenster in viewDidLoad:
noch keine Ansicht hinzugefügt wurde, sollten Sie Anzeigenanfragen stattdessen in viewDidAppear:
erstellen, wo die Fensterszene zu diesem Zeitpunkt festgelegt ist.
viewDidAppear:
kann während des Lebenszyklus einer App mehrmals aufgerufen werden. Wir empfehlen, den Initialisierungscode für die Anzeigenanfrage in ein Flag einzuschließen, das angibt, ob die Initialisierung bereits erfolgt ist.
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; } }
Größenanpassung von Ziehpunkten
Nutzer können Szenen jederzeit verschieben und Fenstergrößen ändern, nachdem eine Anzeigenanfrage gesendet wurde. Sie müssen eine neue Anzeige anfordern, wenn die Größe geändert wird.
Im Beispielcode unten wird viewWillTransitionToSize:withTransitionCoordinator:
verwendet, um benachrichtigt zu werden, wenn sich das Fenster des Root-Ansichtscontrollers dreht oder die Größe ändert. Sie können aber auch windowScene:didUpdateCoordinateSpace:interfaceOrientation:traitCollection:
verwenden, um auf Änderungen zu reagieren, die sich auf die Fensterszene beziehen.
Interstitial- und Anzeige mit Prämie
Das Google Mobile Ads SDK bietet die Methode
canPresentFromViewController:error:
, mit der Sie feststellen können, ob ein Interstitial oder eine Anzeige mit Prämie gültig ist. So können Sie prüfen, ob eine Vollbildanzeige aktualisiert werden muss, wenn sich die Fenstergröße ändert.
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
Die Größenanpassung von Fenstern funktioniert genauso wie die Fensterrotation. Ihre App ist dafür verantwortlich, dass die Banneranzeige an die neue Fenstergröße angepasst wird.
Im folgenden Beispiel wird ein neues adaptives Banner mit der neuen Fensterbreite erstellt:
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]; }
Native Anzeige
Sie sind für das Rendern nativer Anzeigen verantwortlich und müssen dafür sorgen, dass die native Anzeige in einem Darstellungsbereich mit angepasster Größe gerendert wird, ähnlich wie die übrigen Inhalte Ihrer App.
Bekannte Probleme
Derzeit werden Anzeigen im Multi-Window- und Split-Screen-Modus nur im Hochformat unterstützt. Wenn Sie eine Anzeige im Querformat anfordern, erhalten Sie die folgende Log-Meldung.
<Google> Ad cannot be presented. The full screen ad content size exceeds the
current window size.