الإعداد باستخدام ميزة "إدراج الإعلان الديناميكي" (DAI) في خدمة Pod

اختيار النظام الأساسي: HTML5 Android iOS tvOS Cast Roku

يوضّح هذا الدليل كيفية تشغيل بث مباشر أو بث فيديو عند الطلب (VOD) باستخدام ميزة "عرض مجموعات إعلانية متسلسلة" في IMA DAI من خلال حزمة تطوير البرامج (SDK) الخاصة بـ IMA DAI لنظام التشغيل tvOS مع مشغّل الفيديو. لعرض نموذج دمج مكتمل أو اتّباعه، نزِّل نموذج تطبيق "عرض الإعلانات المجمّعة" (Obj C أو Swift).

نظرة عامة على عرض مجموعات إعلانية متسلسلة في IMA DAI

يتضمن تنفيذ ميزة "عرض الإعلانات في مجموعات" باستخدام حزمة تطوير البرامج (SDK) لتقنية IMA DAI لنظام التشغيل tvOS عنصرَين رئيسيَّين:

  • StreamRequest: عنصر يحدّد طلب بث إلى خوادم Google الإعلانية يجب إنشاؤها باستخدام IMAPodStreamRequest أو IMAPodVODStreamRequest لتفعيل ميزة "عرض الإعلانات في مجموعات". تتطلّب كلتا الطريقتَين رمز شبكة، وتتطلّب IMAPodStreamRequest أيضًا مفتاح مادة عرض مخصّص. يُعدّ مفتاح واجهة برمجة التطبيقات اختياريًا.

  • ‫IMAStreamManager: عنصر يعالج الاتصال بين بث الفيديو وحزمة تطوير البرامج (SDK) لتقنية "إدراج الإعلان الديناميكي" في "إعلانات الوسائط التفاعلية" (IMA DAI)، مثل تنشيط إشعارات التتبّع و إعادة توجيه أحداث البث إلى الناشر.

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

قبل البدء، تحتاج إلى ما يلي:

  • الإصدار 13 من Xcode أو إصدار أحدث
  • طريقة تثبيت حزمة تطوير البرامج للإعلانات التفاعلية (IMA SDK):
  • تطبيق tvOS تم إعداده مسبقًا باستخدام حزمة تطوير البرامج (SDK) لتقنية IMA DAI لتشغيل فيديوهات تتضمّن إعلانات IMA DAI. إذا لم يكن لديك تطبيق من هذا النوع، ننصحك باستخدام tvOS DAI BasicExample كنقطة بداية. يحتوي BasicExample على قاعدة الرموز البرمجية المُشار إليها في هذا الدليل. لمزيد من المعلومات حول كيفية تنفيذ حزمة تطوير البرامج (SDK) لتقنية IMA DAI، يُرجى الاطّلاع على دليل البدء السريع.

إعداد متغيّرات "عرض الإعلانات المتعدّدة"

يجب إجراء جميع التغييرات المتعلّقة بعرض الإعلانات في مجموعات في ViewController.swift في Swift أو ViewController.m في Objective-C. تستخدم المقتطفات في هذا الدليل لغة Swift تلقائيًا. الخطوة الأولى هي تعديل المتغيّرات الثابتة.

أضِف الثوابت التالية لطلب بث مجموعة إعلانات متسلسلة:

  • STREAM_URL (يُستخدَم فقط لأحداث البث المباشر): عنوان URL الخاص ببث الفيديو الذي يوفّره مُعدِّل ملفات البيان أو الشريك الخارجي الذي يستخدم ميزة "عرض الإعلانات في مجموعات". يجب أن يتطلب منك إدخال معرّف البث الذي توفّره حزمة تطوير البرامج (SDK) لتقنية IMA DAI قبل تقديم طلب. في هذه الحالة، يتضمّن عنوان URL للبث عنصرًا نائبًا، "[[STREAMID]]"، والذي تستبدله بمعرّف البث قبل تقديم طلب.
  • ‫NETWORK_CODE: رمز الشبكة لحسابك على "إدارة إعلانات Google‏ 360"
  • ‫CUSTOM_ASSET_KEY (يُستخدَم فقط لأحداث البث المباشر): مفتاح مادة العرض المخصّصة الذي يحدّد حدث عرض مجموعة الإعلانات المتتالية في "مدير إعلانات Google‏ 360". يمكن لمُعدِّل ملفات البيان أو شريك عرض مجموعات الإعلانات المتتالية التابع لجهة خارجية إنشاء هذا الملف.
  • API_KEY (يُستخدَم فقط لأحداث البث المباشر): مفتاح واجهة برمجة تطبيقات اختياري يمكن أن يكون مطلوبًا لاسترداد معرّف بث من حزمة تطوير البرامج (SDK) في IMA DAI.

غيِّر قسم المتغيّرات في المثال ليتطابق مع ما يلي:

