Com a PAL, é possível enviar indicadores de anúncios do Google nas solicitações de anúncio e durante a reprodução.
Este guia mostra como adicionar o SDK do PAL para Android ao seu app. Para conferir um app de exemplo que usa o PAL para gerar um nonce, baixe o exemplo do Android no GitHub.
Adicionar o SDK do Android PAL como uma biblioteca
A partir da versão 18.0.0, o SDK PAL é hospedado no repositório Maven do Google e pode ser adicionado ao seu app da seguinte maneira:
implementation 'com.google.android.gms:play-services-pal:22.1.0'
Como alternativa, o SDK PAL pode ser baixado do repositório Maven do Google e adicionado manualmente ao app.
Gerar valor de uso único
Um valor de uso único é uma única string criptografada que a PAL gera usando a classe NonceLoader
. A PAL exige que cada solicitação de transmissão seja acompanhada por um
valor de uso único exclusivo. No entanto, é possível reutilizar nonces para várias solicitações de anúncios
no mesmo fluxo. Para gerar um número único usando o SDK do PAL, faça as
seguintes mudanças para importar e configurar o PAL e crie uma função para gerar
um número único:
Importe e configure a PAL fazendo o seguinte:
Importar classes 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;
Crie variáveis particulares para armazenar as instâncias
NonceLoader
eNonceManager
:private NonceLoader nonceLoader; private NonceManager nonceManager;
Inicialize sua instância
NonceLoader
com uma instânciaConsentSettings
no métodoonCreate
:@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()); }
No app, crie uma instância da classe
NonceLoader
para cada sessão de usuário. Se o app tiver várias páginas ou construções equivalentes, crie uma nova instânciaNonceLoader
para cada página ou equivalente. Ao usar a mesma instânciaNonceLoader
, você mantém o correlator de página&correlator
inalterado durante a vida útil de uma página ou da sessão de um usuário no app. Você ainda tem controle sobre o correlator de fluxo&scor
, que precisa ser redefinido para cada novo fluxo gerando um novo nonce.Todas as solicitações de anúncio do mesmo stream precisam compartilhar a mesma instância
NonceLoader
e o mesmo valor de correlator de stream para que os recursos de limite de frequência e exclusão competitiva funcionem.Gere um valor de uso único:
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()); } }); }
Você só precisa de um nonce para todas as solicitações de anúncio em uma única reprodução de stream. Para fins de teste, chame essa função ao clicar em um botão no app de teste. Os parâmetros
NonceRequest
definidos neste guia são exemplos de parâmetros. Defina os parâmetros com base nas características do seu app.Essa função gera um nonce de forma assíncrona. É necessário processar os casos de sucesso e falha da solicitação de nonce. Depois que o gerenciador de números aleatórios estiver disponível, recupere o número antes de fazer uma solicitação de anúncio usando o método
nonceManager.getNonce()
.
Anexar um número único à solicitação de anúncio
Para usar o nonce gerado, adicione à tag de anúncio um parâmetro givn
e o valor de nonce antes de fazer as solicitações de anúncio:
// From here you would trigger your ad request and move on to initialize content.
exampleMakeAdRequest(DEFAULT_AD_TAG + "&givn=" + nonceString);
Rastrear eventos de reprodução
Para rastrear eventos de reprodução, configure manipuladores de eventos para enviar indicadores de anúncios ao 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();
}
}
Veja quando chamar cada função na sua implementação:
sendPlaybackStart()
: quando a sessão de reprodução de vídeo começasendPlaybackEnd()
: quando a sessão de reprodução de vídeo terminasendAdClick()
: cada vez que o espectador clica em um anúnciosendTouch()
: em cada interação de toque com o player
Para fins de teste, anexe os métodos de manipulador de eventos a eventos de clique do botão. Em uma implementação de produção, configure seu app para que os eventos do player chamem os métodos do manipulador de eventos.
(Opcional) Enviar indicadores do Google Ad Manager por servidores de anúncios de terceiros
Ao configurar seu servidor de anúncios de terceiros para trabalhar com o Google Ad Manager, consulte a documentação do servidor para capturar e encaminhar o valor de nonce em cada solicitação de anúncio. O exemplo fornecido é de um URL de solicitação de anúncio com o parâmetro nonce incluído. O parâmetro nonce é propagado do SDK do PAL pelos seus servidores intermediários e, em seguida, para o Ad Manager, permitindo uma monetização melhor.
Configure seu servidor de anúncios de terceiros para incluir o nonce na solicitação do servidor ao Ad Manager. Confira um exemplo de tag de anúncio configurada no servidor de anúncios de terceiros:
'https://pubads.serverside.net/gampad/ads?givn=%%custom_key_for_google_nonce%%&...'
Para mais detalhes, consulte o guia de implementação do lado do servidor do Google Ad Manager.
O Ad Manager procura givn=
para identificar o valor de uso único. O servidor de anúncios terceirizado precisa ser compatível com uma macro própria, como %%custom_key_for_google_nonce%%
, e substituí-la pelo parâmetro de consulta de nonce fornecido na etapa anterior. Para mais informações sobre como fazer isso, consulte a documentação do servidor de anúncios de terceiros.