Anuncios intersticiales

Los anuncios intersticiales son anuncios a pantalla completa que cubren la interfaz de una aplicación hasta que el usuario los cierra. Se suelen mostrar en las transiciones naturales de una aplicación, como entre distintas actividades o, en los juegos, al pasar de un nivel a otro. Cuando una aplicación muestra un anuncio intersticial, el usuario tiene la opción de tocar el anuncio e ir a la página de destino o cerrarlo y volver a la aplicación.

En esta guía aprenderás a integrar anuncios intersticiales en una aplicación para iOS.

Requisitos previos

Crear un objeto de anuncio intersticial

Los anuncios intersticiales los solicitan y muestran los objetos GADInterstitial. Para empezar, debes crear una instancia y asignar el ID de su bloque de anuncios. Por ejemplo, aquí se explica cómo crear un GADInterstitial en el método viewDidLoad de un UIViewController:

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  var interstitial: GADInterstitial!

  override func viewDidLoad() {
    super.viewDidLoad()
    interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
  }
}

Objective‑C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADInterstitial *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  self.interstitial = [[GADInterstitial alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"];
}

GADInterstitial es un objeto de un solo uso que, al cargarse, muestra un anuncio intersticial. Para que una aplicación muestre varios anuncios intersticiales, es necesario crear un GADInterstitial para cada uno de ellos.

Comprobar siempre las aplicaciones con anuncios de prueba

Cuando crees y pruebes tus aplicaciones, utiliza siempre anuncios de prueba en lugar de anuncios de producción activos. De lo contrario, podríamos suspender tu cuenta.

La forma más sencilla de cargar anuncios de prueba es usar el ID de bloque de anuncios de prueba que hemos creado para intersticiales de iOS: ca-app-pub-3940256099942544/4411468910

Lo hemos configurado especialmente para devolver anuncios de prueba a cada solicitud, y puedes usarlo en tus propias aplicaciones para la programación, las pruebas y la depuración. Solo tienes que sustituirlo por el ID de tu bloque de anuncios antes de publicar la aplicación.

Para obtener más información sobre cómo funcionan los anuncios de prueba del SDK de anuncios para móviles, consulta Anuncios de prueba.

Cargar anuncios

Para cargar un anuncio intersticial, llama a loadRequest: en un objeto GADRequest:

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  var interstitial: GADInterstitial!

  override func viewDidLoad() {
    super.viewDidLoad()
    interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
    let request = GADRequest()
    interstitial.load(request)
  }
}

