إعداد حزمة تطوير البرامج لإعلانات الوسائط التفاعلية لعرض الإعلانات أثناء التشغيل

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

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

اختيار حلّ "إدخال الإعلانات الديناميكي" الذي يهمّك

إدراج إعلان ديناميكي في حزمة

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

نظرة عامة على عرض "مجموعات إعلانات" في "إدراج الإعلان الديناميكي" من "الإعلانات التفاعلية"

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

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

  • IMAStreamManager: عنصر يعالج التواصل بين بث الفيديو و"حزمة تطوير البرامج للإعلانات الديناميكية أثناء عرض الفيديو" من "إعلانات الوسائط التفاعلية"، مثل إرسال طلبات ping للتتبّع وإعادة توجيه أحداث البث إلى الناشر.

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

قبل البدء، يجب أن يتوفّر لديك ما يلي:

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

إعداد متغيّرات "عرض الإعلانات ضمن البودكاست"

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

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

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

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

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

  var adsLoader: IMAAdsLoader?
  ...

إنشاء طلب بث مباشر أو بث عند الطلب

عرض الإعلانات أثناء البث المباشر

عدِّل طريقة 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() لكي تحمّل IMA عنوان URL للبث وأي ترجمات وشرح للأصوات يعرضها شريكك في تكنولوجيا الفيديو.

  ...

  // 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

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

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