Depuis iOS 13, les applications peuvent être compatibles avec plusieurs fenêtres sur iPad, ce qui signifie que les utilisateurs peuvent interagir avec plusieurs copies simultanées de l'interface utilisateur d'une application. Chaque fenêtre peut être créée dans différentes tailles et peut être redimensionnée à tout moment, ce qui a des implications sur la façon dont les annonces sont chargées et présentées.
Ce guide a pour objectif de vous présenter les bonnes pratiques pour afficher correctement les annonces dans un scénario multifenêtre sur iPad.
Prérequis
- Google Mobile Ads SDK 7.53.0 ou version ultérieure
- Activer la prise en charge des scènes dans votre projet
- Implémenter au moins un format d'annonce
Définir la scène dans une demande d'annonce
Pour recevoir une annonce adaptée à une fenêtre spécifique, vous transmettez le windowScene de la vue à la demande d'annonce. Google Mobile Ads SDK renvoie une annonce de taille
valide pour cette scène.
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) {}]; }
En mode test, les demandes d'annonces échoueront avec l'erreur suivante si votre application multisystème demande une annonce sans transmettre de scène :
<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.
En mode production, la demande d'annonce est remplie, mais la présentation de l'annonce échouera si elle doit être présentée dans une fenêtre non plein écran. Le message d'erreur dans ce cas est le suivant :
<Google> Ad cannot be presented. The full screen ad content size exceeds the current window size.
Créer la demande d'annonce dans viewDidAppear :
Le mode multifenêtre nécessite une scène de fenêtre pour envoyer des demandes d'annonces. Étant donné qu'une vue n'a pas encore été ajoutée à une fenêtre dans viewDidLoad:, vous devez plutôt créer des demandes d'annonces dans viewDidAppear:, où la scène de fenêtre est définie à ce stade.
Notez que viewDidAppear: peut être appelé plusieurs fois au cours du cycle de vie d'une application. Nous vous recommandons d'encapsuler le code d'initialisation de la demande d'annonce dans un indicateur indiquant si cela a déjà été fait.
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; } }
Gérer le redimensionnement
Les utilisateurs peuvent faire glisser des scènes à tout moment, en modifiant la taille des fenêtres après avoir effectué une demande d'annonce. Il vous appartient de demander une nouvelle annonce lorsque le redimensionnement a lieu.
L'exemple de code ci-dessous utilise
viewWillTransitionToSize:withTransitionCoordinator:
pour être averti lorsque la fenêtre du contrôleur de vue racine pivote ou est redimensionnée, mais
vous pouvez également écouter
windowScene:didUpdateCoordinateSpace:interfaceOrientation:traitCollection:
pour les modifications spécifiques à la scène de fenêtre.
Annonce interstitielle et avec récompense
Google Mobile Ads SDK fournit la méthode
canPresentFromViewController:error: pour déterminer si une annonce interstitielle ou avec
récompense est valide ou non. Vous pouvez ainsi vérifier si une annonce plein écran
doit être actualisée chaque fois que la taille de la fenêtre change.
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
Vous pouvez gérer le redimensionnement de la fenêtre de la même manière que la rotation de la fenêtre. Votre application est chargée de s'assurer que la bannière publicitaire s'adapte à la nouvelle taille de la fenêtre.
L'exemple ci-dessous crée une bannière adaptative avec la nouvelle largeur de fenêtre :
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]; }
Annonce native
Vous contrôlez l'affichage des annonces natives et vous êtes responsable de leur affichage dans une vue redimensionnée, comme le reste du contenu de votre application.
Problèmes connus
Actuellement, les annonces multifenêtres et en écran partagé ne sont compatibles qu'en mode portrait. Le message de journal suivant s'affiche lorsque vous demandez une annonce en mode paysage.
<Google> Ad cannot be presented. The full screen ad content size exceeds the
current window size.