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 una versión posterior
  • 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 por tu propio ID de unidad de anuncios antes de publicar la 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 de 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 para cuando el anuncio se presenta de forma correcta o incorrecta, 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: en 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. Un buen ejemplo es entre los niveles de un juego 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

Considera si los anuncios intersticiales son el tipo de anuncio adecuado 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 un nivel de un juego, crea un punto de este tipo. Como el usuario espera una pausa en la acción, es fácil presentar un anuncio intersticial sin interrumpir su experiencia. Asegúrate de considerar en qué puntos del flujo de trabajo de tu app mostrarás los anuncios intersticiales y cómo es probable que responda el usuario.
Recuerda pausar la acción cuando se muestre un anuncio intersticial.
Existen varios tipos de anuncios intersticiales: de texto, con imágenes, de video y mucho más. Es importante asegurarse de que, cuando tu app muestre un anuncio intersticial, también suspenda el uso de algunos recursos para permitir 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 tu 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 las tareas de procesamiento intensivo (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 con interrupciones.
Permite un tiempo de carga adecuado.
Así como es importante asegurarte de mostrar anuncios intersticiales en un momento apropiado, también es importante 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 abrumes al usuario con anuncios.
Si bien aumentar la frecuencia de los anuncios intersticiales en tu app puede parecer una excelente manera de aumentar los ingresos, también puede perjudicar la experiencia del usuario y reducir las tasas de clics. Asegúrate de que los usuarios no se vean tan frecuentemente afectados por interrupciones que ya no puedan disfrutar del uso 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 el anuncio previamente 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