شروع با تایزن (سامسونگ)، شروع با تایزن (سامسونگ)، شروع با تایزن (سامسونگ)

برای دیدن یک برنامه نمونه که از PAL برای تولید nonce استفاده می کند، نمونه CTV (Tizen) را از GitHub دانلود کنید.

این راهنما PAL SDK را در یک برنامه Samsung (Tizen) گنجانده است، درخواست Noce و ثبت نمایش تبلیغات را دارد.

پیش نیازها

قبل از شروع این راهنما، باید یک برنامه پایه تایزن ایجاد کنید. می توانید از Tizen IDE برای راه اندازی برنامه استفاده کنید. برای اطلاعات بیشتر، این ویدیو را در مورد شروع کار با تایزن ببینید.

یک nonce تولید کنید

یک "nonce" یک رشته رمزگذاری شده واحد است که توسط PAL با استفاده از NonceLoader تولید می شود. PAL SDK نیاز دارد که هر درخواست جریان جدید با یک nonce جدید تولید شده همراه باشد. با این حال، nonces ممکن است برای چندین درخواست تبلیغات در یک جریان استفاده مجدد شود.

یک فایل HTML برای برنامه خود ایجاد کنید. وابستگی webapis.js را در فایل HTML خود قرار دهید. PAL برای عملکرد به این وابستگی نیاز دارد. برای اطلاعات بیشتر، به مستندات Samsung WebApi مراجعه کنید.

یک وابستگی برای CTV PAL SDK در فایل index.html خود قرار دهید. برچسب اسکریپت را به دنبال برچسب اسکریپت برای webapis.js بارگیری کنید. برای نمونه فایل index.html زیر را ببینید.

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
 <script src="$WEBAPIS/webapis/webapis.js"></script>
 <script src="//imasdk.googleapis.com/pal/sdkloader/pal_ctv.js"></script>
 <script src="app.js"></script>
</head>
<body>
  <header>
    <hgroup>
      <h1>Tizen app for PAL sdk</h1>
    </hgroup>
  </header>
  <div id="placeholder-video"></div>
</body>
</html>

سیگنال های هرزنامه PAL برای عملکرد صحیح به امتیازات خاصی از Tizen نیاز دارند. یک فایل config.xml با اعلان های امتیاز زیر ایجاد کنید:

  • "http://tizen.org/privilege/internet"
  • "http://tizen.org/privilege/system"
  • "http://tizen.org/privilege/telephony"
  • "http://tizen.org/privilege/tv.inputdevice"
  • "http://developer.samsung.com/privilege/network.public"
  • "http://developer.samsung.com/privilege/productinfo"

قطعه کد زیر را برای نمونه فایل config.xml ببینید:

<?xml version="1.0" encoding="UTF-8"?>
<widget xmlns:tizen="http://tizen.org/ns/widgets" xmlns="http://www.w3.org/ns/widgets" id="http://yourdomain/BasicProject" version="1.0.0" viewmodes="maximized">
    <tizen:application id="PACKAGE_STRING.BasicProject" package="PACKAGE_STRING" required_version="2.3"/>
    <content src="index.html"/>
    <feature name="http://tizen.org/feature/screen.size.normal.1080.1920"/>
    <icon src="icon.png"/>
    <tizen:metadata key="http://tizen.org/metadata/app_ui_type/base_screen_resolution" value="extensive"/>
    <name>BasicProject</name>
    <tizen:privilege name="http://tizen.org/privilege/internet"/>
    <tizen:privilege name="http://tizen.org/privilege/system"/>
    <tizen:privilege name="http://tizen.org/privilege/telephony"/>
    <tizen:privilege name='http://tizen.org/privilege/tv.inputdevice'/>
    <tizen:privilege name="http://developer.samsung.com/privilege/network.public"/>
    <tizen:privilege name="http://developer.samsung.com/privilege/productinfo"/>
    <tizen:profile name="tv-samsung"/>
    <tizen:setting screen-orientation="landscape" context-menu="enable" background-support="disable" encryption="disable" install-location="auto" hwkey-event="enable"/>
    <access origin="*" subdomains="true"/>
</widget>

سپس، یک فایل جاوا اسکریپت برای تولید یک nonce ایجاد کنید. این مرحله شامل گردش کار PAL ایجاد یک NonceLoader ، ایجاد یک NonceRequest ، و سپس درخواست یک nonce با استفاده از NonceLoader.loadNonceManager() است.

let videoElement;
let nonceLoader;
let managerPromise;
let nonceManager;
let storageConsent = true;
let playbackStarted = false;

/**
 * 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.
 * @return {boolean} Whether storage consent has been given.
 */
function getConsentToStorage() {
  return storageConsent;
}

/**
 * Initializes the PAL loader.
 */
function init() {
  const videoElement = document.getElementById('placeholder-video');
  videoElement.addEventListener('mousedown', onVideoTouch);
  videoElement.addEventListener('touchstart', onVideoTouch);
  videoElement.addEventListener('play', function() {
    if (!playbackStarted) {
      sendPlaybackStart();
      playbackStarted = true;
    }
  });
  videoElement.addEventListener('ended', sendPlaybackEnd);
  videoElement.addEventListener('error', function() {
    // Handle video error.
    sendPlaybackEnd();
  });

  // The default value for `allowStorage` is false, but can be
  // changed once the appropriate consent has been gathered.
  const consentSettings = new goog.ctv.pal.ConsentSettings();
  consentSettings.allowStorage = getConsentToStorage();

  nonceLoader = new goog.ctv.pal.NonceLoader(consentSettings);

  generateNonce();
}

