Los anuncios de pantalla en pantalla (PiP) se muestran en una ventana flotante que permanece sobre el contenido de la pantalla, como artículos, feeds o juegos. Este formato permite que los usuarios interactúen con tu app mientras el anuncio permanece visible. Elige este formato para mostrar anuncios que no ocupen toda la pantalla. Obtén más información sobre los anuncios de pantalla en pantalla.
En esta guía, se explica cómo solicitar y mostrar anuncios de pantalla en pantalla en tu app con Google Mobile Ads SDK.
Antes de comenzar
Antes de continuar, haz lo siguiente:
Instala la versión
13.10.0o una posterior del Google Mobile Ads SDK.Habilita los anuncios de prueba y usa el siguiente ID de unidad de anuncios de prueba:
ca-app-pub-3940256099942544/8810945611
Carga un anuncio
Para cargar un objeto GADPictureInPictureAd, crea una solicitud de anuncio y llama al método load:
Swift
Reemplaza adUnitID por tu ID de unidad de anuncios.
Objective-C
Reemplaza kAdUnitID por tu ID de unidad de anuncios.
Muestra el anuncio
Para mostrar el anuncio de pantalla en pantalla, configura las opciones de pantalla en pantalla y llama al método show. En el siguiente ejemplo, se establece la posición predeterminada del anuncio y el alcance de la presentación en la pantalla:
Swift
private func showPictureInPictureAd() { // Use the loaded PictureInPictureAd instance. guard let pipAd else { print("No ad to show.") return } let options = PictureInPictureAdOptions() // Uses the Google Mobile Ads SDK's default screen position. options.position = .default // Binds the ad lifecycle to the host screen. options.presentationScope = .screen pipAd.show(with: options) }
Objective-C
- (void)showPictureInPictureAd { // Use the loaded PictureInPictureAd instance. if (!self.pipAd) { NSLog(@"No ad to show."); return; } GADPictureInPictureAdOptions *options = [[GADPictureInPictureAdOptions alloc] init]; // Uses the Google Mobile Ads SDK's default screen position. options.position = GADPictureInPictureAdPositionDefault; // Binds the ad lifecycle to the host screen. options.presentationScope = GADPictureInPictureAdPresentationScopeScreen; [self.pipAd showWithOptions:options]; }
Establece la posición
De forma predeterminada, el Google Mobile Ads SDK muestra un anuncio de pantalla en pantalla en la esquina inferior derecha de la pantalla cuando se muestra por primera vez o en la última posición conocida si se mostró anteriormente. Para personalizar dónde aparece el anuncio, establece la posición en las opciones de pantalla en pantalla. En el siguiente ejemplo, se establece la posición sobre el contenido en la esquina superior izquierda de la pantalla:
Swift
private func createTopLeftPositionOptions() -> PictureInPictureAdOptions { let options = PictureInPictureAdOptions() // Sets the ad position to the top-left corner of the screen. options.position = .topLeft return options }
Objective-C
- (GADPictureInPictureAdOptions *)createTopLeftPositionOptions { GADPictureInPictureAdOptions *options = [[GADPictureInPictureAdOptions alloc] init]; // Sets the ad position to the top-left corner of the screen. options.position = GADPictureInPictureAdPositionTopLeft; return options; }
Para conocer todos los puestos disponibles, consulta GADPictureInPictureAdPosition.
Establece el alcance de la presentación
De forma predeterminada, Google Mobile Ads SDK vincula un anuncio de pantalla en pantalla a la pantalla del host actual. Google Mobile Ads SDK descarta el anuncio cuando la jerarquía de vistas de la pantalla del host ya no está en la memoria. Para mantener el anuncio visible después de que se quite la pantalla de host de la memoria, establece el alcance de la presentación en la aplicación:
Swift
private func createApplicationScopedOptions() -> PictureInPictureAdOptions { let options = PictureInPictureAdOptions() // Keeps the ad visible beyond the host screen's lifecycle. options.presentationScope = .application return options }
Objective-C
- (GADPictureInPictureAdOptions *)createApplicationScopedOptions { GADPictureInPictureAdOptions *options = [[GADPictureInPictureAdOptions alloc] init]; // Keeps the ad visible beyond the host screen's lifecycle. options.presentationScope = GADPictureInPictureAdPresentationScopeApplication; return options; }
Para obtener más información, consulta Cómo mantener el anuncio visible en todas las pantallas.
Configura la devolución de llamada del evento de anuncio
Para controlar los eventos del ciclo de vida de los anuncios de pantalla en pantalla, configura la devolución de llamada de eventos en tu anuncio antes de mostrarlo. Esta devolución de llamada informa eventos estándar, como clics e impresiones. Esta devolución de llamada también informa eventos específicos de la pantalla en pantalla, como cuando se muestra o se oculta el anuncio:
Swift
func pictureInPictureAdDidShow(_ pictureInPictureAd: PictureInPictureAd) { print("Picture-in-Picture ad shown.") } func pictureInPictureAdDidHide(_ pictureInPictureAd: PictureInPictureAd) { print("Picture-in-Picture ad hidden.") } func pictureInPictureAdDidFailToShow( _ pictureInPictureAd: PictureInPictureAd, error: Error ) { print("Picture-in-Picture ad failed to show: \(error.localizedDescription)") } func pictureInPictureAdDidRecordImpression( _ pictureInPictureAd: PictureInPictureAd ) { print("Picture-in-Picture ad recorded an impression.") } func pictureInPictureAdDidRecordClick( _ pictureInPictureAd: PictureInPictureAd ) { print("Picture-in-Picture ad recorded a click.") } func pictureInPictureAdWillPresentScreen( _ pictureInPictureAd: PictureInPictureAd ) { print("Picture-in-Picture ad will present screen.") } func pictureInPictureAdWillDismissScreen( _ pictureInPictureAd: PictureInPictureAd ) { print("Picture-in-Picture ad will dismiss screen.") } func pictureInPictureAdDidDismissScreen( _ pictureInPictureAd: PictureInPictureAd ) { print("Picture-in-Picture ad dismissed screen.") }
Objective-C
- (void)pictureInPictureAdDidShow:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad shown."); } - (void)pictureInPictureAdDidHide:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad hidden."); } - (void)pictureInPictureAdDidFailToShow:(GADPictureInPictureAd *)pictureInPictureAd withError:(NSError *)error { NSLog(@"Picture-in-Picture ad failed to show: %@", error); } - (void)pictureInPictureAdDidRecordImpression:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad recorded an impression."); } - (void)pictureInPictureAdDidRecordClick:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad recorded a click."); } - (void)pictureInPictureAdWillPresentScreen:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad will present screen."); } - (void)pictureInPictureAdWillDismissScreen:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad will dismiss screen."); } - (void)pictureInPictureAdDidDismissScreen:(GADPictureInPictureAd *)pictureInPictureAd { NSLog(@"Picture-in-Picture ad dismissed screen."); }
Oculta el anuncio
Para quitar el anuncio flotante de la pantalla, llama al método hide. Este método invoca la devolución de llamada del evento de anuncio oculto:
Swift
private func hidePictureInPictureAd() { // Use the loaded PictureInPictureAd instance. guard let pipAd else { print("No ad to hide.") return } pipAd.hide() }
Objective-C
- (void)hidePictureInPictureAd { // Use the loaded PictureInPictureAd instance. if (!self.pipAd) { NSLog(@"No ad to hide."); return; } [self.pipAd hide]; }
Cómo liberar los recursos de un anuncio
Para evitar fugas de memoria, quita la referencia al objeto de anuncio cuando tu app termine de usarlo. Por ejemplo, cuando tu app ya no muestra el anuncio ni interactúa con él. En el caso de los anuncios con alcance de pantalla, descarta la referencia cuando tu app quite la pantalla host de la memoria. En el caso de los anuncios con alcance de app, conserva la referencia del anuncio mientras el usuario navega por las pantallas y descarta la referencia cuando el usuario cierra el anuncio:
Swift
private func cleanUpPictureInPictureAd() { pipAd?.hide() pipAd = nil }
Objective-C
- (void)cleanUpPictureInPictureAd { [self.pipAd hide]; self.pipAd = nil; }
Mantén el anuncio visible en todas las pantallas
Cuando estableces el alcance de la presentación en la aplicación, el anuncio de pantalla en pantalla permanece visible incluso cuando tu app quita de la memoria la pantalla de hosting. Para interactuar con el anuncio o descartarlo cuando el usuario sale de la pantalla de host, tu app debe conservar el acceso al anuncio de pantalla en pantalla. Te recomendamos que mantengas el anuncio en un singleton a nivel de la app o en un administrador de estado compartido, en lugar de una variable de instancia de una sola pantalla.