Obsługa wielu żądań reklam za pomocą UserContext

Większość przypadków użycia pakietu IMA SDK wymaga tylko zarządzania jednym żądaniem reklamy naraz. Jednak niektóre implementacje skrajne, takie jak wstępne wczytywanie danych reklam przed wybraniem filmu przez użytkownika, mogą wymagać wysyłania wielu żądań równoczesnych. Żądania reklamy są przesyłane asynchronicznie, więc dopilnowanie, aby odpowiedni menedżer reklam był powiązany z właściwym kontekstem, może wydawać się trudnym zadaniem.

Aby uprościć rozróżnianie wielu menedżerów reklam, pakiet IMA SDK na Androida umożliwia wydawcom przekazywanie dowolnej wartości lub obiektu do pola UserRequestContext w dowolnym żądaniu reklamy. Tę wartość lub obiekt można następnie pobrać z modułu obsługi 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);

...