Comenzar

El primer paso es agregar el SDK de Android PAL a tu app.

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 Maven de Google y se puede agregar a tu app de la siguiente manera:

app/build.gradle

...
dependencies {
    implementation 'com.google.android.gms:play-services-pal:20.2.0'
    ...
}

Como alternativa, puedes descargar el SDK de PAL desde el repositorio de Maven de Google y agregarlo manualmente a tu app.

Generar nonce

Un “nonce” es una única string encriptada que genera PAL con el NonceLoader. El SDK de PAL requiere que cada solicitud de transmisión nueva vaya acompañada de un nonce recién generado. Sin embargo, los nonces se pueden volver a usar para varias solicitudes de anuncios dentro de la misma transmisión. Para generar un nonce con el SDK de PAL, realiza cambios en MyActivity.java. Si deseas ver una app de ejemplo que usa PAL para generar un nonce, descarga el ejemplo de Android en GitHub.

Primero, debes importar el SDK de PAL, crear algunas propiedades privadas para almacenar tu NonceLoader y NonceManager, y, luego, inicializar el NonceLoader.

Te recomendamos que crees solo una instancia de la clase NonceLoader para cada sesión de usuario en tu app, a menos que esta tenga varias páginas o construcciones equivalentes. De esta manera, se mantiene el correlator de página (&correlator) sin cambios durante el ciclo de vida de una página o de la sesión de un usuario en la app. Aún tienes control sobre el correlator de transmisión (&scor), que debe restablecerse una vez por cada transmisión nueva.

Todas las solicitudes de anuncios de una misma transmisión deben compartir el mismo valor de correlator de transmisión y NonceLoader para que las funciones de limitación de frecuencia y exclusión competitiva funcionen correctamente.

import android.app.Activity;
import android.os.Bundle;
import com.google.ads.interactivemedia.pal.NonceLoader;
import com.google.ads.interactivemedia.pal.NonceManager;
import com.google.ads.interactivemedia.pal.NonceRequest;
import com.google.ads.interactivemedia.pal.ConsentSettings;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;

import java.util.HashSet;
import java.util.Set;

public class MainActivity extends Activity {
...
  private NonceLoader nonceLoader;
  private NonceManager nonceManager = null;
  private ConsentSettings consentSettings;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 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 isConsentToStorage = getConsentToStorage();

    videoView = findViewById(R.id.video_view);
    videoView.setOnTouchListener(this::onVideoViewTouch);

    consentSettings = ConsentSettings.builder()
            .allowStorage(isConsentToStorage)
            .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);
    ...
  }

A continuación, crea una función para activar la generación del nonce. Solo necesitas un nonce para todas las solicitudes de anuncios en una sola reproducción de transmisión. Para realizar pruebas, puedes llamar a esta función cuando hagas clic en un botón de la app de prueba.

Esta función activa la generación de nonce de forma asíncrona, por lo que debes implementar un AsyncTask para controlar el éxito o la falla de la solicitud del nonce:

public void generateNonceForAdRequest() {
  Set supportedApiFrameWorksSet = new HashSet();
  supportedApiFrameWorksSet.add(2);
  supportedApiFrameWorksSet.add(7);
  supportedApiFrameWorksSet.add(9);

  NonceRequest nonceRequest = NonceRequest.builder()
      .descriptionURL("https://example.com/content1")
      .iconsSupported(true)
      .omidVersion("1.0.0")
      .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(true)
      .build();
  NonceCallbackImpl callback = new NonceCallbackImpl();
  nonceLoader
      .loadNonceManager(nonceRequest)
      .addOnSuccessListener(callback)
      .addOnFailureListener(callback);
}

private class NonceCallbackImpl implements OnSuccessListener<NonceManager>, OnFailureListener {
  @Override
  public void onSuccess(NonceManager manager) {
    nonceManager = manager;
    String nonceString = manager.getNonce();
    Log.i("PALSample", "Generated nonce: " + nonceString);
    // from here you would trigger your ad request and move on to initialize content
  }

  @Override
  public void onFailure(Exception error) {
    Log.e("PALSample", "Nonce generation failed: " + error.getMessage());
  }
}

Una vez que se crea un administrador de nonce, el nonce se puede recuperar en cualquier momento con nonceManager.getNonce().

Adjunta el nonce a la solicitud de anuncio

Para usar el nonce generado, agrega tu etiqueta de anuncio con un parámetro givn y el valor del nonce antes de realizar tus solicitudes de anuncios.

/**
 * The ad tag for your ad request, for example:
 * https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external\
 * /single_ad_samples&ciu_szs=300x250&impl=s&gdfp_req=1&env=vp&output=vast&unviewed_position_start=1\
 * &cust_params=deployment%3Ddevsite%26sample_ct%3Dlinear&correlator=
 *
 * For more sample ad tags, see
 * developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/tags
 */
private static final String DEFAULT_AD_TAG = "Your ad tag";
...
@Override
public void onSuccess(NonceManager manager) {
  nonceManager = manager;
  String nonceString = manager.getNonce();
  Log.i("PALSample", "Generated nonce: " + nonceString);
  // Append the nonce to the ad tag URL.
  makeAdRequest(DEFAULT_AD_TAG + "&givn=" + nonceString);
}

Cómo realizar un seguimiento de los eventos de reproducción

Por último, debes implementar varios controladores de eventos para tu reproductor. Para realizar pruebas, puedes adjuntarlos a eventos de clic de botones, pero, en una implementación real, estos se activarían mediante los eventos correspondientes del jugador:

public void sendAdClick() {
  if (nonceManager != null) {
    nonceManager.sendAdClick();
  }
}

public void sendPlaybackStart() {
  if (nonceManager != null) {
    nonceManager.sendPlaybackStart();
  }
}

public void sendPlaybackEnd() {
  if (nonceManager != null) {
    nonceManager.sendPlaybackEnd();
  }
}

public void onVideoViewTouch(MotionEvent e) {
  if (nonceManager != null) {
    nonceManager.sendTouch(e);
  }
}

Aquí se indica cuándo llamar a cada función de tu implementación:

  • sendPlaybackStart(): Cuándo comienza la sesión de reproducción de video
  • sendPlaybackEnd(): Cuando finaliza la 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

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

Cuando configures el servidor de anuncios de terceros para que funcione con Google Ad Manager, consulta la documentación de tu servidor a fin de capturar y reenviar el valor del nonce en cada solicitud de anuncio. El ejemplo que se proporciona 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 incluir el nonce en la solicitud del servidor a Ad Manager. A continuación, se muestra un ejemplo de una etiqueta de anuncio configurada dentro de un 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 del 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 de terceros, deberías encontrar más información disponible sobre cómo lograr esto.