Compatibilidad con el entorno multiventana de iPad

En los iPad con iOS 13 o versiones posteriores, se podrán abrir varias ventanas de la misma aplicación, de modo que los usuarios podrán interactuar con diferentes copias simultáneas de la interfaz de dicha aplicación. Se pueden crear ventanas de varios tamaños, cuyas dimensiones se pueden modificar en cualquier momento, lo que repercute en el modo en el que los anuncios se cargan y presentan.

En esta guía te indicamos las prácticas recomendadas para mostrar anuncios correctamente en el entorno multiventana de iPad.

Requisitos previos

Configurar la escena en una solicitud de anuncio

Para recibir un anuncio que se ajuste a una ventana concreta, debes enviar el objeto windowScene de la vista a la solicitud de anuncio, y el SDK de anuncios de Google para móviles devolverá un anuncio con un tamaño válido para dicha escena.

- (void)loadInterstitial {
  GADRequest *request = [GADRequest request];
  request.scene = self.view.window.windowScene;

  [self.interstitial loadRequest:request];
}
<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.

Crear una solicitud de anuncio en el método viewDidAppear

Con el modo multiventana es indispensable tener una escena para enviar solicitudes de anuncios. Como todavía no se ha añadido ninguna vista a una ventana en el método viewDidLoad:, deberías crear solicitudes de anuncios en el método viewDidAppear: para definir la escena de la ventana.

Ten en cuenta que el método viewDidAppear: puede recibir más de una llamada durante el ciclo de vida de una aplicación. Te aconsejamos que añadas una bandera al comienzo y al final del código de inicialización de la solicitud de anuncio para indicar si ya se ha realizado.

- (void)viewDidAppear:(BOOL)animated {
  [super viewDidAppear:animated];
  if (!_requestInitialized) {
    [self loadInterstitial];
    _requestInitialized = YES;
  }
}

Gestionar el cambio de tamaño

Los usuarios pueden arrastrar las escenas en cualquier momento para cambiar el tamaño de las ventanas después de que se haya realizado una solicitud de anuncio. Tú decides si quieres solicitar un nuevo anuncio cuando se cambie el tamaño. El siguiente código de ejemplo utiliza el método viewWillTransitionToSize:withTransitionCoordinator: para recibir una notificación cuando la ventana del controlador de vista raíz se gira o cambia de tamaño. Pero, si lo prefieres, puedes procesar el método windowScene:didUpdateCoordinateSpace:interfaceOrientation:traitCollection: para detectar cambios específicos en la escena de la ventana.

Anuncios intersticiales y bonificados

El SDK de anuncios de Google para móviles proporciona el método canPresentFromViewController:error: para determinar si un anuncio intersticial o bonificado es válido o no. De este modo, puedes comprobar si es necesario actualizar algún anuncio a pantalla completa cuando cambie el tamaño de la ventana.

- (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];
    }
  }];
}

Puedes gestionar el cambio de tamaño de las ventanas de la misma forma que lo harías con la rotación. Tu aplicación debe asegurarse de que el anuncio de banner se ajuste al nuevo tamaño de ventana.

En el siguiente ejemplo se crea un banner adaptativo en función de la nueva anchura de ventana:

- (void)viewWillTransitionToSize:(CGSize)size
      withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)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];
}

Anuncio nativo

Es tu responsabilidad controlar el renderizado de los anuncios nativos y asegurarte de que tanto estos anuncios como el resto del contenido de la aplicación se ajustan al nuevo tamaño de la vista.

Problemas conocidos

Por ahora, los anuncios multiventana y de pantalla dividida solo se pueden mostrar en el modo vertical. Si solicitas un anuncio de este tipo en el modo de vista horizontal, se generará el siguiente mensaje de registro:

<Google> Ad cannot be presented. The full screen ad content size exceeds the
current window size.