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

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

اختيار حلّ "الإعلانات الديناميكية أثناء عرض الفيديو" الذي يهمّك

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

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

نظرة عامة حول عرض "حزمة إعلانات" باستخدام ميزة "إدراج الإعلان الديناميكي" في "إعلانات الوسائط التفاعلية"

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

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

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

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

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

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

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

في ما يلي الثوابت الخاصة بطلبات بث حزمة الإعلانات التي يجب إضافتها:

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

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

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