معالجة طلبات الإعلانات المتعددة باستخدام UserContext

لا تتطلب معظم استخدامات "حزمة تطوير البرامج لإعلانات الوسائط التفاعلية" سوى إدارة طلب إعلان واحد في الوقت نفسه. مع ذلك، قد تتطلب بعض عمليات التنفيذ في الحالات الحدّية، مثل التحميل المُسبق لبيانات الإعلان قبل أن يختار المستخدم فيديو، تقديم طلبات متزامنة متعددة. بما أنّ طلبات الإعلانات يتم إجراؤها بشكل غير متزامن، قد يبدو أنّ ضمان ربط مدير الإعلانات المناسب بالسياق الصحيح هو مهمة شاقّة.

لتبسيط عملية التمييز بين مدراء الإعلانات المتعدّدين، تسمح حزمة تطوير البرامج لإعلانات الوسائط التفاعلية لنظام التشغيل tvOS للناشرين بتمرير أي قيمة أو عنصر إلى حقل UserContext في أي طلب إعلان. ويمكن بعد ذلك استرداد هذه القيمة أو هذا العنصر في الدالة المفوَّضة AdsLoader:AdsLoadedWithData، وذلك من خلال سمة userContext الخاصة بالعنصر IMAAdsLoadedData.

مثال

...
  adsLoader = IMAAdsLoader(settings: nil)
  adsLoader.delegate = self

  let userContextA = {id: "Request A", element: videoElementA}
  let userContextB = {id: "Request B", element: videoElementB}
  let requestA = IMAAdsRequest(
        adTagUrl: ViewController.AdTagURLString,
        adDisplayContainer: adDisplayContainer,
        contentPlayhead: contentPlayhead,
        userContext: userContextA)
  let requestB = IMAAdsRequest(
        adTagUrl: ViewController.AdTagURLString,
        adDisplayContainer: adDisplayContainer,
        contentPlayhead: contentPlayhead,
        userContext: userContextB)
  adsLoader.requestAds(with: requestA)
  adsLoader.requestAds(with: requestB)

...

// MARK: - IMAAdsLoaderDelegate

func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
  let userContext = adsLoadedData.userContext
  print("Loaded ads for ID: " + userContext.id)
  adsManager = adsLoadedData.adsManager
  adsManager.initialize(with: nil)
}

func adsLoader(_ loader: IMAAdsLoader!, failedWith adErrorData: IMAAdLoadingErrorData!) {
  let userContext = adsLoadingErrorData.userContext
  print("Error loading ads for ID: " + userContext.id)
}

...