Anuncios intersticiales

Los anuncios intersticiales son anuncios de pantalla completa que cubren la interfaz de una app hasta que el usuario los cierra. Por lo general, se muestran en puntos de transición naturales en el flujo de una app, como entre actividades o durante la pausa entre niveles de un juego. Cuando una app muestra un anuncio intersticial, el usuario puede presionarlo y continuar hasta su destino, o bien cerrarlo y volver a la app. Caso de éxito.

En esta guía, se muestra cómo integrar anuncios intersticiales en una app para iOS.

Requisitos previos

  • SDK de anuncios de Google para dispositivos móviles 8.0.0 o versiones posteriores
  • Completa la guía de introducción.

Siempre realiza pruebas con anuncios de prueba

Cuando compiles y pruebes tus apps, asegúrate de usar anuncios de prueba en lugar de anuncios activos en fase de producción. De lo contrario, podría suspenderse tu cuenta.

La forma más sencilla de cargar anuncios de prueba es usar nuestro ID de unidad de anuncios de prueba exclusivo para los anuncios intersticiales de iOS:
/21775744923/example/interstitial

Se configuró de forma especial para mostrar anuncios de prueba para cada solicitud, y puedes usarlo en tus propias apps mientras codificas, pruebas y depuras. Solo asegúrate de reemplazarlo con tu propio ID de unidad de anuncios antes de publicar tu app.

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

Implementación

Estos son los pasos principales para integrar anuncios intersticiales:

  1. Carga un anuncio.
  2. Regístrate para recibir devoluciones de llamada.
  3. Muestra el anuncio.

Carga un anuncio

Para cargar un anuncio, puedes utilizar el método load(adUnitID:request) en la clase GAMInterstitialAd.

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var interstitial: GAMInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()

    Task {
      do {
        interstitial = try await GAMInterstitialAd.load(
          withAdUnitID: "/21775744923/example/interstitial", request: GAMRequest())
      } catch {
        print("Failed to load interstitial ad with error: \(error.localizedDescription)")
      }
    }
  }
}

SwiftUI

import GoogleMobileAds

class InterstitialViewModel: NSObject, GADFullScreenContentDelegate {
  private var interstitialAd: GADInterstitialAd?

  func loadAd() async {
    do {
      interstitialAd = try await GADInterstitialAd.load(
        withAdUnitID: "ca-app-pub-3940256099942544/4411468910", request: GADRequest())
      interstitialAd?.fullScreenContentDelegate = self
    } catch {
      print("Failed to load interstitial ad with error: \(error.localizedDescription)")
    }
  }

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GAMInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GAMRequest *request = [GAMRequest request];
  [GAMInterstitialAd loadWithAdManagerAdUnitID:@"/21775744923/example/interstitial"
      request:request
      completionHandler:^(GAMInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
      return;
    }
    self.interstitial = ad;
  }];
}

Regístrate para recibir devoluciones de llamada

Para recibir notificaciones sobre eventos de presentación, debes implementar el protocolo GADFullScreenContentDelegate y asignarlo a la propiedad fullScreenContentDelegate del anuncio que se muestra. El protocolo GADFullScreenContentDelegate controla las devoluciones de llamada cuando el anuncio se presenta correctamente o no, y cuando se descarta. En el siguiente código, se muestra cómo implementar el protocolo y asignarlo al anuncio:

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var interstitial: GAMInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()

    Task {
      do {
        interstitial = try await GAMInterstitialAd.load(
          withAdUnitID: "/21775744923/example/interstitial", request: GAMRequest())
        interstitial?.fullScreenContentDelegate = self
      } catch {
        print("Failed to load interstitial ad with error: \(error.localizedDescription)")
      }
    }
  }

  /// Tells the delegate that the ad failed to present full screen content.
  func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
    print("Ad did fail to present full screen content.")
  }

  /// Tells the delegate that the ad will present full screen content.
  func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad will present full screen content.")
  }

  /// Tells the delegate that the ad dismissed full screen content.
  func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad did dismiss full screen content.")
  }
}

SwiftUI

Asigna la propiedad fullScreenContentDelegate al anuncio que se muestra:

interstitialAd?.fullScreenContentDelegate = self

Implementa el protocolo:

func adDidRecordImpression(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidRecordClick(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
}

func ad(
  _ ad: GADFullScreenPresentingAd,
  didFailToPresentFullScreenContentWithError error: Error
) {
  print("\(#function) called")
}

func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
}

func adWillDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
  // Clear the interstitial ad.
  interstitialAd = nil
}

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController () <GADFullScreenContentDelegate>

@property(nonatomic, strong) GAMInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GAMRequest *request = [GAMRequest request];
  [GAMInterstitialAd loadWithAdManagerAdUnitID:@"/21775744923/example/interstitial"
      request:request
      completionHandler:^(GAMInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
      return;
    }
    self.interstitial = ad;
    self.interstitial.fullScreenContentDelegate = self;
  }];
}

