Überblick
Auch wenn die Native Player-SDKs keine clientseitige Makroersetzung durchführen, können Sie Abfragezeichenfolgenparameter für das Anzeigen-Targeting manuell anfügen. Dies kann entweder für clientseitige oder serverseitige Anzeigen erfolgen.
Weitere Informationen zu URL-Parametern finden Sie im Anzeigenvariablen Abschnitt des Video Cloud SSAI Ad Config API-Dokuments.
Clientseitige Anzeigen
Sie können benutzerdefinierte Werte über URL-Parameter bereitstellen, die an die VMAP-URL angehängt werden.
Android-Implementierung
Schlüssel/Wert-Paare für das Anzeigen-Targeting können auf zwei Arten zu Ihrer Anzeigen-Tag-URL hinzugefügt werden:
- 
    Fügen Sie Ihre Schlüssel/Wert-Paare direkt zur Anzeigen-Tag-URL hinzu. Google IMA ermöglicht das Hinzufügen von Schlüssel/Wert-Paaren für das Anzeigen-Targeting mithilfe der cust_paramsParameter. Weitere Informationen finden Sie in Googles Schlüsselwerte zu einem Master-Videoanzeigen-Tag hinzufügen dokumentieren.
- 
    Wenden Sie eine Wertezuordnung auf die Anzeigen-Tag-URL an, indem Sie die updateAdTargetingValuesMethode für dieGoogleIMAComponent.
Bei beiden Ansätzen werden die Schlüssel/Wert-Paare zur Anzeigen-Tag-URL im ADS_REQUEST_FOR_VIDEO Ereignis-Listener. Im folgenden Codebeispiel werden die Schlüssel/Wert-Paare mithilfe der hinzugefügt updateAdTargetingValues Methode für die GoogleIMAComponent.
Hier ist der Code zum Erstellen einer Zuordnung von Schlüssel/Wert-Paaren mithilfe der CUSTOM_FIELDS Eigentum der Video Objekteigenschaft des ADS_REQUEST_FOR_VIDEO Veranstaltung:
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);
}
Hier ist ein vollständiges Codebeispiel für die ADS_REQUEST_FOR_VIDEO Ereignis-Listener, der der Einrichtungsmethode für das Google IMA-Plug-in hinzugefügt wird:
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-Implementierung
Führen Sie die folgenden Schritte aus, um Anzeigenabfrageparameter mit dem Native SDK für iOS anzufügen:
- 
	Beginnen Sie mit einem der clientseitigen Codebeispiele für IMA-Werbung mit dem Brightcove Native SDK: 
- 
	Hängen Sie die URL-Abfrageparameter an die VMAP-URL an, bevor Sie das IMA-Plug-in aufrufen. Dies kann vor den folgenden Methoden erfolgen: for video in mutablePlaylist.videos { if let _video = video as? BCOVMutableVideo { _video.properties[kBCOVIMAAdTag] = IMAConfig.VMAPResponseAdTag updatedVideos.append(_video) } }
Serverseitige Anzeigen
Gehen Sie folgendermaßen vor, um benutzerdefinierte Werte über URL-Parameter bereitzustellen, die an die VMAP-URL angehängt werden:
- 
	Rufen Sie mit einer SSAI-Anzeigenkonfigurations-ID ein Videoobjekt aus dem Brightcove-Katalog (Wiedergabe-API) ab. Weitere Informationen zum Erstellen einer Anzeigenkonfiguration mit dem Implementieren von serverseitigen Anzeigen mit den Native Player SDKs dokumentieren. Eine Beispiel-Anzeigenkonfiguration sieht so aus: { "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" } } }
- 
	Untersuchen Sie in der jsonResponse des Aufrufs der Playback-API die Quellen für das Videoobjekt. Jedes Quellobjekt enthält eine VMAP-Eigenschaft und eine VMAP-URL. Wählen Sie die VMAP-URL aus und extrahieren Sie sie. 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
- 
	Angenommen, Ihre Anzeigen-URL sieht so aus: https://myad.com/ads?rule=&id=Wenn Ihre Anzeigen-URL die oben genannten Anzeigenmakros enthält, fügen Sie diese Abfrageparameter mit den entsprechenden Werten zu den VMAP-URLs hinzu. 
- 
	Hängen Sie Abfrageparameter an die VMAP-URL an. In diesem Beispiel ist die Makro in der Anzeigen-URL wird durch den Wert ersetztdiscos-enabled, und derMakro wird durch den Video-ID-Wert ersetzt.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
- Verarbeiten Sie das Video mit dem SSAI-Plugin.
- 
	Einzelheiten zur Entwicklung finden Sie unter: 
Android-Implementierung
Aus der Playback-API-Antwort können Sie die entsprechende VMAP-Quell-URL extrahieren und Ihre Abfrageparameter anhängen. Gehen Sie dazu folgendermaßen vor:
- Rufen Sie mit einer SSAI-Anzeigenkonfigurations-ID ein Videoobjekt aus dem Brightcove-Katalog (Wiedergabe-API) ab. Einzelheiten finden Sie im Android-Implementierung Abschnitt des Dokuments Implementieren von serverseitigen Anzeigen mit den Native Player SDKs.
- 
    In dem Catalog'SonVideoCallback-Methode wählen und extrahieren Sie die entsprechende VMAP-URL aus demVideoStandardquelle des Objekts, unter Verwendung derSSAISourceSelector. Das zurückgegebene Quellobjekt sollte eine VMAP-URL-Eigenschaft haben.SSAISourceSelector sourceSelector = new SSAISourceSelector(); Source source = sourceSelector.selectSource(video); String vmapUrl = source.getStringProperty(Source.Fields.VMAP);
- 
    Hängen Sie Ihre Abfrageparameter an die VMAP-URL an: 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(); }
- 
    Verarbeiten Sie die aktualisierte VideoObjekt mit dem SSAI-Plugin wie folgt:plugin.processVideo(video);
Hier ist ein vollständiges Codebeispiel:
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-Implementierung
Aus der Playback-API-Antwort können Sie die entsprechende VMAP-Quell-URL extrahieren und Ihre Abfrageparameter anhängen. Gehen Sie dazu folgendermaßen vor:
- Rufen Sie mit einer SSAI-Anzeigenkonfigurations-ID ein Videoobjekt aus dem Brightcove-Katalog (Wiedergabe-API) ab. Einzelheiten finden Sie im iOS-Implementierung Abschnitt des Dokuments Implementieren von serverseitigen Anzeigen mit den Native Player SDKs.
- 
	Wählen Sie aus dem Videoobjekt die entsprechende Manifest- oder VMAP-URL aus und extrahieren Sie sie. Aus der Wiedergabedienstantwort enthält die jsonResponse (NSDictionary) die BCOVVideo -Objekt, das die Quellen enthält, die die URL zum VMAP-Dokument enthalten. Ihr Code könnte ungefähr so aussehen: // 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];
- 
	Hängen Sie Abfrageparameter an die VMAP-URL an. // 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]; }
- 
	Verarbeiten Sie die geänderte URL mit dem SSAI-Plugin wie folgt: 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]];
