Comenzar

PAL te permite enviar indicadores de anuncios de Google en tus solicitudes de anuncios y durante la reproducción de anuncios.

En esta guía, se explica cómo agregar el SDK de PAL para Android a tu app. Para ver una app de ejemplo que usa PAL para generar un nonce, descarga el ejemplo de Android desde GitHub.

Agrega el SDK de PAL de Android como biblioteca

A partir de la versión 18.0.0, el SDK de PAL se aloja en el repositorio de Maven de Google y se puede agregar a tu app de la siguiente manera:

implementation 'com.google.android.gms:play-services-pal:22.1.0'

Como alternativa, el SDK de PAL se puede descargar desde el repositorio de Maven de Google y agregarse manualmente a tu app.

Generar nonce

Un nonce es una sola cadena encriptada que PAL genera con la clase NonceLoader. La PAL requiere que cada solicitud de transmisión se acompañe de un nonce único. Sin embargo, puedes volver a usar nonces para varias solicitudes de anuncios en el mismo flujo. Para generar un nonce con el SDK de PAL, realiza los siguientes cambios para importar y configurar PAL, y crear una función para generar un nonce:

  1. Para importar y configurar PAL, haz lo siguiente:

    1. Importa las clases de PAL:

      import com.google.ads.interactivemedia.pal.ConsentSettings;
      import com.google.ads.interactivemedia.pal.NonceLoader;
      import com.google.ads.interactivemedia.pal.NonceManager;
      import com.google.ads.interactivemedia.pal.NonceRequest;
      import com.google.android.gms.tasks.OnFailureListener;
      import com.google.android.gms.tasks.OnSuccessListener;
      import java.util.HashSet;
      import java.util.Set;
      
      
    2. Crea variables privadas para almacenar las instancias de NonceLoader y NonceManager:

      private NonceLoader nonceLoader;
      private NonceManager nonceManager;
      
    3. Inicializa tu instancia de NonceLoader con una instancia de ConsentSettings en el método onCreate:

      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
      
        // The default value for allowStorage() is false, but can be
        // changed once the appropriate consent has been gathered. The
        // getConsentToStorage() method is a placeholder for the publisher's own
        // method of obtaining user consent, either by integrating with a CMP or
        // based on other methods the publisher chooses to handle storage consent.
        boolean isStorageAllowed = getConsentToStorage();
      
        ConsentSettings consentSettings =
            ConsentSettings.builder().allowStorage(isStorageAllowed).build();
      
        // It is important to instantiate the NonceLoader as early as possible to
        // allow it to initialize and preload data for a faster experience when
        // loading the NonceManager. A new NonceLoader will need to be instantiated
        // if the ConsentSettings change for the user.
        nonceLoader = new NonceLoader(this, consentSettings);
      
        adClickButton = findViewById(R.id.send_click_button);
      
        logView = findViewById(R.id.log_view);
        logView.setMovementMethod(new ScrollingMovementMethod());
      }
      
      

    En tu app, crea una instancia de la clase NonceLoader para cada sesión del usuario. Si tu app tiene varias páginas o elementos equivalentes, crea una instancia de NonceLoader nueva para cada página o elemento equivalente. Si usas la misma instancia de NonceLoader, mantienes el correlador de página &correlator sin cambios durante la vida útil de una página o la sesión de un usuario en la app. Aún tienes control sobre el correlador de transmisión &scor, que debes restablecer para cada transmisión nueva generando un nonce nuevo.

    Todas las solicitudes de anuncios del mismo flujo deben compartir la misma instancia de NonceLoader y el mismo valor de correlator de flujo para que se apliquen las funciones de limitación de frecuencia y exclusión competitiva.

  2. Genera un nonce:

    public void generateNonceForAdRequest(View view) {
      logMessage("Generate Nonce Request");
      Set supportedApiFrameWorksSet = new HashSet();
      // The values 2, 7, and 9 correspond to player support for VPAID 2.0,
      // OMID 1.0, and SIMID 1.1.
      supportedApiFrameWorksSet.add(2);
      supportedApiFrameWorksSet.add(7);
      supportedApiFrameWorksSet.add(9);
    
      NonceRequest nonceRequest =
          NonceRequest.builder()
              .descriptionURL("https://example.com/content1")
              .iconsSupported(true)
              .omidPartnerVersion("6.2.1")
              .omidPartnerName("Example Publisher")
              .playerType("ExamplePlayerType")
              .playerVersion("1.0.0")
              .ppid("testPpid")
              .sessionId("Sample SID")
              .supportedApiFrameworks(supportedApiFrameWorksSet)
              .videoPlayerHeight(480)
              .videoPlayerWidth(640)
              .willAdAutoPlay(true)
              .willAdPlayMuted(false)
              .build();
    
      nonceLoader
          .loadNonceManager(nonceRequest)
          .addOnSuccessListener(
              new OnSuccessListener<NonceManager>() {
                @Override
                public void onSuccess(NonceManager manager) {
                  nonceManager = manager;
                  String nonceString = manager.getNonce();
                  logMessage("Nonce generated");
                  logMessage(nonceString.substring(0, 20) + "...");
                  Log.i(LOG_TAG, "Generated nonce: " + nonceString);
    
                  // From here you would trigger your ad request and move on to initialize content.
                  exampleMakeAdRequest(DEFAULT_AD_TAG + "&givn=" + nonceString);
    
                  adClickButton.setEnabled(true);
                }
              })
          .addOnFailureListener(
              new OnFailureListener() {
                @Override
                public void onFailure(Exception error) {
                  logMessage("Nonce generation failed");
                  Log.e(LOG_TAG, "Nonce generation failed: " + error.getMessage());
                }
              });
    }
    
    

    Solo necesitas un nonce para todas las solicitudes de anuncios en una sola reproducción de transmisión. Para fines de prueba, llama a esta función cuando hagas clic en un botón de tu app de prueba. Los parámetros de NonceRequest establecidos en esta guía son ejemplos. Establece tus parámetros en función de las características de tu propia app.

    Esta función genera un nonce de forma asíncrona. Debes controlar los casos de éxito y de falla de la solicitud de nonce. Una vez que el administrador de nonces esté disponible, recupera el nonce antes de realizar una solicitud de anuncio con el método nonceManager.getNonce().

