Els anuncis de imatge dins de pantalla (PiP) es mostren en una finestra flotant que es manté a sobre del contingut de la pantalla, com ara articles, canals o partides de joc. Aquest format permet als usuaris interactuar amb la vostra aplicació mentre l'anunci roman visible. Per mostrar anuncis que no ocupin tota la pantalla, trieu aquest format. Més informació sobre els anuncis de imatge dins de pantalla .
Aquesta guia explica com sol·licitar i mostrar anuncis de imatge dins de imatge a la vostra aplicació mitjançant GMA Next-Gen SDK .
Abans de començar
Abans de continuar, feu el següent:
Instal·leu la versió
1.4.0o posterior GMA Next-Gen SDK .Activeu els anuncis de prova i utilitzeu l'ID del bloc d'anuncis de prova següent:
ca-app-pub-3940256099942544/9657123429
Carrega un anunci
Per carregar un PictureInPictureAd , creeu una sol·licitud d'anunci i crideu el mètode load :
Kotlin
Java
Substitueix AD_UNIT_ID pel teu ID de bloc d'anuncis.
Mostra l'anunci
Per mostrar l'anunci de imatge dins de la imatge a la pantalla, configureu les opcions d'imatge dins de la imatge i crideu el mètode show . L'exemple següent estableix la posició predeterminada de l'anunci i l'àmbit de presentació a la pantalla:
Kotlin
private fun showPictureInPictureAd(activity: Activity) { // Capture the ad reference saved from the onAdLoaded callback. val ad = pipAd if (ad != null) { val options = PictureInPictureAdOptions.Builder() // Uses the Google Mobile Ads SDK's default screen position. .setPosition(PictureInPictureAdPosition.DEFAULT) // Binds the ad lifecycle to the host screen. .setPresentationScope(PictureInPictureAdPresentationScope.SCREEN) .build() ad.show(activity, options) } else { Log.d(TAG, "No ad to show.") } }
Java
private void showPictureInPictureAd(@NonNull Activity activity) { // Use the ad reference saved from the onAdLoaded callback. if (pipAd != null) { PictureInPictureAdOptions options = new PictureInPictureAdOptions.Builder() // Uses the Google Mobile Ads SDK's default screen position. .setPosition(PictureInPictureAdPosition.DEFAULT) // Binds the ad lifecycle to the host screen. .setPresentationScope(PictureInPictureAdPresentationScope.SCREEN) .build(); pipAd.show(activity, options); } else { Log.d(TAG, "No ad to show."); } }
Estableix la posició
Per defecte, GMA Next-Gen SDK mostra un anunci de imatge dins de imatge a la cantonada inferior dreta de la pantalla quan es mostra per primera vegada o a l'última posició coneguda si s'ha mostrat anteriorment. Per personalitzar on apareix l'anunci, definiu la posició a les opcions de imatge dins de imatge. L'exemple següent defineix la posició a la part superior del contingut a la cantonada superior esquerra de la pantalla:
Kotlin
private fun createTopLeftPositionOptions(): PictureInPictureAdOptions { return PictureInPictureAdOptions.Builder() // Sets the ad position to the top-left corner of the screen. .setPosition(PictureInPictureAdPosition.TOP_LEFT) .build() }
Java
private PictureInPictureAdOptions createTopLeftPositionOptions() { return new PictureInPictureAdOptions.Builder() // Sets the ad position to the top-left corner of the screen. .setPosition(PictureInPictureAdPosition.TOP_LEFT) .build(); }
Per a totes les posicions disponibles, consulteu PictureInPictureAdPosition .
Establir l'abast de la presentació
Per defecte, GMA Next-Gen SDK vincula un anunci de imatge dins d'imatge a la pantalla amfitriona actual. GMA Next-Gen SDK descarta l'anunci quan la jerarquia de visualització de la pantalla amfitriona ja no és a la memòria. Per mantenir l'anunci visible després que la pantalla amfitriona s'elimini de la memòria, definiu l'àmbit de presentació a l'aplicació:
Kotlin
private fun createApplicationScopedOptions(): PictureInPictureAdOptions { return PictureInPictureAdOptions.Builder() // Keeps the ad visible beyond the host screen's lifecycle. .setPresentationScope(PictureInPictureAdPresentationScope.APPLICATION) .build() }
Java
private PictureInPictureAdOptions createApplicationScopedOptions() { return new PictureInPictureAdOptions.Builder() // Keeps the ad visible beyond the host screen's lifecycle. .setPresentationScope(PictureInPictureAdPresentationScope.APPLICATION) .build(); }
Per obtenir més informació, consulteu Mantenir l'anunci visible a través de les pantalles .
Defineix la retrollamada de l'esdeveniment de l'anunci
Per gestionar els esdeveniments del cicle de vida dels anuncis de imatge dins de imatge, configureu la retrollamada de l'esdeveniment a l'anunci abans de mostrar-lo. Aquesta retrollamada informa d'esdeveniments estàndard, com ara clics i impressions. Aquesta retrollamada també informa d'esdeveniments específics de la imatge dins de imatge, com ara quan es mostra o s'amaga l'anunci:
Kotlin
private fun setAdEventCallback(pipAd: PictureInPictureAd) { pipAd.adEventCallback = object : PictureInPictureAdEventCallback { override fun onAdShown() { Log.d(TAG, "Picture-in-Picture ad shown.") } override fun onAdHidden() { Log.d(TAG, "Picture-in-Picture ad hidden.") } override fun onAdImpression() { Log.d(TAG, "Picture-in-Picture ad recorded an impression.") } override fun onAdClicked() { Log.d(TAG, "Picture-in-Picture ad recorded a click.") } override fun onAdShowedFullScreenContent() { Log.d(TAG, "Picture-in-Picture ad showed full screen content.") } override fun onAdDismissedFullScreenContent() { Log.d(TAG, "Picture-in-Picture ad dismissed full screen content.") } override fun onAdFailedToShowFullScreenContent( fullScreenContentError: FullScreenContentError ) { Log.w( TAG, "Picture-in-Picture ad failed to show full screen content: $fullScreenContentError", ) } override fun onAdPaid(value: AdValue) { Log.d(TAG, "Picture-in-Picture ad paid: ${value.valueMicros} ${value.currencyCode}") } } }
Java
private void setAdEventCallback(@NonNull PictureInPictureAd pipAd) { pipAd.setAdEventCallback( new PictureInPictureAdEventCallback() { @Override public void onAdShown() { Log.d(TAG, "Picture-in-Picture ad shown."); } @Override public void onAdHidden() { Log.d(TAG, "Picture-in-Picture ad hidden."); } @Override public void onAdImpression() { Log.d(TAG, "Picture-in-Picture ad recorded an impression."); } @Override public void onAdClicked() { Log.d(TAG, "Picture-in-Picture ad recorded a click."); } @Override public void onAdShowedFullScreenContent() { Log.d(TAG, "Picture-in-Picture ad showed full screen content."); } @Override public void onAdDismissedFullScreenContent() { Log.d(TAG, "Picture-in-Picture ad dismissed full screen content."); } @Override public void onAdFailedToShowFullScreenContent( @NonNull FullScreenContentError fullScreenContentError) { Log.w( TAG, "Picture-in-Picture ad failed to show full screen content: " + fullScreenContentError); } @Override public void onAdPaid(@NonNull AdValue value) { Log.d( TAG, "Picture-in-Picture ad paid: " + value.getValueMicros() + " " + value.getCurrencyCode()); } }); }
Amaga l'anunci
Per eliminar l'anunci flotant de la pantalla, crideu el mètode hide . Aquest mètode invoca la retrollamada de l'esdeveniment ad hidden:
Kotlin
private fun hidePictureInPictureAd() { // Capture the ad reference saved from the onAdLoaded callback. val ad = pipAd if (ad != null) { ad.hide() } else { Log.d(TAG, "No ad to hide.") } }
Java
private void hidePictureInPictureAd() { // Use the ad reference saved from the onAdLoaded callback. if (pipAd != null) { pipAd.hide(); } else { Log.d(TAG, "No ad to hide."); } }
Neteja els recursos publicitaris
Per evitar pèrdues de memòria, elimineu la referència a l'objecte de l'anunci quan l'aplicació acabi d'utilitzar l'anunci. Per exemple, quan l'aplicació ja no mostri l'anunci ni hi interactuï. Per als anuncis amb abast de pantalla, elimineu la referència quan l'aplicació elimini la pantalla amfitriona de la memòria. Per als anuncis amb abast d'aplicació, conserveu la referència de l'anunci mentre l'usuari navega per les pantalles i elimineu la referència quan l'usuari tanqui l'anunci:
Kotlin
private fun cleanUpPictureInPictureAd() { pipAd?.destroy() pipAd = null }
Java
private void cleanUpPictureInPictureAd() { // Use the ad reference saved from the onAdLoaded callback. if (pipAd != null) { pipAd.destroy(); pipAd = null; } }
Mantenir l'anunci visible a través de les pantalles
Quan definiu l'abast de la presentació per a l'aplicació, l'anunci de imatge dins de imatge continua sent visible fins i tot quan l'aplicació elimina la pantalla amfitriona de la memòria. Per interactuar amb l'anunci o ignorar-lo quan l'usuari surt de la pantalla amfitriona, l'aplicació ha de conservar l'accés a l'anunci de imatge dins de imatge. Us recomanem que mantingueu l'anunci en un singleton a nivell d'aplicació o en un gestor d'estat compartit en lloc d'una variable d'instància de pantalla única.
Per veure un exemple de com mantenir un anunci visible a través de les pantalles, consulteu les nostres aplicacions de mostra: