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