La plupart des utilisations du SDK IMA ne nécessitent que la gestion d'une seule demande d'annonce à la fois. Toutefois, certaines implémentations de cas particuliers, comme le préchargement des données publicitaires avant que l'utilisateur ne sélectionne une vidéo, peuvent nécessiter d'envoyer plusieurs requêtes simultanées. Étant donné que les demandes d'annonces sont envoyées de manière asynchrone, s'assurer que le bon gestionnaire d'annonces est associé au bon contexte peut sembler une tâche ardue.
Pour simplifier le processus de différenciation de plusieurs gestionnaires d'annonces, le SDK IMA pour Android permet aux éditeurs de transmettre n'importe quelle valeur ou n'importe quel objet au champ UserRequestContext de toute demande d'annonce. Cette valeur ou cet objet peuvent ensuite être récupérés dans le gestionnaire AdsManagerLoadedEvent, à l'aide de la méthode getUserRequestContext().
Exemple
...
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);
...