Objective‑C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADInterstitial *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  self.interstitial = [[GADInterstitial alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"];
  GADRequest *request = [GADRequest request];
  [self.interstitial loadRequest:request];
}

Mostrar anuncios

Lo más recomendable es mostrar los intersticiales durante las pausas naturales que se producen en el flujo de la aplicación. Por ejemplo, entre los niveles de un juego o después de que el usuario complete una tarea. Para mostrar un intersticial, verifica la propiedad isReady en GADInterstitial para asegurarte de que ha terminado de cargarse y, después, llama a presentFromRootViewController. A continuación tienes un ejemplo de cómo puedes hacerlo en uno de los métodos de acción de un UIViewController:

Swift

@IBAction func doSomething(_ sender: AnyObject) {
  ...
  if interstitial.isReady {
    interstitial.present(fromRootViewController: self)
  } else {
    print("Ad wasn't ready")
  }
}

Objective‑C

- (IBAction)doSomething:(id)sender {
  ...
  if (self.interstitial.isReady) {
    [self.interstitial presentFromRootViewController:self];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

El mensaje "Cannot present interstitial. It is not ready" (No se puede mostrar el intersticial porque no está listo) indica que el intersticial todavía se está cargando o que se ha producido un error al hacerlo. Para evitar que aparezca esa advertencia, antes de llamar a presentFromRootViewController:, verifica con el método isReady si el anuncio intersticial está listo para mostrarse.

Usar GADInterstitialDelegate para recargar anuncios

GADInterstitial es un objeto de un solo uso. Eso significa que una vez que se muestra un intersticial, hasBeenUsed devuelve el valor true y el intersticial no se puede usar para cargar otro anuncio. Para solicitar otro, deberás crear un nuevo objeto GADInterstitial. Si intentas reutilizar un objeto intersticial, aparecerá el mensaje "Request Error: Will not send request because interstitial object has been used" (Error en la solicitud: no se enviará la solicitud porque ya se ha utilizado el objeto intersticial).

El mejor lugar para asignar otro intersticial es en el método interstitialDidDismissScreen de GADInterstitialDelegate, para que el siguiente intersticial comience a cargarse tan pronto como se cierre el anterior. Incluso puedes plantearte la posibilidad de desglosar la inicialización de dicho anuncio con su propio método auxiliar:

Swift

override func viewDidLoad() {
  super.viewDidLoad()
  interstitial = createAndLoadInterstitial()
}

func createAndLoadInterstitial() -> GADInterstitial {
  var interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
  interstitial.delegate = self
  interstitial.load(GADRequest())
  return interstitial
}

func interstitialDidDismissScreen(_ ad: GADInterstitial) {
  interstitial = createAndLoadInterstitial()
}

Objective‑C

- (void)viewDidLoad {
  [super viewDidLoad];
  self.interstitial = [self createAndLoadInterstitial];
}

- (GADInterstitial *)createAndLoadInterstitial {
  GADInterstitial *interstitial =
      [[GADInterstitial alloc] initWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"];
  interstitial.delegate = self;
  [interstitial loadRequest:[GADRequest request]];
  return interstitial;
}

- (void)interstitialDidDismissScreen:(GADInterstitial *)interstitial {
  self.interstitial = [self createAndLoadInterstitial];
}

Si se precarga un anuncio intersticial inmediatamente después de que se cierre el anterior, este se mostrará en la aplicación durante la siguiente pausa lógica.

Eventos de anuncios

Mediante GADInterstitialDelegate, puedes recibir información de los eventos del ciclo de vida, como cuando se cierra un anuncio o el usuario abandona la aplicación.

Registrarse en eventos intersticiales

Para registrarse en eventos de anuncios intersticiales, asigna la propiedad delegate de GADInterstitial en un objeto que implemente el protocolo GADInterstitialDelegate. Por lo general, la clase que implementa anuncios intersticiales también actúa como clase delegada, en cuyo caso, la propiedad delegate se puede configurar como self:

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADInterstitialDelegate {

  var interstitial: GADInterstitial!

  override func viewDidLoad() {
    super.viewDidLoad()
    interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
    interstitial.delegate = self
  }
}

Objective‑C

#import "GADInterstitial.h"
#import "GADInterstitialDelegate.h"

@interface ViewController () <GADInterstitialDelegate>

@property(nonatomic, strong) GADInterstitial *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  self.interstitial = [[GADInterstitial alloc] initWithAdUnitID:"ca-app-pub-3940256099942544/4411468910"];
  self.interstitial.delegate = self;
}

Implementar eventos intersticiales

Cada uno de los métodos de GADInterstitialDelegate está marcado como opcional, por lo que basta con implementar los métodos que quieras. En este ejemplo se implementa cada método y se registra un mensaje en la consola:

Swift

/// Tells the delegate an ad request succeeded.
func interstitialDidReceiveAd(_ ad: GADInterstitial) {
  print("interstitialDidReceiveAd")
}

/// Tells the delegate an ad request failed.
func interstitial(_ ad: GADInterstitial, didFailToReceiveAdWithError error: GADRequestError) {
  print("interstitial:didFailToReceiveAdWithError: \(error.localizedDescription)")
}

/// Tells the delegate that an interstitial will be presented.
func interstitialWillPresentScreen(_ ad: GADInterstitial) {
  print("interstitialWillPresentScreen")
}

/// Tells the delegate the interstitial is to be animated off the screen.
func interstitialWillDismissScreen(_ ad: GADInterstitial) {
  print("interstitialWillDismissScreen")
}

/// Tells the delegate the interstitial had been animated off the screen.
func interstitialDidDismissScreen(_ ad: GADInterstitial) {
  print("interstitialDidDismissScreen")
}

/// Tells the delegate that a user click will open another app
/// (such as the App Store), backgrounding the current app.
func interstitialWillLeaveApplication(_ ad: GADInterstitial) {
  print("interstitialWillLeaveApplication")
}

Objective‑C

/// Tells the delegate an ad request succeeded.
- (void)interstitialDidReceiveAd:(GADInterstitial *)ad {
  NSLog(@"interstitialDidReceiveAd");
}

/// Tells the delegate an ad request failed.
- (void)interstitial:(GADInterstitial *)ad
    didFailToReceiveAdWithError:(GADRequestError *)error {
  NSLog(@"interstitial:didFailToReceiveAdWithError: %@", [error localizedDescription]);
}

/// Tells the delegate that an interstitial will be presented.
- (void)interstitialWillPresentScreen:(GADInterstitial *)ad {
  NSLog(@"interstitialWillPresentScreen");
}

/// Tells the delegate the interstitial is to be animated off the screen.
- (void)interstitialWillDismissScreen:(GADInterstitial *)ad {
  NSLog(@"interstitialWillDismissScreen");
}

/// Tells the delegate the interstitial had been animated off the screen.
- (void)interstitialDidDismissScreen:(GADInterstitial *)ad {
  NSLog(@"interstitialDidDismissScreen");
}

/// Tells the delegate that a user click will open another app
/// (such as the App Store), backgrounding the current app.
- (void)interstitialWillLeaveApplication:(GADInterstitial *)ad {
  NSLog(@"interstitialWillLeaveApplication");
}

Algunas prácticas recomendadas

Plantéate si los intersticiales son el tipo de anuncio más adecuado para tu aplicación.
Los anuncios intersticiales funcionan mejor en las aplicaciones con transiciones naturales. Por ejemplo, al finalizar una tarea en la aplicación, como compartir una imagen o completar un nivel de un juego. En esos momentos, como el usuario espera que se produzca una interrupción en la acción, es fácil presentar un anuncio intersticial sin interrumpir su experiencia. Decide en qué puntos del flujo de trabajo de la aplicación se mostrarán anuncios intersticiales y analiza cómo crees que responderán los usuarios.
Mostrar un anuncio intersticial implica pausar la acción.
Existen distintos tipos de anuncios intersticiales: texto, imagen, vídeo y otros. Es importante que cuando la aplicación muestre un anuncio intersticial se suspenda el uso de algunos recursos para que el anuncio pueda aprovecharlos. Por ejemplo, cuando realices la llamada para mostrar un anuncio intersticial, pausa todas las salidas de audio que produzca la aplicación. La reproducción de sonidos se reanuda en el controlador de eventos interstitialDidDismissScreen, que se invocará cuando el usuario haya terminado de interactuar con el anuncio. Además, mientras se muestra el anuncio, es conveniente detener temporalmente cualquier tarea que consuma muchos recursos (como un bucle de juego). De esta forma, el usuario no se encontrará con gráficos lentos o que no respondan ni con vídeos entrecortados.
Define un tiempo de carga adecuado.
Evitar que el usuario tenga que esperar a que los anuncios intersticiales se carguen es igual de importante que mostrarlos en el momento adecuado. Para que la aplicación tenga un anuncio intersticial completamente cargado y listo cuando llegue el momento de mostrarlo, cárgalo por adelantado. Para ello, llama a loadRequest antes de a presentFromRootViewController.
No satures al usuario con anuncios.
Aunque aumentar la frecuencia de los anuncios intersticiales en tu aplicación te parezca una excelente forma de aumentar los ingresos, también puede degradar la experiencia de usuario y provocar que disminuya el porcentaje de clics. Si interrumpes a los usuarios con demasiada frecuencia, no disfrutarán de la experiencia de utilizar tu aplicación.
No uses el evento interstitialDidReceiveAd para mostrar intersticiales.
Eso puede ser perjudicial para la experiencia de usuario. Es preferible precargar el anuncio antes de que llegue el momento de mostrarlo. A continuación, verifica el método isReady en GADInterstitial para averiguar si está listo para mostrarse.

Otros recursos

Ejemplos de GitHub

Tutoriales en vídeo de la serie Mobile Ads Garage

Pasos siguientes

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.