...
class ViewController:
  UIViewController,
  IMAAdsLoaderDelegate,
  IMAStreamManagerDelegate,
  AVPlayerViewControllerDelegate
{
  static let streamUrl = ""
  static let networkCode = ""
  static let customAssetKey = ""
  static let APIKey = ""
  static let backupStreamURLString = ""

  var adsLoader: IMAAdsLoader?
  ...

إنشاء طلب بث مباشر أو بث فيديو عند الطلب (VOD)

عرض مجموعة إعلانات البث المباشر

عدِّل طريقة requestStream لإنشاء طلب بث مباشر من خلال إنشاء مثيل IMAPodStreamRequest.

  ...

  func requestStream() {
    guard let playerViewController = self.playerViewController else return
    guard let adContainerView = self.adContainerView else return
    guard let adsLoader = self.adsLoader else return

    self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
    adDisplayContainer = IMAAdDisplayContainer(
      adContainer: adContainerView, viewController: self)

    // Create a podserving stream request.
    request = IMAPodStreamRequest(
      networkCode: self.networkCode,
      customAssetKey: self.customAssetKey,
      adDisplayContainer: adDisplayContainer,
      videoDisplay: self.videoDisplay,
      userContext: nil)

    adsLoader.requestStream(with: request)
  }

  ...

عرض مجموعات إعلانية في بث فيديو عند الطلب

عدِّل طريقة requestStream لإنشاء طلب بث مجموعة إعلانات فيديو عند الطلب من خلال إنشاء مثيل IMAPodVODStreamRequest.

  ...

  func requestStream() {
    guard let playerViewController = self.playerViewController else return
    guard let adContainerView = self.adContainerView else return
    guard let adsLoader = self.adsLoader else return

    self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
    adDisplayContainer = IMAAdDisplayContainer(
      adContainer: adContainerView, viewController: self)

    // Create a podserving stream request.
    request = IMAPodVODStreamRequest(
      networkCode: self.networkCode,
      adDisplayContainer: adDisplayContainer,
      videoDisplay: self.videoDisplay,
      userContext: nil)

    adsLoader.requestStream(with: request)
  }

  ...

تعديل عنوان URL للبث وضبطه

عرض مجموعة إعلانات البث المباشر

عدِّل طرق IMAAdsLoaderDelegate باستخدام streamManager.streamId للحصول على معرّف مصدر البيانات. بعد ذلك، أدخِل معرّف مصدر البيانات في STREAM_URL، مع استبدال "[[STREAMID]]". بعد إجراء هذا التغيير، اضبط عنوان URL الجديد للبث باستخدام videoDisplay.loadStream().

  ...

  // MARK: - IMAAdsLoaderDelegate
  func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
    let streamManager = adsLoadedData.streamManager
    let streamId = streamManager.streamId
    let urlString = streamUrl.replacingOccurrences(of: "[[STREAMID]]", with: streamId)
    let loadedStreamUrl = URL(string:urlString)
    self.videoDisplay.loadStream(loadedStreamUrl, subtitles:@[])
    self.videoDisplay.play()
    streamManager.delegate = self
    streamManager.initialize(with: nil)
    self.streamManager = streamManager
  }

  ...

عرض مجموعات إعلانية في بث فيديو عند الطلب

عدِّل طرق IMAAdsLoaderDelegate باستخدام streamManager.streamId للحصول على معرّف مصدر البيانات. بعد ذلك، اطلب عنوان URL للبث من شريك تكنولوجيا الفيديو (VTP) واستدعِ IMAStreamManager.loadThirdPartyStream() لكي يتم تحميل عنوان URL للبث وأي ترجمات يعرضها شريك تكنولوجيا الفيديو من خلال حزمة تطوير البرامج لإعلانات الوسائط التفاعلية (IMA).

  ...

  // MARK: - IMAAdsLoaderDelegate
  func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
    let streamManager = adsLoadedData.streamManager
    let streamId = streamManager.streamId
    // 'vtpInterface' is a place holder for your own video technology partner
    // (VTP) API calls.
    let streamUrl = vtpInterface.requestStreamURL(streamID)
    self.streamManager.loadThirdPartyStream(streamUrl, streamSubtitles:@[])
    streamManager.delegate = self
    streamManager.initialize(with: nil)
    self.streamManager = streamManager
  }

حذف مواد عرض IMA DAI

عند الانتهاء بنجاح من طلب الإعلانات وعرضها في بث عرض الإعلانات المتعدّدة باستخدام حزمة تطوير البرامج (SDK) لتقنية IMA DAI، ننصحك بإزالة أي موارد بعد اكتمال جلسة عرض الإعلانات المتعدّدة. يمكنك استدعاء IMAStreamManager.destroy() لإيقاف تشغيل البث وإيقاف تتبُّع الإعلانات بالكامل وإصدار جميع مواد عرض البث التي تم تحميلها.

للاطّلاع على أمثلة أخرى على استخدام حزمة تطوير البرامج (SDK) لنظام التشغيل tvOS، يمكنك الاطّلاع على النماذج على GitHub.