Mehrere Anzeigenanfragen mit UserContext verarbeiten

In den meisten Fällen muss nur eine einzige Anzeigenanfrage gleichzeitig verwaltet werden. Bei Grenzfallimplementierungen wie dem Vorabladen von Anzeigendaten, bevor der Nutzer ein Video auswählt, können jedoch mehrere Anfragen gleichzeitig erforderlich sein. Da Anzeigenanfragen asynchron erfolgen, kann es eine schwierige Aufgabe sein, sicherzustellen, dass der richtige Ad Manager mit dem richtigen Kontext verknüpft wird.

Um die Unterscheidung mehrerer Ad Manager zu vereinfachen, können Publisher mit dem IMA SDK für Android beliebige Werte oder Objekte an das Feld UserRequestContext einer Anzeigenanfrage übergeben. Dieser Wert bzw. dieses Objekt kann dann im Handler AdsManagerLoadedEvent mithilfe der Methode getUserRequestContext() abgerufen werden.

Beispiel

...

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);

...