개요
네이티브 플레이어 SDK가 클라이언트 측 매크로 교체를 수행하지 않더라도 광고 타겟팅을 위해 쿼리 문자열 매개 변수를 수동으로 추가 할 수 있습니다. 이는 클라이언트 측 또는 서버 측 광고에 대해 수행 할 수 있습니다.
URL 매개 변수에 대한 자세한 내용은광고 변수 Video Cloud SSAI Ad Config API 문서의 섹션.
클라이언트 측 광고
VMAP URL에 추가 된 URL 매개 변수를 통해 사용자 지정 값을 제공 할 수 있습니다.
안드로이드 구현
광고 타겟팅 키 / 값 쌍은 다음 두 가지 방법으로 광고 태그 URL에 추가 할 수 있습니다.
-
키 / 값 쌍을 광고 태그 URL에 직접 추가합니다. Google IMA를 사용하면 광고 타겟팅 키 / 값 쌍을
cust_params
매개 변수. 자세한 내용은 Google의마스터 동영상 광고 태그에 키-값 추가문서. -
다음을 사용하여 광고 태그 URL에 값 맵을 적용합니다.
updateAdTargetingValues
방법GoogleIMAComponent
.
두 방법 모두 키 / 값 쌍이ADS_REQUEST_FOR_VIDEO
이벤트 리스너. 아래 코드 샘플은 다음을 사용하여 키 / 값 쌍을 추가합니다. updateAdTargetingValues
방법GoogleIMAComponent
.
다음은 키 / 값 쌍의 맵을 만드는 코드입니다. CUSTOM_FIELDS
의 재산Video
개체 속성ADS_REQUEST_FOR_VIDEO
행사:
Video video = (Video) event.getProperties().get(Event.VIDEO);
if (video != null) {
Map<String, String> customFieldsMap = (HashMap<String, String>) video.getProperties().get(Video.Fields.CUSTOM_FIELDS);
}
다음은 전체 코드 샘플입니다. ADS_REQUEST_FOR_VIDEO
Google IMA 플러그인의 설정 방법에 추가되는 이벤트 리스너 :
eventEmitter.on(GoogleIMAEventType.ADS_REQUEST_FOR_VIDEO, event -> {
// Create a container object for the ads to be presented.
AdDisplayContainer container = sdkFactory.createAdDisplayContainer();
container.setPlayer(googleIMAComponent.getVideoAdPlayer());
container.setAdContainer(brightcoveVideoView);
// Build an ads request object and point it to the ad
// display container created above.
AdsRequest adsRequest = sdkFactory.createAdsRequest();
// Set Ad Targeting values, using the Video object's Custom Fields
// (if they are present; if they are not present, use default values instead)
Video video = (Video) event.getProperties().get(Event.VIDEO);
if (video != null) {
Map<String, String> customFieldsMap = (HashMap<String, String>) video.getProperties().get(Video.Fields.CUSTOM_FIELDS);
if (customFieldsMap != null) {
googleIMAComponent.updateAdTargetingValues(customFieldsMap);
}
}
adsRequest.setAdTagUrl(adRulesURL);
adsRequest.setAdDisplayContainer(container);
ArrayList<AdsRequest> adsRequests = new ArrayList<AdsRequest>(1);
adsRequests.add(adsRequest);
// Respond to the event with the new ad requests.
event.properties.put(GoogleIMAComponent.ADS_REQUESTS, adsRequests);
eventEmitter.respond(event);
});
iOS 구현
iOS 용 네이티브 SDK로 광고 쿼리 매개 변수를 추가하려면 다음 단계를 따르세요.
-
Brightcove Native SDK를 사용하여 IMA 광고를위한 클라이언트 측 코드 샘플 중 하나로 시작합니다.
-
IMA 플러그인을 호출하기 전에 URL 쿼리 매개 변수를 VMAP URL에 추가합니다. 다음 방법 전에 수행 할 수 있습니다.
for video in mutablePlaylist.videos { if let _video = video as? BCOVMutableVideo { _video.properties[kBCOVIMAAdTag] = IMAConfig.VMAPResponseAdTag updatedVideos.append(_video) } }
서버 측 광고
VMAP URL에 추가 된 URL 매개 변수를 통해 사용자 정의 값을 제공하려면 다음 단계를 따르십시오.
-
SSAI의 광고 구성 ID를 사용하여 브라이트코브 카탈로그 (재생 API) 에서 비디오 객체를 검색합니다. 다음을 사용하여 광고 구성을 만드는 방법에 대해 알아보십시오. 네이티브 플레이어 SDK로 서버 측 광고 구현문서.
샘플 광고 구성은 다음과 같습니다.
{ "name": "SSAI VMAP Ad Server", "vmap_response_namespace": "bc", "config_id": "your ad config Id", "account_id": "1752604059001", "created_timestamp": "2017-10-24T20:21:55.106488973Z", "updated_timestamp": "2017-10-26T14:26:22.161791419Z", "ad_config": { "enable_ads": true, "expected_ad_response": "dfp_vmap", "proxy_beacons_enabled": false, "template_url": { "template": "https://solutions.brightcove.com/bcls/brightcove-player/vmap/simple-vmap.xml" } } }
-
Playback API 호출의 jsonResponse에서 비디오 개체의 소스를 검사합니다. 각 소스 개체에는 VMAP 속성과 VMAP URL이 포함됩니다. VMAP URL을 선택하고 추출합니다.
http://ssaiplayback.prod.boltdns.net/playback/once/v1/vmap/hls/v3/clear/3981276734001/ b871a6b8-4b3e-4787-b176-aed923287d5a/477b1308-fc18-47a6-bb99-6cb9e2ff2040/ content.vmap?bc_token=XXX
-
광고 URL이 다음과 같다고 가정 해 보겠습니다.
https://myad.com/ads?rule=&id=
광고 URL에 위의 광고 매크로가있는 경우 적절한 값을 사용하여 이러한 쿼리 매개 변수를 VMAP URL에 추가합니다.
-
VMAP URL에 쿼리 매개 변수를 추가합니다. 이 예에서
광고 URL의 매크로가
discos-enabled
, 그리고매크로는 동영상 ID 값으로 대체됩니다.
http://ssaiplayback.prod.boltdns.net/playback/once/v1/vmap/hls/v3/clear/3981276734001/ b871a6b8-4b3e-4787-b176-aed923287d5a/477b1308-fc18-47a6-bb99-6cb9e2ff2040/ content.vmap?bc_token=XXX&rule=discos-enabled&video_id=5625751316001
- SSAI 플러그인으로 비디오를 처리합니다.
-
개발 세부 사항은 다음을 참조하십시오.
안드로이드 구현
재생 API 응답에서 적절한 VMAP 소스 URL을 추출하고 쿼리 매개 변수를 추가할 수 있습니다. 이렇게 하려면 다음과이 같이 하십시오.
- SSAI의 광고 구성 ID를 사용하여 브라이트코브 카탈로그 (재생 API) 에서 비디오 객체를 검색합니다. 자세한 내용은 Android 구현네이티브 플레이어 SDK를 사용하여 서버 측 광고 구현 문서의 섹션.
-
에서
Catalog
'에스onVideo
콜백 메서드에서 적절한 VMAP URL을 선택하고 추출합니다.Video
개체의 기본 소스,SSAISourceSelector
. 반환 된 소스 개체에는 VMAP URL 속성이 있어야합니다.SSAISourceSelector sourceSelector = new SSAISourceSelector(); Source source = sourceSelector.selectSource(video); String vmapUrl = source.getStringProperty(Source.Fields.VMAP);
-
VMAP URL에 쿼리 매개 변수를 추가합니다.
private String configureVmapUrlWithCustomParams(String vmapUrl, Map<String, String> vmapUrlParams) { Uri.Builder vmapBuilder = Uri.parse(vmapUrl).buildUpon(); for (Map.Entry<String, String> entry : vmapUrlParams.entrySet()) { vmapBuilder.appendQueryParameter(entry.getKey(), entry.getValue()); } return vmapBuilder.toString(); }
-
업데이트 처리
Video
다음과 같이 SSAI 플러그인이있는 개체 :plugin.processVideo(video);
다음은 전체 코드 샘플입니다.
HttpRequestConfig httpRequestConfig = new HttpRequestConfig.Builder()
.addQueryParameter(AD_CONFIG_ID_QUERY_PARAM_KEY, AD_CONFIG_ID_QUERY_PARAM_VALUE)
.build();
Map<String, String> vmapUrlParams = new HashMap<>();
vmapUrlParams.put("section", "sports");
vmapUrlParams.put("multi", "baseball,tennis");
catalog.findVideoByID(getString(R.string.video_id), httpRequestConfig, new VideoListener() {
@Override public void onVideo(Video video) {
// The Video Sources will have a VMAP url which will be processed by the SSAI plugin,
// If there is not a VMAP url, or if there are any requesting or parsing error,
// an EventType.ERROR event will be emitted.
try{
SSAISourceSelector sourceSelector = new SSAISourceSelector();
Source source = sourceSelector.selectSource(video);
String vmapUrl = source.getStringProperty(Source.Fields.VMAP);
source.getProperties().put(Source.Fields.VMAP, configureVmapUrlWithCustomParams(vmapUrl, vmapUrlParams)); plugin.processVideo(video);
}
catch (NoSourceFoundException ns) {
Log.e(TAG, "No usable source was found - " + ns.getMessage());
}
}
});
private String configureVmapUrlWithCustomParams(String vmapUrl, Map<String, String> vmapUrlParams) {
Uri.Builder vmapBuilder = Uri.parse(vmapUrl).buildUpon();
for (Map.Entry<String, String> entry : vmapUrlParams.entrySet()) {
vmapBuilder.appendQueryParameter(entry.getKey(), entry.getValue());
}
return vmapBuilder.toString();
}
iOS 구현
재생 API 응답에서 적절한 VMAP 소스 URL을 추출하고 쿼리 매개 변수를 추가할 수 있습니다. 이렇게 하려면 다음과이 같이 하십시오.
- SSAI의 광고 구성 ID를 사용하여 브라이트코브 카탈로그 (재생 API) 에서 비디오 객체를 검색합니다. 자세한 내용은 iOS 구현네이티브 플레이어 SDK를 사용하여 서버 측 광고 구현 문서의 섹션.
-
비디오 개체에서 적절한 매니페스트 또는 VMAP URL을 선택하고 추출합니다. 재생 서비스 응답에서 jsonResponse (NSDictionary)에는 BCOV 비디오 VMAP 문서에 대한 URL을 보유하는 소스를 포함하는 개체입니다. 코드는 다음과 유사 할 수 있습니다.
// Create a mutable version of the jsonResponse NSDictionary object NSURLComponents *components = [[NSURLComponents alloc] init]; NSMutableDictionary *videoPropertiesDictionary = [[NSMutableDictionary alloc] init]; NSMutableArray *updatedSources = [[NSMutableArray alloc] init]; // Define the URL parameters that will be added to the VMAP URL NSURLQueryItem *queryItemEntrypointUrlParameter = [NSURLQueryItem queryItemWithName:@"rule" value:@"discos-enabled"]; NSURLQueryItem *queryItemVideoId = [NSURLQueryItem queryItemWithName:@"video_id" value:jsonResponse[@"id"]]; //deserialize the video and store in dictionary [videoPropertiesDictionary addEntriesFromDictionary:jsonResponse];
-
VMAP URL에 쿼리 매개 변수를 추가합니다.
// For each source, update each VMAP URL stored in the jsonResponse NSDictionary object and assemble the NSURLQueryItem. Store it in the mutable version of the jsonResponse NSDictionary object. for (NSDictionary *source in videoPropertiesDictionary[@"sources"]) { NSMutableDictionary *mutableSource = [[NSMutableDictionary alloc] init]; [mutableSource addEntriesFromDictionary:source]; NSString *vmapURL = mutableSource[@"vmap"]; components = [NSURLComponents componentsWithString:vmapURL]; NSArray *queryItemsArray = components.queryItems; NSURLQueryItem *bctoken = [queryItemsArray firstObject]; components.queryItems = @[bctoken, queryItemEntrypointUrlParameter, queryItemVideoId ]; mutableSource[@"vmap"] = components.URL.absoluteString; [updatedSources addObject:mutableSource]; }
-
다음과 같이 SSAI 플러그인을 사용하여 수정 된 URL을 처리합니다.
videoPropertiesDictionary[@"sources"] = updatedSources; // Create a new video object with the updated jsonResponse NSDictionary object BCOVVideo *video = [BCOVPlaybackService videoFromJSONDictionary:videoPropertiesDictionary]; // Setting this video object to the BCOVPlaybackController will call the new vmap URL (with the URL parameters appended) when playback starts. [self.controller setVideos:@[video]];