Rozpocznij

Wymagania wstępne

Aby zintegrować i przetestować pakiet PAL SDK pod kątem przesyłania, potrzebujesz:

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.