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