لا تتطلّب معظم استخدامات "حزمة تطوير البرامج لإعلانات الوسائط التفاعلية" سوى إدارة طلب إعلان واحد في كل مرة. ومع ذلك، قد تتطلّب بعض حالات الاستخدام، مثل التحميل المُسبَق لبيانات الإعلان قبل أن يختار المستخدم فيديو، تقديم طلبات متزامنة متعددة. بما أنّ طلبات الإعلانات يتم إجراؤها بشكل غير متزامن، قد يبدو ضمان ربط "مدير الإعلانات" المناسب بالسياق الصحيح مهمة شاقة.
لتبسيط عملية التمييز بين العديد من مدراء الإعلانات، تتيح حزمة تطوير البرامج للإعلانات التفاعلية على 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)
}
...