UserContext की मदद से, कई विज्ञापन अनुरोधों को मैनेज करना

IMA SDK के ज़्यादातर इस्तेमाल के लिए, एक समय में सिर्फ़ एक विज्ञापन अनुरोध को मैनेज करना ज़रूरी होता है. हालांकि, कुछ ऐसे मामलों में एक साथ कई अनुरोध करने पड़ सकते हैं. जैसे, उपयोगकर्ता के वीडियो चुनने से पहले विज्ञापन डेटा को पहले से लोड करना. विज्ञापन अनुरोध एसिंक्रोनस रूप से किए जाते हैं, इसलिए यह पक्का करना मुश्किल काम हो सकता है कि सही विज्ञापन मैनेजर का संबंध सही कॉन्टेक्स्ट से जुड़ा हो.

एक से ज़्यादा विज्ञापन मैनेजर के बीच अंतर करने की प्रक्रिया को आसान बनाने के लिए, tvOS के लिए IMA SDK की मदद से पब्लिशर किसी भी विज्ञापन अनुरोध के UserContext फ़ील्ड में कोई भी वैल्यू या ऑब्जेक्ट पास कर सकते हैं. इसके बाद, इस वैल्यू या ऑब्जेक्ट को IMAAdsLoadedData ऑब्जेक्ट के userContext एट्रिब्यूट की मदद से, AdsLoader:AdsLoadedWithData डेलिगेट फ़ंक्शन में वापस लाया जा सकता है.

उदाहरण

...
  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)
}

...