Releases: prebid/Prebid.js
Prebid 0.8.1 Release
This patch release contains some important updates.
Also as additional adapters are added it is not recommended to build and run Prebid.js with all available adapters. Therefore we are moving the latest CDN hosted version to a ./not-for-prod/.prebid.js
path.
Production implementations should build from source with only required adapters or customize the Prebid.js build easily using the Download page: http://prebid.org/download.html
New Features
- New API method
pbjs.enableSendAllBids()
set Prebid to send targeting keys for all bidders to ad server - Add bidFloor parameter for AOL adapter #324 contributed by @kizzard
New API method pbjs.enableSendAllBids()
pbjs.enableSendAllBids()
can be called from the implementation page which will set Prebid to include targeting information for each bidder returned in a call to requestBids()
when making an ad server request. This call needs to be made before the call to pbjs.setTargetingForGPTAsync()
.
Targeting key/pairs would then look like this:
{
"hb_bidder": "appnexus",
"hb_adid": "191f4aca0c0be8",
"hb_pb": "10.00",
"hb_size": "300x250",
"hb_bidder_springserve": "springserve",
"hb_adid_springserve": "129a7ed7a6fb40e",
"hb_pb_springserve": "10.00",
"hb_size_springserve": "300x250",
"hb_bidder_triplelift": "triplelift",
"hb_adid_triplelift": "1663076dadb443d",
"hb_pb_triplelift": "10.00",
"hb_size_triplelift": "0x0",
"hb_bidder_appnexus": "appnexus",
"hb_adid_appnexus": "191f4aca0c0be8",
"hb_pb_appnexus": "10.00",
"hb_size_appnexus": "300x250",
"hb_bidder_pagescience": "pagescience",
"hb_adid_pagescience": "2024c6abebaa183",
"hb_pb_pagescience": "10.00",
"hb_size_pagescience": "300x250",
}
any custom targeting will continue to take precedence over defaults.
Add bidfloor parameter for AOL adapter
The AOL adapter now accepts a bidfloor
param as:
{
bidder: 'aol',
params: {
network: '1234',
placement: 45656,
bidFloor : '10' // String - optional bid floor amount in dollars
}
}
Bug fixes in this release
- #323 Patch indexExchange adapter to allow more than 20 slots to be requested (contributed by @indexexchange)
- #325 Use
package.json
to populate version information (contributed by @steven-hadfield) - #318 Remove unneeded variable (contributed by @mmilleruva)
- commit log here: https://github.com/prebid/Prebid.js/compare/0.8.0...0.8.1)
Prebid 0.8.0 Release
This version of Prebid.js brought to you by over 20 members of the developer community. Thank you for supporting open source software.
You can improve performance by loading the Prebid and GPT libraries in parallel. See the example pages for changes to be made to the page to achieve this. (ht to @BartVB for the suggestion).
New Features
- Prebid.org download page Easily customize Prebid.js build http://prebid.org/download.html
- New adapter for Sonobi (contributed by @astudnicky, closes #90)
- New adapter for Brightcom (contributed by @matan-ybrant)
- New adapter for Adequant (contributed by @relegit)
- New API for
pbjs.setPriceGranularity()
adjust price bucket granularity in one line - Alias adapters with config setting Specificy aliases in
package.json
"adapters" - Metadata added "REPO_AND_VERSION" available in
constants.json
to get repo owner, library and version info (contributed by @cliffliang) - Analytics Customization Support for Google Analytics named trackers (contributed by @bborn, closes #291)
- Always send default keys Always use default bid key/value pairs in addition to any customizations (#295)
- Performance Improvements load
prebid
andgpt
in parallel (suggested by @BartVB, closes #276) - Code quality & style reports in terminal (run
gulp quality
checks before opening PRs) - New consolidated library for AOL (contributed by @sneako)
- Multiple size slot support in IndexExchange adapter (contributed by @indexexchange)
New adapter for Sonobi - how to add:
var adUnits = [{
code: '/9968336/header-bid-tag-0',
sizes: [[300, 250], [300, 600]],
bids: [{
bidder: 'sonobi', // New format
params: {
dom_id: 'PER SLOT', // <String> dom Id
ad_unit:'PER SLOT' // <String> ad unit code
}
},
{
bidder: 'sonobi', // Old account format
params: {
dom_id: 'PER SLOT', // <String> dom Id
placement_id:'PER SLOT' // <String> placement Id
}
}]
}];
New adapter for Brightcom - how to add
var adUnits = [
{
code: '/9968336/header-bid-tag-0',
sizes: [[300, 250], [300, 600]],
bids: [
{
bidder: 'brightcom',
params: {
tagId: 12345 // Tag ID supplied by Brightcom - brightcom.com
}
}
]
}
];
New adapter for Adequant - how to add:
var adUnits = [{
code: '/9968336/header-bid-tag-0',
sizes: [[300, 250], [300, 600]],
bids: [{
bidder: 'adequant',
params: {
publisher_id: '1234567', // REQUIRED int or str publisher ID. To get one, register at https://control.adequant.com
bidfloor: 0.01 // OPTIONAL float bid floor in $ CPM
}
}
]}
}];
New API for pbjs.setPriceGranularity()
pbjs.setPriceGranularity
is a Prebid API method to configure which price bucket is used for "hb_pb". The accepted values are, "low", "medium", "high" and "auto", with "medium" being the default. Also introduces the "auto" price bucket which applies a sliding scale to determine granularity as:
cpm | granularity |
---|---|
cpm < 5 | .05 increments |
cpm > 5 and < 10 | .10 increments |
cpm > 10 and < 20 | .50 increments |
cpm > 20 | pb capped at 20 |
Alias adapters with config setting
Adapter aliases can be specified in the "adapters" section of ./package.json
. You can pass an object in the adapters array as shown:
"adapters": [
"triplelift",
"rubicon",
{ "appnexus": {"alias": "brealtime"} }
]
This syntax could also be used to pass additional build-level config to a given adapter, though alias is the only such property read in the adapter loader at the moment.
New Metadata for Github account and version
A new metadata string can be found in constants.json
for "REPO_AND_VERSION" which provides the Github account name that the code was downloaded from (e.g. "prebid") the library ("prebid") and version ("0.8.0"). This can be useful for included in bid requests or for analytics. The returned value is e.g. "prebid_prebid_0.8.0"
.
Analytics Customization
Google Analytics named trackers are now supported. A custom tracker name (or multiple tracker names) can be registerd with GA on your page like so:
ga('create', 'UA-xxxxxxxx-x', 'auto', 'customTrackerName');
And used with prebid by passing that tracker name in the pbjs.enableAnalytics
options:
pbjs.enableAnalytics({
provider: 'ga',
options: {
global: 'ga', // <string> name of GA global. Default is 'ga'
trackerName: 'customTrackerName',
enableDistribution: false, // <bool> enable/disable distribution. Recommend disable to save bandwidth/calls
}
});
Always send default keys
Bidders will always get key value pairs that are set in the default (i.e. hb_pb
, hb_bidder
, hb_adid
, hb_size
) even if using alwaysUseBid=true
. If you choose to use the same key as the default keys, the standard value will be overwritten with the custom value.
Bug fixes in this release
- #267 Fix for
pbjs
not defined error - reported by @dmitriyshashkin - #269 and 272 Fix for Google Analytics not reporting initial events or timeout events (reported by @dmitriyshashkin)
- #254 Fix for Rubicon adapter bug with multiple iframes (reported by @Deimos01 and fixed by @bretg)
- [#245] Use
node 4.x
or greater - [#279] Fix
bids undefined
error (fixed by @steven-hadfield) - Other misc bug fixes (see the full commit log here: https://github.com/prebid/Prebid.js/compare/0.7.0...0.8.0)
Prebid 0.7.0 Release
New Features in this release
- New public API for
bidWon
Event can be listened to when bids are registered - New adapter for NginAd (contributed by @nginadfoundation)
- [Beta] Updated adapter for AppNexus Adapter uses new SDK for loading ads and groups requests.
- New adapter for TripleLift Adapter added (contributed by @mattjone )
- Dynamic adapter selection Updated build process to specify which adapters to include in the final build. Choose adapters in
package.json
- Rubicon legacy adapter removed All implementers should be using the updated adapter
rubicon.js
. - HTTPS support for all adapters all adapters now support HTTPS.
New public API for bidWon
event
//register event
pbjs.onEvent('bidWon', function(data){
console.log('winner!');
console.log(data); //bid info
});
//turn off event
pbjs.offEvent('bidWon');
New adapter for NginAd - how to add
var adUnits = [{
code: '/9968336/header-bid-tag-0',
sizes: [[300, 250], [300, 600]],
bids: [{
bidder: 'nginad',
params: {
pzoneid: '7', // <String> PublisherAdZoneID
nginadDomain: "server.nginad.com" // the domain where you installed NginAd
}
}]
}];
[Beta] Updated adapter for AppNexus:
How to use the new adapter:
- Update
package.json
with the name ofappnexusAst
for AppNexus adapter. - Generate the build using
gulp build
- Use the output at
build/dist/prebid.js
var adUnits = [{
code: '/9968336/header-bid-tag-0',
sizes: [[300, 250], [300, 600]],
bids: [{
bidder: 'appnexus',
params: {
placementId: '2251610', //placementId || invCode && member required
invCode : '1234ABC', //Inventory Code - has to be used in combination with member
member : '12345', //member ID - has to be used in combination with invCode
keywords : {foo : 'bar' } //Query string segment params. These are GLOBAL Params not tag level.
}
}]
}];
New adapter for TripleLift - how to add:
var adUnits = [{
code: '/9968336/header-bid-tag-0',
sizes: [[300, 250], [300, 600]],
bids: [{
bidder: 'triplelift',
params: {
inventoryCode: 'headerbidding_placement' }
}
}]
}];
Dynamic adapter selection
Inside package.json
you can specify which adapters to be included in the build to optimize file size of prebid.js
Pacakge.json:
"adapters": [
"adform",
"aol",
"appnexus",
"indexExchange",
"openx",
"pubmatic",
"pulsepoint",
"rubicon",
"rubiconLegacy",
"sovrn",
"springserve",
"yieldbot",
"nginad",
"triplelift"
],
- Update pacakge.json with the desired adapters
- Run
gulp build
orgulp serve
to generate a new build - Get the build from
build/dist/prebid.js
Bug fixes in this release
- Misc bug fixes for AOL (0783419)
- Fix for PubMatic not always firing tracking impressions & IE support (24fe2b0), (#249)
- Other misc bug fixes (see the full commit log here: 0.6.0...master)
Prebid version 0.6.0 release
New Features in this release
- [Breaking change] Rubicon adapter update Updated to utilize the Fastlane SDK (contributed by @pdezwart & help from @bretg)
- BRealTime Adapter Adapter included natively with Prebid.js
- Springserve Adapter Adapter added (contributed by @JohnBuonomo)
- Adform Adapter Adapter added (contributed by @braizhas)
- Dev Updates Updated build to included Webpack, Karma, and Istanbul for code coverage
[Breaking change] Rubicon adapter update
Rubicon adapter parameters have been updated to reflect the Fastlane SDK. See below as an example. Also see the table below for matching with the old adapter.
var adUnits = [{
code: '/9968336/header-bid-tag-0',
sizes: [[300, 250], [300, 600]],
bids: [{
accountId: "123", //Required - String id
siteId: "456", //Required - String id
zoneId: "789", //Required - String id
sizes: [15] //optional - array[number] of size key
}]
}];
Original Parameter | Updated Parameter | Scope | Description | Example |
---|---|---|---|---|
rp_account | accountId | required | The publisher account ID | “4934” |
rp_site | siteId | required | The site ID | “13945” |
rp_zonesize | zoneId | required | The zone ID | "23948" |
rp_zonesize | sizes | optional | Array of RubiconProject size IDs | [15] |
How to add bidder BRealTime:
var adUnits = [{
code: '/9968336/header-bid-tag-0',
sizes: [[300, 250], [300, 600]],
bids: [{
bidder: 'brealtime',
params: {
placementId: '2251610'
}
}]
}];
How to add bidder Adform:
var adUnits = [{
code: '/9968336/header-bid-tag-0',
sizes: [[300, 250], [300, 600]],
bids: [{
bidder: 'adform',
params: {
adxDomain: 'adx.adform.net', //optional
mid: 74042
}
}]
}];
How to add bidder Springserve:
var adUnits = [{
code: '/9968336/header-bid-tag-0',
sizes: [[300, 250], [300, 600]],
bids: [{
bidder: 'springserve',
params: {
impId: 1234, //Required - number
supplyPartnerId: 1, //Required - number
}
}]
}];
Dev Update
rm -rf ./node_modules && npm cache clean && npm install
With this commit we have changed the build system to use Webpack, Karma and Istanbul. This change was made to support improved unit test coverage and reporting. Reinstalling Prebid.js is necessary as many node modules changed, and you are likely to experience errors otherwise. After pulling down latest master please rm -rf ./node_modules && npm cache clean && npm install
.
Build path change
The ./dist
and ./dev
directories have been moved to a ./build
directory -- please update your own dev and example paths to prebid.js
accordingly. You will also find code coverage reports in the ./build/coverage
directory.
Criteo Removed
Criteo has requested to temporarily remove the adaptor for further improvements.
Bug fixes in this release
- Fixed issue with timing of bids with Sovrn adapter (contributed by @ojotoxy) (#183)
- Fixed bug when pixel url is
undefined
in adloader.js (contributed by @ericperez) (#172) - Bug fixed for OpenX not recording impressions correctly (contributed by @BartVB) (#191)
- Other misc bug fixes (see the full commit log here: 0.5.0...master)
Prebid 0.5.0 released!
New Features in this release
- Pulsepoint Adapter added (contributed by @anand-venkatraman @Pulsepoint)
- AOL Adapter added (contributed by @nickjacob & @ikhemissi)
- IndexExchange Adapter upgrade to v9 (contributed by @Dumtard & @amandelindex & @headertag @indexexchange)
- Appnexus adapter update to support custom query params
- Bid Adjustments functionality to adjust bids in real time.
- [beta] Alias Bidder functionality added.
- Inherit adServerTargeting setting from standard functionality added
How to add bidder Pulsepoint:
var adUnits = [{
code: '/9968336/header-bid-tag-0',
sizes: [[300, 250], [300, 600]],
bids: [{
bidder: 'pulsepoint',
params: {
cf: '300X250', //String adSize identifier
cp: 123345, //Number Publisher Id
ct: 123456 //Number Ad Tag Id
}
}]
}];
How to add bidder AOL:
var adUnits = [{
code: '/9968336/header-bid-tag-0',
sizes: [[300, 250], [300, 600]],
bids: [{
bidder: 'aol',
params: {
placement: 'TO ADD', //String placement
network: 'TO ADD' //String network,
//optional params
sizeId : 123, //Number
alias : 'TO ADD, //String
size : [300,250] //Array[Number]
}
}]
}];
How to add bidder IndexExchange:
var adUnits = [{
code: '/9968336/header-bid-tag-0',
sizes: [[300, 250], [300, 600]],
bids: [{
bidder: 'indexExchange',
params: {
id: 'TO ADD', //String - id of placement required
siteID: TO ADD, //Number - site id required
timeout: 1000, //Number Optional
tier2SiteID: 'TO ADD', //String Optional
tier3SiteID: 'TO ADD' //String Optional
}
}]
}];
Send custom query params in AppNexus Adapter:
bidder: 'appnexus',
params: {
placementId: '2251610',
queryParam : 'value', // <--- new unmatched params will automatically get sent in the query like "&queryParam=value&anotherQuery=value2"
anotherQuery : 'value2'
}
Real time Bid adjustment feature
pbjs.bidderSettings = {
aol: {
bidCpmAdjustment : function(bidCpm){ // <-- new field - adjust the bid in real time before the auction takes place
return bidCpm * .9;
}
}
};
[beta] Alias Bidder
/**
* Aliased bidders will use the existing adapter and require the same params as the existing adapter.
* The only change is the bidderCode is updated. Currently this feature is considered beta and only AppNexus adapter supports aliasing.
* @param {String} bidderCode Existing bidderCode that should be aliased
* @param {String} alias The aliased bidderCode
*/
pbjs.aliasBidder('appnexus', 'brealtime')
Inherit adServerTargeting setting from standard setting (#148)
pbjs.bidderSettings = {
aol: {
bidCpmAdjustment : function(bidCpm){
return bidCpm * .9;
}
//AOL bidder will inherit from "standard" adserverTargeting keys below
}
standard: {
adserverTargeting: [{
key: "hb_bidder",
val: function(bidResponse) {
return bidResponse.bidderCode;
}
}, {
key: "hb_adid",
val: function(bidResponse) {
return bidResponse.adId;
}
}, {
key: "hb_pb",
val: function(bidResponse) {
return bidResponse.pbMg;
}
}]
}
};
Bug fixes in this release
Prebid 0.4.1 released
New Features in this release
- Sovrn Adapter added (contributed by @pwfsd with support from Sovrn team)
- [BETA] Analytics data collection and GA adapter added for quick integration
Breaking Change in this release
- Casale renamed to IndexExchange
How to add bidder Sovrn:
var adUnits = [{
code: '/9968336/header-bid-tag-0',
sizes: [[300, 250], [300, 600]],
bids: [{
bidder: 'sovrn',
params: {
tagid: '123'
}
}]
}];
Analytics integration with GA
If your site uses analytics.js collection, a simple toggle will automatically send crucial data points to your account.
Enable GA collection:
ga('create', 'XXXXXX', 'auto');
//Send data from prebid.js automatically
pbjs.que.push(function() {
pbjs.enableAnalytics({
provider: 'ga',
options: {
global: 'ga', // <string> name of GA global. Default is 'ga'
enableDistribution: false, // <bool> enable/disable distribution data (see prebid.org for more information). If you're working with more than 3 bidders, we recommend this flag set to false for the following reason (in notes).
}
});
});
Note: GA throttles the max number of requests that can be sent with analytics.js to 20 initial + 2/second. If you're using more than 5 bidders, the GA throttling may prevent some data from being sent. We're implementing a data reporting queue in the next few releases to address this issue. See this link for details on GA's throttling.
Breaking Change: Deprecated bidder name Casale - now called IndexExchange
The bidderCode casale
has been updated to indexExchange
. Please update your configuration appropriately if using this bidder. Also of note is that IndexExchange will be upgraded to v9 of the their API in the next prebid.js release.
Before
var adUnits = [{
code: '/9968336/header-bid-tag-0',
sizes: [[300, 250], [300, 600]],
bids: [{
bidder: 'casale',
params: {
slotId: 'TO ADD', // <String>
casaleUrl: 'TO ADD' // <String>
}
}]
}];
After
var adUnits = [{
code: 'div-id-header-bid-tag-0',
sizes: [[300, 250], [300, 600]],
bids: [{
bidder: 'indexExchange',
params: {
slotId: 'TO ADD', // <String>
indexUrl: 'TO ADD' // <String>
}
}]
}];
Bug fixes in this release
- Fixed issue with YieldBot adapter not sending back bad bids
- Fixed issue with bidsBackHandler execution timing (#98)
- Fixed issue with clearing DFP slot targeting (#104)
- Fixed issue with RefreshBids with adUnitCodes not working correctly (#101)
- Fixed issue with
alwaysUseBid=true
not working correctly - Other misc bug fixes
Prebid 0.4.0 released!
New 0.4.0 release with some minor configuration adjustments and functionality.
Recommended configuration change for use with DFP
Recommend to use div_id
for the adUnit.code
instead of the adUnitPath
that was previously recommended. See this link for details.
Before
var adUnits = [{
code: '/9968336/header-bid-tag-0',
sizes: [[300, 250], [300, 600]],
bids: [{
bidder: 'appnexus',
params: { placementId: 'TO ADD' }
}]
}];
After
var adUnits = [{
code: 'div-id-header-bid-tag-0',
sizes: [[300, 250], [300, 600]],
bids: [{
bidder: 'appnexus',
params: { placementId: 'TO ADD' }
}]
}];
Adding a custom adapter
pbjs.que.push(function(){
var customAdapter = function customAdapter() {
return {
callBids: function(params) {
pbjs.loadScript('//path.to.custom.demand.js', function() {
var bid = pbjs.createBid(1);
//set bid options
//bid.cpm = ...
//add bid to responses
pbjs.addBidResponse(adunitCode, bid);
});
}
};
};
//register your custom adapter
pbjs.registerBidAdapter(customAdapter, 'customAdapter');
//other configs
...
pbjs.requestBids();
});
Enhancements in this release
- Added dynamic adapter support. Adapters can be added in configuration now (API is public)
- Yieldbot sponsored adapter committed
- DFP targeting can now use Div Ids as well as slot ids (issue #69)
alwaysUseBid
configuration param available for sending custom key targeting- Updated integration example page
- Some basic unit tests added
Bug fixes in this release
- Fix issue with price buckets
- Fix issue with Criteo adapter
- Fix issue with bidsBackHandler not getting bidResponses
- Other misc bug fixes
Prebid release 0.3.2 - new adapters and bug fixes
Bug fixes and enhancements in this release
- Add adapters
- Yieldbot
- Casale
- Updated integration example page
- Add event timings
- Bower package management
- Misc bug fixes
Major API Updates for Refreshing Ad Units
In the new API, we've made the below changes to better support the refresh functionality. Note that this new API has introduced a few breaking changes:
Breaking Changes
Change 1: A command queue
Now all pbjs commands should be wrapped by pbjs.que.push
. This ensures pbjs commands are in scope and are executed in the right order. Example:
pbjs.que.push(function() {
pbjs.setTargetingForGPTAsync();
});
Change 2: Add ad units
Instead of directly pushing objects into the pbjs.adUnits array (as in the previous versions), the new API requires the function pbjs.addAdUnits(adUnits)
. Example:
var adUnits = [{
code: '/9968336/header-bid-tag-0',
sizes: [[300, 250], [300, 600]],
bids: [{
bidder: 'appnexus',
params: { placementId: 'TO ADD' }
}]
}];
pbjs.addAdUnits(adUnits);
Change 3: Request bids
Previously, prebid.js automatically sends out bid requests as soon as the library loads. This isn't needed for many sites. The new API requires the page to explicit call pbjs.requestBids
to send out bid requests. Example:
pbjs.requestBids({
bidsBackHandler: function(bidResponses) { }
});
Change 4: Bids back callback
The callback when requested bids are returned are now in pbjs.requestBids
(as in the above example). No more pbjs.registerBidCallbackHandler()
Deprecated Functions
1. Function getAdserverTargetingParamsForAdUnit(adUnitCode)
getAdserverTargetingParamsForAdUnit(adUnitCode)
It's now split into getAdserverTargeting()
and getAdserverTargetingForAdUnitCode([adunitCode])
Find out docs here
2. Function requestBidsForAdUnit(adUnitCode)
requestBidsForAdUnit(adUnitCode)
It's now requestBids()
3. Function registerBidCallbackHandler()
registerBidCallbackHandler()
It's now a callback within the requestBids()
New Features
1. Request selected array of bids
pbjs.requestBids({
adUnitCodes: ['/99336/slot-0'],
bidsBackHandler: function() {
pbjs.setTargetingForGPTAsync(['/99336/slot-0']);
googletag.pubads().refresh([slotObj]);
}
});
See docs for pbjs.requestBids()
http://prebid.org/publisher-api.html#function-reference
2. New callback functionality (more events will be added)
A new callback when all bids are back for individual ad units:
pbjs.addCallback('adUnitBidsBack', function(adUnitCode){
console.log('ad unit bids back for : ' + adUnitCode);
});
Version 0.2.1 - Many bug fixes
Bug story fixes:
- pbjs.getBidResponses returns String not Object
- OpenX - jstag always loads
- hasOwn not defined problem
- Updated the price map: pbLg, pbMg
- The below Rubicon creative doesn't serve.
- Remove empty bids in targeting params
- Refresh API call for Prebid.js
- Prebid.js Loops
- Implement per ad unit: pbjs.requestBidsForAdUnit( code )