À partir d'iOS 13, les applications sont compatibles avec plusieurs fenêtres sur l'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 redimensionnée à tout moment, ce qui a des conséquences sur la façon dont les annonces sont chargées et présentées.
L'objectif de ce guide est de vous présenter les bonnes pratiques pour afficher correctement les annonces dans un scénario multifenêtre sur iPad.
Prérequis
- SDK Google Mobile Ads 7.53.0 ou version ultérieure
- Activer la prise en charge des scènes dans votre projet
- Mettez en œuvre au moins un format d'annonce.
Planter le décor dans une demande d'annonce
Pour recevoir une annonce qui s'adapte à une fenêtre spécifique, transmettez l'windowScene
de la vue à la demande d'annonce. Le SDK Google Mobile Ads renvoie une annonce dont la taille est valide pour cette scène.
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) {}]; }
En mode test, les demandes d'annonces échouent avec l'erreur suivante si votre application multiscène 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 se remplit, mais la présentation de l'annonce échouera si elle doit s'afficher dans une fenêtre qui n'est pas en plein écran. Dans ce cas, le message d’erreur est le suivant:
<Google> Ad cannot be presented. The full screen ad content size exceeds the current window size.
Créez la demande d'annonce dans viewDidAppear:
Le mode multifenêtre nécessite de disposer d'une scène 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 créer des demandes d'annonces dans viewDidAppear:
, où la scène de la 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 l'opération a déjà été effectuée.
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 les scènes à tout moment et modifier la taille de la fenêtre après l'envoi d'une demande d'annonce. Il vous appartient de demander une nouvelle annonce lors du redimensionnement.
L'exemple de code ci-dessous utilise viewWillTransitionToSize:withTransitionCoordinator:
pour recevoir une notification lorsque la fenêtre du contrôleur de vue racine pivote ou est redimensionnée. Toutefois, vous pouvez également écouter windowScene:didUpdateCoordinateSpace:interfaceOrientation:traitCollection:
pour connaître les modifications spécifiques à la scène de fenêtre.
Interstitiel et annonce avec récompense
Le SDK Google Mobile Ads fournit la méthode canPresentFromViewController:error:
pour déterminer si un interstitiel ou une annonce avec récompense est valide ou non. Vous pouvez ainsi vérifier si une annonce plein écran doit être actualisée lorsque 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(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]; } }]; }
Bannière
Vous pouvez gérer le redimensionnement de la fenêtre de la même manière que la rotation. Votre application doit s'assurer que la bannière 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 = 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]; }
Annonce native
Vous contrôlez l'affichage des annonces natives et devez vous assurer que l'annonce native s'affiche dans une vue redimensionnée, comme le reste du contenu de votre application.
Problèmes connus
Actuellement, les annonces multifenêtre et écran partagé ne sont compatibles qu'en mode Portrait. Lorsque vous demandez une annonce en mode Paysage, vous recevez le message de journal suivant :
<Google> Ad cannot be presented. The full screen ad content size exceeds the
current window size.