/**
 * Generates a nonce with sample arguments and logs it to the console.
 *
 * The NonceRequest parameters set here are example parameters.
 * You should set your parameters based on your own app characteristics.
 */
function generateNonce() {
  const request = new goog.ctv.pal.NonceRequest();
  request.adWillAutoPlay = true;
  request.adWillPlayMuted = false;
  request.continuousPlayback = false;
  request.descriptionUrl = 'https://example.com';
  request.iconsSupported = true;
  request.playerType = 'Sample Player Type';
  request.playerVersion = '1.0';
  request.ppid = 'Sample PPID';
  request.sessionId = 'Sample SID';
  // Player support for VPAID 2.0, OMID 1.0, and SIMID 1.1
  request.supportedApiFrameworks = '2,7,9';
  request.url = 'https://developers.google.com/ad-manager/pal/ctv';
  request.videoHeight = 480;
  request.videoWidth = 640;

  managerPromise = nonceLoader.loadNonceManager(request);
  managerPromise
      .then(function(manager) {
        nonceManager = manager;
      })
      .catch((error) => {
        // Handle nonce generating error.
      });
}

window.addEventListener("load", function(event) {
  init();
});

نون خود را به درخواست آگهی ضمیمه کنید

برای استفاده از nonce تولید شده، قبل از درخواست تبلیغات، تگ تبلیغات خود را با یک پارامتر givn و مقدار 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 https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/tags
   */
  const DEFAULT_AD_TAG = "Your ad tag";

  ...

  managerPromise = nonceLoader.loadNonceManager(request);
  managerPromise
      .then(function(manager) {
        nonceManager = manager;
        
        // Append the nonce to the ad tag URL.
        makeAdRequest(DEFAULT_AD_TAG + "&givn=" + nonceString);
        
      })

رویدادهای پخش را پیگیری کنید

در نهایت، شما نیاز به پیاده سازی رویدادهای مختلف برای پخش کننده خود دارید. برای اهداف آزمایشی، می‌توانید این موارد را به رویدادهای کلیک دکمه متصل کنید، اما در یک پیاده‌سازی واقعی، این موارد توسط رویدادهای پخش‌کننده مناسب ایجاد می‌شوند:

/**
 * Informs PAL that an ad click has occurred. How this function is
 * called will vary depending on your ad implementation.
 */
function sendAdClick() {
  if (nonceManager) {
    nonceManager.sendAdClick();
  }
}

/**
 * Handles the user touching on the video element, passing it to PAL.
 * @param {!TouchEvent|!MouseEvent} touchEvent
 */
function onVideoTouch(touchEvent) {
  if (nonceManager) {
    nonceManager.sendAdTouch(touchEvent);
  }
}

/** Informs PAL that playback has started. */
function sendPlaybackStart() {
  if (nonceManager) {
    nonceManager.sendPlaybackStart();
  }
}

/** Informs PAL that playback has ended. */
function sendPlaybackEnd() {
  if (nonceManager) {
    nonceManager.sendPlaybackEnd();
  }
}

در اجرای شما، sendPlaybackStart باید پس از شروع جلسه پخش ویدیو فراخوانی شود. sendPlaybackEnd باید پس از پایان جلسه پخش ویدیو فراخوانی شود. sendAdClick باید هر بار که بیننده روی تبلیغ کلیک می کند فراخوانی شود. sendAdTouch باید در هر تعامل لمسی با پخش کننده فراخوانی شود.

(اختیاری) سیگنال های Google Ad Manager را از طریق سرورهای تبلیغاتی شخص ثالث ارسال کنید

درخواست سرور آگهی شخص ثالث برای Ad Manager را پیکربندی کنید.

سرور تبلیغات شخص ثالث خود را پیکربندی کنید تا nonce را در درخواست سرور به Ad Manager لحاظ کند. در اینجا نمونه ای از تگ تبلیغاتی است که در داخل سرور تبلیغات شخص ثالث پیکربندی شده است:

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

برای جزئیات بیشتر، راهنمای پیاده سازی سمت سرور Google Ad Manager را ببینید.

Ad Manager برای شناسایی مقدار nonce به دنبال givn= می گردد. سرور تبلیغات شخص ثالث باید از مقداری ماکرو خاص مانند %%custom_key_for_google_nonce%% پشتیبانی کند و آن را با پارامتر درخواست nonce که در مرحله قبل ارائه کردید جایگزین کند. اطلاعات بیشتر در مورد نحوه انجام این کار باید در مستندات سرور تبلیغات شخص ثالث موجود باشد.

همین! اکنون باید پارامتر nonce را از PAL SDK از طریق سرورهای واسطه خود و سپس به Google Ad Manager منتشر کنید. این امکان کسب درآمد بهتر از طریق Google Ad Manager را فراهم می کند.