الخطوات الأولى

المتطلبات الأساسية

لدمج حزمة تطوير البرامج (SDK) لنظام التشغيل PAL من أجل Cast واختبارها، ستحتاج إلى ما يلي:

بما أنك تحتاج فقط إلى تحديث تطبيق جهاز الاستقبال لدمج حزمة PAL SDK، استخدام أداة "الأوامر والتحكّم في البث" (CAC) كمرسل ويب لاختبار المتلقي.

يمكنك تنفيذ النموذج في نهاية كل خطوة من خلال إطلاق الويب أولاً تطبيق المستلِم في شهادة CAC ثم إجراء أي طلب تحميل.

إنشاء رقم Nonce

"نقطة غير معتادة" عبارة عن سلسلة مشفرة فردية تم إنشاؤها بواسطة PAL من خلال NonceManager تشير رسالة الأشكال البيانية يتم إنشاء NonceManager بواسطة loadNonceManager منهجية NonceLoader، استنادًا إلى الإعدادات التي تم تمريرها في NonceRequest. للاطلاع على نموذج تطبيق يستخدم PAL لإنشاء رقم غير متكرر، يمكنك تنزيل مثال البث من GitHub.

يتطلّب كل طلب بث جديد رقمًا جديدًا. طلبات الإعلان المتعددة ضمن يمكن أن يستخدم نفس البث رسالة غير مخصصة لإنشاء رقم تلقائي باستخدام حزمة تطوير البرامج (SDK) لنظام التشغيل PAL، عليك أولاً إنشاء جهاز استقبال ويب مخصص التطبيق ونضيف التعليمة البرمجية التالية:

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. استنادًا إلى نوع البث، استخدم المشغّل الفعلي مختلفة. يمكنك العثور على الإصدارات نفسها من هذه المشغّلات في Google Cast. ملاحظات إصدار حزمة تطوير البرامج (SDK)

بعد ذلك، أضف الرمز التالي لاعتراض التحميل الفعاليات وتنشئ رقمًا واحدًا في كل مرة يحمّل فيها المُستلِم MediaInformation الكائن:

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

عند إجراء الاتصال المباشر عبر نموذج عرض إعلانات الفيديو (DVC)، اضبط رقم الاتصال هذا كقيمة في مَعلمة givn. يجب الحفاظ على أمان عنوان URL. ولن تحتاج إلى ترميزه باستخدام عنوان URL.

تتبُّع التفاعلات مع الفيديو

بالإضافة إلى إنشاء رقم غير خاص، يجب إخطار SDK PAL بتاريخ معين والتفاعلات مع الفيديو. لتتبُّع التفاعلات مع مستقبل البث، أضِف الرمز التالي إلى جهاز الاستقبال المخصّص:

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" من خلال خوادم الإعلانات التابعة لجهات خارجية

اضبط طلب خادم الإعلانات التابع لجهة خارجية في "مدير إعلانات Google". بعد استكمل الخطوات التالية، يتم نشر المعلمة nonce من PAL SDK، من خلال الخوادم الوسيطة، ثم إلى "مدير إعلانات Google". وهذا يمكّن تحقيق الربح بشكل أفضل من خلال "مدير إعلانات Google"

يجب إعداد خادم الإعلانات التابع لجهة خارجية لتضمين nonce في خادم الإعلانات الخاص بالخادم المرسَل إلى "مدير الإعلانات" في ما يلي مثال على علامة إعلان تم ضبطها داخل خادم إعلانات الجهة الخارجية:

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

لمزيد من التفاصيل، يُرجى الاطّلاع على مقالة التنفيذ من جهة الخادم في "مدير إعلانات Google". الدليل.

يبحث "مدير إعلانات Google" عن givn= لتحديد القيمة غير الناتجة. إعلان الجهة الخارجية خادم إلى دعم بعض وحدات الماكرو الخاصة به، مثل %%custom_key_for_google_nonce%%، واستبداله بمَعلمة طلب البحث nonce التي قدمتها في الخطوة السابقة. مزيد من المعلومات حول كيفية تحقيق ذلك يجب أن يكون متاحًا في مستندات خادم إعلانات الجهة الخارجية.