Adjunta un nonce a la solicitud de anuncio

Para usar el nonce generado, agrega un parámetro givn y el valor del nonce a tu etiqueta de anuncio antes de realizar las solicitudes de anuncios:

// From here you would trigger your ad request and move on to initialize content.
exampleMakeAdRequest(DEFAULT_AD_TAG + "&givn=" + nonceString);

Realiza un seguimiento de los eventos de reproducción

Para hacer un seguimiento de los eventos de reproducción, debes configurar controladores de eventos para enviar indicadores de anuncios a Google:

// Triggered when a user clicks-through on an ad which was requested using a PAL nonce.
public void sendAdClick(View view) {
  logMessage("Ad click sent");
  if (nonceManager != null) {
    nonceManager.sendAdClick();
  }
}

// In a typical PAL app, this is called when a user touch or click is detected,
// on the ad other than an ad click-through.
public void onVideoViewTouch(MotionEvent e) {
  if (nonceManager != null) {
    nonceManager.sendAdTouch(e);
  }
}

// In a typical PAL app, this is called when a content playback session starts.
public void sendPlaybackStart() {
  logMessage("Playback start");
  if (nonceManager != null) {
    nonceManager.sendPlaybackStart();
  }
}

// In a typical PAL app, this is called when a content playback session ends.
public void sendPlaybackEnd() {
  logMessage("Playback end");
  if (nonceManager != null) {
    nonceManager.sendPlaybackEnd();
  }
}

A continuación, se indica cuándo llamar a cada función en tu implementación:

  • sendPlaybackStart(): Cuándo comienza la sesión de reproducción de video
  • sendPlaybackEnd(): Cuando finaliza tu sesión de reproducción de video
  • sendAdClick(): Cada vez que el usuario hace clic en un anuncio
  • sendTouch(): En cada interacción táctil con el reproductor

Para realizar pruebas, adjunta los métodos del controlador de eventos a los eventos de clic del botón. En una implementación de producción, configura tu app para que los eventos del jugador llamen a los métodos del controlador de eventos.

(Opcional) Envía indicadores de Google Ad Manager a través de servidores de anuncios de terceros

Cuando configures tu servidor de anuncios externo para que funcione con Google Ad Manager, consulta la documentación del servidor para capturar y reenviar el valor de nonce en cada solicitud de anuncio. El ejemplo proporcionado es de una URL de solicitud de anuncio con el parámetro nonce incluido. El parámetro nonce se propaga desde el SDK de PAL, a través de tus servidores intermediarios y, luego, a Ad Manager, lo que permite una mejor monetización.

Configura tu servidor de anuncios de terceros para que incluya el nonce en la solicitud del servidor a Ad Manager. Este es un ejemplo de una etiqueta de anuncio configurada dentro del servidor de anuncios de terceros:

'https://pubads.serverside.net/gampad/ads?givn=%%custom_key_for_google_nonce%%&...'

Para obtener más detalles, consulta la guía de implementación del servidor de Google Ad Manager.

Ad Manager busca givn= para identificar el valor de nonce. El servidor de anuncios de terceros debe admitir alguna macro propia, como %%custom_key_for_google_nonce%%, y reemplazarla por el parámetro de consulta nonce que proporcionaste en el paso anterior. En la documentación del servidor de anuncios externo, se incluye más información para lograr esto.