В большинстве случаев при использовании IMA SDK нужно управлять только одним запросом объявления. Однако в некоторых случаях, например при предварительной загрузке данных объявлений до того, как пользователь выберет видео, может потребоваться несколько одновременных запросов. Поскольку запросы объявлений выполняются асинхронно, может показаться, что связать нужный менеджер объявлений с правильным контекстом – сложная задача.
Чтобы упростить процесс различения нескольких менеджеров рекламы, IMA SDK для Android позволяет издателям передавать любое значение или объект в поле UserRequestContext любого запроса объявления. Это значение или объект можно получить в обработчике 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);
...