Wymagania wstępne
Aby zintegrować i przetestować pakiet PAL SDK pod kątem przesyłania, potrzebujesz:
Aplikacja odbiornika do generowania liczby jednorazowej za pomocą wiadomość przechwycenia.
aplikację nadawcy, która załaduje urządzenie. które zawierają żądanie reklamy.
Aby zintegrować pakiet SDK PAL, wystarczy zaktualizować aplikację odbiornika, mogą korzystać z narzędzia Cast and Control (CAC), jako nadawca internetowy, aby przetestować odbiorcę.
Aby na koniec każdego kroku uruchomić aplikację, uruchom aplikacja odbiornika w CAC Narzędzie i wysyłanie żądania wczytania.
Wygeneruj liczbę jednorazową
Liczba jednorazowa jest pojedynczym zaszyfrowanym ciągiem znaków wygenerowanym przez protokół PAL
NonceManager
Wartość NonceManager
jest generowana przez
loadNonceManager
.
NonceLoader
,
na podstawie ustawień przekazanych
NonceRequest
. Aby wyświetlić
przykładowa aplikacja, która używa PAL do generowania liczby jednorazowej, pobierz przykład Cast z
GitHub
Każde nowe żądanie strumienia wymaga nowej liczby jednorazowej. Wiele żądań reklamy w ten sam strumień może używać tej samej liczby jednorazowej. Aby wygenerować liczbę jednorazową za pomocą pakietu SDK PAL, najpierw Utwórz niestandardowy odbiornik internetowy i dodaj ten kod:
receiver.html
<!DOCTYPE html>
<html>
<head>
<script src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
<script src="//imasdk.googleapis.com/pal/sdkloader/cast_pal.js"></script>
</head>
<body>
<cast-media-player></cast-media-player>
<footer>
<script src="js/receiver.js" type="module"></script>
</footer>
</body>
</html>
Element <cast-media-player>
reprezentuje wbudowany interfejs odtwarzacza zapewniany przez
za pomocą interfejsu Cast Web Receiver API. W zależności od typu transmisji użyty przez Ciebie odtwarzacz
mogą być różne. Wersje tych odtwarzaczy znajdziesz w Google Cast
Informacje o wersji pakietu SDK
Następnie dodaj następujący kod, aby przechwycić funkcję LOAD
wydarzenia
i generuje liczbę jednorazową za każdym razem, gdy odbiorca wczyta nowy
MediaInformation
.
obiekt:
js/receiver.js
const castContext = cast.framework.CastReceiverContext.getInstance();
const playerManager = castContext.getPlayerManager();
const consentSettings = new goog.cast.pal.ConsentSettings();
// For the correct usage of the allowStorage property, See
// developers.google.com/ad-manager/pal/cast/reference/js/ConsentSettings#allowStorage.
consentSettings.allowStorage = true;
// You need a nonce loader to request your stream's nonceManager. The
// nonceManager provides your nonce. You should reuse the same nonce loader for
// the entire lifecycle of the receiver.
const nonceLoader = new goog.cast.pal.NonceLoader(consentSettings);
// You need a reference to the NonceManager to track when an ad is shown or
// clicked.
let nonceManager;
/**
* Sends a debug message to the CAF sender.
*
* @param {String} message - The message to send
*/
const log = (message) => {
// Use CastDebugLogger to log a message to the sender. See
// https://developers.google.com/cast/docs/debugging/cast_debug_logger.
}
/**
* Stores the nonce manager in the outer scoped variable and retrieves a nonce,
* so it can be used to build your ad request URL
*
* @param {NonceManager} loadedNonceManager - The loaded nonce manager
*/
const buildAdRequest = (loadedNonceManager) => {
nonceManager = loadedNonceManager;
const nonce = nonceManager.getNonce();
log('received nonce:' + nonce);
// TODO: Set this nonce as the value for the `givn` parameter of your ad
// request URL. For example:
// const adRequestURL = 'https://myadserver.com/ads?givn=' + nonce;
}
/**
* Configures a new nonce request, then requests a nonce.
*
* @param {LoadRequestData} loadRequestData - the load request object,
* which contains the MediaInformation object from the sender. See
* developers.google.com/cast/docs/reference/web_receiver/cast.framework.messages.LoadRequestData
* @return {(Promise<LoadRequestData>)} - A Promise to build an ad request.
*/
const handleLoadRequest = (loadRequestData) => {
// Clear any old nonceManager before loading new media.
nonceManager = null;
// See developers.google.com/ad-manager/pal/cast/reference/js/NonceRequest
// for details about each property. The NonceRequest parameters set here are
// example parameters. You should set your parameters based on your own app
// characteristics.
const nonceRequest = new goog.cast.pal.NonceRequest();
nonceRequest.adWillAutoPlay = true;
// A URL describing the video stream.
nonceRequest.descriptionUrl = 'https://example.com';
nonceRequest.iconsSupported = true;
nonceRequest.ppid = 'Sample PPID';
nonceRequest.sessionId = 'Sample SID';
nonceRequest.url = loadRequestData.media.contentUrl;
// The height of the player in physical pixels.
// For a fullscreen player on a 1080p screen, the video height would be 1080.
nonceRequest.videoHeight = window.devicePixelRatio * window.screen.height;
// The width of the player in physical pixels.
// For a fullscreen player on a 1080p screen, the video width would be 1920.
nonceRequest.videoWidth = window.devicePixelRatio * window.screen.width;
return nonceLoader.loadNonceManager(nonceRequest)
.then(buildAdRequest)
.catch((e) => {
log("Error: " + e.message);
});
};
// Set up the event handler for the LOAD event type.
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.LOAD, handleLoadRequest);
castContext.start();
Wykonując bezpośrednie wywołanie VAST (DVC), ustaw tę liczbę jednorazową jako wartość parametru
givn
. Liczba jednorazowa jest bezpieczna w postaci adresu URL. nie trzeba go kodować.
Śledzenie interakcji z filmami
Oprócz generowania wartości jednorazowej pakiet PAL SDK wymaga powiadomienia w przypadku interakcji z filmami. Aby śledzić interakcje z odbiornikiem Cast, dodaj: ten kod do niestandardowego odbiornika:
js/receiver.js
const castContext = cast.framework.CastReceiverContext.getInstance();
const playerManager = castContext.getPlayerManager();
const consentSettings = new goog.cast.pal.ConsentSettings();
// For the correct usage of the allowStorage property, See
// developers.google.com/ad-manager/pal/cast/reference/js/ConsentSettings#allowStorage.
consentSettings.allowStorage = true;
// You need a nonce loader to request your stream's nonceManager. The
// nonceManager provides your nonce. You should reuse the same nonce loader for
// the entire lifecycle of the receiver.
const nonceLoader = new goog.cast.pal.NonceLoader(consentSettings);
// You need a reference to the NonceManager for sending ad events.
let nonceManager;
// Track playback status.
let playbackDidStart = false;
...
// Register the start of playback.
playerManager.addEventListener(cast.framework.events.EventType.PLAYING, () => {
if (playbackDidStart) return;
playbackDidStart = true;
if (nonceManager) {
log('Registered playback start');
nonceManager.sendPlaybackStart();
} else {
log("Error: There is no nonce manager for this media.");
}
});
// Register any interactions with the player.
const interactionEvents = [
cast.framework.events.EventType.REQUEST_SEEK,
cast.framework.events.EventType.REQUEST_STOP,
cast.framework.events.EventType.REQUEST_PAUSE,
cast.framework.events.EventType.REQUEST_PLAY,
cast.framework.events.EventType.REQUEST_SKIP_AD,
cast.framework.events.EventType.REQUEST_PLAY_AGAIN,
cast.framework.events.EventType.REQUEST_PLAYBACK_RATE_CHANGE,
cast.framework.events.EventType.REQUEST_VOLUME_CHANGE,
cast.framework.events.EventType.REQUEST_USER_ACTION,
cast.framework.events.EventType.REQUEST_FOCUS_STATE,
];
playerManager.addEventListener(interactionEvents, (interactionEvent) => {
if (nonceManager) {
log('Registered interaction: ' + interactionEvent);
nonceManager.sendAdTouch(interactionEvent);
} else {
log("Error: There is no nonce manager for this media.");
}
});
// Register the end of playback.
playerManager.addEventListener(cast.framework.events.EventType.MEDIA_FINISHED, () => {
playbackDidStart = false;
if (nonceManager) {
log('Registered playback end');
nonceManager.sendPlaybackEnd();
} else {
log("Error: There is no nonce manager for this media.");
}
});
castContext.start();
(Opcjonalnie) Wysyłanie sygnałów Google Ad Managera przez serwery reklamowe firm zewnętrznych
Skonfiguruj żądanie serwera reklamowego firmy zewnętrznej na potrzeby Ad Managera. Po wykonaj poniższe czynności, parametr jednorazowy zostanie rozpowszechniony z pakietu SDK PAL, przez serwery pośrednie, a potem do Google Ad Manager. Dzięki temu zarabiać więcej dzięki Google Ad Managerowi.
Skonfiguruj serwer reklamowy firmy zewnętrznej, tak aby zawierał wartość jednorazową w nagłówku do Ad Managera. Oto przykład tagu reklamy skonfigurowanego w tagu serwer reklamowy firmy zewnętrznej:
'https://pubads.serverside.net/gampad/ads?givn=%%custom_key_for_google_nonce%%&...'
Więcej informacji znajdziesz w artykule o implementacji Google Ad Managera po stronie serwera .
Ad Manager wyszukuje wartość jednorazową za pomocą parametru givn=
. Reklama zewnętrzna
serwer musi obsługiwać własne makro, takie jak
%%custom_key_for_google_nonce%%
i zastąp go parametrem zapytania z liczbą jednorazową
podane w poprzednim kroku. Więcej informacji, jak to zrobić
powinny być dostępne w dokumentacji serwera reklamowego firmy zewnętrznej.