기본 SDK에 광고 쿼리 매개 변수 추가

이 항목에서는 브라이트코브 네이티브 플레이어 SDK를 사용하여 VMAP URL에 광고 쿼리 매개 변수를 추가하는 방법에 대해 설명합니다.

개요

네이티브 플레이어 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로 광고 쿼리 매개 변수를 추가하려면 다음 단계를 따르세요.

  1. Brightcove Native SDK를 사용하여 IMA 광고를위한 클라이언트 측 코드 샘플 중 하나로 시작합니다.

  2. 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 매개 변수를 통해 사용자 정의 값을 제공하려면 다음 단계를 따르십시오.

  1. 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"
      	}
      }
    }
  2. 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
  3. 광고 URL이 다음과 같다고 가정 해 보겠습니다.

    https://myad.com/ads?rule=&id=

    광고 URL에 위의 광고 매크로가있는 경우 적절한 값을 사용하여 이러한 쿼리 매개 변수를 VMAP URL에 추가합니다.

  4. 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
  5. SSAI 플러그인으로 비디오를 처리합니다.
  6. 개발 세부 사항은 다음을 참조하십시오.

안드로이드 구현

재생 API 응답에서 적절한 VMAP 소스 URL을 추출하고 쿼리 매개 변수를 추가할 수 있습니다. 이렇게 하려면 다음과이 같이 하십시오.

  1. SSAI의 광고 구성 ID를 사용하여 브라이트코브 카탈로그 (재생 API) 에서 비디오 객체를 검색합니다. 자세한 내용은 Android 구현네이티브 플레이어 SDK를 사용하여 서버 측 광고 구현 문서의 섹션.
  2. 에서Catalog '에스onVideo콜백 메서드에서 적절한 VMAP URL을 선택하고 추출합니다. Video개체의 기본 소스, SSAISourceSelector . 반환 된 소스 개체에는 VMAP URL 속성이 있어야합니다.

    SSAISourceSelector sourceSelector = new SSAISourceSelector();
    Source source = sourceSelector.selectSource(video);            
    String vmapUrl = source.getStringProperty(Source.Fields.VMAP);
  3. 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();
    }
  4. 업데이트 처리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을 추출하고 쿼리 매개 변수를 추가할 수 있습니다. 이렇게 하려면 다음과이 같이 하십시오.

  1. SSAI의 광고 구성 ID를 사용하여 브라이트코브 카탈로그 (재생 API) 에서 비디오 객체를 검색합니다. 자세한 내용은 iOS 구현네이티브 플레이어 SDK를 사용하여 서버 측 광고 구현 문서의 섹션.
  2. 비디오 개체에서 적절한 매니페스트 또는 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];
  3. 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];
    }
  4. 다음과 같이 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]];