Skip to content

Commit 55e4013

Browse files
richaudienceafewcc
authored andcommitted
RichAudience: Support userIDs + Prebid 3.0 (prebid#4504)
* Support userIDs + Prebid 3.0 * Fix bug in richAudienceBidAddapter_spec.js * Fix bug pubCommonId * Fix bug RichaudienceAdapter * Fix UserID5 * Fix bug ID5 change Source for Value * Fix bug richaudienceAdapter && Add userSync pixelEnabled * Fix bug richaudienceAdapter
1 parent 2fde06e commit 55e4013

File tree

2 files changed

+404
-61
lines changed

2 files changed

+404
-61
lines changed

modules/richaudienceBidAdapter.js

100644100755
+74-38
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {BANNER, VIDEO} from '../src/mediaTypes';
44
import * as utils from '../src/utils';
55

66
const BIDDER_CODE = 'richaudience';
7+
let REFERER = '';
78

89
export const spec = {
910
code: BIDDER_CODE,
@@ -39,22 +40,22 @@ export const spec = {
3940
bidder: bid.bidder,
4041
bidderRequestId: bid.bidderRequestId,
4142
tagId: bid.adUnitCode,
42-
sizes: bid.sizes.map(size => ({
43-
w: size[0],
44-
h: size[1],
45-
})),
43+
sizes: raiGetSizes(bid),
4644
referer: (typeof bidderRequest.refererInfo.referer != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.referer) : null),
4745
numIframes: (typeof bidderRequest.refererInfo.numIframes != 'undefined' ? bidderRequest.refererInfo.numIframes : null),
4846
transactionId: bid.transactionId,
4947
timeout: config.getConfig('bidderTimeout'),
48+
user: raiSetEids(bid)
5049
};
5150

51+
REFERER = (typeof bidderRequest.refererInfo.referer != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.referer) : null)
52+
53+
payload.gdpr_consent = '';
54+
payload.gdpr = null;
55+
5256
if (bidderRequest && bidderRequest.gdprConsent) {
5357
payload.gdpr_consent = bidderRequest.gdprConsent.consentString;
54-
payload.gdpr = bidderRequest.gdprConsent.gdprApplies; // we're handling the undefined case server side
55-
} else {
56-
payload.gdpr_consent = '';
57-
payload.gdpr = null;
58+
payload.gdpr = bidderRequest.gdprConsent.gdprApplies;
5859
}
5960

6061
var payloadString = JSON.stringify(payload);
@@ -76,34 +77,29 @@ export const spec = {
7677
*/
7778
interpretResponse: function (serverResponse, bidRequest) {
7879
const bidResponses = [];
79-
80+
// try catch
8081
var response = serverResponse.body;
82+
if (response) {
83+
var bidResponse = {
84+
requestId: JSON.parse(bidRequest.data).bidId,
85+
cpm: response.cpm,
86+
width: response.width,
87+
height: response.height,
88+
creativeId: response.creative_id,
89+
mediaType: response.media_type,
90+
netRevenue: response.netRevenue,
91+
currency: response.currency,
92+
ttl: response.ttl,
93+
dealId: response.dealId,
94+
};
8195

82-
try {
83-
if (response) {
84-
var bidResponse = {
85-
requestId: JSON.parse(bidRequest.data).bidId,
86-
cpm: response.cpm,
87-
width: response.width,
88-
height: response.height,
89-
creativeId: response.creative_id,
90-
mediaType: response.media_type,
91-
netRevenue: response.netRevenue,
92-
currency: response.currency,
93-
ttl: response.ttl,
94-
dealId: response.dealId,
95-
};
96-
97-
if (response.media_type === 'video') {
98-
bidResponse.vastXml = response.vastXML;
99-
} else {
100-
bidResponse.ad = response.adm
101-
}
102-
103-
bidResponses.push(bidResponse);
96+
if (response.media_type === 'video') {
97+
bidResponse.vastXml = response.vastXML;
98+
} else {
99+
bidResponse.ad = response.adm
104100
}
105-
} catch (error) {
106-
utils.logError('Error while parsing Rich Audience response', error);
101+
102+
bidResponses.push(bidResponse);
107103
}
108104
return bidResponses
109105
},
@@ -121,20 +117,60 @@ export const spec = {
121117
var rand = Math.floor(Math.random() * 9999999999);
122118
var syncUrl = '';
123119

124-
if (gdprConsent && typeof gdprConsent.consentString === 'string') {
125-
syncUrl = 'https://sync.richaudience.com/dcf3528a0b8aa83634892d50e91c306e/?ord=' + rand + '&pubconsent=' + gdprConsent.consentString + '&euconsent=' + gdprConsent.consentString;
126-
} else {
127-
syncUrl = 'https://sync.richaudience.com/dcf3528a0b8aa83634892d50e91c306e/?ord=' + rand;
128-
}
120+
gdprConsent && typeof gdprConsent.consentString === 'string' ? syncUrl = 'https://sync.richaudience.com/dcf3528a0b8aa83634892d50e91c306e/?ord=' + rand + '&pubconsent=' + gdprConsent.consentString + '&euconsent=' + gdprConsent.consentString : syncUrl = 'https://sync.richaudience.com/dcf3528a0b8aa83634892d50e91c306e/?ord=' + rand;
129121

130122
if (syncOptions.iframeEnabled) {
131123
syncs.push({
132124
type: 'iframe',
133125
url: syncUrl
134126
});
127+
} else if (syncOptions.pixelEnabled && REFERER != null) {
128+
syncs.push({
129+
type: 'image',
130+
url: `https://sync.richaudience.com/bf7c142f4339da0278e83698a02b0854/?euconsent=${gdprConsent.consentString}&referrer=${REFERER}`
131+
});
135132
}
136133
return syncs
137134
},
138135
};
139136

140137
registerBidder(spec);
138+
139+
function raiGetSizes(bid) {
140+
let raiNewSizes;
141+
if (bid.mediaTypes && bid.mediaTypes.banner && bid.mediaTypes.banner.sizes) {
142+
raiNewSizes = bid.mediaTypes.banner.sizes
143+
} else {
144+
raiNewSizes = bid.sizes
145+
}
146+
if (raiNewSizes != null) {
147+
return raiNewSizes.map(size => ({
148+
w: size[0],
149+
h: size[1]
150+
}));
151+
}
152+
}
153+
154+
function raiSetEids(bid) {
155+
let eids = [];
156+
157+
if (bid && bid.userId) {
158+
raiSetUserId(bid, eids, 'id5-sync.com', utils.deepAccess(bid, `userId.id5id`));
159+
raiSetUserId(bid, eids, 'pubcommon', utils.deepAccess(bid, `userId.pubcid`));
160+
raiSetUserId(bid, eids, 'criteo.com', utils.deepAccess(bid, `userId.criteoId`));
161+
raiSetUserId(bid, eids, 'liveramp.com', utils.deepAccess(bid, `userId.idl_env`));
162+
raiSetUserId(bid, eids, 'liveintent.com', utils.deepAccess(bid, `userId.lipb.lipbid`));
163+
raiSetUserId(bid, eids, 'adserver.org', utils.deepAccess(bid, `userId.tdid`));
164+
}
165+
166+
return eids;
167+
}
168+
169+
function raiSetUserId(bid, eids, source, value) {
170+
if (utils.isStr(value)) {
171+
eids.push({
172+
userId: value,
173+
source: source
174+
});
175+
}
176+
}

0 commit comments

Comments
 (0)