diff --git a/_data/message.yml b/_data/message.yml index aeff32536a..af6e4801f9 100644 --- a/_data/message.yml +++ b/_data/message.yml @@ -1,4 +1,4 @@ #-------------Message---------------- - messageId: 1 - messageText: Prebid Leadership Summit in New York on June 11th 2019! - messageCreateDt: 05_22_2019 + messageText: Prebid Leadership Summit in London on July 11th 2019! + messageCreateDt: 06_19_2019 diff --git a/_data/partners.yml b/_data/partners.yml index 0ea676ad40..abdfeb3a85 100644 --- a/_data/partners.yml +++ b/_data/partners.yml @@ -53,6 +53,11 @@ imgURL: /assets/images/partners/standard/Pubnative-RGB-Logo.png type: standard +- company: Mediavine + link: https://www.mediavine.com/ + imgURL: /assets/images/partners/publisher/mediavine-sq-teal-navy-pn-RGB.png + type: publisher + - company: GoBrowsi link: https://gobrowsi.com imgURL: /assets/images/partners/community/Browsi-Logo.png diff --git a/_includes/partners.html b/_includes/partners.html index 3cfc011c3f..ca5254e70a 100644 --- a/_includes/partners.html +++ b/_includes/partners.html @@ -42,6 +42,26 @@ writeDynamicTable({div:"memberTableStandard", data:"memberDataStandard", sort:"rowFirst"}); +

Prebid.org Publisher Members

+ + +
+ +

Prebid.org Community Members

