Większość zastosowań pakietu IMA SDK wymaga zarządzania tylko jednym żądaniem reklamy naraz. Jednak niektóre implementacje skrajne, takie jak wstępne wczytywanie danych reklam, zanim użytkownik wybierze film, mogą wymagać wykonania kilku żądań równoczesnych. Żądania reklam są wysyłane asynchronicznie, dlatego powiązanie odpowiedniego menedżera reklam z odpowiednim kontekstem może wydawać się trudnym zadaniem.
Aby uprościć proces rozróżniania wielu menedżerów reklam, pakiet IMA SDK na Androida umożliwia wydawcom przekazywanie dowolnej wartości lub dowolnego obiektu do pola UserRequestContext w dowolnym żądaniu reklamy. Wartość lub obiekt można następnie pobrać w obiekcie AdsManagerLoadedEvent za pomocą metody getUserRequestContext().
Przykład
...
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);
...