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