diff --git a/modules/mediakeysBidAdapter.js b/modules/mediakeysBidAdapter.js
index 8c2b2c32e1c..60ced650329 100644
--- a/modules/mediakeysBidAdapter.js
+++ b/modules/mediakeysBidAdapter.js
@@ -572,7 +572,12 @@ function nativeBidResponseHandler(bid) {
native.impressionTrackers.push(tracker.url);
break;
case 2:
- native.javascriptTrackers = ``;
+ const script = ``;
+ if (!native.javascriptTrackers) {
+ native.javascriptTrackers = script;
+ } else {
+ native.javascriptTrackers += `\n${script}`;
+ }
break;
}
});
diff --git a/modules/mediakeysBidAdapter.md b/modules/mediakeysBidAdapter.md
index ec313c2fe3a..b0654771d19 100644
--- a/modules/mediakeysBidAdapter.md
+++ b/modules/mediakeysBidAdapter.md
@@ -14,9 +14,10 @@ Connects to Mediakeys demand source to fetch bids.
## Banner only Ad Unit
-```
-var adUnits = [
-{
+The Mediakeys adapter accepts any valid OpenRTB Spec 2.5 property.
+
+```javascript
+var adUnits = [{
code: 'test',
mediaTypes: {
banner: {
@@ -27,20 +28,26 @@ var adUnits = [
bidder: 'mediakeys',
params: {} // no params required.
}]
-},
+}]
```
## Native only Ad Unit
The Mediakeys adapter accepts two optional params for native requests. Please see the [OpenRTB Native Ads Specification](https://www.iab.com/wp-content/uploads/2018/03/OpenRTB-Native-Ads-Specification-Final-1.2.pdf) for valid values.
-```
-var adUnits = [
-{
+```javascript
+var adUnits = [{
code: 'test',
mediaTypes: {
native: {
- type: 'image',
+ title: {
+ required: true,
+ len: 120
+ },
+ image: {
+ required: true,
+ sizes: [300, 250]
+ }
}
},
bids: [{
@@ -52,7 +59,7 @@ var adUnits = [
}
}
}]
-},
+}]
```
## Video only Ad Unit
@@ -61,63 +68,65 @@ The Mediakeys adapter accepts any valid openRTB 2.5 video property. Properties c
### Outstream context
-```
-var adUnits = [
-{
+```javascript
+var adUnits = [{
code: 'test',
mediaTypes: {
video: {
context: 'outstream',
- playerSize: [300, 250],
+ playerSize: [1280, 720],
// additional OpenRTB video params
// placement: 2,
// api: [1],
// …
+ mimes: ['video/mp4'],
+ protocols: [2, 3],
+ skip: 0
}
},
renderer: {
url: 'https://acdn.adnxs.com/video/outstream/ANOutstreamVideo.js',
+ // the render method must fetch the vast xml document before displaying video
render: function (bid) {
- var bidReqConfig = pbjs.adUnits.find(bidReq => bidReq.bidId === bid.impid);
-
- if (bidReqConfig && bidReqConfig.mediaTypes && bidReqConfig.mediaTypes.video && bidReqConfig.mediaTypes.video.context === 'outstream') {
- var adResponse = fetch(bid.vastUrl).then(resp => resp.text()).then(text => ({
- ad: {
- video: {
- content: text,
- player_width: bid.width || bidReqConfig.mediaTypes.video.playerSize[0],
- player_height: bid.height || bidReqConfig.mediaTypes.video.playerSize[1],
- }
+ var adResponse = fetch(bid.vastUrl).then(resp => resp.text()).then(text => ({
+ ad: {
+ video: {
+ content: text,
+ player_height: bid.playerHeight,
+ player_width: bid.playerWidth
}
- }))
-
- adResponse.then((ad) => {
- bid.renderer.push(() => {
- ANOutstreamVideo.renderAd({
- targetId: bid.adUnitCode,
- adResponse: ad
- });
+ }
+ }))
+
+ adResponse.then((content) => {
+ bid.renderer.push(() => {
+ ANOutstreamVideo.renderAd({
+ targetId: bid.adUnitCode,
+ adResponse: content
});
- })
- }
+ });
+ })
}
},
bids: [{
bidder: 'mediakeys',
params: {
video: {
- // additional OpenRTB video params. Will be merged with params defined at mediaTypes level
+ // additional OpenRTB video params.
+ // will be merged with params defined at mediaTypes level
+ api: [1]
}
}
}]
-},
+}]
```
### Instream context
-```
-var adUnits = [
-{
+For Instream Video, you have to enable the Instream Tracking Module to have Prebid emit the onBidWon required event.
+
+```javascript
+var adUnits = [{
code: 'test',
mediaTypes: {
video: {
@@ -132,8 +141,9 @@ var adUnits = [
bids: [{
bidder: 'mediakeys',
params: {
- // additional OpenRTB video params. Will be merged with params defined at mediaTypes level
+ // additional OpenRTB video params.
+ // will be merged with params defined at mediaTypes level
}
}]
-},
+}]
```
diff --git a/test/spec/modules/mediakeysBidAdapter_spec.js b/test/spec/modules/mediakeysBidAdapter_spec.js
index 47ac54d49df..393b6ac6764 100644
--- a/test/spec/modules/mediakeysBidAdapter_spec.js
+++ b/test/spec/modules/mediakeysBidAdapter_spec.js
@@ -808,8 +808,8 @@ describe('mediakeysBidAdapter', function () {
]
},
eventtrackers: [
- { event: 1, method: 1, url: 'https://click.me' },
- { event: 1, method: 2, url: 'https://click-script.me' }
+ { event: 1, method: 1, url: 'https://eventrack.me/impression' },
+ { event: 1, method: 2, url: 'https://eventrack-js.me/impression-1' }
]
};
@@ -845,9 +845,11 @@ describe('mediakeysBidAdapter', function () {
expect(response[0].native.clickUrl).to.exist;
expect(response[0].native.clickTrackers).to.exist;
expect(response[0].native.clickTrackers.length).to.equal(1);
- expect(response[0].native.javascriptTrackers).to.equal('');
expect(response[0].native.impressionTrackers).to.exist;
expect(response[0].native.impressionTrackers.length).to.equal(1);
+ expect(response[0].native.impressionTrackers[0]).to.equal('https://eventrack.me/impression');
+ expect(response[0].native.javascriptTrackers).to.exist;
+ expect(response[0].native.javascriptTrackers).to.equal('');
});
it('should ignore eventtrackers with a unsupported type', function() {
@@ -859,6 +861,21 @@ describe('mediakeysBidAdapter', function () {
expect(response[0].native.impressionTrackers).to.exist;
expect(response[0].native.impressionTrackers.length).to.equal(0);
})
+
+ it('Should handle multiple javascriptTrackers in one single string', () => {
+ const rawServerResponseNativeCopy = utils.deepClone(rawServerResponseNative);
+ const nativeObjectCopy = utils.deepClone(nativeObject);
+ nativeObjectCopy.eventtrackers.push(
+ {
+ event: 1,
+ method: 2,
+ url: 'https://eventrack-js.me/impression-2'
+ },)
+ rawServerResponseNativeCopy.body.seatbid[0].bid[0].adm = JSON.stringify(nativeObjectCopy);
+ const response = spec.interpretResponse(rawServerResponseNativeCopy, request);
+ const expected = '\n';
+ expect(response[0].native.javascriptTrackers).to.equal(expected);
+ });
});
});