A primeira etapa é adicionar o SDK do Android PAL ao seu app.
Adicionar o SDK do Android PAL como uma biblioteca
A partir da versão 18.0.0, o SDK do PAL é hospedado no repositório Maven do Google e pode ser adicionado ao seu app da seguinte maneira:
app/build.gradle
...
dependencies {
implementation 'com.google.android.gms:play-services-pal:22.0.0'
...
}
Como alternativa, o SDK do 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 gerada pelo PAL usando o NonceLoader
.
O SDK do PAL exige que cada nova solicitação de stream seja acompanhada por um valor de uso único
gerado recentemente. No entanto, os valores de uso único podem ser reutilizados para várias solicitações de anúncios no
mesmo stream. Para gerar um valor de uso único usando o SDK do PAL, faça mudanças em
MyActivity.java
. Para conferir um app de exemplo que usa o PAL para gerar um valor de uso único,
faça o download do exemplo do Android no
GitHub.
Primeiro, importe o SDK do PAL, crie algumas propriedades privadas para armazenar
NonceLoader
e NonceManager
e inicialize o 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 durante a
vida útil de uma página ou sessão de um usuário no app. 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 o mesmo NonceLoader
e
valor de correlação do stream para que os recursos de limite de frequência e exclusão competitiva
funcionem 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 valores de uso único. Você só precisa de um valor de uso único
para todas as solicitações de anúncio em uma única reprodução de transmissão. Para fins de teste, é possível chamar essa função ao clicar em um botão no app de teste. Os
parâmetros NonceRequest
definidos aqui são exemplos. Defina os
parâmetros com base nas características do seu app.
Essa função aciona a geração de nonce de forma assíncrona. Portanto, é necessário
implementar um AsyncTask
para processar o sucesso ou a falha da solicitação 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());
}
}
Depois que um gerenciador de uso único é criado, o valor pode ser recuperado a qualquer momento usando
nonceManager.getNonce()
.
Anexar o valor de uso único à solicitação de anúncio
Para usar o valor de uso único gerado, anexe a tag do anúncio com um parâmetro givn
e o valor de uso único antes de fazer as solicitações de anúncio.
/**
* 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 o player. Para fins de teste, é possível anexar esses eventos a eventos de clique do botão, mas, em uma implementação real, eles seriam acionados pelos eventos de jogador adequados:
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);
}
}
Confira quando chamar cada função na 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
(Opcional) Enviar indicadores do Google Ad Manager por servidores de anúncios de terceiros
Ao configurar o servidor de anúncios de terceiros para funcionar com o Google Ad Manager, consulte a documentação do servidor para capturar e encaminhar o valor de uso único em cada solicitação de anúncio. O exemplo fornecido é de um URL de solicitação de anúncio com o parâmetro de valor de uso único incluído. O parâmetro de valor de uso único é propagado do SDK do PAL pelos servidores intermediários até o Ad Manager, permitindo uma melhor monetização.
Configure o servidor de anúncios de terceiros para incluir o valor de uso único na solicitação do servidor para o 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
de terceiros precisa oferecer suporte a uma macro própria, como
%%custom_key_for_google_nonce%%
, e substituí-la pelo parâmetro de consulta de valor único
fornecido na etapa anterior. Mais informações sobre como fazer isso
estão disponíveis na documentação do servidor de anúncios de terceiros.