מתחילים

דרישות מוקדמות

כדי לשלב ולבדוק את PAL SDK ל-Cast, צריך:

צריך רק לעדכן את אפליקציית המקבל כדי לשלב את PAL SDK, יכול להשתמש בכלי Cast Command and Control (CAC) כשולח אינטרנט כדי לבדוק את הנמען.

אפשר להריץ את הדוגמה בסוף כל שלב על ידי הפעלת אתר האינטרנט האפליקציה המקבל ב-CAC ולאחר מכן לשלוח בקשת טעינה כלשהי.

יצירת צופן חד-פעמי

"אף" היא מחרוזת מוצפנת יחידה שנוצרה על ידי PAL באמצעות NonceManager NonceManager נוצר על ידי loadNonceManager של NonceLoader, על סמך הגדרות שהועברו NonceRequest. כדי לראות אפליקציה לדוגמה שמשתמשת ב-PAL כדי ליצור צופן חד-פעמי (nonce), הורידו את הדוגמה להפעלת Cast מ- GitHub.

לכל בקשה חדשה של סטרימינג נדרש צופן חד-פעמי (nonce) חדש. בקשות מרובות להצגת מודעות במסגרת אותו זרם יכול להשתמש באותו צופן חד-פעמי. כדי ליצור צופן חד-פעמי באמצעות PAL SDK, ליצור מקלט אינטרנט מותאם אישית אפליקציה ומוסיפים את הקוד הבא:

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>

הרכיב <cast-media-player> מייצג את ממשק המשתמש המובנה של הנגן שסופק על ידי את Cast WebReceiver API. בהתאם לסוג השידור, הנגן שבו נעשה שימוש בפועל עשויים להשתנות. אפשר למצוא את הגרסאות המדויקות של הנגנים האלה ב-Google Cast נתוני גרסה של ה-SDK.

בשלב הבא, מוסיפים את הקוד הבא כדי ליירט את LOAD אירועים וליצור צופן חד-פעמי בכל פעם שהמקלט טוען MediaInformation object:

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.
  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();

כשמבצעים קריאת VAST ישירה (DVC), צריך להגדיר את ה-noce הזה כערך הפרמטר givn. הצופן החד-פעמי (nonce) בטוח לכתובת URL; שאין צורך לקודד אותו בכתובת URL.

מעקב אחרי אינטראקציות עם סרטונים

בנוסף ליצירת צופן חד-פעמי, צריך לשלוח התראה ל-PAL SDK אינטראקציות עם סרטונים. כדי לעקוב אחר אינטראקציות עם מקלט שממנו מפעילים Cast, צריך להוסיף את את הקוד הבא למקלט המותאם אישית:

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();

(אופציונלי) שליחת אותות של Google Ad Manager דרך שרתי מודעות של צד שלישי

מגדירים את הבקשה של שרת המודעות של הצד השלישי ל-Ad Manager. אחרי להשלים את השלבים הבאים, פרמטר הצופן החד-פעמי (nonce) מופץ מ-PAL SDK, דרך השרתים המתווכים, ואז אל Google Ad Manager. הפעולה הזאת מאפשרת מונטיזציה משופרת באמצעות Google Ad Manager.

צריך להגדיר את שרת המודעות של הצד השלישי כך שיכלול את הצופן החד-פעמי (nonce) של השרת בקשה ל-Ad Manager. דוגמה לתג מודעה שמוגדר בתוך שרת מודעות של צד שלישי:

'https://pubads.serverside.net/gampad/ads?givn=%%custom_key_for_google_nonce%%&...'

לפרטים נוספים, אפשר לעיין במאמר הטמעה בצד השרת של Google Ad Manager guide.

מערכת Ad Manager מחפשת את givn= כדי לזהות את ערך הקוד החד-פעמי (nonce). המודעה של הצד השלישי השרת צריך לתמוך במאקרו מסוים משל עצמו, כמו %%custom_key_for_google_nonce%%, ומחליפים אותו בפרמטר השאילתה צופן חד-פעמי (nonce) שסיפקת בשלב הקודם. מידע נוסף על האופן שבו ניתן לעשות זאת צריכים להיות זמינים במסמכים של שרת המודעות של הצד השלישי.