ברוב המקרים שבהם משתמשים ב-IMA SDK, צריך לנהל רק בקשה אחת להצגת מודעה בכל פעם. עם זאת, יש מקרים מיוחדים שבהם צריך לשלוח כמה בקשות בו-זמנית, למשל הטמעה של טעינה מראש של נתוני מודעות לפני שהמשתמש בוחר סרטון. בקשות להצגת מודעות מתבצעות באופן אסינכרוני, ולכן יכול להיות שייראה לכם קשה לוודא שמנהל המודעות הנכון משויך להקשר הנכון.
כדי לפשט את התהליך של הבחנה בין כמה פלטפורמות לניהול מודעות, IMA SDK ל-Android מאפשר לבעלי אפליקציות להעביר כל ערך או אובייקט לשדה UserRequestContext של כל בקשה להצגת מודעה. אחר כך אפשר לאחזר את הערך או האובייקט הזה ב-handler של AdsManagerLoadedEvent באמצעות המתודה getUserRequestContext().
דוגמה
...
adsLoader = sdkFactory.createAdsLoader(context, imaSdkSettings, adDisplayContainer);
Map<String, String> userContextA = new HashMap<String, String>();
Map<String, String> userContextB = new HashMap<String, String>();
userContextA.put("id", "Request A");
userContextB.put("id", "Request B");
userContextA.put("element", "videoElementA");
userContextB.put("element", "videoElementB");
adRequestA.setUserRequestContext(userContextA);
adRequestB.setUserRequestContext(userContextB);
adsLoader.addAdsLoadedListener(
new AdsLoader.AdsLoadedListener() {
@Override
public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) {
Map<String, String> context = adsManagerLoadedEvent.getUserRequestContext();
adsManager = adsManagerLoadedEvent.getAdsManager();
Log.i("ImaExample", "Successfully loaded ID: " + context.get("id"));
}
});
adsLoader.addAdErrorListener(
new AdErrorEvent.AdErrorListener() {
@Override
public void onAdError(AdErrorEvent adErrorEvent) {
Map<String, String> context = adErrorEvent.getUserRequestContext();
Log.i("ImaExample", "Error with AdRequest. ID: " + context.get("id"));
Log.i("ImaExample", "Ad Error: " + adErrorEvent.getError().getMessage());
}
});
adsLoader.requestAds(adRequestA);
adsLoader.requestAds(adRequestB);
...