Ajout de paramètres de requête publicitaire avec les kits SDK natifs

Dans cette rubrique, vous apprendrez comment ajouter des paramètres de requête publicitaire à vos URL VMAP avec les kits SDK Brightcove Native Player.

Aperçu

Même si les SDK du lecteur natif n'effectuent pas de remplacement de macro côté client, vous pouvez ajouter manuellement des paramètres de chaîne de requête pour le ciblage publicitaire. Cela peut être fait pour les annonces côté client ou côté serveur.

Pour en savoir plus sur les paramètres d'URL, consultez le Variables publicitaires section du document de l'API Video Cloud SSAI Ad Config.

Annonces côté client

Vous pouvez fournir des valeurs personnalisées via des paramètres d'URL ajoutés à l'URL VMAP.

Implémentation Android

Les paires clé/valeur de ciblage des annonces peuvent être ajoutées à l'URL de votre tag d'emplacement publicitaire de deux manières :

  • Ajoutez vos paires clé/valeur directement à l'URL du tag d'emplacement publicitaire. Google IMA permet l'ajout de paires clé/valeur de ciblage publicitaire à l'aide de la cust_params paramètre. Pour plus de détails, voir Google Ajouter des valeurs-clés à un tag de redirection vidéo maître document.
  • Appliquez une carte de valeurs à l'URL du tag d'emplacement publicitaire à l'aide de la updateAdTargetingValues méthode pour le GoogleIMAComponent.

Quelle que soit l'approche, les paires clé/valeur sont ajoutées à l'URL du tag d'emplacement publicitaire dans le ADS_REQUEST_FOR_VIDEO écouteur d'événement. L'exemple de code ci-dessous ajoute les paires clé/valeur en utilisant le updateAdTargetingValues méthode pour le GoogleIMAComponent.

Voici le code pour créer une carte de paires clé/valeur, en utilisant la CUSTOM_FIELDS propriété de la propriété Video objet de l' ADS_REQUEST_FOR_VIDEO événement :

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

Voici un exemple de code complet pour le ADS_REQUEST_FOR_VIDEO l'écouteur d'événement, qui est ajouté à la méthode de configuration du plug-in 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);
});

Implémentation iOS

Pour ajouter des paramètres de requête publicitaire avec le SDK natif pour iOS, procédez comme suit :

  1. Commencez avec l'un des exemples de code côté client pour la publicité IMA avec le Brightcove Native SDK :

  2. Ajoutez les paramètres de requête d'URL à l'URL VMAP avant d'appeler le plug-in IMA. Cela peut être fait avant les méthodes suivantes :

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

Annonces côté serveur

Pour fournir des valeurs personnalisées via les paramètres d'URL ajoutés à l'URL VMAP, procédez comme suit :

  1. Avec un identifiant de configuration d'annonce SSAI, récupérez un objet vidéo du catalogue Brightcove (API de lecture). Découvrez comment créer une configuration d'annonce avec le Implémentation des publicités côté serveur avec les SDK Native Player document.

    Voici un exemple de configuration d'annonce :

    {
      "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. Dans le jsonResponse de l'appel à l'API de lecture, examinez les sources de l'objet vidéo. Chaque objet source contiendra une propriété VMAP et une URL VMAP. Sélectionnez et extrayez l'URL 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. Imaginons que l'URL de votre annonce ressemble à ceci :

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

    Si votre URL d'annonce contient les macros d'annonces ci-dessus, vous ajouterez ces paramètres de requête aux URL VMAP avec les valeurs appropriées.

  4. Ajoutez les paramètres de requête à l'URL VMAP. Dans cet exemple, la macro figurant dans l'URL de l'annonce est remplacée par la valeur discos-enabled, et la macro est remplacée par la valeur de l'identifiant de la vidéo.

    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. Traitez la vidéo avec le plugin SSAI.
  6. Pour plus de détails sur le développement, voir ce qui suit :

Implémentation Android

À partir de la réponse de l'API de lecture, vous pouvez extraire l'URL source VMAP appropriée et ajouter vos paramètres de requête. Pour ce faire, procédez comme suit :

  1. Avec un identifiant de configuration d'annonce SSAI, récupérez un objet vidéo du catalogue Brightcove (API de lecture). Pour plus de détails, consultez le Implémentation Android section du document Implémentation des publicités côté serveur avec les SDK du lecteur natif.
  2. Dans le Catalog's onVideo méthode de rappel, sélectionnez et extrayez l'URL VMAP appropriée du Video la source par défaut de l'objet, en utilisant le SSAISourceSelector. L'objet source renvoyé doit avoir une propriété URL VMAP.

    SSAISourceSelector sourceSelector = new SSAISourceSelector();
    Source source = sourceSelector.selectSource(video);            
    String vmapUrl = source.getStringProperty(Source.Fields.VMAP);
  3. Ajoutez vos paramètres de requête à l'URL 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. Traiter la mise à jour Video object avec le plugin SSAI comme suit :

    plugin.processVideo(video);

Voici un exemple de code complet :

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

Implémentation iOS

À partir de la réponse de l'API de lecture, vous pouvez extraire l'URL source VMAP appropriée et ajouter vos paramètres de requête. Pour ce faire, procédez comme suit :

  1. Avec un identifiant de configuration d'annonce SSAI, récupérez un objet vidéo du catalogue Brightcove (API de lecture). Pour plus de détails, consultez le Implémentation iOS section du document Implémentation des publicités côté serveur avec les SDK du lecteur natif.
  2. À partir de l'objet vidéo, sélectionnez et extrayez le manifeste ou l'URL VMAP approprié. À partir de la réponse du service de lecture, le jsonResponse (NSDictionary) contient le BCOVVidéo objet, qui inclut les sources qui contiennent l'URL du document VMAP. Votre code peut ressembler à ceci :

    // 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. Ajoutez les paramètres de requête à l'URL 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. Traitez l'URL modifiée avec le plug-in SSAI comme suit :

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