معالجة طلبات إعلانات متعددة باستخدام 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)
}

...