/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
    NSLog(@"Ad did fail to present full screen content.");
}

/// Tells the delegate that the ad will present full screen content.
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    NSLog(@"Ad will present full screen content.");
}

/// Tells the delegate that the ad dismissed full screen content.
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
  NSLog(@"Ad did dismiss full screen content.");
}

GAMInterstitialAd es un objeto de uso único. Esto significa que, una vez que se muestra un anuncio intersticial, no se puede volver a mostrar. Una práctica recomendada es cargar otro anuncio intersticial en el método adDidDismissFullScreenContent: de GADFullScreenContentDelegate para que el siguiente anuncio intersticial comience a cargarse en cuanto se descarte el anterior.

Cómo mostrar el anuncio

Los anuncios intersticiales deben mostrarse durante pausas naturales en el flujo de una app. Entre los niveles de un juego es un buen ejemplo o después de que el usuario completa una tarea.

Swift

guard let interstitial = interstitial else {
  return print("Ad wasn't ready.")
}

// The UIViewController parameter is an optional.
interstitial.present(fromRootViewController: nil)

SwiftUI

Escucha los eventos de la IU en la vista para determinar cuándo mostrar el anuncio.

var body: some View {
  // ...
  }
  .onChange(of: countdownTimer.isComplete) { newValue in
    showGameOverAlert = newValue
  }
  .alert(isPresented: $showGameOverAlert) {
    Alert(
      title: Text("Game Over"),
      message: Text("You lasted \(countdownTimer.countdownTime) seconds"),
      dismissButton: .cancel(
        Text("OK"),
        action: {
          viewModel.showAd()
        }))

Presenta el anuncio intersticial desde el modelo de vista:

func showAd() {
  guard let interstitialAd = interstitialAd else {
    return print("Ad wasn't ready.")
  }

  interstitialAd.present(fromRootViewController: nil)
}

Objective-C

if (self.interstitial) {
  // The UIViewController parameter is nullable.
  [self.interstitial presentFromRootViewController:nil];
} else {
  NSLog(@"Ad wasn't ready");
}

Prácticas recomendadas

Determina si los anuncios intersticiales son la clase de anuncio adecuada para tu app.
Los anuncios intersticiales funcionan mejor en apps con puntos de transición naturales. La conclusión de una tarea dentro de una app, como compartir una imagen o completar el nivel de un juego, crea ese punto. Debido a que el usuario espera una pausa en la acción, es fácil presentar un anuncio intersticial sin interrumpir su experiencia. Asegúrate de tener en cuenta los puntos del flujo de trabajo de tu app en los que mostrarás anuncios intersticiales y la posible respuesta del usuario.
Recuerda pausar la acción cuando muestres un anuncio intersticial.
Existen varios tipos de anuncios intersticiales: de texto, con imágenes, de video y mucho más. Es importante asegurarte de que, cuando tu app muestre un anuncio intersticial, también suspenda el uso de algunos recursos para que el anuncio los aproveche. Por ejemplo, cuando realices la llamada para mostrar un anuncio intersticial, asegúrate de pausar cualquier salida de audio que produzca la app. Puedes reanudar la reproducción de sonidos en el controlador de eventos adDidDismissFullScreenContent:, que se invocará cuando el usuario termine de interactuar con el anuncio. Además, considera detener temporalmente cualquier tarea de cálculo intensa (como un bucle de juego) mientras se muestra el anuncio. Esto garantizará que el usuario no experimente gráficos lentos o que no respondan, ni videos entrecortados.
Proporciona un tiempo de carga adecuado.
Así como es importante asegurarse de mostrar anuncios intersticiales en el momento adecuado, también lo es asegurarse de que el usuario no tenga que esperar a que se carguen. Si cargas el anuncio con anticipación antes de mostrarlo, puedes asegurarte de que tu app tenga un anuncio intersticial completamente cargado y listo cuando llegue el momento de mostrarlo.
No sobrecargues al usuario con anuncios.
Si bien aumentar la frecuencia de los anuncios intersticiales de tu app podría parecer una gran manera de aumentar los ingresos, también puede afectar la experiencia del usuario y reducir las tasas de clics. Asegúrate de que la frecuencia de las interrupciones experimentadas por los usuarios no sea tan alta como para que estos ya no puedan disfrutar de tu app.
No uses la devolución de llamada de carga completa para mostrar el anuncio intersticial.
Esto puede generar una experiencia del usuario deficiente. En su lugar, carga previamente el anuncio antes de necesitar mostrarlo. Luego, verifica el método canPresentFromRootViewController:error: en GAMInterstitialAd para saber si está listo para mostrarse.

Ejemplos en GitHub

Consulta los ejemplos completos de anuncios intersticiales en tu idioma preferido:

Próximos pasos