Adición de parámetros de consulta de anuncios con los SDK nativos

En este tema, aprenderá a agregar parámetros de consulta de publicidad a sus URL de VMAP con los SDK de Brightcove Native Player.

Resumen

Aunque los SDK del reproductor nativo no realizan el reemplazo de macros del lado del cliente, puede agregar manualmente parámetros de cadena de consulta para la orientación de anuncios. Esto se puede hacer para anuncios del lado del cliente o del lado del servidor.

Para obtener más información sobre los parámetros de URL, consulte la Variables publicitarias sección del documento de API de configuración de anuncios SSAI de Video Cloud.

Anuncios del lado del cliente

Puede proporcionar valores personalizados a través de parámetros de URL adjuntos a la URL de VMAP.

Implementación de Android

Los pares clave / valor de orientación de anuncios se pueden agregar a la URL de su etiqueta de anuncio de dos maneras:

  • Agregue sus pares clave / valor directamente a la URL de la etiqueta de anuncio. Google IMA permite la adición de pares clave / valor de orientación de anuncios mediante el cust_params parámetro. Para obtener más detalles, consulte el Agregar pares clave-valor a una etiqueta de anuncio de video maestro documento.
  • Aplique un mapa de valores a la URL de la etiqueta de anuncio mediante el updateAdTargetingValues método para el GoogleIMAComponent.

Para cualquier enfoque, los pares clave / valor se agregan a la URL de la etiqueta de anuncio en el ADS_REQUEST_FOR_VIDEO oyente de eventos. El ejemplo de código a continuación agrega los pares clave / valor usando el updateAdTargetingValues método para el GoogleIMAComponent.

Aquí está el código para crear un mapa de pares clave / valor, usando el CUSTOM_FIELDS propiedad de la Video propiedad del objeto del ADS_REQUEST_FOR_VIDEO evento:

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

Aquí hay una muestra de código completa para el ADS_REQUEST_FOR_VIDEO detector de eventos, que se agrega al método de configuración del complemento 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);
});

Implementación de iOS

Para agregar parámetros de consulta de anuncios con el SDK nativo para iOS, siga estos pasos:

  1. Comience con uno de los ejemplos de código del lado del cliente para publicidad IMA con Brightcove Native SDK:

  2. Agregue los parámetros de consulta de URL a la URL de VMAP antes de llamar al complemento IMA. Esto se puede hacer antes de los siguientes métodos:

    for video in mutablePlaylist.videos {
      if let _video = video as? BCOVMutableVideo {
         _video.properties[kBCOVIMAAdTag] = IMAConfig.VMAPResponseAdTag
        updatedVideos.append(_video)
      }
    }

Anuncios del lado del servidor

Para proporcionar valores personalizados a través de parámetros de URL adjuntos a la URL de VMAP, siga estos pasos:

  1. Con un ID de configuración de anuncios SSAI, recupere un objeto de video del catálogo de Brightcove (API de reproducción). Aprenda a crear una configuración de anuncios con el Implementación de anuncios del lado del servidor con los SDK del reproductor nativo documento.

    Una configuración de anuncio de muestra tiene este aspecto:

    {
      "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. En jsonResponse de la llamada a la API de reproducción, examine las fuentes del objeto de video. Cada objeto de origen contendrá una propiedad VMAP y una URL VMAP. Seleccione y extraiga la URL de VMAP.

    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. Supongamos que la URL de su anuncio se ve así:

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

    Si la URL de su anuncio tiene las macros de anuncios anteriores, agregará estos parámetros de consulta a las URL de VMAP con los valores adecuados.

  4. Agregue parámetros de consulta a la URL de VMAP. En este ejemplo, el La macro en la URL del anuncio se reemplaza por el valor. discos-enabled , y el La macro se reemplaza con el valor de identificación del video.

    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. Procese el video con el complemento SSAI.
  6. Para obtener detalles sobre el desarrollo, consulte lo siguiente:

Implementación de Android

De la respuesta de la API de reproducción, puede extraer la URL de origen VMAP adecuada y agregar los parámetros de su consulta. Para ello, sigue estos pasos:

  1. Con un ID de configuración de anuncios SSAI, recupere un objeto de video del catálogo de Brightcove (API de reproducción). Para obtener más detalles, consulte la Implementación de Android sección del documento Implementación de anuncios del lado del servidor con los SDK de Native Player.
  2. En el Catalog's onVideo método de devolución de llamada, seleccione y extraiga la URL VMAP adecuada del Video fuente predeterminada del objeto, utilizando el SSAISourceSelector. El objeto de origen devuelto debe tener una propiedad de URL de VMAP.

    SSAISourceSelector sourceSelector = new SSAISourceSelector();
    Source source = sourceSelector.selectSource(video);            
    String vmapUrl = source.getStringProperty(Source.Fields.VMAP);
  3. Agregue sus parámetros de consulta a la URL de VMAP:

    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. Procesar la actualización Video objeto con el complemento SSAI de la siguiente manera:

    plugin.processVideo(video);

Aquí hay una muestra de código completa:

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

Implementación de iOS

De la respuesta de la API de reproducción, puede extraer la URL de origen VMAP adecuada y agregar los parámetros de su consulta. Para ello, sigue estos pasos:

  1. Con un ID de configuración de anuncios SSAI, recupere un objeto de video del catálogo de Brightcove (API de reproducción). Para obtener más detalles, consulte la Implementación de iOS sección del documento Implementación de anuncios del lado del servidor con los SDK de Native Player.
  2. Desde el objeto de video, seleccione y extraiga el manifiesto apropiado o la URL de VMAP. De la respuesta del servicio de reproducción, jsonResponse (NSDictionary) contiene el BCOVVídeo objeto, que incluye las fuentes que contienen la URL del documento VMAP. Su código puede verse similar a esto:

    // 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. Agregue parámetros de consulta a la URL de VMAP.

    // 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. Procese la URL modificada con el complemento SSAI de la siguiente manera:

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