À partir d'iOS 13, les applications peuvent prendre en charge plusieurs écrans sur iPad. Cela 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 conséquences sur la façon dont les annonces sont chargées et présentées.
Ce guide vous présente les bonnes pratiques à suivre 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 compatibilité avec les scènes dans votre projet
- Implémentez au moins un format d'annonce.
Définir la scène dans une requête d'annonce
Pour recevoir une annonce adaptée à une fenêtre spécifique, vous transmettez la windowScene
de la vue à la demande d'annonce. Le SDK Google Mobile Ads renvoie une annonce de taille 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 requêtes d'annonces échoueront 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 est remplie, mais l'affichage de l'annonce échoue si elle doit être présentée dans une fenêtre autre que 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éez la requête d'annonce dans viewDidAppear:
Le cas de la multifenêtre nécessite d'avoir une scène de fenêtre pour envoyer des requêtes d'annonces. Étant donné qu'aucune vue n'a 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 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 requête d'annonce dans un indicateur indiquant s'il a déjà été effectué.
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; } }
Poignée de redimensionnement
Les utilisateurs peuvent faire glisser des scènes à tout moment, en modifiant la taille des fenêtres après avoir envoyé une demande d'annonce. Il vous appartient de demander une nouvelle annonce lorsque le redimensionnement se produit.
L'exemple de code ci-dessous utilise viewWillTransitionToSize:withTransitionCoordinator:
pour recevoir une notification lorsque la fenêtre du contrôleur de vue racine est pivotée ou redimensionnée, mais vous pouvez également écouter windowScene:didUpdateCoordinateSpace:interfaceOrientation:traitCollection:
pour les modifications spécifiques à la scène de la fenêtre.
Annonce interstitielle et 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 en 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(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 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 = 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 vous devez vous assurer qu'elles s'affichent dans une vue redimensionnée, comme le reste du contenu de votre application.
Problèmes connus
Actuellement, les annonces multifenêtre et en mode É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.