El primer paso es agregar el SDK de Android PAL a tu app.
Agrega el SDK de PAL de Android como una 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:
app/build.gradle
...
dependencies {
implementation 'com.google.android.gms:play-services-pal:22.0.0'
...
}
Como alternativa, puedes descargar el SDK de PAL desde el repositorio de Maven de Google y agregarlo manualmente a tu app.
Genera un nonce
Un "nonce" es una sola cadena encriptada que genera PAL con NonceLoader
.
El SDK de PAL requiere que cada solicitud de transmisión nueva esté acompañada de un nonce generado recientemente. Sin embargo, los nonces se pueden volver a usar para varias solicitudes de anuncios dentro del mismo flujo. Para generar un nonce con el SDK de PAL, realiza cambios en MyActivity.java
. Para ver una app de ejemplo que usa PAL para generar un nonce, descarga el ejemplo de Android desde GitHub.
Primero, debes importar el SDK de PAL, crear algunas propiedades privadas para almacenar tu NonceLoader
y NonceManager
y, luego, inicializar tu NonceLoader.
Te recomendamos que crees solo una instancia de la clase NonceLoader
para cada sesión del usuario en tu app, a menos que esta tenga varias páginas o construcciones equivalentes. De esta manera, el correlator de páginas (&correlator
) no se modifica durante el tiempo de vida de una página o la sesión de un usuario en la aplicación. Aún tienes control sobre el correlator de transmisiones (&scor
), que se debe restablecer una vez por cada transmisión nueva.
Todas las solicitudes de anuncios de la misma transmisión deben compartir el mismo NonceLoader
y el mismo valor de correlator de transmisión 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 de 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 tu app de prueba. Los parámetros NonceRequest
establecidos aquí son parámetros de ejemplo. Debes configurar tus parámetros según las características de tu app.
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 el fracaso de la solicitud de nonce:
public void generateNonceForAdRequest() {
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();
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, se puede recuperar en cualquier momento con nonceManager.getNonce()
.
Adjunta un 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);
}
Realiza un seguimiento de los eventos de reproducción
Por último, debes implementar varios controladores de eventos para tu reproductor. Para pruebas, puedes adjuntarlos a eventos de clic en el botón, pero en una implementación real, los eventos del jugador adecuados los activarán:
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);
}
}
A continuación, se indica cuándo llamar a cada función en tu implementación:
sendPlaybackStart()
: Cuando comienza la sesión de reproducción de videosendPlaybackEnd()
: Cuando finaliza la sesión de reproducción de videosendAdClick()
: Cada vez que el usuario hace clic en un anunciosendTouch()
: 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 tu servidor de anuncios de terceros para que funcione con Google Ad Manager, consulta la documentación de tu 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 información, 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 de nonce que proporcionaste en el paso anterior. Debería haber más información para lograrlo en la documentación del servidor de anuncios de terceros.