Ab iOS 13 unterstützen Anwendungen mehrere Fenster auf dem iPad. Das bedeutet, dass Nutzer mit mehreren Kopien der Benutzeroberfläche einer App gleichzeitig interagieren können. Jedes Fenster kann in verschiedenen Größen erstellt und jederzeit angepasst werden, was Auswirkungen darauf hat, wie Anzeigen geladen und präsentiert werden.
In diesem Leitfaden werden die Best Practices für das korrekte Rendern von Anzeigen im Mehrfenstermodus auf dem iPad erläutert.
Voraussetzungen
- Google Mobile Ads SDK 7.53.0 oder höher
- Szenenunterstützung im Projekt aktivieren
- Verwenden Sie mindestens ein Anzeigenformat.
Szenen in einer Anzeigenanfrage festlegen
Um eine Anzeige zu erhalten, die in ein bestimmtes Fenster passt, übergeben Sie den windowScene
der Ansicht an die Anzeigenanfrage. Das Google Mobile Ads SDK gibt eine Anzeige mit gültiger Größe für die entsprechende Szene zurück.
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) {}]; }
Im Testmodus schlagen Anzeigenanfragen mit dem folgenden Fehler fehl, wenn Ihre App mit mehreren Szenen eine Anzeige anfordert, ohne eine Szene zu übergeben:
<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. Wenn die Anzeige jedoch nicht im Vollbildmodus präsentiert werden soll, schlägt die Präsentation fehl. 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 view DidAppear:
Beim Mehrfenstermodus ist es erforderlich, eine Fensterszene zum Senden von Anzeigenanfragen zu haben. Da einem Fenster in viewDidLoad:
noch keine Ansicht hinzugefügt wurde, sollten Sie stattdessen Anzeigenanfragen in viewDidAppear:
erstellen, wobei die Fensterszene zu diesem Zeitpunkt festgelegt ist.
Beachten Sie, dass viewDidAppear:
während des Lebenszyklus einer Anwendung mehrmals aufgerufen werden kann. Wir empfehlen, den Initialisierungscode der Anzeigenanfrage in ein Flag zu verpacken, das anzeigt, ob dies bereits geschehen 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
Nutzer können Szenen jederzeit verschieben und die Fenstergröße nach einer Anzeigenanfrage ändern. Es liegt an Ihnen, eine neue Anzeige anzufordern, wenn die Größe angepasst wird.
Im Beispielcode unten wird viewWillTransitionToSize:withTransitionCoordinator:
verwendet, um eine Benachrichtigung zu erhalten, wenn das Fenster des Root-Ansicht-Controllers gedreht oder die Größe angepasst wird. Sie können aber auch windowScene:didUpdateCoordinateSpace:interfaceOrientation:traitCollection:
auf fensterszenenspezifische Änderungen warten.
Interstitial-Anzeige und Anzeige mit Prämie
Das Google Mobile Ads SDK bietet die Methode canPresentFromViewController:error:
, mit der ermittelt wird, ob eine Interstitial-Anzeige oder eine Anzeige mit Prämie gültig ist. So lässt sich 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(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
Sie können die Fenstergröße auf die gleiche Weise ändern wie die Fensterdrehung. Ihre App muss sicherstellen, dass die Banneranzeige in die neue Fenstergröße passt.
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 = 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]; }
Native Anzeige
Sie kontrollieren das Rendering nativer Anzeigen und sind dafür verantwortlich, dass die native Anzeige in einer Ansicht mit angepasster Größe gerendert wird, ähnlich wie der Rest Ihres App-Contents.
Bekannte Probleme
Derzeit werden der Mehrfenstermodus und der Splitscreen-Modus nur im Hochformat unterstützt. Wenn Sie eine Anzeige im Querformat anfordern, erhalten Sie die folgende Protokollmeldung.
<Google> Ad cannot be presented. The full screen ad content size exceeds the
current window size.