+ + +If however, the line item is targeted to `hb_deal` (without a bidder code), +then the simplified creative setup in the [step-by-step instructions](/adops/step-by-step.html#step-2-add-a-creative) will be fine. diff --git a/assets/images/partners/publisher/mediavine-sq-teal-navy-pn-RGB.png b/assets/images/partners/publisher/mediavine-sq-teal-navy-pn-RGB.png new file mode 100644 index 0000000000..44ab3aa0e7 Binary files /dev/null and b/assets/images/partners/publisher/mediavine-sq-teal-navy-pn-RGB.png differ diff --git a/dev-docs/bidders.md b/dev-docs/bidders.md index 360727276f..8bd7a780d7 100644 --- a/dev-docs/bidders.md +++ b/dev-docs/bidders.md @@ -94,9 +94,13 @@ The following parameters in the `bidResponse` object are common across all bidde

Note:

This is a S2S adapter only. {% endif %} -

Bidder Code

+

Features

+ +{: .table .table-bordered .table-striped } +| **Bidder Code** | {{ page.biddercode }} | **Prebid.org Member** | {% if page.prebid_member == true %}yes{% else %}no{% endif %} | +| **Media Types** | display{% if page.media_types contains 'video' %}, video{% endif %}{% if page.media_types contains 'native' %}, native{% endif %} | **GDPR Support** | {% if page.gdpr_supported == true %}yes{% else %}no{% endif %} | +| **User IDs** | {% if page.userIds and page.userIds != '' %}{{page.userIds}}{% else %}none{% endif %} | **COPPA Support** | {% if page.coppa_supported == true %}yes{% else %}no{% endif %} | -{{ page.biddercode }}

"Send All Bids" Ad Server Keys

diff --git a/dev-docs/bidders/SafeReach.md b/dev-docs/bidders/SafeReach.md new file mode 100644 index 0000000000..937b72cc54 --- /dev/null +++ b/dev-docs/bidders/SafeReach.md @@ -0,0 +1,16 @@ +--- +layout: bidder +title: SafeReach +description: Prebid Safe Reach Bidder Adaptor +hide: true +biddercode: safereach +aliasCode : aardvark +--- + +### bid params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|------|----------|--------------------|----------|----------| +| `ai` | required | The auction ID | `'XBC1'` | `string` | +| `sc` | required | The adshortcode | `'AF2g'` | `string` | diff --git a/dev-docs/bidders/appnexus.md b/dev-docs/bidders/appnexus.md index 38005316dc..d7adfb7773 100644 --- a/dev-docs/bidders/appnexus.md +++ b/dev-docs/bidders/appnexus.md @@ -6,6 +6,7 @@ biddercode: appnexus hide: true media_types: banner, video, native gdpr_supported: true +prebid_member: true --- ### Table of Contents diff --git a/dev-docs/bidders/arteebee.md b/dev-docs/bidders/arteebee.md index 30d6d3fe74..375338944e 100644 --- a/dev-docs/bidders/arteebee.md +++ b/dev-docs/bidders/arteebee.md @@ -5,6 +5,7 @@ description: Prebid Arteebee Bidder Adaptor hide: true biddercode: arteebee gdpr_supported: true +coppa_supported: true --- ### Bid Params diff --git a/dev-docs/bidders/beachfront.md b/dev-docs/bidders/beachfront.md index 9bcbe689b9..a8c4e2e3f9 100644 --- a/dev-docs/bidders/beachfront.md +++ b/dev-docs/bidders/beachfront.md @@ -18,6 +18,7 @@ userIds: unifiedId/tradedesk | `bidfloor` | required | Bid floor | `0.01` | `float` | | `video` | optional | Object with video parameters. See the [video section below](#beachfront-video) for details. | | `object` | | `banner` | optional | Object with banner parameters. See the [banner section below](#beachfront-banner) for details. | | `object` | +| `player` | optional | Object with outstream player parameters. See the [player section below](#beachfront-player) for details. | | `object` | @@ -41,3 +42,14 @@ userIds: unifiedId/tradedesk |------------|----------|-----------------------------------------|------------------------------------------|----------| | `appId` | optional | Beachfront Exchange ID for banner bids. | `'3b16770b-17af-4d22-daff-9606bdf2c9c3'` | `string` | | `bidfloor` | optional | Bid floor for banner bids. | `0.01` | `float` | + + + +### player params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|------------|----------|-----------------------------------------|------------------------------------------|----------| +| `progressColor` | optional | The color of the progress bar formatted as a CSS value. | `#50A8FA` | `string` | +| `expandInView` | optional | Defines whether to expand the player when the ad slot is in view. Defaults to `false`. | `false` | `boolean` | +| `collapseOnComplete` | optional | Defines whether to collapse the player when ad playback has completed. Defaults to `true`. | `true` | `boolean` | diff --git a/dev-docs/bidders/bidglass.md b/dev-docs/bidders/bidglass.md new file mode 100644 index 0000000000..3f6037aec2 --- /dev/null +++ b/dev-docs/bidders/bidglass.md @@ -0,0 +1,16 @@ +--- +layout: bidder +title: Bid Glass +description: Bid Glass Bidder Adaptor +hide: true +biddercode: bidglass +--- + + + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|------------|----------|----------------------|------------|----------| +| `adUnitId` | required | The bid.glass Ad Unit ID | `'777'` | `string` | \ No newline at end of file diff --git a/dev-docs/bidders/criteo.md b/dev-docs/bidders/criteo.md index 0a1681ff5b..668f635eeb 100755 --- a/dev-docs/bidders/criteo.md +++ b/dev-docs/bidders/criteo.md @@ -7,6 +7,7 @@ biddercode: criteo bidder_supports_deals: false media_types: native gdpr_supported: true +prebid_member: true --- diff --git a/dev-docs/bidders/feedad.md b/dev-docs/bidders/feedad.md new file mode 100644 index 0000000000..9d252eedc1 --- /dev/null +++ b/dev-docs/bidders/feedad.md @@ -0,0 +1,16 @@ +--- +layout: bidder +title: FeedAd +description: Prebid FeedAd Bidder Adaptor +hide: true +biddercode: feedad +media_types: banner, video +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|----------------------------------------------------------|----------------------------------------------------------|----------| +| `clientToken` | required | Your FeedAd client token. Check your FeedAd admin panel. | `'EiRjZDFiYzI2ZC03OTA2LTQyOTEtOGFmMC0xYzMyZmMwNTFkMDU='` | `string` | +| `placementId` | required | A FeedAd placement ID of your choice | `'prebid-test'` | `string` | diff --git a/dev-docs/bidders/indexExchange.md b/dev-docs/bidders/indexExchange.md index b8c35099d9..0f3815ef9c 100644 --- a/dev-docs/bidders/indexExchange.md +++ b/dev-docs/bidders/indexExchange.md @@ -5,6 +5,7 @@ description: Prebid Index Exchange Bidder Adapter biddercode: ix hide: true gdpr_supported: true +media_types: banner, video --- ## Overview @@ -49,16 +50,20 @@ var adUnits = [{ ```javascript var adUnits = [{ // ... - mediaTypes: { banner: { sizes: [ [300, 250], [300, 600] ] + }, + video: { + context: 'instream', + playerSize: [ + [1280, 720] + ] } - } - + }, // ... }]; ``` @@ -66,11 +71,11 @@ var adUnits = [{ ### Supported Media Types {: .table .table-bordered .table-striped } -| Type | Support | -| --- | --- | -| Banner | Fully supported for all IX approved sizes. | -| Video | Not supported. | -| Native | Not supported. | +| Type | Support | +| ------ | ------- | +| `Banner` | Fully supported for all IX approved sizes. | +| `Video` | Fully supported for all IX approved sizes. | +| `Native` | Not supported. | ## Bid Parameters @@ -80,18 +85,32 @@ object are detailed here. ### Banner {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------|------------------| -| `siteId` | required | An IX-specific identifier that is associated with a specific size on this ad unit. This is similar to a placement ID or an ad unit ID that some other modules have. | `'3723'` | `string` | -| `size` | required | The single size associated with the site ID. It should be one of the sizes listed in the ad unit under `adUnits[].sizes` or `adUnits[].mediaTypes.banner.sizes`. | `[300, 250]` | `Array` | +| Name | Scope | Description | Example | Type | +| ---- | ----- | ----------- | ------- | ---- | +| `siteId` | Required | An IX-specific identifier that is associated with a specific size on this ad unit. This is similar to a placement ID or an ad unit ID that some other modules have. | `'3723'` | `string` | +| `size` | Required | The single size associated with the site ID. It should be one of the sizes listed in the ad unit under `adUnits[].sizes` or `adUnits[].mediaTypes.banner.sizes`. | `[300, 250]` | `Array` | +### Video + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +| ---- | ----- | ----------- | ------- | ---- | +| `siteId` | Required | An IX-specific identifier that is associated with a specific size on this ad unit. This is similar to a placement ID or an ad unit ID that some other modules have. | `'3723'` | `string` | +| `size` | Required | The single size associated with the site ID. It should be one of the sizes listed in the ad unit under `adUnits[].sizes` or `adUnits[].mediaTypes.video.playerSize`. | `[300, 600]` | `Array` | +| `video` | Required | The video object will serve as the properties of the video ad. You can create any field under the video object that is mentioned in the `OpenRTB Spec v2.5`. Some fields like `mimes`, `protocols`, `minduration`, `maxduration` are required. | `video: { startdelay: 0 }` | `object` | +| `video.mimes` | Required | Array list of content MIME types supported. | `['video/mp4', 'video/x-flv']` | `Array` | +| `video.minduration` | Required | Minimum video ad duration in seconds. | `0` | `integer` | +| `video.maxduration` | Required | Maximum video ad duration in seconds. | `300` | `integer` | +| `video.protocol` / `video.protocols` | Required | Either a single protocol provided as an integer, or protocols provided as a list of integers. `2` - VAST 2.0, `3` - VAST 3.0, `5` - VAST 2.0 Wrapper, `6` - VAST 3.0 Wrapper | `[2,3,5,6]` | `integer` / `Array` | ## Setup Guide Follow these steps to configure and add the IX module to your Prebid.js integration. -The examples in this guide assume the following starting configuration: +The examples in this guide assume the following starting configuration (you may remove banner or video, if either does not apply). + +In regards to video, `context` can either be `'instream'` or `'outstream'`. Note that `outstream` requires additional configuration on the adUnit. ```javascript var adUnits = [{ @@ -105,6 +124,18 @@ var adUnits = [{ } }, bids: [] +}, +{ + code: 'video-div-a', + mediaTypes: { + video: { + context: 'instream', + playerSize: [ + [1280, 720] + ] + } + }, + bids: [] }]; ``` @@ -117,8 +148,8 @@ bid objects under `adUnits[].bids`: { bidder: 'ix', params: { - siteId: '', - size: [] + siteId: '123456', + size: [300, 250] } } ``` @@ -126,8 +157,9 @@ bid objects under `adUnits[].bids`: Set `params.siteId` and `params.size` in each bid object to the values provided by your IX representative. -**Example** +**Examples** +**Banner:** ```javascript var adUnits = [{ code: 'banner-div-a', @@ -142,28 +174,96 @@ var adUnits = [{ bids: [{ bidder: 'ix', params: { - siteId: '12345', + siteId: '123456', size: [300, 250] } }, { bidder: 'ix', params: { - siteId: '12345', + siteId: '123456', size: [300, 600] } }] }]; ``` - +**Video (Instream):** +```javascript +var adUnits = [{ + code: 'video-request-a', + mediaTypes: { + video: { + context: 'instream', + playerSize: [ + [1280, 720] + ] + } + }, + bids: [{ + bidder: 'ix', + params: { + siteId: '123456', + size: [1280, 720], + video: { + skippable: false, + mimes: [ + 'video/mp4', + 'video/webm' + ], + minduration: 0, + maxduration: 60, + protocols: [6] + } + } + }] +}]; +``` Please note that you can re-use the existing `siteId` within the same flex position. +**Video (Outstream):** +Note that currently, outstream video rendering must be configured by the publisher. In the adUnit, a `renderer` object must be defined, which includes a `url` pointing to the video rendering script, and a `render` function for creating the video player. See http://prebid.org/dev-docs/show-outstream-video-ads.html for more information. + +```javascript +var adUnits = [{ + code: 'video-div-a', + mediaTypes: { + video: { + context: 'outstream', + playerSize: [[640, 360]] + } + }, + renderer: { + url: 'https://test.com/my-video-player.js', + render: function (bid) { + ... + } + }, + bids: [{ + bidder: 'ix', + params: { + siteId: '123456', + size: [640, 360], + video: { + skippable: false, + mimes: [ + 'video/mp4', + 'video/webm' + ], + minduration: 0, + maxduration: 60, + protocols: [6] + } + } + }] +}]; +``` + ##### 2. Include `ixBidAdapter` in your build process -When running the build command, include `ixBidAdapter` as a module. +When running the build command, include `ixBidAdapter` as a module, as well as `dfpAdServerVideo` if you require video support. ``` -gulp build --modules=ixBidAdapter,fooBidAdapter,bazBidAdapter +gulp build --modules=ixBidAdapter,dfpAdServerVideo,fooBidAdapter,bazBidAdapter ``` If a JSON file is being used to specify the bidder modules, add `"ixBidAdapter"` @@ -172,6 +272,7 @@ to the top-level array in that file. ```json [ "ixBidAdapter", + "dfpAdServerVideo", "fooBidAdapter", "bazBidAdapter" ] @@ -245,8 +346,7 @@ the rest will be ignored. To avoid this situation, ensure that when `pbjs.requestBid` is invoked, that the number of bid objects (i.e. `adUnits[].bids`) with `adUnits[].bids[].bidder` set -to `'ix'` across all ad units that bids are being requested for does not exceed -20. +to `'ix'` across all ad units that bids are being requested for does not exceed 20. ### Time-To-Live (TTL) diff --git a/dev-docs/bidders/nextMillenium.js b/dev-docs/bidders/nextMillennium.md similarity index 74% rename from dev-docs/bidders/nextMillenium.js rename to dev-docs/bidders/nextMillennium.md index 3db1479030..a694a8f74e 100644 --- a/dev-docs/bidders/nextMillenium.js +++ b/dev-docs/bidders/nextMillennium.md @@ -1,9 +1,9 @@ --- layout: bidder -title: NextMillenium -description: NextMillenium bid adapter +title: NextMillennium +description: NextMillennium bid adapter hide: true -biddercode: nextMillenium +biddercode: nextMillennium --- ### bid params @@ -11,4 +11,4 @@ biddercode: nextMillenium {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |----------------+----------+-----------------------------------------+---------|---------| -| `placement_id` | required | Placement ID, provided by nextMillenium | 12345 | Integer | +| `placement_id` | required | Placement ID, provided by nextMillennium | 12345 | Integer | diff --git a/dev-docs/bidders/openx.md b/dev-docs/bidders/openx.md index ed112caa01..1e39a72c80 100644 --- a/dev-docs/bidders/openx.md +++ b/dev-docs/bidders/openx.md @@ -6,7 +6,9 @@ hide: true biddercode: openx media_types: video gdpr_supported: true +coppa_supported: true userIds: pubcommon +prebid_member: true --- ### Bid Parameters diff --git a/dev-docs/bidders/openxoutstream.md b/dev-docs/bidders/openxoutstream.md index f24922d462..b320045489 100644 --- a/dev-docs/bidders/openxoutstream.md +++ b/dev-docs/bidders/openxoutstream.md @@ -5,7 +5,8 @@ description: Prebid OpenX Outstream Bidder Adaptor hide: true biddercode: openxoutstream media_types: native - +prebid_member: true +coppa_supported: true --- diff --git a/dev-docs/bidders/ozone.md b/dev-docs/bidders/ozone.md index 6796ddbb97..abe0fe6966 100644 --- a/dev-docs/bidders/ozone.md +++ b/dev-docs/bidders/ozone.md @@ -18,5 +18,4 @@ gdpr_supported: true | `publisherId` | required | The publisher ID. | `"4204204201"` | `string` | | `placementId` | required | The placement ID. | `"0420420421"` | `string` | | `customData` | optional | publisher key-values used for targeting | `{"key1": "value1", "key2": "value2"}` | `string` | -| `ozoneData` | optional | ozone key-values used for targeting | `{"key1": "value1", "key2": "value2"}` | `string` | | `lotameData` | optional | lotame key-values used for targeting | `{"key1": "value1", "key2": "value2"}` | `string` | diff --git a/dev-docs/bidders/pubmatic.md b/dev-docs/bidders/pubmatic.md index 8a35a4dc87..fbc02d709e 100644 --- a/dev-docs/bidders/pubmatic.md +++ b/dev-docs/bidders/pubmatic.md @@ -7,6 +7,7 @@ biddercode: pubmatic media_types: banner, video, native gdpr_supported: true userIds: unifiedId/tradedesk +prebid_member: true --- ### Prebid Server Note: @@ -78,15 +79,15 @@ Support and behavior differs by Prebid.js version Prebid.js v2.13.0 and later: -adSlot parameter is now optional. To omit the adSlot parameter, your publisher account must have default site and tag enabled. Consult your account manager to find out if default site and tag is enabled on your account. If used, both formats are supported. Without Size is the recommended option unless you are using Prebid Server, in which case, With Size is required. All options will send the ad request with all sizes specified in the Prebid ad unit configuration. +adSlot parameter is now optional. To omit the adSlot parameter, your publisher account must have default site and tag enabled. Consult your account manager to find out if default site and tag is enabled on your account. If used, both formats are supported. Without Size is the recommended option. If you are using Prebid Server, Prebid Server v0.69.0 or higher (Go version) or v1.18.0 or higher (Java version) is required to use Without Size. If you are using a managed service provider for Prebid Server, consult the provider to find out which version of Prebid Server they are using. All options will send the ad request with all sizes specified in the Prebid ad unit configuration. Prebid.js v2.9.0 to v2.12.0: -Both formats are supported. Without Size is the recommended option unless you are using Prebid Server, in which case, With Size is required. Both formats will send the ad request with all sizes specified in the Prebid ad unit configuration. +Both formats are supported. Without Size is the recommended option. If you are using Prebid Server, Prebid Server v0.69.0 or higher (Go version) or v1.18.0 or higher (Java version) is required to use Without Size. If you are using a managed service provider for Prebid Server, consult the provider to find out which version of Prebid Server they are using. Both formats will send the ad request with all sizes specified in the Prebid ad unit configuration. Prebid.js v1.1.18 to v2.8.0: -Both formats are supported. Without Size is the recommended option unless you are using Prebid Server, in which case, With Size is required. Without Size will send the ad request with all sizes specified in the Prebid ad unit configuration. With Size will only request the specified size. Mutli-sized ad units are not supported when using Prebid Server. +Both formats are supported. Without Size is the recommended option. If you are using Prebid Server, Prebid Server v0.69.0 or higher (Go version) or v1.18.0 or higher (Java version) is required to use Without Size. If you are using a managed service provider for Prebid Server, consult the provider to find out which version of Prebid Server they are using. Without Size will send the ad request with all sizes specified in the Prebid ad unit configuration. With Size will only request the specified size. Mutli-sized ad units are not supported when using Prebid Server. Prebid.js v1.1.17 and earlier: diff --git a/dev-docs/bidders/rdn.md b/dev-docs/bidders/rdn.md index 658facf320..99050d09e0 100644 --- a/dev-docs/bidders/rdn.md +++ b/dev-docs/bidders/rdn.md @@ -13,3 +13,17 @@ biddercode: rdn | Name | Scope | Description | Example | Type | |---------------|----------|----------------|---------|----------| | `adSpotId` | required | The AdSpot ID | 1234 | `int` | + +### Configuration + +The RDN adapter allows the endpoint to be configured with the following configuration option. + +``` javascript +pbjs.setConfig({ + rdn: { + endpoint: "https://new-endpoint.rakuten.com" + } +}); +``` + +If unspecified the adapter will fallback to the default endpoint. diff --git a/dev-docs/bidders/rubicon.md b/dev-docs/bidders/rubicon.md index 81d1ba8aa2..b0820ce776 100644 --- a/dev-docs/bidders/rubicon.md +++ b/dev-docs/bidders/rubicon.md @@ -5,11 +5,12 @@ description: Rubicon Project Prebid Bidder Adaptor hide: true biddercode: rubicon gdpr_supported: true +coppa_supported: true media_types: video -userIds: unifiedId/tradedesk +userIds: unifiedId/tradedesk, digitrust +prebid_member: true --- - ### Note: The Rubicon Project adapter requires setup and approval from the Rubicon Project team, even for existing Rubicon Project publishers. Please reach out to your account team or globalsupport@rubiconproject.com for more information. diff --git a/dev-docs/bidders/slimcut.md b/dev-docs/bidders/slimcut.md new file mode 100644 index 0000000000..3cb243d535 --- /dev/null +++ b/dev-docs/bidders/slimcut.md @@ -0,0 +1,35 @@ +--- +layout: bidder +title: Slimcut +description: SlimCut Bidder Adaptor +hide: true +biddercode: slimcut +media_types: video, banner +gdpr_supported: true +--- + +### Overview +This documentation covers the parameters for the **SlimCut** bidder adapter. And is intended to be referenced by publishers using prebid 1.0 and later. + + +### Bid Params +Only **placementId** is required and will be sent to you by your SlimCut account manager. + +### Example Ad Unit +```javascript +var adUnit = { + "code": "scm_outstream", + "mediaTypes": { + "video": { + "playerSize": [640, 480], + "context": "instream" + } + }, + "bids": [{ + "bidder": "slimcut", + "params": { + "placementId": 5015 + } + }] +} +``` diff --git a/dev-docs/bidders/sortable.md b/dev-docs/bidders/sortable.md index 6b54c72b5a..c6f13f6766 100644 --- a/dev-docs/bidders/sortable.md +++ b/dev-docs/bidders/sortable.md @@ -6,6 +6,7 @@ biddercode: sortable hide: true media_types: banner gdpr_supported: true +prebid_member: true --- **Table of Contents** diff --git a/dev-docs/bidders/undertone.md b/dev-docs/bidders/undertone.md index 1e0945bfcc..92ee28eb66 100644 --- a/dev-docs/bidders/undertone.md +++ b/dev-docs/bidders/undertone.md @@ -15,3 +15,24 @@ biddercode: undertone |---------------|----------|-------------------------------------------|------------|-----------| | `placementId` | optional | Your placement ID (provided by undertone) | `"13as14d0"` | `string` | | `publisherId` | required | publisher ID (provided by undertone) | `12345` | `integer` | + +### Configuration + +To maximize revenue efficiency, please enable iframe-based user syncing. This functionality will improve user match rates and will help increasing the bid rate. + +Example code to enable iframe user-sync for Undertone: + +```javascript +pbjs.setConfig({ + userSync: { + filterSettings: { + iframe: { + bidders: ['undertone'], + filter: 'include' + } + } + } +}); +``` + +Note: Combine the above the configuration with any other UserSync configuration. Multiple setConfig() calls overwrite each other and only last call for a given attribute will take effect. diff --git a/dev-docs/bidders/yieldmo.md b/dev-docs/bidders/yieldmo.md index 6d4035c079..bd3d8e9c8f 100644 --- a/dev-docs/bidders/yieldmo.md +++ b/dev-docs/bidders/yieldmo.md @@ -5,6 +5,7 @@ description: Prebid Yieldmo Bidder Adaptor hide: true biddercode: yieldmo media_types: native +userIds: pubCommon --- @@ -14,3 +15,4 @@ media_types: native | Name | Scope | Description | Example | Type | |---------------|----------|----------------------|---------------------------|----------| | `placementId` | required | Yieldmo placement id | `'825209316101005155'` | `string` | +| `bidFloor` | optional | Bid Floor | `0.1` | `float` | diff --git a/dev-docs/modules/digitrust.md b/dev-docs/modules/digitrust.md index 33b12237f6..98f182b781 100644 --- a/dev-docs/modules/digitrust.md +++ b/dev-docs/modules/digitrust.md @@ -15,66 +15,153 @@ sidebarType : 1 [DigiTrust](http://digitru.st) is a consortium of publishers, exchanges, and DSPs that provide a standard user ID for display advertising similar in concept to ID-for-Ads in the mobile world. Subscribers to the ID service get an anonymous, persistent and secure identifier for publishers and trusted third parties on all browser platforms, including those which do not support third party cookies by default. See the [DigiTrust integration guide](https://github.com/digi-trust/dt-cdn/wiki/Integration-Guide) for more details. - -At some point the DigiTrust module will be made available as part of the Prebid.js Download page. However, that integration may take several months, so in the meantime, this memo provides instructions for publishers and integrators to manually pull DigiTrust code into their Prebid builds. -## Instructions for adding DigiTrust code to a Prebid package +DigiTrust is now integrated as an optional module in the Prebid ecosystem. DigiTrust ties in to the new UserId module. +In order to use DigiTrust ID you must sign up as a member publisher at: http://www.digitru.st/signup/. When utilizing the +integrated DigiTrust ID support with Prebid, your site will be able to access your users' DigiTrust ID values through the official +DigiTrust ID first party cookie. Supporting bidder-adpters will also have access to the encrypted DigiTrust ID value. +Approved bidder systems will need to [decrypt the ID as per official DigiTrust documentation](https://github.com/digi-trust/dt-cdn/wiki/ID-encryption). + +## Building Prebid with DigiTrust Support +Your Prebid build must include the modules for both **userId** and **digitrustIdLoader**. Follow the build instructions for Prebid as +explained in the top level README.md file of the Prebid source tree. + +ex: $ gulp build --modules=userId,digitrustIdLoader + +### Step by step Prebid build instructions for DigiTrust + +1. Download the Prebid source from [Prebid Git Repo](https://github.com/prebid/Prebid.js) +2. Set up your environment as outlined in the [Readme File](https://github.com/prebid/Prebid.js/blob/master/README.md#Build) +3. Execute the build command either with all modules or with the `userId` and `digitrustIdLoader` modules. + ``` + $ gulp build --modules=userId,digitrustIdLoader + ``` +4. (Optional) Concatenate the DigiTrust source code to the end of your `prebid.js` file for a single source distribution. +5. Upload the resulting source file to your CDN. + + +## Deploying Prebid with DigiTrust ID support +**Precondition:** You must be a DigiTrust member and have registered through the [DigiTrust Signup Process](http://www.digitru.st/signup/). +Your assigned publisher ID will be required in the configuration settings for all deployment scenarios. + +There are three supported approaches to deploying the Prebid-integrated DigiTrust package: + +* "Bare bones" deployment using only the integrated DigiTrust module code. +* Full DigiTrust with CDN referenced DigiTrust.js library. +* Full DigiTrust packaged with Prebid or site js. + +### Bare Bones Deployment + +This deployment results in the smallest Javascript package and is the simplest deployment. +It is appropriate for testing or deployments where simplicity is key. This approach +utilizes the REST API for ID generation. While there is less Javascript in use, +the user may experience more network requests than the scenarios that include the full +DigiTrust library. + +1. Build your Prebid package as above, skipping step 4. +2. Add the DigiTrust init section to your Prebid initialization object as below, + using your Member ID and Site ID. +3. Add a reference to your Prebid package and the initialization code on all pages you wish + to utilize Prebid with integrated DigiTrust ID. + + + + +### Full DigiTrust with CDN referenced DigiTrust library + +Both "Full DigiTrust" deployments will result in a larger initial Javascript payload, +but the end user may experience fewer overall network requests as the encrypted and anonymous +DigiTrust ID can often be generated fully in client-side code. Utilizing the CDN reference +to the official DigiTrust distribution insures you will be running the latest version of the library. + +The Full DigiTrust deployment is designed to work with both new DigiTrust with Prebid deployments, and with +Prebid deployments by existing DigiTrust members. This allows you to migrate your code in steps +without losing DigiTrust support in the process. + +1. Deploy your built copy of `prebid.js` to your CDN. +2. On each page reference both your `prebid.js` and a copy of the **DigiTrust** library. + This may either be a copy downloaded from the [DigiTrust CDN](https://cdn.digitru.st/prod/1/digitrust.min.js) to your CDN, + or directly referenced from the URL https://cdn.digitru.st/prod/1/digitrust.min.js. These may be added to the page in any order. +3. Add a configuration section for Prebid that includes the `usersync` settings and the `digitrust` settings. + +### Full DigiTrust packaged with Prebid + +1. Deploy your built copy of `prebid.js` to your CDN. Be sure to perform *Step 4* of the build to concatenate or + integrate the full DigiTrust library code with your Prebid package. +2. On each page reference your `prebid.js` +3. Add a configuration section for Prebid that includes the `usersync` settings and the `digitrust` settings. + This code may also be appended to your Prebid package or placed in other initialization methods. + + +## Example Configuration Object ## + +In the below example, replace the value **example_member_id** with your assigned DigiTrust Publisher Id and **example_site_id** +with the Id for your website. The `callback` function allows error handling from the DigiTrust initialization method. +The Prebid UserId system handles passing the DigiTrust ID to (supporting) bidders adapters. + +```javascript +pbjs.que.push(function() { + pbjs.setConfig({ + consentManagement: { + cmpApi: 'iab', + timeout: 5000, + allowAuctionWithoutConsent: true + }, + usersync: { + userIds: [ + { + name: "digitrust", + params: { + init: { + member: 'example_member_id', + site: 'example_site_id' + }, + callback: function (digiTrustResult) { + if (digiTrustResult.success) { + var el = document.getElementById('dtidOutput'); + console.log('Success', digiTrustResult.identity); + } + else { + console.error('Digitrust init failed'); + } + } + }, + storage: { + type: "html5", + name: "pbjsdigitrust", + expires: 60 + } + } + ] + } + }); + /* ... */ +}); +``` + +## Parameter Descriptions for the `usersync` Configuration Section +The below parameters apply only to the DigiTrust ID integration. + +{: .table .table-bordered .table-striped } +| Param under usersync.userIds[] | Scope | Type | Description | Example | +| --- | --- | --- | --- | --- | +| name | Required | String | ID value for the DigiTrust module - `"digitrust"` | `"digitrust"` | +| params | Required | Object | Details for DigiTrust initialization. | | +| params.init | Required | Object | Initialization parameters, including the DigiTrust Publisher ID and Site ID. | | +| params.init.member | Required | String | DigiTrust Publisher Id | "A897dTzB" | +| params.init.site | Required | String | DigiTrust Site Id | "MM2123" | +| params.callback | Optional | Function | Callback method to fire after initialization of the DigiTrust framework. The argument indicates failure and success and the identity object upon success. | | +| storage | Required | Object | The publisher must specify the local storage in which to store the results of the call to get the user ID. This can be either cookie or HTML5 storage. | | +| storage.type | Required | String | This is where the results of the user ID will be stored. The recommended method is `localStorage` by specifying `html5`. | `"html5"` | +| storage.name | Required | String | The name of the cookie or html5 local storage where the user ID will be stored. | `"pbjsdigitrust"` | +| storage.expires | Optional | Integer | How long (in days) the user ID information will be stored. Default is 30 for UnifiedId and 1825 for PubCommonID | `365` | +| value | Optional | Object | Used only if the page has a separate mechanism for storing the Unified ID. The value is an object containing the values to be sent to the adapters. In this scenario, no URL is called and nothing is added to local storage | `{"tdid": "D6885E90-2A7A-4E0F-87CB-7734ED1B99A3"}` | -### Step 1: Prepare the base Prebid file as usual - -The standard options: - -- Build from a locally-cloned git repo -- Receive the email package from the Prebid [Download]({{site.baseurl}}/download.html) page - -### Step 2: Download the DigiTrust code: - -{% highlight url %} -curl -o digitrust.js http://cdn.digitru.st/prod/1/digitrust.min.js -{% endhighlight %} - -Note that the DigiTrust URL may change from time to time, check with them for the latest. - -### Step 3: Create a file with the initialization code - -For example, store this code in a new file called `digitrustInit.js`: - -{% highlight js %} -DigiTrust.initialize({ - member: "PUBLISHER_DIGITRUST_MEMBER_ID", - site: "PUBLISHER_DIGITRUST_SITE_ID", - redirects: true - }, - function (digiTrustResult) { - if (typeof digiTrustResult === 'object' && digiTrustResult.success) { - pbjs.setConfig({digiTrustId: digiTrustResult}); - } - } -); -{% endhighlight %} - -**Notes**: - -* you'll need replace the placeholders PUBLISHER_DIGITRUST_MEMBER_ID and PUBLISHER_DIGITRUST_SITE_ID. -* the 'redirects' option to DigiTrust.initialize() may be set to false in order to disable the link-rewriting behavior to acquire a first party cookie context. - -### Step 4: Combine the DigiTrust code and Prebid - -The DigiTrust code must be loaded first, so prepend the digitrust files to the top of the Prebid build file. - -{% highlight js %} -cat digitrust.js digitrustInit.js build/dist/prebid.js > build/dist/prebid_digitrust.js -{% endhighlight %} - -### Step 5: Publish - -The combined Prebid/DigiTrust file is now ready to follow your normal acceptance process. ## Further Reading + [DigiTrust Home Page](http://digitru.st) - + [DigiTrust integration guide](https://github.com/digi-trust/dt-cdn/wiki/Integration-Guide) - ++ [DigiTrust ID Encryption](https://github.com/digi-trust/dt-cdn/wiki/ID-encryption) diff --git a/dev-docs/modules/index.md b/dev-docs/modules/index.md index c6ae79d887..51745c0ac9 100644 --- a/dev-docs/modules/index.md +++ b/dev-docs/modules/index.md @@ -35,7 +35,7 @@ If you are looking for bidder adapter parameters, see [Bidders' Params]({{site.b | [**DigiTrust**]({{site.baseurl}}/dev-docs/modules/digitrust.html) | A method of including the standard cross-domain ID in a DigiTrust package. | | [**Server-to-Server Testing**]({{site.baseurl}}/dev-docs/modules/s2sTesting.html) | Adds A/B test support for easing into server-side header bidding. | | [**DFP Video**]({{site.baseurl}}/dev-docs/modules/dfp_video.html) | Required for serving instream video through DFP. | -| [**User ID**]({{site.baseurl}}/dev-docs/modules/userId.html) | Supports Unified ID and PubCommon ID. | +| [**User ID**]({{site.baseurl}}/dev-docs/modules/userId.html) | Supports Unified ID, PubCommon ID, DigiTrust, and ID5 ID. | | [**Publisher Common ID**]({{site.baseurl}}/dev-docs/modules/pubCommonId.html) | (Deprecated - please use User ID module) Adds a persisted user ID in the publisher's domain. | | [**GDPR ConsentManagement**]({{site.baseurl}}/dev-docs/modules/consentManagement.html) | Facilitates collecting/passing consent information in support of the EU GDPR. | | [**IAB Category Translation**]({{site.baseurl}}/dev-docs/modules/categoryTranslation.html) | Converts IAB sub category to Ad server category for long-form videos. | diff --git a/dev-docs/modules/userId.md b/dev-docs/modules/userId.md index 39e2ec55c9..2188911284 100644 --- a/dev-docs/modules/userId.md +++ b/dev-docs/modules/userId.md @@ -15,15 +15,14 @@ sidebarType : 1 * TOC {:toc} -{: .alert.alert-info :} -The User ID module has been available since Prebid.js 2.10.0. - ## Overview The User ID module supports multiple ways of establishing pseudonymous IDs for users, which is an important way of increasing the value of header bidding. Instead of having several exchanges sync IDs with dozens of demand sources, a publisher can choose to integrate with one of these ID schemes: * **Unified ID** – a simple cross-vendor approach – it calls out to a URL that responds with that user’s ID in one or more ID spaces (e.g. adsrvr.org). The result is stored in the user’s browser for future requests and is passed to bidder adapters to pass it through to SSPs and DSPs that support the ID scheme. * **PubCommon ID** – an ID is generated on the user’s browser and stored for later use on this publisher’s domain. +* **DigiTrust ID** – an anonymous cryptographic ID generated in the user’s browser on a digitru.st subdomain and shared across member publisher sites. +* **ID5 ID** - a neutral identifier for digital advertising that can be used by publishers, brands and ad tech platforms (SSPs, DSPs, DMPs, Data Providers, etc.) to eliminate the need for cookie matching. ## How It Works @@ -37,11 +36,6 @@ Note that User IDs aren't needed in the mobile app world because device ID is av Also note that not all bidder adapters support all forms of user ID. See the tables below for a list of which bidders support which ID schemes. -{: .alert.alert-success :} -While the Unified ID approach is open to other cookie vendors, the -only one currently supporting Prebid.js is The Trade Desk. Prebid.org -welcomes other ID vendors - create a PR or email support@prebid.org. - ## User ID, GDPR, and Opt-Out When paired with the `CookieConsent` module, privacy rules are enforced: @@ -54,22 +48,54 @@ When paired with the `CookieConsent` module, privacy rules are enforced: In addition, individual users may opt-out of receiving cookies and HTML5 local storage by setting these values: * `_pbjs_id_optout` cookie or HTML5 local storage -* `_pubcid_optout` cookie or HTML5 local storage (for backwards compatibility with the PubCommonID module. +* `_pubcid_optout` cookie or HTML5 local storage (for backwards compatibility with the original PubCommonID module. + +## Basic Configuration + +By including this module and one or more of the sub-modules, a number of new options become available in `setConfig()`, +all of them under the `usersync` object as attributes of the `userIds` array +of sub-objects. The table below has the options that are common across ID systems. See the sections below for specific configuration needed by each system and examples. + +{: .table .table-bordered .table-striped } +| Param under usersync.userIds[] | Scope | Type | Description | Example | +| --- | --- | --- | --- | --- | +| name | Required | String | May be: `"unifiedId"`, `"pubCommonId"`, `"digitrust"`, or `"id5id"` | `"unifiedId"` | +| params | Based on User ID sub-module | Object | | | +| storage | Required (unless `value` is specified) | Object | The publisher must specify some kind of local storage in which to store the results of the call to get the user ID. This can be either cookie or HTML5 storage. | | +| storage.type | Required | String | Must be either `"cookie"` or `"html5"`. This is where the results of the user ID will be stored. | `"cookie"` | +| storage.name | Required | String | The name of the cookie or html5 local storage where the user ID will be stored. | `"_unifiedId"` | +| storage.expires | Optional | Integer | How long (in days) the user ID information will be stored. Default is 30 for UnifiedId and 1825 for PubCommonID | `365` | +| value | Optional | Object | Used only if the page has a separate mechanism for storing a User ID. The value is an object containing the values to be sent to the adapters. | `{"tdid": "1111", "pubcid": {2222}, "id5id": "ID5-12345" }` | -## Registering for Unified ID +## Unified ID + +The Unified ID solution is provided by adsrvr.org and the Trade Desk. + +### Unified ID Registration You can set up Unified ID in one of these ways: - Register with The Trade Desk from their [Unified ID page](https://www.thetradedesk.com/industry-initiatives/unified-id-solution). - Utilize a [managed services](/prebid/managed.html) company who can do this for you. -## Examples +### Unified ID Configuration + +{: .table .table-bordered .table-striped } +| Param under usersync.userIds[] | Scope | Type | Description | Example | +| --- | --- | --- | --- | --- | +| name | Required | String | `"unifiedId"` | `"unifiedId"` | +| params | Required for UnifiedId | Object | Details for UnifiedId initialization. | | +| params.partner | Either this or url required for UnifiedId | String | This is the partner ID value obtained from registering with The Trade Desk or working with a Prebid.js managed services provider. | `"myTtdPid"` | +| params.url | Required for UnifiedId if not using TradeDesk | String | If specified for UnifiedId, overrides the default Trade Desk URL. | "https://unifiedid.org/somepath?args" | +| value | Optional | Object | Used only if the page has a separate mechanism for storing the Unified ID. The value is an object containing the values to be sent to the adapters. In this scenario, no URL is called and nothing is added to local storage | `{"tdid": "D6885E90-2A7A-4E0F-87CB-7734ED1B99A3"}` | + +### Unified ID Examples 1) Publisher has a partner ID with The Trade Desk, and is using the default endpoint for Unified ID. {: .alert.alert-warning :} Bug: The default URL did not support HTTPS in Prebid.js 2.10-2.14. So instead of using -the 'partner' parameter, it's best to supply the Trade Desk URL. +the 'partner' parameter, it's best to supply the Trade Desk URL as shown in this example. {% highlight javascript %} pbjs.setConfig({ @@ -85,7 +111,7 @@ pbjs.setConfig({ expires: 60 // cookie can last for 60 days } }], - syncDelay: 5000 // 5 seconds after the first bidRequest() + syncDelay: 3000 // 3 seconds after the first auction } }); {% endhighlight %} @@ -105,26 +131,33 @@ pbjs.setConfig({ name: "pbjs-unifiedid" // set localstorage with this name } }], - syncDelay: 5000 + syncDelay: 3000 } }); {% endhighlight %} -3) Publisher has integrated with UnifiedID on their own and wants to pass the UnifiedID directly through to Prebid.js +3) Publisher has integrated with UnifiedID on their own and wants to pass the UnifiedID directly through to Prebid.js. {% highlight javascript %} pbjs.setConfig({ usersync: { userIds: [{ name: "unifiedId", - value: {"tdid": "D6885E90-2A7A-4E0F-87CB-7734ED1B99A3", - "appnexus_id": "1234"} + value: {"tdid": "D6885E90-2A7A-4E0F-87CB-7734ED1B99A3"} }] } }); {% endhighlight %} -4) Publisher supports PubCommonID and first party domain cookie storage +## PubCommon ID + +This module stores an unique user id in the first party domain and makes it accessible to all adapters. Similar to IDFA and AAID, this is a simple UUID that can be utilized to improve user matching, especially for iOS and MacOS browsers, and is compatible with ITP (Intelligent Tracking Prevention). It’s lightweight and self contained. Adapters that support Publisher Common ID will be able to pick up the user ID and return it for additional server-side cross device tracking. + +There is no special registration or configuration for PubCommon ID. + +### PubCommon ID Examples + +1) Publisher supports PubCommonID and first party domain cookie storage {% highlight javascript %} pbjs.setConfig({ @@ -141,7 +174,7 @@ pbjs.setConfig({ }); {% endhighlight %} -5) Publisher supports both UnifiedID and PubCommonID and first party domain cookie storage +2) Publisher supports both UnifiedID and PubCommonID and first party domain cookie storage {% highlight javascript %} pbjs.setConfig({ @@ -167,26 +200,133 @@ pbjs.setConfig({ }); {% endhighlight %} -## Configuration -By including this module, the following options become available in `setConfig()`, -all of them under the `usersync` object as attributes of the `userIds` array -of sub-objects. See the examples above for specific use cases. +## DigiTrust + +[DigiTrust](https://digitru.st) is a consortium of publishers, exchanges, and DSPs that provide a standard user ID for display advertising similar in concept to ID-for-Ads in the mobile world. Subscribers to the ID service get an anonymous, persistent and secure identifier for publishers and trusted third parties on all browser platforms, including those which do not support third party cookies by default. + +### DigiTrust Registration + +In order to utilize DigiTrust a publisher must register and be approved for membership. You may register online at: [https://www.digitru.st/signup/](https://www.digitru.st/signup/) + +In addition to general usage and configuration of the User Id module, follow the additional instructions for configuring and deploying +DigiTrust as outlined in [DigiTrust Module Usage and Configration](/dev-docs/modules/digitrust.html). + +### DigiTrust Configuration {: .table .table-bordered .table-striped } | Param under usersync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | -| name | Required | String | May be: `"unifiedId"` or `"pubCommonId"` | `"unifiedId"` | -| params | Required for UnifiedId | Object | Details for UnifiedId. | | -| params.partner | Either this or url required for UnifiedId | String | This is the Trade Desk partner ID value obtained from registering with The Trade Desk or working with a Prebid.js managed services provider. Note that the default URL is HTTP-only in Prebid.js 2.10-2.14. If your site is HTTPS, supply the override as shown in example 1 above. | `"myTtdPid"` | -| params.url | Either this or partner required for UnifiedId | String | If specified, overrides the default Trade Desk URL. | "https://unifiedid.org/somepath?args" | -| storage | Required (unless `value` is specified) | Object | The publisher must specify some kind of local storage in which to store the results of the call to get the user ID. This can be either cookie or HTML5 storage. | | -| storage.type | Required | String | Must be either `"cookie"` or `"html5"`. This is where the results of the user ID will be stored. | `"cookie"` | -| storage.name | Required | String | The name of the cookie or html5 local storage where the user ID will be stored. | `"_unifiedId"` | -| storage.expires | Optional | Integer | How long (in days) the user ID information will be stored. Default is 30 for UnifiedId and 1825 for PubCommonID | `365` | -| value | Optional | Object | Used only if the page has a separate mechanism for storing the Unified ID. The value is an object containing the values to be sent to the adapters. In this scenario, no URL is called and nothing is added to local storage | `{"tdid": "D6885E90-2A7A-4E0F-87CB-7734ED1B99A3"}` | +| name | Required | String | `"digitrust"` | `"digitrust"` | +| params | Required for DigiTrust | Object | Details DigiTrust initialization. | | +| params.init | Required for DigiTrust | Object | Defines the member and site | `{ member: 'example_member_id', site: 'example_site_id' }` | +| params.callback | Optional for DigiTrust | Function | Allows init error handling | See example above | +| value | Optional | Object | Used only if the page has a separate mechanism for storing the DigiTrust ID. The value is an object containing the values to be sent to the adapters. In this scenario, no URL is called and nothing is added to local storage | `{"digitrustid": {"data":{"id": "1111", ...}}}` | -## Adapters Supporting the User ID Module +Please consult the [DigiTrust Module Usage and Configration](/dev-docs/modules/digitrust.html) page for details on +DigiTrust parameters and usage. For more complete instructions please review the +[Prebid Integration Guide for DigiTrust](https://github.com/digi-trust/dt-cdn/wiki/Prebid-Integration-for-DigiTrust-Id) + +### DigiTrust Examples + +1) Publisher is a DigiTrust member and supports both PubCommonID and DigiTrust ID integrated with Prebid + +{% highlight javascript %} + +{% endhighlight %} + +Other examples: + +- [DigiTrust Example 1](https://github.com/prebid/Prebid.js/blob/master/integrationExamples/gpt/digitrust_Simple.html) +- [DigiTrust Example 2](https://github.com/prebid/Prebid.js/blob/master/integrationExamples/gpt/digitrust_Full.html) + +## ID5 ID + +The ID5 ID is a neutral identifier for digital advertising that can be used by publishers, brands and ad tech platforms (SSPs, DSPs, DMPs, Data Providers, etc.) to eliminate the need for cookie matching. + +### Registration + +The ID5 ID is free to use, but requires a simple registration with ID5. Please reach out to [prebid@id5.io](mailto:prebid@id5.io) to sign up and request your `partnerId`. + +### Configuration + +{: .table .table-bordered .table-striped } +| Param under usersync.userIds[] | Scope | Type | Description | Example | +| --- | --- | --- | --- | --- | +| params | Required | Object | Details for ID5Id. | | +| params.partner | Required | Number | This is the ID5 partner ID value obtained from registering with ID5. | `173` | + +### Examples + +1) Publisher wants to retrieve the ID5 ID through Prebid.js + +{% highlight javascript %} +pbjs.setConfig({ + usersync: { + userIds: [{ + name: "id5Id", + params: { + partner: 173 + }, + storage: { + type: "cookie", + name: "pbjs-id5id", // create a cookie with this name + expires: 45 // cookie can last for 45 days + } + }], + syncDelay: 5000 // 5 seconds after the first bidRequest() + } +}); +{% endhighlight %} + +2) Publisher has integrated with ID5 on their own and wants to pass the ID5 ID directly through to Prebid.js + +{% highlight javascript %} +pbjs.setConfig({ + usersync: { + userIds: [{ + name: "id5Id", + value: { "id5id": "ID5-8ekgswyBTQqnkEKy0ErmeQ1GN5wV4pSmA-RE4eRedA" } + }] + } +}); +{% endhighlight %} + +## Adapters Supporting the User ID Sub-Modules {% assign bidder_pages = site.pages | where: "layout", "bidder" %} @@ -199,40 +339,70 @@ of sub-objects. See the examples above for specific use cases. {% endfor %} -## Implementation Details +## Bidder Adapter Implementation -For bidders that want to support one or more of these ID systems here are the specific details. +### Prebid.js Adapters + +Bidders that want to support the User ID module in Prebid.js, need to update their bidder adapter to read the indicated bidRequest attributes and pass them to their endpoint. {: .table .table-bordered .table-striped } -| ID System Name | ID System Host | Prebid.js Attr | Prebid Server Attr | Notes | +| ID System Name | ID System Host | Prebid.js Attr | Example Value | | --- | --- | --- | --- | --- | --- | -| PubCommon ID | n/a | bidRequest.userId.pubcid | user.ext.tpid[].source="pubcid" | PubCommon is unique to each publisher domain. | -| Unified ID | Trade Desk | bidRequest.userId.tdid | user.ext.tpid[].source="tdid" | | +| PubCommon ID | n/a | bidRequest.userId.pubcid | `"1111"` | +| Unified ID | Trade Desk | bidRequest.userId.tdid | `"2222"` | +| DigiTrust | IAB | bidRequest.userId.digitrustid | `{data: {id: "DTID", keyv: 4, privacy: {optout: false}, producer: "ABC", version: 2}` | +| ID5 ID | ID5 | bidRequest.userId.id5id | `"ID5-12345"` | + +For example, the adapter code might do something like: + +{% highlight javascript %} + if (bidRequest.userId && bidRequest.userId.pubcid) { + url+="&pubcid="+bidRequest.userId.pubcid; + } +{% endhighlight %} -Bidders that want to support the User ID module in **Prebid.js**, need to update their bidder adapter to read the indicated bidRequest attributes. +### Prebid Server Adapters -Bidders that want to support the User ID module in **Prebid Server**, need to update their server-side bid adapter to read the indicated OpenRTB attributes. For example: +Bidders that want to support the User ID module in Prebid Server, need to update their server-side bid adapter to read the desired OpenRTB attributes noted in the example below and send them to their endpoint. {% highlight bash %} { - "user": { - "ext": { - "tpid": [{ - "source": "tdid", - "uid": "19cfaea8-a429-48fc-9537-8a19a8eb4f0c" - }, - { - "source": "pubcid", - "uid": "29cfaea8-a429-48fc-9537-8a19a8eb4f0d" - }] + "user": { + "ext": { + "eids": [{ + "source": "adserver.org", // Unified ID + "uids": [{ + "id": "111111111111", + "ext": { + "rtiPartner": "TDID" + } + }] + }, + { + "source": "pubcommon", // PubCommon ID + "uids": [{ + "id":"11111111" + }] + }, + { + "source": "id5id", // ID5 ID + "uids": [{ + "id": "ID5-12345" + }] + } + ], + "digitrust": { // DigiTrust + "id": "11111111111", + "keyv": 4 + } + } } - } } {% endhighlight %} ### ID Providers -If you're an ID provider that wants to get on the list: +If you're an ID provider that wants to get on this page: - Fork Prebid.js and write a sub-module similar to one of the *IdSystem modules already in the [modules](https://github.com/prebid/Prebid.js/tree/master/modules) folder. - Follow all the guidelines in the [contribution page](https://github.com/prebid/Prebid.js/blob/master/CONTRIBUTING.md). @@ -244,3 +414,4 @@ If you're an ID provider that wants to get on the list: * [Prebid.js Usersync](/dev-docs/publisher-api-reference.html#setConfig-Configure-User-Syncing) * [GDPR ConsentManagement Module](/dev-docs/modules/consentManagement.html) +* [DigiTrust Module Usage and Configration](/dev-docs/modules/digitrust.html) diff --git a/dev-docs/publisher-api-reference.md b/dev-docs/publisher-api-reference.md index 7f09e29ab0..6ad2141b18 100644 --- a/dev-docs/publisher-api-reference.md +++ b/dev-docs/publisher-api-reference.md @@ -56,6 +56,7 @@ This page has documentation for the public API methods of Prebid.js. * [userSync](#setConfig-Configure-User-Syncing) * [targetingControls](#setConfig-targetingControls) * [sizeConfig and labels](#setConfig-Configure-Responsive-Ads) (responsive ads) + * [COPPA](#setConfig-coppa) * [Generic Configuration](#setConfig-Generic-Configuration) * [Troubleshooting your config](#setConfig-Troubleshooting-your-configuration) * [.getConfig([string])](#module_pbjs.getConfig) @@ -529,12 +530,17 @@ setTargetingForGPTAsync(adUnit, pickInViewDiv); -### pbjs.setTargetingForAst() +### pbjs.setTargetingForAst(adUnitCode) -Set query string targeting on all AST ([AppNexus Seller Tag](https://wiki.appnexus.com/x/PgOXBQ)) ad units. Note that this function has to be called after all ad units on page are defined. For working example code, see [Using Prebid.js with AppNexus Publisher Ad Server]({{site.github.url}}/dev-docs/examples/use-prebid-with-appnexus-ad-server.html). +Set query string targeting for AST ([AppNexus Seller Tag](https://wiki.appnexus.com/x/PgOXBQ)) ad unit(s). Note that this function has to be called after all ad units on page are defined. For working example code, see [Using Prebid.js with AppNexus Publisher Ad Server]({{site.github.url}}/dev-docs/examples/use-prebid-with-appnexus-ad-server.html). If the function is invoked without arguments it will set targeting for all adUnits defined. **Kind**: static method of [pbjs](#module_pbjs) +{: .table .table-bordered .table-striped } +| Param | Scope | Type | Description | +| --- | --- | --- | -- | +| adUnitCode | Optional | `String or Array of strings` | Code(s) of the adUnit(s) for which targeting is being set. Omitting this parameter will set targeting on all adUnits. | +
@@ -1232,6 +1238,7 @@ Core config: + [Configure user syncing](#setConfig-Configure-User-Syncing) + [Configure targeting controls](#setConfig-targetingControls) + [Configure responsive ad units with `sizeConfig` and `labels`](#setConfig-Configure-Responsive-Ads) ++ [COPPA](#setConfig-coppa) + [Generic Configuration](#setConfig-Generic-Configuration) + [Troubleshooting your configuration](#setConfig-Troubleshooting-your-configuration) @@ -1956,8 +1963,20 @@ pbjs.addAdUnits([{ See [Conditional Ad Units]({{site.baseurl}}/dev-docs/conditional-ad-units.html) for additional use cases around labels. - + + +#### COPPA + +Bidder adapters that support the Child Online Privacy Protection Act (COPPA) read the `coppa` configuration. +Publishers with content falling under the scope of this regulation should consult with their legal teams. +The flag may be passed to supporting adapters with this config: + +{% highlight js %} +pbjs.setConfig('coppa', 'true')); +{% endhighlight %} + + #### Generic setConfig Configuration @@ -1972,7 +1991,7 @@ Some adapters may support other options, as defined in their documentation. To s If you call `pbjs.setConfig` without an object, e.g., {% highlight js %} -pbjs.setConfig('debug', 'true')) +pbjs.setConfig('debug', 'true')); {% endhighlight %} then Prebid.js will print an error to the console that says: diff --git a/dev-docs/show-prebid-ads-on-amp-pages.md b/dev-docs/show-prebid-ads-on-amp-pages.md index 8230f5f236..dbd0b75489 100644 --- a/dev-docs/show-prebid-ads-on-amp-pages.md +++ b/dev-docs/show-prebid-ads-on-amp-pages.md @@ -208,7 +208,7 @@ Replace `MACRO` in the preceding example with the appropriate macro for the ad s ### User Sync -To properly sync user IDs with Prebid Server, the `amp-iframe` pixel below should be added to your AMP pages. As of now, only image pixels (those returned with "type": "redirect") are supported. +To sync user IDs with Prebid Server, the `amp-iframe` below may added to your AMP pages referring to the `load-cookie.html` file made available as part of the [Prebid Universal Creative repository](https://github.com/prebid/prebid-universal-creative). Hosting for the `load-cookie.html` file is not provided by Prebid.org. {% capture tipNote %} The following examples include a transparent image as a placeholder which will allow you to place this at the top within the HTML body. If this is not included the iFrame must be either 600px away from the top or not within the first 75% of the viewport when scrolled to the top – whichever is smaller. For more information on this, see [amp-iframe](https://ampbyexample.com/components/amp-iframe/) @@ -216,26 +216,24 @@ The following examples include a transparent image as a placeholder which will a {% include alerts/alert_tip.html content=tipNote %} -If you're using AppNexus' Prebid Server cluster: +If you're using AppNexus' managed service, you would enter something like this: ```html + src="https://PROVIDED_BY_APPNEXUS/load-cookie.html?endpoint=appnexus&max_sync_count=5"> ``` -Else if you're utilizing Rubicon Project's Prebid Server cluster, you'll need an extra 'args' -param on the call to load-cookie.html and will need to replace _RUBICON_ACCOUNT_ID_ with -the ID provided by your Rubicon Project account team. +Else if you're utilizing Rubicon Project's managed service, there's an extra parameter: ```html + src="https://PROVIDED_BY_RUBICON/load-cookie.html?endpoint=rubicon&max_sync_count=5&args=account:RUBICON_ACCOUNT_ID"> ``` diff --git a/docs/endpoints/info/bidders.md b/docs/endpoints/info/bidders.md index 7c6ce96047..d22ea202e8 100644 --- a/docs/endpoints/info/bidders.md +++ b/docs/endpoints/info/bidders.md @@ -6,7 +6,8 @@ This endpoint returns a list of Bidders supported by Prebid Server. These are the core values allowed to be used as `request.imp[i].ext.{bidder}` keys in [Auction](../openrtb2/auction.md) requests. -For detailed info about a specific Bidder, use [`/info/bidders/{bidderName}`](./bidders/bidderName.md) +- For detailed info about a specific Bidder, use [`/info/bidders/{bidderName}`](./bidders/bidderName.md) +- For detailed info about all Bidders, use [`/info/bidders/all`](./bidders/allBidders.md) ### Sample Response diff --git a/docs/endpoints/info/bidders/allBidders.md b/docs/endpoints/info/bidders/allBidders.md new file mode 100644 index 0000000000..4814b4d488 --- /dev/null +++ b/docs/endpoints/info/bidders/allBidders.md @@ -0,0 +1,75 @@ +# Prebid Server Bidders + +## `GET /info/bidders/all` + +This endpoint return details about all the bidders supported by prebid-server. The response is similar to `/info/biders/{bidderName}` but for all bidders rather than the one specified. + +### Sample Response + +This endpoint returns JSON like: + +``` +{ + "33across": { + "capabilities": { + "app": { + "mediaTypes": [ + "banner" + ] + }, + "site": { + "mediaTypes": [ + "banner" + ] + } + }, + "maintainer": { + "email": "dev@33across.com" + } + }, + "adform": { + "capabilities": { + "app": { + "mediaTypes": [ + "banner" + ] + }, + "site": { + "mediaTypes": [ + "banner" + ] + } + }, + "maintainer": { + "email": "scope.sspp@adform.com" + } + }, + . + . + . + . + "yieldmo": { + "capabilities": { + "app": null, + "site": { + "mediaTypes": [ + "banner" + ] + } + }, + "maintainer": { + "email": "progsupport@yieldmo.com" + } + } +} +``` + +The fields hold the following information: + +- `maintainer.email`: A contact email for the Bidder's maintainer. In general, Bidder bugs should be logged as [issues](https://github.com/prebid/prebid-server/issues)... but this contact email may be useful in case of emergency. +- `capabilities.app.mediaTypes`: A list of media types this Bidder supports from Mobile Apps. +- `capabilities.site.mediaTypes`: A list of media types this Bidder supports from Web pages. + +If `capabilities.app` or `capabilities.site` do not exist, then that Bidder does not support that platform. +OpenRTB Requests which define a `request.app` or `request.site` property will fail if a +`request.imp[i].ext.{bidderName}` exists for a Bidder which doesn't support them. diff --git a/download.md b/download.md index 5928f839e1..37be89e548 100644 --- a/download.md +++ b/download.md @@ -233,6 +233,14 @@ Note: If you receive an error during download you most likely selected a configu +
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
diff --git a/overview/analytics.md b/overview/analytics.md index 01adbe12f4..b48707220a 100644 --- a/overview/analytics.md +++ b/overview/analytics.md @@ -14,6 +14,7 @@ There are several analytics adapter plugins available to track header bidding pe {: .table .table-bordered .table-striped } | Analytics Adapter | Cost | Contact | | ------------- | ------------- | ----------- | +| Appier | Contact vendor | [Website](https://www.appier.com) | | Adagio | Contact vendor| [Website](https://adagio.io)| | Assertive Yield (contact for adapter) | Free to try (Large accounts $0.002 CPM or sampled < 10mm/m imp.) | [Website](https://yield.assertcom.de) | | Finteza Analytics | Contact vendor | [Website](https://www.finteza.com/) | @@ -29,6 +30,7 @@ There are several analytics adapter plugins available to track header bidding pe | RealVu | Free | [Website](https://www.realvu.com/rvaa/) | | Rivr Analytics | Contact vendor | [Website](https://www.rivr.ai/)| | Rubicon Project | Contact vendor | [Website](https://rubiconproject.com/header-bidding-for-publishers/) | +| Scaleable.ai Analytics | Free & Paid | [Website](https://scaleable.ai) | | ShareThrough | Contact vendor | | | Sortable | Contact vendor | [Website](https://www.sortable.com) | | Sovrn | Contact vendor | [Website](https://www.sovrn.com/analytics/)| diff --git a/prebid-mobile/pbm-api/android/code-integration-android.md b/prebid-mobile/pbm-api/android/code-integration-android.md index b9e01086d2..1979b3f139 100644 --- a/prebid-mobile/pbm-api/android/code-integration-android.md +++ b/prebid-mobile/pbm-api/android/code-integration-android.md @@ -25,7 +25,7 @@ implementation 'org.prebid:prebid-mobile-sdk:[1,2)' If you wish to explicitly state the lastest stable release, please use the following: ``` -implementation 'org.prebid:prebid-mobile-sdk:1.1' +implementation 'org.prebid:prebid-mobile-sdk:1.1.1' ``` @@ -67,6 +67,29 @@ For details on creating the specific ad units and additional parameters and meth [Banner Ad Unit](/prebid-mobile/pbm-api/android/banneradunit-android.html) [Interstitial Ad Unit](/prebid-mobile/pbm-api/android/interstitialadunit-android.html) +### Resize ad slot + +Prebid recommends app developers to resize ads slots to the Prebid rendering ad size using native code due to an unresolved bug in the Google Mobile Ads SDK (described [here](https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!category-topic/google-admob-ads-sdk/ios/648jzAP2EQY)) where render failures can occur with 3rd party creatives (such as Prebid Universal Creative) using size overrides. + +{% capture warning_note %} +Failure to resize rendering Prebid ads can cause revenue loss under certain conditions. For this reason, we advise using the below resize function in all scenarios. {% endcapture %} +{% include /alerts/alert_warning.html content=warning_note %} + + +``` + dfpAdView.setAdListener(new AdListener() { + @Override + public void onAdLoaded() { + super.onAdLoaded(); + + dfpAdView.setAdSizes(dfpAdView.getAdSize()); + + } + }); + ``` + + + ### Add Custom Keywords Once an ad unit has been instantiated, custom keywords can be added to it to improve its targeting. diff --git a/prebid-mobile/pbm-api/ios/code-integration-ios.md b/prebid-mobile/pbm-api/ios/code-integration-ios.md index 34b5e025ab..def4b4ede3 100644 --- a/prebid-mobile/pbm-api/ios/code-integration-ios.md +++ b/prebid-mobile/pbm-api/ios/code-integration-ios.md @@ -20,13 +20,8 @@ Get started with Prebid Mobile by creating a [Prebid Server account]({{site.gith If you are not familar with using Cocoapods for dependency management visit their [getting started page](https://guides.cocoapods.org/using/getting-started.html). Once you have your `podfile` setup, include the following: -{% capture warning_note %} -• Ensure that you set the platform to :ios, '11.0', setting the the platform to an earlier version might return unexpected results. -• Replace MyAmazingApp with your application's name. {% endcapture %} -{% include /alerts/alert_warning.html content=warning_note %} - ``` -platform :ios, '11.0' +platform :ios, '9.0' target 'MyAmazingApp' do pod 'PrebidMobile' @@ -98,6 +93,29 @@ For details on creating the specific ad units and additional parameters and meth [Banner Ad Unit](/prebid-mobile/pbm-api/ios/pbm-bannerad-ios.html) [Interstitial Ad Unit](/prebid-mobile/pbm-api/ios/pbm-interstitial-ad-ios.html) +### Resize ad slot + +Prebid recommends app developers to resize ads slots to the Prebid rendering ad size using native code due to an unresolved bug in the Google Mobile Ads SDK (described [here](https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!category-topic/google-admob-ads-sdk/ios/648jzAP2EQY)) where render failures can occur with 3rd party creatives (such as Prebid Universal Creative) using size overrides. + +{% capture warning_note %} +Failure to resize rendering Prebid ads can cause revenue loss under certain conditions. For this reason, we advise using the below resize function in all scenarios. {% endcapture %} +{% include /alerts/alert_warning.html content=warning_note %} + + +``` + func adViewDidReceiveAd(_ bannerView: GADBannerView) { + print("adViewDidReceiveAd") + + Utils.shared.findPrebidCreativeSize(bannerView) { (size) in + if let bannerView = bannerView as? DFPBannerView, let size = size { + bannerView.resize(GADAdSizeFromCGSize(size)) + } + } + } + ``` + + + ### Add Custom Keywords diff --git a/prebid/prebidjsReleases.md b/prebid/prebidjsReleases.md index e6cef7a1d7..18018ea15a 100644 --- a/prebid/prebidjsReleases.md +++ b/prebid/prebidjsReleases.md @@ -6,20 +6,21 @@ description: Noteworthy updates in Prebid.js sidebarType: 1 --- -## Prebid.js Releases +## Important Prebid.js Releases Not every Prebid.js release contains noteworthy core features, and -the [GitHub releases page](https://github.com/prebid/Prebid.js/releases) can be hard to search for when a given change or bugfix was made. +the [GitHub releases page](https://github.com/prebid/Prebid.js/releases) can be hard to search for when an important change or bugfix was made. -The table below is a summary of feature changes and important bug fixes in core Prebid.js. +The table below is a summary of feature changes and important bug fixes in core of Prebid.js. Almost [all releases](https://github.com/prebid/Prebid.js/releases) have new bid adapters or updates to existing adapters -- what's listed here is limited to core functionality. Releases with only minor core changes may not be shown here, and releases with multiple important changes may be shown more than once. {: .table .table-bordered .table-striped } | Release | Feature | | --- | --- | +| 2.20 | AuctionEnd event now always execute when auction completes even when there's no callback handler | | 2.18 | Currency Module: always adding originalCpm and originalCurrency to bid object | | 2.17 | Ability to limit the size of keys sent to ad server via [targeting controls](http://prebid.org/dev-docs/publisher-api-reference.html#setConfig-targetingControls) | | 2.16 | [User ID module](/dev-docs/modules/userId.html) refactored to support external sub-modules | -| 2.10 | [User ID module](/dev-docs/modules/userId.html) | +| 2.10 | [User ID module](/dev-docs/modules/userId.html) released with support for PubCommon ID and Unified ID | | 2.10 | A bidder which responded in time is now considered a timely bidder, even if it responded with no bids. See [PR 3696](https://github.com/prebid/Prebid.js/pull/3696) | | 2.9 | Add 'hb_cache_host' targeting for video bids when cache is set to support upcoming video cache redirector | | 2.9 | remove removeRequestId logic. See [PR 3698](https://github.com/prebid/Prebid.js/pull/3698)