diff --git a/modules/appnexusBidAdapter.js b/modules/appnexusBidAdapter.js
index 4935158d21c..d671b12ff69 100644
--- a/modules/appnexusBidAdapter.js
+++ b/modules/appnexusBidAdapter.js
@@ -690,19 +690,123 @@ function newBid(serverBid, rtbBid, bidderRequest) {
javascriptTrackers: jsTrackers
};
if (nativeAd.main_img) {
- bid['native'].image = {
+ bid[NATIVE].image = {
url: nativeAd.main_img.url,
height: nativeAd.main_img.height,
width: nativeAd.main_img.width,
};
}
if (nativeAd.icon) {
- bid['native'].icon = {
+ bid[NATIVE].icon = {
url: nativeAd.icon.url,
height: nativeAd.icon.height,
width: nativeAd.icon.width,
};
}
+
+ // Custom fields
+ bid[NATIVE].ext = {
+ customImage1: nativeAd.image1 && {
+ url: nativeAd.image1.url,
+ height: nativeAd.image1.height,
+ width: nativeAd.image1.width,
+ },
+ customImage2: nativeAd.image2 && {
+ url: nativeAd.image2.url,
+ height: nativeAd.image2.height,
+ width: nativeAd.image2.width,
+ },
+ customImage3: nativeAd.image3 && {
+ url: nativeAd.image3.url,
+ height: nativeAd.image3.height,
+ width: nativeAd.image3.width,
+ },
+ customImage4: nativeAd.image4 && {
+ url: nativeAd.image4.url,
+ height: nativeAd.image4.height,
+ width: nativeAd.image4.width,
+ },
+ customImage5: nativeAd.image5 && {
+ url: nativeAd.image5.url,
+ height: nativeAd.image5.height,
+ width: nativeAd.image5.width,
+ },
+ customIcon1: nativeAd.icon1 && {
+ url: nativeAd.icon1.url,
+ height: nativeAd.icon1.height,
+ width: nativeAd.icon1.width,
+ },
+ customIcon2: nativeAd.icon2 && {
+ url: nativeAd.icon2.url,
+ height: nativeAd.icon2.height,
+ width: nativeAd.icon2.width,
+ },
+ customIcon3: nativeAd.icon3 && {
+ url: nativeAd.icon3.url,
+ height: nativeAd.icon3.height,
+ width: nativeAd.icon3.width,
+ },
+ customIcon4: nativeAd.icon4 && {
+ url: nativeAd.icon4.url,
+ height: nativeAd.icon4.height,
+ width: nativeAd.icon4.width,
+ },
+ customIcon5: nativeAd.icon5 && {
+ url: nativeAd.icon5.url,
+ height: nativeAd.icon5.height,
+ width: nativeAd.icon5.width,
+ },
+ customSocialIcon1: nativeAd.socialicon1 && {
+ url: nativeAd.socialicon1.url,
+ height: nativeAd.socialicon1.height,
+ width: nativeAd.socialicon1.width,
+ },
+ customSocialIcon2: nativeAd.socialicon2 && {
+ url: nativeAd.socialicon2.url,
+ height: nativeAd.socialicon2.height,
+ width: nativeAd.socialicon2.width,
+ },
+ customSocialIcon3: nativeAd.socialicon3 && {
+ url: nativeAd.socialicon3.url,
+ height: nativeAd.socialicon3.height,
+ width: nativeAd.socialicon3.width,
+ },
+ customSocialIcon4: nativeAd.socialicon4 && {
+ url: nativeAd.socialicon4.url,
+ height: nativeAd.socialicon4.height,
+ width: nativeAd.socialicon4.width,
+ },
+ customSocialIcon5: nativeAd.socialicon5 && {
+ url: nativeAd.socialicon5.url,
+ height: nativeAd.socialicon5.height,
+ width: nativeAd.socialicon5.width,
+ },
+ customTitle1: nativeAd.title1,
+ customTitle2: nativeAd.title2,
+ customTitle3: nativeAd.title3,
+ customTitle4: nativeAd.title4,
+ customTitle5: nativeAd.title5,
+ customBody1: nativeAd.body1,
+ customBody2: nativeAd.body2,
+ customBody3: nativeAd.body3,
+ customBody4: nativeAd.body4,
+ customBody5: nativeAd.body5,
+ customCta1: nativeAd.ctatext1,
+ customCta2: nativeAd.ctatext2,
+ customCta3: nativeAd.ctatext3,
+ customCta4: nativeAd.ctatext4,
+ customCta5: nativeAd.ctatext5,
+ customDisplayUrl1: nativeAd.displayurl1,
+ customDisplayUrl2: nativeAd.displayurl2,
+ customDisplayUrl3: nativeAd.displayurl3,
+ customDisplayUrl4: nativeAd.displayurl4,
+ customDisplayUrl5: nativeAd.displayurl5,
+ customSocialUrl1: nativeAd.socialurl1,
+ customSocialUrl2: nativeAd.socialurl2,
+ customSocialUrl3: nativeAd.socialurl3,
+ customSocialUrl4: nativeAd.socialurl4,
+ customSocialUrl5: nativeAd.socialurl5
+ };
} else {
Object.assign(bid, {
width: rtbBid.rtb.banner.width,
diff --git a/test/spec/modules/appnexusBidAdapter_spec.js b/test/spec/modules/appnexusBidAdapter_spec.js
index 7fca35249b8..bec7d838dbe 100644
--- a/test/spec/modules/appnexusBidAdapter_spec.js
+++ b/test/spec/modules/appnexusBidAdapter_spec.js
@@ -2031,45 +2031,47 @@ describe('AppNexusAdapter', function () {
}
if (FEATURES.NATIVE) {
+ const BASE_NATIVE = {
+ 'title': 'Native Creative',
+ 'desc': 'Cool description great stuff',
+ 'desc2': 'Additional body text',
+ 'ctatext': 'Do it',
+ 'sponsored': 'AppNexus',
+ 'icon': {
+ 'width': 0,
+ 'height': 0,
+ 'url': 'https://cdn.adnxs.com/icon.png'
+ },
+ 'main_img': {
+ 'width': 2352,
+ 'height': 1516,
+ 'url': 'https://cdn.adnxs.com/img.png'
+ },
+ 'link': {
+ 'url': 'https://www.appnexus.com',
+ 'fallback_url': '',
+ 'click_trackers': ['https://nym1-ib.adnxs.com/click']
+ },
+ 'impression_trackers': ['https://example.com'],
+ 'rating': '5',
+ 'displayurl': 'https://AppNexus.com/?url=display_url',
+ 'likes': '38908320',
+ 'downloads': '874983',
+ 'price': '9.99',
+ 'saleprice': 'FREE',
+ 'phone': '1234567890',
+ 'address': '28 W 23rd St, New York, NY 10010',
+ 'privacy_link': 'https://appnexus.com/?url=privacy_url',
+ 'javascriptTrackers': '',
+ 'video': {
+ 'content': ''
+ }
+ };
+
it('handles native responses', function () {
let response1 = deepClone(response);
response1.tags[0].ads[0].ad_type = 'native';
- response1.tags[0].ads[0].rtb.native = {
- 'title': 'Native Creative',
- 'desc': 'Cool description great stuff',
- 'desc2': 'Additional body text',
- 'ctatext': 'Do it',
- 'sponsored': 'AppNexus',
- 'icon': {
- 'width': 0,
- 'height': 0,
- 'url': 'https://cdn.adnxs.com/icon.png'
- },
- 'main_img': {
- 'width': 2352,
- 'height': 1516,
- 'url': 'https://cdn.adnxs.com/img.png'
- },
- 'link': {
- 'url': 'https://www.appnexus.com',
- 'fallback_url': '',
- 'click_trackers': ['https://nym1-ib.adnxs.com/click']
- },
- 'impression_trackers': ['https://example.com'],
- 'rating': '5',
- 'displayurl': 'https://AppNexus.com/?url=display_url',
- 'likes': '38908320',
- 'downloads': '874983',
- 'price': '9.99',
- 'saleprice': 'FREE',
- 'phone': '1234567890',
- 'address': '28 W 23rd St, New York, NY 10010',
- 'privacy_link': 'https://appnexus.com/?url=privacy_url',
- 'javascriptTrackers': '',
- 'video': {
- 'content': ''
- }
- };
+ response1.tags[0].ads[0].rtb.native = BASE_NATIVE;
let bidderRequest = {
bids: [{
bidId: '3db3773286ee59',
@@ -2080,10 +2082,230 @@ describe('AppNexusAdapter', function () {
let result = spec.interpretResponse({ body: response1 }, { bidderRequest });
expect(result[0].native.title).to.equal('Native Creative');
expect(result[0].native.body).to.equal('Cool description great stuff');
+ expect(result[0].native.body2).to.equal('Additional body text');
expect(result[0].native.cta).to.equal('Do it');
expect(result[0].native.image.url).to.equal('https://cdn.adnxs.com/img.png');
expect(result[0].native.video.content).to.equal('');
});
+
+ it('handles custom native fields as ext', function () {
+ let response1 = deepClone(response);
+ response1.tags[0].ads[0].ad_type = 'native';
+ response1.tags[0].ads[0].rtb.native = {
+ ...BASE_NATIVE,
+ 'title1': 'Custom Title 1',
+ 'title2': 'Custom Title 2',
+ 'title3': 'Custom Title 3',
+ 'title4': 'Custom Title 4',
+ 'title5': 'Custom Title 5',
+ // Not to be confused with Prebid's base native body & body2
+ 'body1': 'Custom Body 1',
+ 'body2': 'Custom Body 2',
+ 'body3': 'Custom Body 3',
+ 'body4': 'Custom Body 4',
+ 'body5': 'Custom Body 5',
+ 'image1': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/custom_image_1.jpg?[fullhash]',
+ 'height': 627,
+ 'width': 1200,
+ },
+ 'image2': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/custom_image_2.jpg?[fullhash]',
+ 'height': 627,
+ 'width': 1200,
+ },
+ 'image3': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/custom_image_3.jpg?[fullhash]',
+ 'height': 627,
+ 'width': 1200,
+ },
+ 'image4': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/custom_image_4.jpg?[fullhash]',
+ 'height': 627,
+ 'width': 1200,
+ },
+ 'image5': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/custom_image_5.jpg?[fullhash]',
+ 'height': 627,
+ 'width': 1200,
+ },
+ 'icon1': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/logo.jpg?[fullhash]',
+ 'height': 128,
+ 'width': 128,
+ },
+ 'icon2': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/logo.jpg?[fullhash]',
+ 'height': 128,
+ 'width': 128,
+ },
+ 'icon3': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/logo.jpg?[fullhash]',
+ 'height': 128,
+ 'width': 128,
+ },
+ 'icon4': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/logo.jpg?[fullhash]',
+ 'height': 128,
+ 'width': 128,
+ },
+ 'icon5': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/logo.jpg?[fullhash]',
+ 'height': 128,
+ 'width': 128,
+ },
+ 'socialicon1': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/logo.jpg?[fullhash]',
+ 'height': 128,
+ 'width': 128,
+ },
+ 'socialicon2': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/logo.jpg?[fullhash]',
+ 'height': 128,
+ 'width': 128,
+ },
+ 'socialicon3': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/logo.jpg?[fullhash]',
+ 'height': 128,
+ 'width': 128,
+ },
+ 'socialicon4': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/logo.jpg?[fullhash]',
+ 'height': 128,
+ 'width': 128,
+ },
+ 'socialicon5': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/logo.jpg?[fullhash]',
+ 'height': 128,
+ 'width': 128,
+ },
+ 'socialurl1': 'https://www.xandr.com/platform/monetize/#socialUrl1',
+ 'socialurl2': 'https://www.xandr.com/platform/monetize/#socialUrl2',
+ 'socialurl3': 'https://www.xandr.com/platform/monetize/#socialUrl3',
+ 'socialurl4': 'https://www.xandr.com/platform/monetize/#socialUrl4',
+ 'socialurl5': 'https://www.xandr.com/platform/monetize/#socialUrl5',
+ 'displayurl1': 'https://www.xandr.com/platform/monetize/#displayUrl1',
+ 'displayurl2': 'https://www.xandr.com/platform/monetize/#displayUrl2',
+ 'displayurl3': 'https://www.xandr.com/platform/monetize/#displayUrl3',
+ 'displayurl4': 'https://www.xandr.com/platform/monetize/#displayUrl4',
+ 'displayurl5': 'https://www.xandr.com/platform/monetize/#displayUrl5',
+ 'ctatext1': 'Custom CTA 1',
+ 'ctatext2': 'Custom CTA 2',
+ 'ctatext3': 'Custom CTA 3',
+ 'ctatext4': 'Custom CTA 4',
+ 'ctatext5': 'Custom CTA 5',
+ };
+ let bidderRequest = {
+ bids: [{
+ bidId: '3db3773286ee59',
+ adUnitCode: 'code'
+ }]
+ }
+
+ let result = spec.interpretResponse({ body: response1 }, { bidderRequest });
+ expect(result[0].native.ext).to.deep.equal({
+ 'customTitle1': 'Custom Title 1',
+ 'customTitle2': 'Custom Title 2',
+ 'customTitle3': 'Custom Title 3',
+ 'customTitle4': 'Custom Title 4',
+ 'customTitle5': 'Custom Title 5',
+ 'customBody1': 'Custom Body 1',
+ 'customBody2': 'Custom Body 2',
+ 'customBody3': 'Custom Body 3',
+ 'customBody4': 'Custom Body 4',
+ 'customBody5': 'Custom Body 5',
+ 'customImage1': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/custom_image_1.jpg?[fullhash]',
+ 'height': 627,
+ 'width': 1200,
+ },
+ 'customImage2': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/custom_image_2.jpg?[fullhash]',
+ 'height': 627,
+ 'width': 1200,
+ },
+ 'customImage3': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/custom_image_3.jpg?[fullhash]',
+ 'height': 627,
+ 'width': 1200,
+ },
+ 'customImage4': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/custom_image_4.jpg?[fullhash]',
+ 'height': 627,
+ 'width': 1200,
+ },
+ 'customImage5': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/custom_image_5.jpg?[fullhash]',
+ 'height': 627,
+ 'width': 1200,
+ },
+ 'customIcon1': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/logo.jpg?[fullhash]',
+ 'height': 128,
+ 'width': 128,
+ },
+ 'customIcon2': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/logo.jpg?[fullhash]',
+ 'height': 128,
+ 'width': 128,
+ },
+ 'customIcon3': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/logo.jpg?[fullhash]',
+ 'height': 128,
+ 'width': 128,
+ },
+ 'customIcon4': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/logo.jpg?[fullhash]',
+ 'height': 128,
+ 'width': 128,
+ },
+ 'customIcon5': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/logo.jpg?[fullhash]',
+ 'height': 128,
+ 'width': 128,
+ },
+ 'customSocialIcon1': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/logo.jpg?[fullhash]',
+ 'height': 128,
+ 'width': 128,
+ },
+ 'customSocialIcon2': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/logo.jpg?[fullhash]',
+ 'height': 128,
+ 'width': 128,
+ },
+ 'customSocialIcon3': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/logo.jpg?[fullhash]',
+ 'height': 128,
+ 'width': 128,
+ },
+ 'customSocialIcon4': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/logo.jpg?[fullhash]',
+ 'height': 128,
+ 'width': 128,
+ },
+ 'customSocialIcon5': {
+ 'url': 'https://monetize.xandr.com/creative-ui/assets/logo.jpg?[fullhash]',
+ 'height': 128,
+ 'width': 128,
+ },
+ 'customSocialUrl1': 'https://www.xandr.com/platform/monetize/#socialUrl1',
+ 'customSocialUrl2': 'https://www.xandr.com/platform/monetize/#socialUrl2',
+ 'customSocialUrl3': 'https://www.xandr.com/platform/monetize/#socialUrl3',
+ 'customSocialUrl4': 'https://www.xandr.com/platform/monetize/#socialUrl4',
+ 'customSocialUrl5': 'https://www.xandr.com/platform/monetize/#socialUrl5',
+ 'customDisplayUrl1': 'https://www.xandr.com/platform/monetize/#displayUrl1',
+ 'customDisplayUrl2': 'https://www.xandr.com/platform/monetize/#displayUrl2',
+ 'customDisplayUrl3': 'https://www.xandr.com/platform/monetize/#displayUrl3',
+ 'customDisplayUrl4': 'https://www.xandr.com/platform/monetize/#displayUrl4',
+ 'customDisplayUrl5': 'https://www.xandr.com/platform/monetize/#displayUrl5',
+ 'customCta1': 'Custom CTA 1',
+ 'customCta2': 'Custom CTA 2',
+ 'customCta3': 'Custom CTA 3',
+ 'customCta4': 'Custom CTA 4',
+ 'customCta5': 'Custom CTA 5',
+ });
+ });
}
if (FEATURES.VIDEO) {