Primeiros passos

A primeira etapa é adicionar o SDK da Android PAL ao app.

Adicionar o SDK do Android PAL como uma biblioteca

A partir da versão 18.0.0, o SDK da PAL fica hospedado no repositório Maven do Google e podem ser adicionados ao seu app da seguinte forma:

app/build.gradle

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

Como alternativa, é possível fazer o download do SDK da PAL no repositório Maven do Google e adicioná-lo manualmente ao app.

Gerar valor de uso único

Um valor de uso único é uma única string criptografada gerada pela PAL usando o NonceLoader. O SDK da PAL exige que cada nova solicitação de fluxo seja acompanhada por um novo o valor de uso único gerado. No entanto, os valores de uso único podem ser reutilizados para várias solicitações de anúncios no mesmo fluxo. Para gerar um valor de uso único usando o SDK do PAL, faça mudanças em MyActivity.java. Para ver um app de exemplo que usa a PAL para gerar um valor de uso único, baixe o exemplo do Android GitHub.

Primeiro, você precisa importar o SDK da PAL, criar algumas propriedades particulares para armazenar seu NonceLoader e NonceManager e, em seguida, inicialize seu NonceLoader.

Recomendamos que você crie apenas uma instância da classe NonceLoader para cada sessão de usuário no app, a menos que ele tenha várias páginas ou construções equivalentes. Isso mantém o correlator de página (&correlator) inalterado para o vida útil de uma página ou sessão de usuário no aplicativo. Você ainda tem controle sobre o correlator de stream (&scor), que precisa ser redefinido uma vez para cada novo stream.

Todas as solicitações de anúncios do mesmo stream precisam compartilhar os mesmos NonceLoader e valor do correlator de stream para limite de frequência e exclusão competitiva para funcionar corretamente.

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);
    ...
  }

Em seguida, crie uma função para acionar a geração de valor de uso único. Você só precisa de um valor de uso único para todas as solicitações de anúncios em uma reprodução de stream único. Para fins de teste, pode chamar essa função ao clicar em um botão no app de teste. O Os parâmetros NonceRequest definidos aqui são exemplos de parâmetros. Você deve definir seu com base nas características do seu app.

Essa função aciona a geração de valores de uso único de maneira assíncrona. Portanto, você precisa Implemente um AsyncTask para lidar com o sucesso ou a falha da solicitação de valor de uso único:

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());
  }
}

Depois que um gerenciador de valores de uso único é criado, esse valor pode ser recuperado a qualquer momento usando nonceManager.getNonce():

Anexar o valor de uso único à solicitação de anúncio

Para utilizar o valor de uso único gerado, anexe sua tag de anúncio com um parâmetro givn e as o valor de uso único antes de fazer as solicitações de anúncios.

/**
 * 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);
}

Rastrear eventos de reprodução

Por fim, você precisa implementar vários manipuladores de eventos para seu player. Para de teste, você pode anexá-los a eventos de clique de botão, mas em uma situação real implementação, elas seriam acionadas pelos eventos apropriados do player:

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);
  }
}

Veja quando chamar cada função na implementação:

  • sendPlaybackStart(): quando a sessão de reprodução de vídeo começa.
  • sendPlaybackEnd(): quando a sessão de reprodução de vídeo termina.
  • sendAdClick(): cada vez que o espectador clica em um anúncio.
  • sendTouch(): em cada interação de toque com o jogador

(Opcional) Enviar indicadores do Google Ad Manager por servidores de anúncios de terceiros

Ao configurar seu servidor de anúncios de terceiros para funcionar com o Google Ad Manager, consulte à documentação do servidor para capturar e encaminhar o valor de uso único em cada anúncio. solicitação. O exemplo fornecido é de um URL de solicitação de anúncio com o parâmetro de valor de uso único. incluída. O parâmetro de valor de uso único se propaga do SDK da PAL por meio da os servidores intermediários e o Ad Manager, melhorando a monetização.

Configure seu servidor de anúncios de terceiros para incluir o valor de uso único na variável ao Ad Manager. Veja um exemplo de tag de anúncio configurada dentro do servidor de anúncios de terceiros:

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

Para mais detalhes, consulte a Implementação do lado do servidor do Google Ad Manager guia.

O Ad Manager procura por givn= para identificar o valor de uso único. O anúncio de terceiros servidor precisa suportar algumas macros próprias, como %%custom_key_for_google_nonce%% e a substitua pelo parâmetro de consulta de valor de uso único. que você forneceu na etapa anterior. Mais informações sobre como fazer isso deve estar disponível na documentação do servidor de anúncios de terceiros.