대부분의 IMA SDK를 사용하면 한 번에 하나의 광고 요청만 관리할 수 있습니다. 하지만 사용자가 동영상을 선택하기 전에 광고 데이터를 미리 로드하는 등 일부 극단적인 사례의 구현에서는 여러 개의 동시 요청을 실행해야 할 수 있습니다. 광고 요청은 비동기식으로 이루어지기 때문에 적절한 Ad Manager를 올바른 컨텍스트와 연결하는 것은 어려운 일처럼 보일 수 있습니다.
여러 광고 관리자를 구분하는 과정을 단순화하기 위해 게시자는 Android용 IMA SDK를 사용하여 모든 광고 요청의 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);
...