处理多个广告请求

请选择平台HTML5 Android iOS tvOS

在大多数情况下,使用 IMA SDK 时只需一次管理一个广告请求。不过,在某些极端情况下(例如在用户选择视频之前预加载广告数据),可能需要同时发出多个请求。由于广告请求是异步发出的,因此确保将正确的广告管理器与正确的上下文相关联可能是一项艰巨的任务。

为了简化区分多个广告管理器的过程,IMA SDK for Android 允许发布商将任何值或对象传递给任何广告请求的 UserRequestContext 字段。然后,可以使用方法 getUserRequestContext()AdsManagerLoadedEvent 处理程序中检索此值或对象。

示例

...

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

...