Pierwszym krokiem jest dodanie do aplikacji pakietu SDK Android PAL.
Dodawanie pakietu SDK PAL na Androida jako biblioteki
Od wersji 18.0.0 pakiet SDK PAL jest hostowany w repozytorium Maven Google i może zostać dodany do aplikacji w ten sposób:
app/build.gradle
...
dependencies {
implementation 'com.google.android.gms:play-services-pal:22.0.0'
...
}
Pakiet SDK do obsługi PAL można też pobrać z repozytorium Maven firmy Google i ręcznie dodać do aplikacji.
Generowanie identyfikatora nonce
„Nonce” to pojedynczy zaszyfrowany ciąg wygenerowany przez PAL za pomocą NonceLoader
.
Pakiet SDK PAL wymaga, aby każde nowe żądanie strumienia było poprzedzone nowo wygenerowanym identyfikatorem nonce. Jednak w ramach tego samego strumienia można używać tych samych wartości nonce do wielu żądań reklamy. Aby wygenerować nonce za pomocą pakietu PAL SDK, wprowadź zmiany w pliku MyActivity.java
. Aby zobaczyć przykładową aplikację, która używa PAL do generowania nonce, pobierz przykład na Androida z GitHub.
Najpierw musisz zaimportować pakiet SDK PAL, utworzyć prywatne właściwości do przechowywania wartości NonceLoader
i NonceManager
, a następnie zainicjować NonceLoader.
Zalecamy tworzenie tylko 1 wystąpieni klasy NonceLoader
na każdą sesję użytkownika w aplikacji, chyba że aplikacja ma wiele stron lub równoważnych konstrukcji. Dzięki temu korelator strony (&correlator
) pozostaje niezmieniony przez cały czas istnienia strony lub sesji użytkownika w aplikacji. Nadal masz kontrolę nad korelatorem strumienia (&scor
), który należy zresetować po każdym nowym strumieniu.
Aby funkcje ograniczenia liczby wyświetleń i wykluczenia konkurencji działały prawidłowo, wszystkie żądania reklam z tego samego strumienia powinny mieć tę samą wartość NonceLoader
i tą samą wartość korelatora strumienia.
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);
...
}
Następnie utwórz funkcję, która spowoduje wygenerowanie nonce. Wystarczy jeden losowy ciąg znaków dla wszystkich żądań reklamy w ramach jednego odtwarzania strumienia. W celu przetestowania możesz wywołać tę funkcję po kliknięciu przycisku w aplikacji testowej. Tutaj ustawione parametry NonceRequest
to parametry przykładowe. Parametry należy ustawić na podstawie cech Twojej aplikacji.
Ta funkcja powoduje asynchroniczne generowanie nonce, więc musisz zaimplementować AsyncTask
, aby obsłużyć powodzenie lub niepowodzenie żądania 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());
}
}
Po utworzeniu menedżera wartości cząstkowych można je w dowolnym momencie pobrać za pomocą funkcji nonceManager.getNonce()
.
Załączanie nonce do żądania reklamy
Aby użyć wygenerowanego identyfikatora nonce, przed wysłaniem żądań reklamy dodaj do tagu reklamy parametr givn
i wartość nonce.
/**
* 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);
}
Śledzenie zdarzeń odtwarzania
Na koniec musisz zaimplementować różne moduły obsługi zdarzeń dla odtwarzacza. W celu przetestowania możesz je dołączyć do zdarzeń kliknięcia przycisku, ale w rzeczywistej implementacji będą one wywoływane przez odpowiednie zdarzenia odtwarzacza:
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);
}
}
Oto, kiedy należy wywoływać poszczególne funkcje w implementacji:
sendPlaybackStart()
: gdy rozpoczyna się sesja odtwarzania filmusendPlaybackEnd()
: gdy sesja odtwarzania filmu dobiegnie końcasendAdClick()
: za każdym razem, gdy widz klika reklamęsendTouch()
: przy każdym dotknięciu odtwarzacza
(Opcjonalnie) Wysyłanie sygnałów Google Ad Managera przez serwery reklamowe firm zewnętrznych
Gdy skonfigurujesz serwer reklam zewnętrznych do współpracy z Google Ad Manager, zapoznaj się z dokumentacją serwera, aby rejestrować i przekazywać wartość nonce w każdym żądaniu reklamy. Podany przykład to URL żądania reklamy z parametrem nonce. Parametr nonce jest przekazywany z pakietu PAL SDK przez serwery pośredniczące do Ad Managera, co umożliwia lepszą monetyzację.
Skonfiguruj serwer reklamowy firmy zewnętrznej, aby uwzględniał wartość nonce w żądaniu wysyłanym do Ad Managera. Oto przykład tagu reklamy skonfigurowanego w serwerze reklamowym firmy zewnętrznej:
'https://pubads.serverside.net/gampad/ads?givn=%%custom_key_for_google_nonce%%&...'
Więcej informacji znajdziesz w przewodniku po implementacji po stronie serwera w Google Ad Managerze.
Ad Manager wyszukuje wartość givn=
, aby zidentyfikować wartość nonce. Serwer reklam zewnętrzny musi obsługiwać własne makro, np. %%custom_key_for_google_nonce%%
, i zastępować je parametrem zapytania nonce podanym w poprzednim kroku. Więcej informacji o tym, jak to zrobić, powinno być dostępnych w dokumentacji serwera reklamowego firmy zewnętrznej.