From a85fe485650ea8309814e4da4a38416b14eb1744 Mon Sep 17 00:00:00 2001 From: denys-berzoy-confiant <50574764+denys-berzoy-confiant@users.noreply.github.com> Date: Wed, 28 Dec 2022 20:29:31 +0300 Subject: [PATCH 001/763] Confiant RTD Provider: (#4202) - initial docs push --- dev-docs/modules/confiantRtdProvider.md | 57 +++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 dev-docs/modules/confiantRtdProvider.md diff --git a/dev-docs/modules/confiantRtdProvider.md b/dev-docs/modules/confiantRtdProvider.md new file mode 100644 index 0000000000..538b5452d2 --- /dev/null +++ b/dev-docs/modules/confiantRtdProvider.md @@ -0,0 +1,57 @@ +--- +layout: page_v2 +title: Confiant Real-Time Data Provider +display_name: Confiant Real-Time Protection Module +description: Confiant Real-Time detection and blocking of bad ads to protect your users and brand reputation +page_type: module +module_type: rtd +module_code : confiantRtdProvider +enable_download : true +vendor_specific: true +sidebarType : 1 +--- + +# Confiant Real-Time Protection Module + +## Overview + +Confiant’s module provides comprehensive detection of security, quality, and privacy threats across your ad stack. +Confiant is the industry leader in real-time detecting and blocking of bad ads when it comes to protecting your users and brand reputation. + +To start using this module, please contact [Confiant](https://www.confiant.com/contact) to get an account and customer key. + + +{: .alert.alert-warning :} +Disclosure: When configured, this module will insert a script, that is loaded from Confiant's CDN and has proprietary code. + +## Integration + +1) Build Prebid bundle with Confiant module included: + + +``` +gulp build --modules=confiantRtdProvider,... +``` + +2) Include the resulting bundle on your page. + +# Configuration + +Configuration of Confiant module is plain simple: + +```javascript +pbjs.setConfig({ + realTimeData: { + dataProviders: [{ + name: 'confiant', + params: { + // so please get in touch with us so we could help you to set up the module with proper parameters + propertyId: '', // required, string param, obtained from Confiant Inc. + prebidExcludeBidders: '', // optional, comma separated list of bidders to exclude from Confiant's prebid.js integration + prebidNameSpace: '', // optional, string param, namespace for prebid.js integration + shouldEmitBillableEvent: false, // optional, boolean param, upon being set to true enables firing of the BillableEvent upon Confiant's impression scanning + } + }] + } +}); +``` From 727871e5139265332d705b6e4040cfcfbed009ee Mon Sep 17 00:00:00 2001 From: Jean Stemp <38964447+jeanstemp@users.noreply.github.com> Date: Tue, 3 Jan 2023 07:31:35 -0800 Subject: [PATCH 002/763] Reworked example template (#4233) * Reworked example template * adding note about modules Co-authored-by: Jean Stemp Co-authored-by: bretg --- .../dev-docs/build-from-source-warning.md | 5 +- .../dev-docs/not-for-production-warning.md | 1 + _layouts/example.html | 50 ++++++++++++------- dev-docs/examples/adunit-refresh.md | 4 +- dev-docs/examples/basic-example.md | 2 +- dev-docs/examples/custom-price-buckets.md | 4 +- dev-docs/examples/instream-banner-mix.md | 3 ++ dev-docs/examples/legacy-browser-example.md | 4 +- dev-docs/examples/meta-bid-filtering.md | 2 +- dev-docs/examples/multi-format-example.md | 2 +- dev-docs/examples/no-adserver.md | 2 +- dev-docs/examples/postbid.md | 2 +- dev-docs/examples/size-mapping.md | 2 +- dev-docs/examples/sync-tid.md | 2 +- .../use-prebid-with-appnexus-ad-server.md | 6 +-- 15 files changed, 52 insertions(+), 39 deletions(-) create mode 100644 _includes/dev-docs/not-for-production-warning.md diff --git a/_includes/dev-docs/build-from-source-warning.md b/_includes/dev-docs/build-from-source-warning.md index 29b8d3700d..a05f683ee5 100644 --- a/_includes/dev-docs/build-from-source-warning.md +++ b/_includes/dev-docs/build-from-source-warning.md @@ -1,4 +1 @@ - -
-This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included. -
+
This example includes all available adapters and modules. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters and modules are included.
diff --git a/_includes/dev-docs/not-for-production-warning.md b/_includes/dev-docs/not-for-production-warning.md new file mode 100644 index 0000000000..6a6837a7dc --- /dev/null +++ b/_includes/dev-docs/not-for-production-warning.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_layouts/example.html b/_layouts/example.html index c917458838..c86ea1d509 100644 --- a/_layouts/example.html +++ b/_layouts/example.html @@ -33,7 +33,7 @@

Who should use this example:

{% endif %} -

This page contains:

+

About this example:

-

- For tips and troubleshooting info, see: -

-

-
- {% include dev-docs/build-from-source-warning.md %} + {% include dev-docs/not-for-production-warning.md %}

- On the JSFiddle example below: -

+ In the JSFiddle example below: +

-

(Sorry, jsfiddle code examples aren't available with your cookie privacy settings.)

+

(Sorry, JSFiddle code examples aren't available with your cookie privacy settings.)

Cookie Settings


- +
+ +
+ {% include dev-docs/build-from-source-warning.md %} +
+
+ +

Further Reading

+

+

+

+ + + + diff --git a/dev-docs/examples/adunit-refresh.md b/dev-docs/examples/adunit-refresh.md index b5fb6488ce..4948da6ff5 100644 --- a/dev-docs/examples/adunit-refresh.md +++ b/dev-docs/examples/adunit-refresh.md @@ -6,8 +6,8 @@ description: Individual Ad Unit Refresh / Infinite Scroll sidebarType: 1 about: -- Ability to refresh individual ad units - useful for infinite scrolling ad slots -- When auto-refreshing is done incorrectly, it could cause the same bids to be rendered repeatedly. For instance, when googletag.pubads.refresh() is called directly without removing the PBJS targeting, the same hb_ variables get re-sent to GAM, re-chosen, and re-rendered. Over and over without ever asking PBJS for updated targeting variables. Please see Auction Options for more info. +- Demonstrates the ability to refresh individual ad units. This is useful for infinite scrolling ad slots. +- Keep in mind that when auto-refreshing is done incorrectly, it could cause the same bids to be rendered repeatedly. For instance, when googletag.pubads.refresh() is called directly without removing the PBJS targeting, the same hb_ variables get re-sent to GAM, re-chosen, and re-rendered over and over without ever asking PBJS for updated targeting variables. See Auction Options for more info. jsfiddle_link: jsfiddle.net/Prebid_Examples/cu7tpexf/embedded/html,result diff --git a/dev-docs/examples/basic-example.md b/dev-docs/examples/basic-example.md index 929567b8d4..c0690ec44e 100644 --- a/dev-docs/examples/basic-example.md +++ b/dev-docs/examples/basic-example.md @@ -7,7 +7,7 @@ sidebarType: 1 about: -- Asynchronous Prebid.js integration with single Google Ad Manager ad slot +- This example demonstrates asynchronous Prebid.js integration with a single Google Ad Manager ad slot - Default keyword targeting setup (reference) - Default price granularity diff --git a/dev-docs/examples/custom-price-buckets.md b/dev-docs/examples/custom-price-buckets.md index b3097c781d..99bb9da56b 100644 --- a/dev-docs/examples/custom-price-buckets.md +++ b/dev-docs/examples/custom-price-buckets.md @@ -6,8 +6,8 @@ description: Custom Price Granularity Buckets sidebarType: 1 about: -- Custom price granularity buckets using pbjs.setConfig() -- See the the API reference for more detail. +- This example shows custom price granularity buckets using pbjs.setConfig(). +- See the API reference for more detail. jsfiddle_link: jsfiddle.net/Prebid_Examples/vq05dhnj/embedded/html,result diff --git a/dev-docs/examples/instream-banner-mix.md b/dev-docs/examples/instream-banner-mix.md index 2a315ef437..0394bafa15 100644 --- a/dev-docs/examples/instream-banner-mix.md +++ b/dev-docs/examples/instream-banner-mix.md @@ -5,6 +5,9 @@ description: An example of displaying both instream video and banner ads using P sidebarType: 1 +about: +- This example shows how to display instream video and banner ads within the same configuration. + jsfiddle_link: jsfiddle.net/Prebid_Examples/nowfejh7/embedded/html,result/ code_height: 3050 diff --git a/dev-docs/examples/legacy-browser-example.md b/dev-docs/examples/legacy-browser-example.md index 253e67c547..cae6e4c6c0 100644 --- a/dev-docs/examples/legacy-browser-example.md +++ b/dev-docs/examples/legacy-browser-example.md @@ -8,8 +8,8 @@ sidebarType: 1 about: - In Prebid 6.0, support for legacy browsers is no longer assured. - Publishers may conditionally deploy the 5.x branch and add polyfills -- One strategy to do this is simply the module/nomodule approach discussed here https://philipwalton.com/articles/deploying-es2015-code-in-production-today/ -- Another strategy is to detect the user agent or the 'currentScript' mechanism as described here https://stackoverflow.com/questions/29987969/how-to-load-a-script-only-in-ie +- One strategy to do this is simply the module/nomodule approach discussed here https://philipwalton.com/articles/deploying-es2015-code-in-production-today/ +- Another strategy is to detect the user agent or the 'currentScript' mechanism as described here https://stackoverflow.com/questions/29987969/how-to-load-a-script-only-in-ie - Another strategy is to conditionally serve one file or another based on instructions to your cdn jsfiddle_link: jsfiddle.net/Prebid_Examples/kqe8L2jf/embedded/html,result diff --git a/dev-docs/examples/meta-bid-filtering.md b/dev-docs/examples/meta-bid-filtering.md index 0d6433a202..f31e6bcd0c 100644 --- a/dev-docs/examples/meta-bid-filtering.md +++ b/dev-docs/examples/meta-bid-filtering.md @@ -6,8 +6,8 @@ description: Bid filtering on meta object example sidebarType: 1 about: -- Bidders can supply metadata about the bid such as advertiser domain. See the "meta" fields in the bid response for the full list. - This is an example that filters bid responses based on the metadata object. +- Bidders can supply metadata about the bid such as advertiser domain. See the "meta" fields in the bid response for the full list of metadata. jsfiddle_link: jsfiddle.net/Prebid_Examples/0s4eug1d/embedded/html,result diff --git a/dev-docs/examples/multi-format-example.md b/dev-docs/examples/multi-format-example.md index 91672d749d..781c7bf5c9 100644 --- a/dev-docs/examples/multi-format-example.md +++ b/dev-docs/examples/multi-format-example.md @@ -6,7 +6,7 @@ description: Multi-Format Ad Units sidebarType: 1 about: -- A multi-format ad unit allows you receive any combination of banner, video, or native demand +- A multi-format ad unit allows you to receive any combination of banner, video, or native demand - Any bidder that supports at least one of the listed media types can participate in the auction for that ad unit - For engineering setup instructions, see Show Multi-Format Ads - For ad ops setup instructions, see Google Ad Manager with Prebid Step by Step diff --git a/dev-docs/examples/no-adserver.md b/dev-docs/examples/no-adserver.md index a1e7d3d11b..70fb772aac 100644 --- a/dev-docs/examples/no-adserver.md +++ b/dev-docs/examples/no-adserver.md @@ -6,7 +6,7 @@ description: Running Prebid.js without an ad server sidebarType: 1 about: -- Running an auction and rendering without an ad server +- This example demonstrates running an auction and rendering without an ad server. jsfiddle_link: jsfiddle.net/Prebid_Examples/svumodbe/embedded/html,result diff --git a/dev-docs/examples/postbid.md b/dev-docs/examples/postbid.md index 9552400247..2a64381aa2 100644 --- a/dev-docs/examples/postbid.md +++ b/dev-docs/examples/postbid.md @@ -10,7 +10,7 @@ why_link: /overview/what-is-post-bid.html about: - Postbid is a third-party tag creative you setup in your ad server that loads the whole Prebid.js package. Create a line item in the ad server targeting each ad unit on your page. The creative will contain the code below. -- If the ad unit supports multiple sizes, you'll need to do one of two things -- either create a Postbid creative for each desired size with that size hardcoded in the PBJS adunit, or use ad server macros to pass the size through to the creative. e.g. in GAM, there are HEIGHT and WIDTH macros. +- If the ad unit supports multiple sizes, you'll need to do one of two things -- either create a Postbid creative for each desired size with that size hardcoded in the PBJS adunit, or use ad server macros to pass the size through to the creative. For example, in Google Ad Manager there are HEIGHT and WIDTH macros. - There is no need to create line items for each price bucket as the postbid creative is served after the ad server has chosen the line item. - This postbid creative supports passback. See how this works below. diff --git a/dev-docs/examples/size-mapping.md b/dev-docs/examples/size-mapping.md index fc96faeefe..eb87f20109 100644 --- a/dev-docs/examples/size-mapping.md +++ b/dev-docs/examples/size-mapping.md @@ -7,7 +7,7 @@ sidebarType: 1 about: -- Dynamic filtering on ad unit sizes +- This example demonstrates dynamic filtering on ad unit sizes - Ad unit labels applied based on CSS media queries jsfiddle_link: jsfiddle.net/Prebid_Examples/qourvse1/embedded/html,result diff --git a/dev-docs/examples/sync-tid.md b/dev-docs/examples/sync-tid.md index 16b173aa13..acba990c8d 100644 --- a/dev-docs/examples/sync-tid.md +++ b/dev-docs/examples/sync-tid.md @@ -8,7 +8,7 @@ sidebarType: 1 about: - imp.ext.tid sync -- This example demonstrates sending the same impression transaction identifier (imp.ext.tid) to two on page libraries +- This example demonstrates sending the same impression transaction identifier (imp.ext.tid) to two on page libraries. jsfiddle_link: jsfiddle.net/50aqtrck/1/embedded/html,result diff --git a/dev-docs/examples/use-prebid-with-appnexus-ad-server.md b/dev-docs/examples/use-prebid-with-appnexus-ad-server.md index dba3c03674..3b68747f7d 100644 --- a/dev-docs/examples/use-prebid-with-appnexus-ad-server.md +++ b/dev-docs/examples/use-prebid-with-appnexus-ad-server.md @@ -6,9 +6,9 @@ description: Using Prebid.js with Xandr Publisher Ad Server sidebarType: 1 about: -- An example showing how to use Prebid.js with Xandr Publisher Ad Server -- See the Seller Tag (AST) documentation for more information -- To configure the Seller Tag to use SafeFrames, refer to the SafeFrame API Reference. +- This example shows how to use Prebid.js with Xandr Publisher Ad Server. +- See the Seller Tag (AST) documentation for more information. +- To configure the Seller Tag to use SafeFrames, refer to the SafeFrame API Reference. jsfiddle_link: jsfiddle.net/Prebid_Examples/tr1djf9e/embedded/html,result code_height: 2404 From aae2dd8f09fdbb9b6f4f6e15e2133aa19d7711d6 Mon Sep 17 00:00:00 2001 From: Jean Stemp <38964447+jeanstemp@users.noreply.github.com> Date: Tue, 3 Jan 2023 07:36:06 -0800 Subject: [PATCH 003/763] Site cleanup for minor issues (#4239) * Site cleanup for minor issues * typo Co-authored-by: Jean Stemp Co-authored-by: bretg --- debugging/debugging.md | 10 ++--- dev-docs/add-video-submodule.md | 11 ++--- dev-docs/bidder-adaptor.md | 4 +- dev-docs/common-issues.md | 5 ++- dev-docs/conditional-ad-units.md | 12 +++--- features/adServerKvps.md | 40 +++++++++---------- formats/amp.md | 2 +- .../openrtb2/pbs-endpoint-auction.md | 33 +++++++-------- prebid-server/features/pbs-feature-idx.md | 2 +- support/index.md | 8 ++-- 10 files changed, 64 insertions(+), 63 deletions(-) diff --git a/debugging/debugging.md b/debugging/debugging.md index 906dba744c..3bc3f007f8 100644 --- a/debugging/debugging.md +++ b/debugging/debugging.md @@ -9,15 +9,15 @@ sidebarType: 1 # Chrome Extension for Debugging Prebid.js -Prebid.Org supports the Chrome extension [Headerbid Expert](https://chrome.google.com/webstore/detail/headerbid-expert/cgfkddgbnfplidghapbbnngaogeldmop). Web publishers can use this tool to understand how their Prebid.js header bidding partners are doing: +Prebid.Org supports the Chrome extension [Headerbid Expert](https://chrome.google.com/webstore/detail/headerbid-expert/cgfkddgbnfplidghapbbnngaogeldmop). Web publishers can use this tool to understand how their Prebid.js header bidding partners are doing. For example: -1. What's the latency from each header bidding partner? -1. Do they load asynchronously or are they blocking my pages? -1. Are they all loaded together in parallel? +- What's the latency from each header bidding partner? +- Do they load asynchronously or are they blocking my pages? +- Are they all loaded together in parallel? Use the tool to determine whether a page might be under-monetized or could benefit from implementation improvements. -Further Reading +## Further Reading + [Prebid.js Troubleshooting Guide](/dev-docs/prebid-troubleshooting-guide.html) diff --git a/dev-docs/add-video-submodule.md b/dev-docs/add-video-submodule.md index e0ee0109bf..811494d780 100644 --- a/dev-docs/add-video-submodule.md +++ b/dev-docs/add-video-submodule.md @@ -15,7 +15,7 @@ Video submodules interact with the Video Module to integrate Prebid with Video P - populate the oRTB Video Impression and Content params in the bid request. * TOC - {:toc } +{:toc } ## Overview @@ -44,7 +44,7 @@ Working with any Prebid project requires using Github. In general, we recommend 4. Open a [pull request](https://help.github.com/en/desktop/contributing-to-projects/creating-a-pull-request) to the appropriate repository's master branch with a good description of the feature/bug fix. 5. If there's something that needs to change on the prebid.org website, follow the above steps for the [website repo](https://github.com/prebid/prebid.github.io). -### Step 1: Add a markdown file describing the submodule +### Step 1: Add a Markdown File Describing the Submodule Create a markdown file under `modules` with the name of the module suffixed with 'VideoProvider', i.e. `exampleVideoProvider.md`. @@ -77,7 +77,7 @@ i.e. in `vendorCodes.js`: export const EXAMPLE_PLAYER_VENDOR = 3; {% endhighlight %} -### Step 2: Build the Module +### Step 3: Build the Module Now create a javascript file under `modules` with the name of the module suffixed with 'VideoProvider', e.g., `exampleVideoProvider.js`. @@ -107,6 +107,7 @@ submodule('video', exampleSubmoduleFactory); #### The Submodule object The submodule object must adhere to the following interface: + {: .table .table-bordered .table-striped } | param name | type | Scope | Description | Arguments | Return type | | :---------- | :---- | :---- | :---------- | :-------- | :---------- | @@ -135,7 +136,7 @@ const exampleSubmodule = { -#### Event registration +#### Event Registration Submodules must support attaching and detaching event listeners on the video player. The list of events and their respective params are defined in the [Video Module docs's Events section]({{site.github.url}}/prebid-video/video-module.html#events). @@ -167,7 +168,7 @@ In prebid.js, add your new submodule to `.submodules.json` under the `videoModul } {% endhighlight %} -### Shared resources for developers +## Shared Resources for Developers A video library containing reusable code and constants has been added to Prebid.js for your convenience. We encourage you to import from this library. Constants such as event names can be found in the `libraries/video/constants/` folder. diff --git a/dev-docs/bidder-adaptor.md b/dev-docs/bidder-adaptor.md index f8d49607fc..d2933faf24 100644 --- a/dev-docs/bidder-adaptor.md +++ b/dev-docs/bidder-adaptor.md @@ -1199,7 +1199,7 @@ registerBidder(spec); - Create a docs pull request against [prebid.github.io](https://github.com/prebid/prebid.github.io) - Fork the repo - Copy a file in [dev-docs/bidders](https://github.com/prebid/prebid.github.io/tree/master/dev-docs/bidders) and name it to exactly the same as your biddercode. Add the following metadata to the header of your .md file: - - Add 'biddercode' and set it to the code that publishers should be using to reference your bidder in an AdUnit. This needs to be the same name as the docs file! + - Add 'biddercode' and set it to the code that publishers should be using to reference your bidder in an AdUnit. *This needs to be the same name as the docs file!* - Add 'aliasCode' if your biddercode is not the same name as your PBJS implementation file. e.g. if your biddercode is "ex", but the file in the PBJS repo is exampleBidAdapter.js, this value needs to be "example". - Add `pbjs: true`. If you also have a [Prebid Server bid adapter](/prebid-server/developers/add-new-bidder-go.html), add `pbs: true`. Default is false for both. - If you're on the IAB Global Vendor List, add your ID number in `gvl_id`. @@ -1217,6 +1217,7 @@ registerBidder(spec); - If you support any OpenRTB blocking parameters, you must document what exactly is supported and then you may set `ortb_blocking_supported` to 'true','partial', or 'false'. No default value. In order to set 'true', you must support: bcat, badv, battr, and bapp. - Let publishers know how you support multiformat requests -- those with more than one mediatype (e.g. both banner and video). Here are the options: will-bid-on-any, will-bid-on-one, will-not-bid - If you're a member of Prebid.org, add `prebid_member: true`. Default is false. + - Always add `sidebarType: 1`. This is required for docs.prebid.org site navigation. - Submit both the code and docs pull requests For example: @@ -1244,6 +1245,7 @@ pbs: true/false prebid_member: true/false multiformat_supported: will-bid-on-any, will-bid-on-one, will-not-bid ortb_blocking_supported: true/partial/false +sidebarType: 1 --- ### Note: diff --git a/dev-docs/common-issues.md b/dev-docs/common-issues.md index ac9cd05993..24138d7695 100644 --- a/dev-docs/common-issues.md +++ b/dev-docs/common-issues.md @@ -37,7 +37,8 @@ Check the bid prices. If they are low and are getting reduced to $0 due to price ## Related Reading {:toc} -+ [Prebid.js FAQ](/dev-docs/faq.html) -+ [Prebid Tips for Troubleshooting](/troubleshooting/troubleshooting-guide.html) +- [Prebid.js FAQ](/dev-docs/faq.html) +- [Prebid Tips for Troubleshooting](/troubleshooting/troubleshooting-guide.html) +- [Price Granularity](/adops/price-granularity.html) diff --git a/dev-docs/conditional-ad-units.md b/dev-docs/conditional-ad-units.md index 586416930b..dfcfbbc799 100644 --- a/dev-docs/conditional-ad-units.md +++ b/dev-docs/conditional-ad-units.md @@ -13,12 +13,12 @@ sidebarType: 1 # Conditional Ad Units {:.no_toc} -The [global sizeConfig](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-Responsive-Ads) and [Advanced Size Mapping](/dev-docs/modules/sizeMappingV2.html) features are useful for standard responsive ad designs, but a number of other scenarios are supported as well: +The [global sizeConfig](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-Responsive-Ads) and [Advanced Size Mapping](/dev-docs/modules/sizeMappingV2.html) features are useful for standard responsive ad designs, but a number of other scenarios are supported as well. * TOC {:toc} -By supporting these scenarios, header bidding can be more efficient - the browser can send bids to a more surgical set of bidders based on device size or other attributes the page code can create. +By supporting these scenarios, header bidding can be more efficient; the browser can send bids to a more surgical set of bidders based on device size or other attributes the page code can create. The basic steps are: @@ -27,7 +27,7 @@ The basic steps are: See the [Publisher API reference](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-Responsive-Ads) for syntax. -## What if some bidders should be skipped for some devices? +## Some Bidders Should Be Skipped for Some Devices {: .alert.alert-info :} See the [Advanced Size Mapping module](/dev-docs/modules/sizeMappingV2.html) for another way to handle this scenario. Note that you must use Advanced Size Mapping for mediaTypes other than banner. @@ -95,7 +95,7 @@ How this works: 1. The first bid doesn't have any conditional logic, so is present in every auction. 1. The second bid requires that "phone" be present in the label array, otherwise it won't be part of the auction. -## What if some bidders have different parameters for different devices? +## Some Bidders Have Different Parameters for Different Devices For reporting and targeting purposes, Publishers and SSPs sometimes break out different inventory structures for different platforms. @@ -188,7 +188,7 @@ var AdUnits = [{ {% endhighlight %} -## What if some ad unit auctions should be skipped entirely for some devices? +## Some Ad Unit Auctions Should Be Skipped Entirely for Some Devices Say there's a responsive page where one of the ad units only supports larger sizes, so it doesn't make sense on phones. To suppress the ad unit for mobile users, we can apply conditional logic to the entire ad unit. Here's an example using the global sizeConfig approach (banner only): @@ -223,7 +223,7 @@ See the [Advanced Size Mapping module](/dev-docs/modules/sizeMappingV2.html) if {% endhighlight %} -## What if some bid requests apply only to users originating certain from countries? +## Some Bid Requests Apply Only to Users Originating from Certain Countries Labels aren't constrained to describing device size -- they can be used for many types of conditions the page maywant to define. Besides being defined as part of `sizeConfig`, labels can also be passed into the [`requestBids()`](/dev-docs/publisher-api-reference/requestBids.html) function as an argument. diff --git a/features/adServerKvps.md b/features/adServerKvps.md index 0db05e0539..8d13a0e1cf 100644 --- a/features/adServerKvps.md +++ b/features/adServerKvps.md @@ -37,20 +37,19 @@ How a publisher should configure Prebid.js to report auction results will depend on how the final ad decision will be made. These approaches need to be in sync. -There are four main scenarios that follow. +There are four main scenarios, described in the following sections. ### Ad Server Line Items are Created Per-Bidder In order to have header bidding compete with direct-sold demand, a publisher can set up placeholder line items in their ad server. -Prebid.org recommends setting up separate line items -for each bidder. Benefits: -- use ad server reporting to get a view of which bidders are performing well -- control ad decisions with the ad server -- video bids have a fallback available +Prebid.org recommends setting up separate line items for each bidder. Benefits to this approach include: +- You can use ad server reporting to get a view of which bidders are performing well. +- You can control ad decisions with the ad server. +- Video bids have a fallback available. -There are more details on this scenario in the [Ad Ops section](/adops/before-you-start.html#one-set-of-line-items-for-each-bidder). +There are more details on this scenario in the [Ad Ops section](/adops/send-all-vs-top-price.html). Once implemented in the ad server, setting this up in Prebid.js is simple, as it is the default [Send All Bids](#send-all-kvps) mode. However @@ -65,11 +64,10 @@ publishers monitor the key traffic and [control](#controls) as necessary. ### Only One Set of Ad Server Line Items are Created -However, there are reasons a publisher may not want to create -separate line items for each bidder: -- some ad servers have a limit on how many line items can be created -- it takes work to set up line items -- the volume of key-value pairs can be a factor +There are reasons a publisher may not want to create separate line items for each bidder. For example: +- Some ad servers have a limit on how many line items can be created. +- It takes work to set up line items. +- The volume of key-value pairs (KVPs) can be a factor. So the other ad-server based solution is to create one set of line items that is used by all bidders. @@ -77,6 +75,8 @@ items that is used by all bidders. Setting this mode up in Prebid.js is done by setting [enableSendAllBids](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Send-All-Bids) to false. See the [Bare Minimum solution](#the-bare-minimum-for-display-ads) for reference. +See [Send All Bids vs Top Price](/adops/send-all-vs-top-price.html) for ad ops details on this scenario. + ### Post-Bid Sometimes Prebid.js is used as a fallback. This mode is called [PostBid](/overview/what-is-post-bid.html) @@ -97,7 +97,7 @@ In early versions of Prebid.js, there were a couple of basic functions publishers could use to get the auction results: - [pbjs.setTargetingForGPTAsync](/dev-docs/publisher-api-reference/setTargetingForGPTAsync.html) - matches Google Publisher Toolkit ad slots to Prebid.js AdUnits, obtains the auction results for that adunit, and adds "targeting" values using GPT-provided functions. -- [pbjs.getAdserverTargeting](/dev-docs/publisher-api-reference/getAdserverTargeting.html) - a more generic interface for obtaining KVPs +- [pbjs.getAdserverTargeting](/dev-docs/publisher-api-reference/getAdserverTargeting.html) - a more generic interface for obtaining KVPs. All of the other functions available in the [publisher API](/dev-docs/publisher-api-reference.html) for obtaining auction bids came later. @@ -110,7 +110,7 @@ That approach has been deprecated -- all implementations should now use [one of ### Video Video's always been a different implementation than banners because -it's the video player that controls the ad call, not in-page javascript like +it's the video player that controls the ad call, not in-page JavaScript like the GPT library. So the [Google Ad Manager Video module](/dev-docs/modules/dfp_video.html) includes the [buildVideoUrl](/dev-docs/publisher-api-reference/adServers.dfp.buildVideoUrl.html) function. Publishers using other ad servers need to integrate on their own @@ -128,10 +128,7 @@ targeting configuration](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction. ## Controls -Over the years, quite a few options have been added to to Prebid.js to adjust the number of bids and the exact set of KVPs sent to the ad server. This is an overlapping-but-powerful set of controls. There are often - -multiple ways to implement the same requirements, and there's no "wrong" -way to do it. +Over the years, quite a few options have been added to to Prebid.js to adjust the number of bids and the exact set of KVPs sent to the ad server. This is an overlapping-but-powerful set of controls. There are often multiple ways to implement the same requirements, and there's no "wrong" way to do it. The list is ordered by those functions that Prebid recommends starting with: @@ -178,7 +175,7 @@ pbjs.setConfig({ }); ``` -Note: this example lacks video support, deal support, and doesn't even tell you which bidder won. +Note: This example lacks video support, deal support, and doesn't even tell you which bidder won. #### Top Two Bids and Deals @@ -194,8 +191,7 @@ pbjs.setConfig({ } }); ``` -Notes: -- this assumes that video creatives are set up refering to HB_UUID rather than bidder-specific UUID values. +Note: This assumes that video creatives are set up refering to HB_UUID rather than bidder-specific UUID values. #### Completely Custom KVPs @@ -237,7 +233,7 @@ pbjs.bidderSettings={ }; ``` -## Related Topics +## Further Reading - [Prebid.js Publisher API setConfig() routine](/dev-docs/publisher-api-reference/setConfig.html) - [Ad Ops and Prebid](/adops/before-you-start.html) diff --git a/formats/amp.md b/formats/amp.md index 6a56c9d5aa..aa21216ab0 100644 --- a/formats/amp.md +++ b/formats/amp.md @@ -22,7 +22,7 @@ At a high level, setting up AMP pages for header bidding with Prebid has these s ## Ad Ops -+ [Google Ad Manager with Prebid Stpe by Step](/adops/step-by-step.html) ++ [Google Ad Manager with Prebid Step by Step](/adops/step-by-step.html) ## Developers diff --git a/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md b/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md index ea81a30ce9..73c53f7ef5 100644 --- a/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md +++ b/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md @@ -61,7 +61,7 @@ This endpoint will respond with either: - HTTP 400 if the request is malformed, or - HTTP 503 if the account or app specified in the request is blacklisted -This is a corresponding sample response to sample OpenRTB 2.5 bid request: +This is a corresponding sample response to a sample OpenRTB 2.5 bid request: ``` { @@ -261,10 +261,10 @@ Note that video-outstream is defined to be imp[].video requests where imp[].vide ##### Targeting -Targeting refers to strings which are sent to the adserver to -[make header bidding possible](/overview/intro.html#how-does-prebid-work). +Targeting refers to strings that are sent to the adserver to +[make header bidding possible](/overview/intro.html). -`request.ext.prebid.targeting` is an optional property which causes Prebid Server +`request.ext.prebid.targeting` is an optional property that causes Prebid Server to set these params on the response at `response.seatbid[i].bid[j].ext.prebid.targeting`. {: .table .table-bordered .table-striped } @@ -311,9 +311,9 @@ to set these params on the response at `response.seatbid[i].bid[j].ext.prebid.ta } } ``` -The list of price granularity ranges must be given in order of increasing `max` values. If `precision` is omitted, it will default to `2`. The minimum of a range will be 0 or the previous `max`. Any cmp above the largest `max` will go in the `max` pricebucket. +The list of price granularity ranges must be given in order of increasing `max` values. If `precision` is omitted, it will default to `2`. The minimum of a range will be 0 or the previous `max`. Any cpm above the largest `max` will go in the `max` pricebucket. -For backwards compatibility the following strings will also be allowed as price granularity definitions. There is no guarantee that these will be honored in the future. "One of ['low', 'med', 'high', 'auto', 'dense']" See [price granularity definitions](/adops/price-granularity.html) +For backwards compatibility the following strings will also be allowed as price granularity definitions. There is no guarantee that these will be honored in the future. "One of ['low', 'med', 'high', 'auto', 'dense']" See [price granularity definitions](/adops/price-granularity.html). One of "includewinners" or "includebidderkeys" must be true (both default to false if unset). If both are false, then no targeting keys will be set, which is better configured by omitting targeting altogether. @@ -608,7 +608,7 @@ If the keys exist, the values can be used to fetch the bid's VAST XML from Prebi ##### GDPR -Prebid Server supports the IAB's GDPR recommendations, which can be found [here](https://iabtechlab.com/wp-content/uploads/2018/02/OpenRTB_Advisory_GDPR_2018-02.pdf). +Prebid Server supports the IAB's [GDPR recommendations](https://iabtechlab.com/wp-content/uploads/2018/02/OpenRTB_Advisory_GDPR_2018-02.pdf). This adds two optional properties: @@ -619,8 +619,8 @@ These fields will be forwarded to each Bidder, so they can decide how to process ##### Interstitial support Additional support for interstitials is enabled through the addition of two fields to the request: -device.ext.prebid.interstitial.minwidthperc and device.ext.interstitial.minheightperc -The values will be numbers that indicate the minimum allowed size for the ad, as a percentage of the base side. For example, a width of 600 and "minwidthperc": 60 would allow ads with widths from 360 to 600 pixels inclusive. +`device.ext.prebid.interstitial.minwidthperc` and `device.ext.interstitial.minheightperc`. +The values will be numbers that indicate the minimum allowed size for the ad, as a percentage of the base side. For example, a width of 600 and `"minwidthperc": 60` would allow ads with widths from 360 to 600 pixels inclusive. Example: ``` @@ -647,8 +647,9 @@ Example: } ``` -PBS receiving a request for an interstitial imp and these parameters set, it will rewrite the format object within the interstitial imp. If the format array's first object is a size, PBS will take it as the max size for the interstitial. If that size is 1x1, it will look up the device's size and use that as the max size. If the format is not present, it will also use the device size as the max size. (1x1 support so that you don't have to omit the format object to use the device size) -PBS with interstitial support will come preconfigured with a list of common ad sizes. Preferentially organized by weighing the larger and more common sizes first. But no guarantees to the ordering will be made. PBS will generate a new format list for the interstitial imp by traversing this list and picking the first 10 sizes that fall within the imp's max size and minimum percentage size. There will be no attempt to favor aspect ratios closer to the original size's aspect ratio. The limit of 10 is enforced to ensure we don't overload bidders with an overlong list. All the interstitial parameters will still be passed to the bidders, so they may recognize them and use their own size matching algorithms if they prefer. +If PBS receives a request for an interstitial imp and these parameters are set, it will rewrite the format object within the interstitial imp. If the format array's first object is a size, PBS will take it as the max size for the interstitial. If that size is 1x1, it will look up the device's size and use that as the max size. If the format is not present, it will also use the device size as the max size (1x1 support so that you don't have to omit the format object to use the device size). + +PBS with interstitial support will come preconfigured with a list of common ad sizes,preferentially organized by weighing the larger and more common sizes first. But no guarantees to the ordering will be made. PBS will generate a new format list for the interstitial imp by traversing this list and picking the first 10 sizes that fall within the imp's max size and minimum percentage size. There will be no attempt to favor aspect ratios closer to the original size's aspect ratio. The limit of 10 is enforced to ensure we don't overload bidders with an overlong list. All the interstitial parameters will still be passed to the bidders, so they may recognize them and use their own size matching algorithms if they prefer. ##### Currency Support @@ -673,7 +674,7 @@ define ext.prebid.currency.rates. } ``` -If it exists, a rate defined in ext.prebid.currency.rates has the highest priority. +If it exists, a rate defined in `ext.prebid.currency.rates` has the highest priority. If a currency rate doesn't exist in the request, the external file will be used. An additional option is `usepbsrates`. When `true`, this flag indicates that dynamic currency exchange rates should be preferred over any supplied static rates. When `false`, it indicates that dynamic exchange rates should not be used. The default is 'true'. @@ -825,7 +826,7 @@ This request: } ``` -Will result in this response, assuming that the ids exist in the appropriate DB table read by Prebid Server: +will result in this response, assuming that the ids exist in the appropriate DB table read by Prebid Server: ``` { "id": "test-auction-id", @@ -958,11 +959,11 @@ Could result in this response: ``` Notes: -- the DB entries for this stored-response scenario are quite different: they need to be in whatever format the bid adapter's endpoint responds with. i.e. the host company will need to capture an actual bid response from the specific bidders and enter it into the DB table. -- the `replaceimpid` parameter tells PBS to ignore the impid supplied in the DB and instead create/overwrite seatbid.bid.impid with the value that matches the incoming request. This simplifies debugging. +- The DB entries for this stored-response scenario are quite different: they need to be in whatever format the bid adapter's endpoint responds with. i.e. the host company will need to capture an actual bid response from the specific bidders and enter it into the DB table. +- The `replaceimpid` parameter tells PBS to ignore the impid supplied in the DB and instead create/overwrite seatbid.bid.impid with the value that matches the incoming request. This simplifies debugging. - `replaceimpid` doesn't work in PBS-Java. Instead, the implementation there is to use the `##PBSIMPID##` macro in the body of the stored response, which will be replaced by PBS-core. -See Prebid.org troubleshooting pages for how to utilize this feature within the context of the browser. +See Prebid.org [troubleshooting pages](/troubleshooting/pbs-troubleshooting.html#manual-specification-of-stored-responses-in-openrtb) for how to utilize this feature within the context of the browser. ##### First Party Data Support diff --git a/prebid-server/features/pbs-feature-idx.md b/prebid-server/features/pbs-feature-idx.md index a82477f4da..33a6c84fb2 100644 --- a/prebid-server/features/pbs-feature-idx.md +++ b/prebid-server/features/pbs-feature-idx.md @@ -90,4 +90,4 @@ title: Prebid Server | Features | Modules | [ortb2-blocking](/prebid-server/pbs-modules/ortb2-blocking.html) | Configure per-account OpenRTB blocking details. | | | | Anti-Fraud | Ads.Cert 2.0 Authenticated Connections | Includes authenticated connection signing header on outgoing bid requests to supported adapters. * | | | -* Experimental feature not yet recommended for production. +\* Experimental feature not yet recommended for production. diff --git a/support/index.md b/support/index.md index a6db9daf8e..e32704288e 100644 --- a/support/index.md +++ b/support/index.md @@ -16,14 +16,14 @@ There are several ways to ask for help or get involved with Prebid. See below f ## Overview -For technical & feature requests or questions, it's best to use the GitHub or Stack Overflow forums. Prebid is worked on full-time by engineering teams from AppNexus and Rubicon Project. There are also many publishers using and contributing to the project. +For technical and feature requests or questions, it's best to use the GitHub or Stack Overflow forums. Prebid is worked on full-time by engineering teams from Xandr and Magnite. There are also many publishers using and contributing to the project. -For questions about how an adapter works, it's best to reach out to the company directly, or ask on GitHub. Each demand adapter should be maintained by the SSPs or exchange behind that adapter. +For questions about how an adapter works, it's best to reach out to the company directly, or raise an issue on GitHub. Each demand adapter should be maintained by the SSPs or exchange behind that adapter. For Prebid news or general questions, we recommend the Ad Ops Slack Channel, Quora, or Twitter. {: .alert.alert-success :} -There are serveral Prebid.org members that will install & maintain Prebid on a publisher's behalf. See the list of [Managed Prebid Solutions](https://prebid.org/product-suite/managed-services/). +There are serveral Prebid.org members that will install and maintain Prebid on a publisher's behalf. See the list of [Managed Prebid Solutions](https://prebid.org/product-suite/managed-services/). ## GitHub @@ -46,7 +46,7 @@ If you ask questions on [Stack Overflow](https://stackoverflow.com/), please use ## Ad Ops Slack Channel -Join the [Ad Ops Reddit Slack](https://redditadops.slack.com/messages/C0HVALS8P/) (specifically the `#HeaderBidding` channel) to connect with other publishers & developers using Prebid. +Join the [Ad Ops Reddit Slack](https://redditadops.slack.com/messages/C0HVALS8P/) (specifically the `#HeaderBidding` channel) to connect with other publishers and developers using Prebid. ## Reddit From 898a0973ee234eec2c855929aa5d6629992e3a72 Mon Sep 17 00:00:00 2001 From: Jean Stemp <38964447+jeanstemp@users.noreply.github.com> Date: Tue, 3 Jan 2023 07:37:23 -0800 Subject: [PATCH 004/763] Added missing linksto analytics adapter docs (#4240) Co-authored-by: Jean Stemp --- dev-docs/analytics/adomik.md | 2 +- dev-docs/analytics/adxcg.md | 2 +- dev-docs/analytics/concert.md | 2 +- dev-docs/analytics/eplanning.md | 2 +- dev-docs/analytics/marsmedia.md | 2 +- dev-docs/analytics/roxot.md | 2 +- dev-docs/analytics/sharethrough.md | 2 +- dev-docs/analytics/sigmoid.md | 2 +- dev-docs/analytics/sonobi.md | 2 +- dev-docs/analytics/zeta_global_ssp.md | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/dev-docs/analytics/adomik.md b/dev-docs/analytics/adomik.md index 6adc0cece7..75353bda5b 100644 --- a/dev-docs/analytics/adomik.md +++ b/dev-docs/analytics/adomik.md @@ -8,5 +8,5 @@ prebid_member: true #### Registration -Please visit []() for more information. +Please visit [https://www.adomik.com/](https://www.adomik.com/) for more information. diff --git a/dev-docs/analytics/adxcg.md b/dev-docs/analytics/adxcg.md index 27a8f24932..527c436b0c 100644 --- a/dev-docs/analytics/adxcg.md +++ b/dev-docs/analytics/adxcg.md @@ -7,5 +7,5 @@ modulecode: adxcg #### Registration -Please visit []() for more information. +Please visit [https://www.adxcg.com/](https://www.adxcg.com/) for more information. diff --git a/dev-docs/analytics/concert.md b/dev-docs/analytics/concert.md index 704bdadfe3..f9073b92bb 100644 --- a/dev-docs/analytics/concert.md +++ b/dev-docs/analytics/concert.md @@ -8,5 +8,5 @@ enable_download: false #### Registration -Please visit []() for more information. +Please visit [https://concert.io/](https://concert.io/) for more information. diff --git a/dev-docs/analytics/eplanning.md b/dev-docs/analytics/eplanning.md index 1971ed579c..3f64900bc1 100644 --- a/dev-docs/analytics/eplanning.md +++ b/dev-docs/analytics/eplanning.md @@ -7,5 +7,5 @@ modulecode: eplanning #### Registration -Please visit []() for more information. +Please visit [https://www.e-planning.net/](https://www.e-planning.net/) for more information. diff --git a/dev-docs/analytics/marsmedia.md b/dev-docs/analytics/marsmedia.md index 725e6c6b5d..18b7872e5c 100644 --- a/dev-docs/analytics/marsmedia.md +++ b/dev-docs/analytics/marsmedia.md @@ -7,5 +7,5 @@ modulecode: marsmedia #### Registration -Please visit []() for more information. +Please visit [https://mars.media/](https://mars.media/#!group) for more information. diff --git a/dev-docs/analytics/roxot.md b/dev-docs/analytics/roxot.md index b93ff5aa81..b0ab67b2e9 100644 --- a/dev-docs/analytics/roxot.md +++ b/dev-docs/analytics/roxot.md @@ -7,5 +7,5 @@ modulecode: roxot #### Registration -Please visit []() for more information. +Please visit [https://roxot.com/](https://roxot.com/) for more information. diff --git a/dev-docs/analytics/sharethrough.md b/dev-docs/analytics/sharethrough.md index 2b74809f18..e771d65fc2 100644 --- a/dev-docs/analytics/sharethrough.md +++ b/dev-docs/analytics/sharethrough.md @@ -7,5 +7,5 @@ modulecode: sharethrough #### Registration -Please visit []() for more information. +Please visit [https://www.sharethrough.com/](https://www.sharethrough.com/) for more information. diff --git a/dev-docs/analytics/sigmoid.md b/dev-docs/analytics/sigmoid.md index a2795e8711..b12b58c087 100644 --- a/dev-docs/analytics/sigmoid.md +++ b/dev-docs/analytics/sigmoid.md @@ -7,5 +7,5 @@ modulecode: sigmoid #### Registration -Please visit []() for more information. +Please visit [https://www.sigmoid.com/identity-graph-adtech/](https://www.sigmoid.com/identity-graph-adtech/) for more information. diff --git a/dev-docs/analytics/sonobi.md b/dev-docs/analytics/sonobi.md index 8ef0c86ff7..6d1e0ef2f4 100644 --- a/dev-docs/analytics/sonobi.md +++ b/dev-docs/analytics/sonobi.md @@ -8,5 +8,5 @@ enable_download: false #### Registration -Please visit []() for more information. +Please visit [https://sonobi.com/](https://sonobi.com/) for more information. diff --git a/dev-docs/analytics/zeta_global_ssp.md b/dev-docs/analytics/zeta_global_ssp.md index 934b95cf4e..dcd84908d1 100644 --- a/dev-docs/analytics/zeta_global_ssp.md +++ b/dev-docs/analytics/zeta_global_ssp.md @@ -14,7 +14,7 @@ pbjs_version_notes: v6.5.0 and later #### Registration -Please visit []() for more information. +Please visit [https://zetaglobal.com/](https://zetaglobal.com/) for more information. #### Analytics Options From 688cbe1b03d05ee85ad80006440cba7739bf8969 Mon Sep 17 00:00:00 2001 From: Jean Stemp <38964447+jeanstemp@users.noreply.github.com> Date: Tue, 3 Jan 2023 07:43:53 -0800 Subject: [PATCH 005/763] Update guide with instructions for files not in sidebar (#4241) * Update guide with instructions for files not in sidebar * typo Co-authored-by: Jean Stemp Co-authored-by: bretg --- guide.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/guide.md b/guide.md index 8baa2a74c7..c402b73371 100644 --- a/guide.md +++ b/guide.md @@ -243,10 +243,17 @@ Each menu item is represented in the YML map as a collection of key value pairs | sbCollapseId | string | overview | Required if isSectionHeader = 1. Used to identify which div object is being toggled. | **Code Use** -This data file is read in the page_v2.html file using Liquid. +This data file is read in the left_nav.html file using Liquid. (__includes/left_nav.html) -**Code Use** -This data file is read in the home.html file using Liquid. +**Files Not in the Sidebar** +If a page is open that is not listed in the sidebar.yml file, by default the sidebar will display only top-level options, with no options expanded or selected. + +In certain cases, it is helpful to the user to highlight a page in the left navigation that is not currently open. For example, when a bidder page is open (such as [https://docs.prebid.org/dev-docs/bidders/1ad4good.html](https://docs.prebid.org/dev-docs/bidders/1ad4good.html)), we don't want hundreds of bidders displayed in the left nav, but we want the user to be oriented to where they are in the documentation. In this case, that would be under Prebid.js > Reference > Bidder Params. To accomplish this, you must do two things: + +- Add `sidebarType: 1` to all bidder pages. This opens the Prebid.js menu. (If you want to extend this functionality to other pages, use the sbSecId in the sidebar.yml file of the top-level menu as the value for sidebarType.) +- Modified the left_nav.html file's Liquid code to highlight Reference > Bidder Params anytime a page with layout=bidder is open. + +This has been done for both bidders pages (pages with `layout: bidder`) and the Publisher API Reference (`layout: api_prebidjs` and highlighting Prebid.js > Reference > Publish API Reference in the left nav), but can be extended to other pages as needed. ## Bidder Files @@ -269,6 +276,7 @@ The attributes in the Jekyll 'front matter' drive various behaviors and dynamic | filename | no | bid adapter that actually implements this adapter | Used when a bid adapter is created with a filename that is not the bidder code. This completely overrides what is passed into the gulp build command, so needs to be fully specified. e.g. bidderaBidAdapter | | prevBiddercode | no | secondary bidder code | Adds a note about an alternate code that may have been used. | | pbjs_version_notes | no | string | Displays on the download page | +| sidebarType | yes | `1` | Used for navigation. This opens the Prebid.js portion of the menu so the sidebar can display the Reference/Prebid Params menu option when a bidder page is open. | ANYTHING ELSE | no | string | There are many pieces of metadata (e.g. GDPR support, user IDs supported) that bid adapters can disclose. They're displayed on the bidder's parameter page. | The bidderCode, aliasCode, and prevBiddercode parameters bear some description. From 07da5062b8d79b8d8e23dc036a82f1117904879f Mon Sep 17 00:00:00 2001 From: bretg Date: Wed, 4 Jan 2023 13:49:58 -0500 Subject: [PATCH 006/763] fledge doc - fixing tables (#4246) * fledge doc - fixing tables * typo * another typo --- dev-docs/modules/fledgeForGpt.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/dev-docs/modules/fledgeForGpt.md b/dev-docs/modules/fledgeForGpt.md index 73ce049110..265944e720 100644 --- a/dev-docs/modules/fledgeForGpt.md +++ b/dev-docs/modules/fledgeForGpt.md @@ -32,8 +32,9 @@ settings exist at the module level, the bidder level, and the adunit level. ### Module Configuration This module exposes the following settings: +{: .table .table-bordered .table-striped } |Name |Type |Description |Notes | -| :------------ | :------------ | :------------ |:------------ | +| ------------ | ------------ | ------------ |------------ | |enabled | Boolean |Enable/disable the module |Defaults to `false` | As noted above, FLEDGE support is disabled by default. To enable it, set the `enabled` value to `true` for this module @@ -52,8 +53,9 @@ pbjs.que.push(function() { ### Bidder Configuration This module adds the following setting for bidders: +{: .table .table-bordered .table-striped } |Name |Type |Description |Notes | -| :------------ | :------------ | :------------ |:------------ | +| ------------ | ------------ | ------------ |------------ | | fledgeEnabled | Boolean | Enable/disable a bidder to participate in FLEDGE | Defaults to `false` | In addition to enabling FLEDGE at the module level, individual bidders must also be enabled. This allows publishers to @@ -73,8 +75,9 @@ pbjs.setBidderConfig({ Enabling an adunit for FLEDGE eligibility is accomplished by setting an attribute of the `ortb2Imp` object for that adunit. +{: .table .table-bordered .table-striped } |Name |Type |Description |Notes | -| :------------ | :------------ | :------------ |:------------ | +| ------------ | ------------ | ------------ |------------ | | ortb2Imp.ext.ae | Integer | Auction Environment: 1 indicates FLEDGE eligible, 0 indicates it is not | Absence indicates this is not FLEDGE eligible | The `ae` field stands for Auction Environment and was chosen to be consistent with the field that GAM passes to bidders @@ -116,7 +119,7 @@ the [`buildRequests`](/dev-docs/bidder-adaptor.html#building-the-request) method who wish to participate should read this flag and pass it to their server. FLEDGE eligibility depends on a number of parameters: 1. Chrome enablement -2. Publisher participatipon in the [Origin Trial](https://developer.chrome.com/docs/privacy-sandbox/unified-origin-trial/#configure) +2. Publisher participation in the [Origin Trial](https://developer.chrome.com/docs/privacy-sandbox/unified-origin-trial/#configure) 3. Publisher Prebid.js configuration (detailed above) When a bid request is FLEDGE enabled, a bid adapter can return a tuple consisting of bids and AuctionConfig objects rather than just a list of bids: From 5fafb3f02ef5f9ed7f4044922ea261a4c623d9c9 Mon Sep 17 00:00:00 2001 From: bretg Date: Wed, 4 Jan 2023 17:11:54 -0500 Subject: [PATCH 007/763] antitrust updates from legal review (#4247) --- policies/antitrust.md | 75 +++++++++++++++++++++++++++++++++---------- 1 file changed, 58 insertions(+), 17 deletions(-) diff --git a/policies/antitrust.md b/policies/antitrust.md index 8d05f42b97..944578e9af 100644 --- a/policies/antitrust.md +++ b/policies/antitrust.md @@ -9,21 +9,62 @@ sidebarType: 0 # Antitrust Policy -Prebid.Org, Inc. (the “Corporation”) is intended to promote cooperation in the development of certain open source technology and related materials. The goal of the Corporation is to develop an open standard for transparent and interoperable header bidding solutions. The Corporation is narrowly tailored to achieving this goal. The Corporation is not organized to and does not play any role in the competitive business decisions of its members, nor does it intend to restrict competition among members or potential members. The Corporation’s members shall not discuss or coordinate individual bidding activity, strategy, or pricing (including the development of price floors). It is the express policy of the Corporation to comply with all applicable federal, state, and foreign antitrust laws. This Policy has been prepared to inform Corporation members of this obligation. - -1. Antitrust Laws - 1. Agreements among competitors to fix prices are unlawful. Corporation members must not discuss or exchange information about member company prices, price levels, or other competitively sensitive information. Members shall not discuss any element of a company's operations which might influence pricing decisions, such as: - 1. Cost of operations, supplies, services and technology; - 2. Allowance for discounts; - 3. Terms of sales and licensing, including credit arrangements; - 4. Profit margins and mark ups; - 5. Market shares for any product or for all products; and - 6. Actual or projected changes in production, output, capacity, or inventory. - 2. Antitrust laws expressly prohibit any agreement between competitors to divide or allocate markets, including allocations by geography, product type, and customer. Even an informal agreement whereby one member agrees to stay out of another’s territory or product market may constitute a violation of the antitrust laws and must be avoided. - 3. Agreements among Corporation members to “boycott” or exclude a competitor from a market or a competitive activity are unlawful. Illegal boycotts include “blacklisting” or refusing to deal with a particular distributor or supplier. -2. General Operating Procedures - 1. In order to ensure that Corporation activities are conducted fairly in a manner that does not unduly benefit some competitors to the detriment of others, an agenda shall be distributed prior to meetings and meetings shall adhere to the agenda. - 2. This Policy and standard of conduct set forth above shall apply to Board meetings, committee meetings, informal member meetings, social events, such as luncheons, receptions, and dinners, and any other activity related to the Corporation. - 3. Members should report any violations of this Policy concerning Corporation activities to the Board of Directors. - +Prebid.Org, Inc. (the “Corporation”) is intended to promote cooperation in the development of certain open source technology and related materials. The Corporation is necessary to enable its members to develop an open standard for transparent and interoperable header bidding solutions. The Corporation is narrowly tailored to achieving this goal. The Corporation is not organized to and does not play any role in the competitive business decisions of its members or potential members, nor does it in any way restrict competition among members or potential members. The Corporation’s members shall not discuss or coordinate individual bidding activity, strategy, customers, costs, employee compensation, hiring, or pricing (including the development of price ceilings, floors, or ranges). It is the express Policy of the Corporation to comply with all applicable federal, state, and foreign antitrust laws. This Policy has been prepared to inform Corporation members, staff and participants of this obligation. +It is the responsibility of each member, staff and participant to comply with the antitrust laws and this Policy. + +## 1. Antitrust Laws + +### 1.a. Prices, Bids, and Compensation +Agreements among competitors to fix prices or coordinate bids are per se unlawful and can result in criminal liability. Corporation members shall not discuss, signal, or exchange information about member company bids, sales opportunities, customers, costs, employee compensation, hiring, prices, or other competitively sensitive information. Members **SHALL NOT** discuss any element of a company's operations which might influence pricing, bids or compensation decisions, such as: + +1. Cost of operations, supplies, services and technology; +1. Allowance for discounts or rebates; +1. Terms of sales and licensing, including credit arrangements; +1. Profit margins and mark ups; +1. Transaction-specific past, present or future prices or costs; +1. Requests For Proposal, bids, or bidding opportunities; +1. Business, product, or marketing plans; +1. Employee compensation, benefits, recruitment, or hiring; +1. Market shares for any product or for all products; and +1. Actual or projected changes in production, output, capacity, or inventory. + +### 1.b. Markets + +Antitrust laws expressly prohibit any agreement between competitors to divide or allocate markets, including by geography, distribution channel, product type, and customers. Even an informal agreement whereby one member merely implies that it will stay away from another member’s territory or customers in exchange for reciprocity may constitute a per se violation of the antitrust laws and must be avoided. Members **SHALL NOT** discuss who will and will not compete for business along any of these dimensions. Agreements not to compete in any fashion, including in the hiring or poaching of employees, is forbidden. + +### 1.c. Exclusion + +Agreements among Corporation members to “boycott” or exclude a competitor from a market or a competitive activity are unlawful. Illegal group boycotts include “blacklisting” or agreeing to refuse to deal with a particular distributor or supplier. Members **SHALL NOT** discuss excluding or discriminating against other companies from any product, geography, technical standard, customer, source of supply, or distribution channel. + +## 2. Membership + +Corporation membership is subject to conditions that are non-discriminatory and objective. Membership to the Corporation is voluntary and each member of the Corporation retains absolute commercial freedom. No member is required to apply Corporation-compliant standards. The Corporation **SHALL NOT**: + +1. Exclude qualified competitors from membership in the Corporation for any anticompetitive purpose; +1. Restrict Corporation members from dealing with non-members or +1. Limit access to information developed by the Corporation unless such limitation is firmly grounded upon the need to protect trade secrets or other intellectual property rights. + +## 3. General Operating Procedures + +a. Understanding and sharing information on industry trends and conditions will be important for the Corporation to succeed in achieving its purpose of enabling its members to develop an open standard for transparent and interoperable header bidding solutions. Fortunately, antitrust enforcers recognize that sharing some types of information with competitors can benefit markets, businesses, and consumers alike if done with “adequate safeguards.” + +b. Keeping your conversations within these simple guardrails will ensure that you stay within the lanes of the law: +1. You **MUST** hold discussions in open settings and avoid situations that could be seen as secretive. +1. In order to ensure that Corporation activities are conducted fairly in a manner that does not unduly benefit some competitors to the detriment of others, an agenda MUST be distributed prior to meetings and meetings shall adhere to the agenda. Meeting minutes shall be prepared and MUST accurately reflect the matters that transpired and MUST comply with this Policy. +1. You CAN discuss high-level, aggregate information regarding industry trends and expectations, rather than transaction-specific or company-specific data. +1. Generally, you CAN discuss industry public relations, litigation, legislation, lobbying, and long-term trends are generally appropriate. + +c. Antitrust violations can be inferred from the parties’ conduct and so it is important to avoid even the appearance of improper discussions. + +1. If you believe a conversation is approaching an improper subject, you must report any violations of this Policy concerning Corporation activities to the Corporation’s counsel; and MUST clearly state that: + 1. You have concerns about the comment or suggestion; + 2. Discussion on that topic must stop; and + 3. You will discuss this with counsel before deciding if it can proceed. +1. If the request is ignored, the meeting SHOULD stop and counsel should be advised. + +d. **No** Corporation member, staff or participant **SHALL** have authority to communicate with government officials regarding matters related to the Corporation without prior approval of the Corporation’s counsel. + +e. This Policy and standards of conduct set forth above **SHALL** apply to Board meetings, committee meetings, informal member meetings, social events, such as luncheons, receptions, and dinners, and any other activity related to the Corporation. + +f. All Corporation members, staff and participants staff **SHALL** report any violation of this Policy to the Corporation’s counsel. From 259ee136584c9004982e2bb902568dc50021cfd3 Mon Sep 17 00:00:00 2001 From: Chris Huie Date: Thu, 5 Jan 2023 07:32:09 -0700 Subject: [PATCH 008/763] How to add a bid adapter old doc cleanup (#4248) * Remove how to add 1.0 bidder * remove redirected bidder file --- dev-docs/bidder-adapter-1.md | 9 --------- dev-docs/bidder-adapter.md | 7 ------- 2 files changed, 16 deletions(-) delete mode 100644 dev-docs/bidder-adapter-1.md delete mode 100644 dev-docs/bidder-adapter.md diff --git a/dev-docs/bidder-adapter-1.md b/dev-docs/bidder-adapter-1.md deleted file mode 100644 index c068947168..0000000000 --- a/dev-docs/bidder-adapter-1.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -redirect_to: "/dev-docs/bidder-adaptor.html" -layout: page_v2 -title: How to add a Prebid 1.0 Bidder Adapter -description: Documentation on how to add a new bidder adapter -top_nav_section: dev_docs -nav_section: adapters - ---- diff --git a/dev-docs/bidder-adapter.md b/dev-docs/bidder-adapter.md deleted file mode 100644 index 1c04202589..0000000000 --- a/dev-docs/bidder-adapter.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -redirect_to: "/dev-docs/bidder-adaptor.html" -layout: page_v2 -top_nav_section: dev_docs -nav_section: adapters - ---- From eac49d891a7c070645c06964136781a2f1af2c57 Mon Sep 17 00:00:00 2001 From: Chris Huie Date: Thu, 5 Jan 2023 09:33:47 -0700 Subject: [PATCH 009/763] Adds gpp_supported flag (#4249) * add gpp_supported to bid adapter docs * add to java bidder docs * add to go bidder docs * add gpp supported adapters * add gpp_supported to csv * remove spaces * update bidder params display * adding a blank cell on the new row Co-authored-by: bretg --- _layouts/bidder.html | 10 ++++++++-- dev-docs/bidder-adaptor.md | 2 ++ dev-docs/bidder-data.csv | 4 ++-- dev-docs/bidders/appnexus.md | 1 + dev-docs/bidders/improvedigital.md | 1 + dev-docs/bidders/taboola.md | 1 + dev-docs/bidders/ttd.md | 1 + prebid-server/developers/add-new-bidder-go.md | 2 ++ prebid-server/developers/add-new-bidder-java.md | 2 ++ 9 files changed, 20 insertions(+), 4 deletions(-) diff --git a/_layouts/bidder.html b/_layouts/bidder.html index a0a05bbe35..d7d5f72ba8 100644 --- a/_layouts/bidder.html +++ b/_layouts/bidder.html @@ -77,8 +77,8 @@

Features

Demand Chain Support {% if page.dchain_supported == true %}yes{% else %}no{% endif %} - Safeframes OK - {% if page.safeframes_ok == false %}no{% elsif page.safeframes_ok == true %}yes{% else %}check with bidder{% endif %} + GPP Support + {% if page.gpp_supported == true %}yes{% else %}no{% endif %} Supports Deals @@ -104,6 +104,12 @@

Features

ORTB Blocking Support {% if page.ortb_blocking_supported == true %}yes{% elsif page.ortb_blocking_supported == false %}no{% elsif page.ortb_blocking_supported == 'partial' %}partial{% else %}check with bidder{% endif %} + + Safeframes OK + {% if page.safeframes_ok == false %}no{% elsif page.safeframes_ok == true %}yes{% else %}check with bidder{% endif %} + + +

"Send All Bids" Ad Server Keys

diff --git a/dev-docs/bidder-adaptor.md b/dev-docs/bidder-adaptor.md index d2933faf24..fc86aba6d5 100644 --- a/dev-docs/bidder-adaptor.md +++ b/dev-docs/bidder-adaptor.md @@ -1208,6 +1208,7 @@ registerBidder(spec); - If you support one or more userId modules, add `userId: (list of supported vendors)`. No default value. - If you support video and/or native mediaTypes add `media_types: video, native`. Note that display is added by default. If you don't support display, add "no-display" as the first entry, e.g. `media_types: no-display, native`. No default value. - If you support COPPA, add `coppa_supported: true`. Default is false. + - If you support GPP, add `gpp_supported: true`. Default is false. - If you support the [supply chain](/dev-docs/modules/schain.html) feature, add `schain_supported: true`. Default is false. - If you support passing a demand chain on the response, add `dchain_supported: true`. Default is false. - If your bidder doesn't work well with safeframed creatives, add `safeframes_ok: false`. This will alert publishers to not use safeframed creatives when creating the ad server entries for your bidder. No default value. @@ -1232,6 +1233,7 @@ gdpr_supported: true/false gvl_id: none usp_supported: true/false coppa_supported: true/false +gpp_supported: true/false schain_supported: true/false dchain_supported: true/false userId: (list of supported vendors) diff --git a/dev-docs/bidder-data.csv b/dev-docs/bidder-data.csv index fd0fd97160..3b031caca0 100644 --- a/dev-docs/bidder-data.csv +++ b/dev-docs/bidder-data.csv @@ -2,6 +2,6 @@ layout: none search: exclude --- -bidder-code,bidder-name,banner,video,native,gdpr,schain,coppa,usp,safeframes,deals,client-adapter,server-adapter,user-ids,usp,mobile-apps,floors,fpd,prebid-member,ortb-blocking -{% assign bidder_pages = site.pages | where: "layout", "bidder" %}{% for page in bidder_pages %}{{ page.biddercode }},{{ page.title }},{% if page.media_types contains 'banner' %}yes{% else %}no{% endif %},{% if page.media_types contains 'video' %}yes{% else %}no{% endif %},{% if page.media_types contains 'native' %}yes{% else %}no{% endif %},{% if page.gdpr_supported == true %}yes{% else %}no{% endif %},{% if page.schain_supported == true %}yes{% else %}no{% endif %},{% if page.coppa_supported == true %}yes{% else %}no{% endif %},{% if page.usp_supported == true %}yes{% else %}no{% endif %},{% if page.safeframes_ok and page.safeframes_ok == false %}no{% elsif page.safeframes_ok and page.safeframes_ok == true %}yes{% else %}check with bidder{% endif %},{% if page.deals_supported and page.deals_supported == false %}no{% else %}yes{% endif %},{% if page.pbjs == true %}yes{% else %}no{% endif %},{% if page.pbs == true %}yes{% else %}no{% endif %},{% if page.userIds and page.userIds != '' %}"{{page.userIds}}"{% else %}none{% endif %},{% if page.usp_supported == true %}yes{% else %}no{% endif %},{% if page.pbs_app_supported and page.pbs_app_supported == false %}no{% elsif page.pbs_app_supported and page.pbs_app_supported == true %}yes{% elsif page.pbs and page.pbs == false %}no{% elsif page.pbs==nil %}no{% else %}check with bidder{% endif %},{% if page.floors_supported == true %}yes{% else %}no{% endif %},{% if page.fpd_supported == true %}yes{% elsif page.fpd_supported == false %}no{% else %}check with bidder{% endif %},{% if page.prebid_member == true %}yes{% else %}no{% endif %},{% if page.ortb_blocking_supported == true %}yes{% elsif page.ortb_blocking_supported == false %}no{% elsif page.ortb_blocking_supported == 'partial' %}partial{% else %}check with bidder{% endif %} +bidder-code,bidder-name,banner,video,native,gdpr,schain,coppa,gpp,usp,safeframes,deals,client-adapter,server-adapter,user-ids,usp,mobile-apps,floors,fpd,prebid-member,ortb-blocking +{% assign bidder_pages = site.pages | where: "layout", "bidder" %}{% for page in bidder_pages %}{{ page.biddercode }},{{ page.title }},{% if page.media_types contains 'banner' %}yes{% else %}no{% endif %},{% if page.media_types contains 'video' %}yes{% else %}no{% endif %},{% if page.media_types contains 'native' %}yes{% else %}no{% endif %},{% if page.gdpr_supported == true %}yes{% else %}no{% endif %},{% if page.schain_supported == true %}yes{% else %}no{% endif %},{% if page.coppa_supported == true %}yes{% else %}no{% endif %},{% if page.gpp_supported == true %}yes{% else %}no{% endif %},{% if page.usp_supported == true %}yes{% else %}no{% endif %},{% if page.safeframes_ok and page.safeframes_ok == false %}no{% elsif page.safeframes_ok and page.safeframes_ok == true %}yes{% else %}check with bidder{% endif %},{% if page.deals_supported and page.deals_supported == false %}no{% else %}yes{% endif %},{% if page.pbjs == true %}yes{% else %}no{% endif %},{% if page.pbs == true %}yes{% else %}no{% endif %},{% if page.userIds and page.userIds != '' %}"{{page.userIds}}"{% else %}none{% endif %},{% if page.usp_supported == true %}yes{% else %}no{% endif %},{% if page.pbs_app_supported and page.pbs_app_supported == false %}no{% elsif page.pbs_app_supported and page.pbs_app_supported == true %}yes{% elsif page.pbs and page.pbs == false %}no{% elsif page.pbs==nil %}no{% else %}check with bidder{% endif %},{% if page.floors_supported == true %}yes{% else %}no{% endif %},{% if page.fpd_supported == true %}yes{% elsif page.fpd_supported == false %}no{% else %}check with bidder{% endif %},{% if page.prebid_member == true %}yes{% else %}no{% endif %},{% if page.ortb_blocking_supported == true %}yes{% elsif page.ortb_blocking_supported == false %}no{% elsif page.ortb_blocking_supported == 'partial' %}partial{% else %}check with bidder{% endif %} {% endfor %} diff --git a/dev-docs/bidders/appnexus.md b/dev-docs/bidders/appnexus.md index 75017fe3be..207a1a0a5e 100644 --- a/dev-docs/bidders/appnexus.md +++ b/dev-docs/bidders/appnexus.md @@ -9,6 +9,7 @@ prebid_member: true userIds: criteo, identityLink, netId, pubProvidedId, uid2, unifiedId, schain_supported: true coppa_supported: true +gpp_supported: true usp_supported: true floors_supported: true fpd_supported: true diff --git a/dev-docs/bidders/improvedigital.md b/dev-docs/bidders/improvedigital.md index 2c070ef151..9a086131c8 100755 --- a/dev-docs/bidders/improvedigital.md +++ b/dev-docs/bidders/improvedigital.md @@ -6,6 +6,7 @@ biddercode: improvedigital pbjs: true pbs: true coppa_supported: true +gpp_supported: true gdpr_supported: true usp_supported: true userIds: all diff --git a/dev-docs/bidders/taboola.md b/dev-docs/bidders/taboola.md index c96c64949d..956ed22219 100644 --- a/dev-docs/bidders/taboola.md +++ b/dev-docs/bidders/taboola.md @@ -8,6 +8,7 @@ biddercode: taboola gdpr_supported: true usp_supported: true coppa_supported: true +gpp_supported: true schain_supported: false media_types: banner gvl_id: 42 diff --git a/dev-docs/bidders/ttd.md b/dev-docs/bidders/ttd.md index daa7aac1be..7820fe3ed5 100644 --- a/dev-docs/bidders/ttd.md +++ b/dev-docs/bidders/ttd.md @@ -7,6 +7,7 @@ gdpr_supported: true gvl_id: 21 usp_supported: true coppa_supported: true +gpp_supported: true schain_supported: true dchain_supported: false userIds: unifiedId, uid2 diff --git a/prebid-server/developers/add-new-bidder-go.md b/prebid-server/developers/add-new-bidder-go.md index a25025db14..d72ec66bb6 100644 --- a/prebid-server/developers/add-new-bidder-go.md +++ b/prebid-server/developers/add-new-bidder-go.md @@ -1196,6 +1196,7 @@ gdpr_supported: true/false gvl_id: 111 usp_supported: true/false coppa_supported: true/false +gpp_supported: true/false schain_supported: true/false dchain_supported: true/false userId: @@ -1231,6 +1232,7 @@ Notes on the metadata fields: - If you support one or more userId modules, add `userId: (list of supported vendors)`. Default is none. - If you support video, native, or audio mediaTypes add `media_types: video, native, audio`. Note that display is added by default. If you don't support display, add "no-display" as the first entry, e.g. `media_types: no-display, native`. No defaults. - If you support COPPA, add `coppa_supported: true`. Default is false. +- If you support GPP, add `gpp_supported: true`. Default is false. - If you support the [supply chain](/dev-docs/modules/schain.html) feature, add `schain_supported: true`. Default is false. - If you support adding a demand chain on the bid response, add `dchain_supported: true`. Default is false. - If your bidder doesn't work well with safeframed creatives, add `safeframes_ok: false`. This will alert publishers to not use safeframed creatives when creating the ad server entries for your bidder. No default. diff --git a/prebid-server/developers/add-new-bidder-java.md b/prebid-server/developers/add-new-bidder-java.md index 11f94851d9..de755f60a8 100644 --- a/prebid-server/developers/add-new-bidder-java.md +++ b/prebid-server/developers/add-new-bidder-java.md @@ -1237,6 +1237,7 @@ gdpr_supported: true/false gvl_id: 111 usp_supported: true/false coppa_supported: true/false +gpp_supported: true/false schain_supported: true/false dchain_supported: true/false userId: @@ -1272,6 +1273,7 @@ Notes on the metadata fields: - If you support one or more userId modules, add `userId: (list of supported vendors)`. Default is none. - If you support video, native, or audio mediaTypes add `media_types: video, native, audio`. Note that display is added by default. If you don't support display, add "no-display" as the first entry, e.g. `media_types: no-display, native`. No defaults. - If you support COPPA, add `coppa_supported: true`. Default is false. +- If you support GPP, add `gpp_supported: true`. Default is false. - If you support the [supply chain](/dev-docs/modules/schain.html) feature, add `schain_supported: true`. Default is false. - If you support adding a demand chain on the bid response, add `dchain_supported: true`. Default is false. - If your bidder doesn't work well with safeframed creatives, add `safeframes_ok: false`. This will alert publishers to not use safeframed creatives when creating the ad server entries for your bidder. No default. From 01f067badd3b0a6912fde2e33357a038896e27b0 Mon Sep 17 00:00:00 2001 From: jsnellbaker <31102355+jsnellbaker@users.noreply.github.com> Date: Thu, 5 Jan 2023 14:09:28 -0500 Subject: [PATCH 010/763] consentManagement GPP module docs (#4216) * consentManagement GPP module docs * Update consentManagementGpp.md * fix wording in legal notice Co-authored-by: Patrick McCann --- dev-docs/bidders/appnexus.md | 1 + dev-docs/modules/consentManagementGpp.md | 206 +++++++++++++++++++++++ features/firstPartyData.md | 4 + 3 files changed, 211 insertions(+) create mode 100644 dev-docs/modules/consentManagementGpp.md diff --git a/dev-docs/bidders/appnexus.md b/dev-docs/bidders/appnexus.md index 207a1a0a5e..e11bd262cb 100644 --- a/dev-docs/bidders/appnexus.md +++ b/dev-docs/bidders/appnexus.md @@ -11,6 +11,7 @@ schain_supported: true coppa_supported: true gpp_supported: true usp_supported: true +gpp_supported: true floors_supported: true fpd_supported: true pbjs: true diff --git a/dev-docs/modules/consentManagementGpp.md b/dev-docs/modules/consentManagementGpp.md new file mode 100644 index 0000000000..98890dac0a --- /dev/null +++ b/dev-docs/modules/consentManagementGpp.md @@ -0,0 +1,206 @@ +--- +layout: page_v2 +page_type: module +title: Consent Management - GPP +description: If you have users in regions of the world that adhere to the Global Privacy Platform, this module works with your Consent Management Platform to pass consent info to bidders and help align with regional regulations. +module_code : consentManagementGpp +display_name : Consent Management - GPP +enable_download : true +recommended: true +sidebarType : 1 +--- + +# GPP Consent Management Module +{: .no_toc } + +* TOC +{: toc } + +{% capture legalNotice %} + This resource should not be construed as legal advice and Prebid.org makes no guarantees about compliance with any law or regulation. Please note that because every company's collection, use, and storage of personal data is different, you should seek independent legal advice relating to obligations under European, Canadian and /or US regulations, including the GDPR, the ePrivacy Directive and CCPA. Only a lawyer can provide you with legal advice specifically tailored to your situation. Nothing in this guide is intended to provide you with, or should be used as a substitute for, legal advice tailored to your business. + {% endcapture %} + +{% include /alerts/alert_important.html content=legalNotice %} + +## Overview + +This consent management module is designed to support the Global Privacy Platform ([GPP](https://iabtechlab.com/gpp/)) + +This module works with supported [Consent Management Platforms](https://www.cmswire.com/information-management/what-is-a-consent-management-platform/) (CMPs) to fetch an encoded string representing the user's consent choices (for their repsective region) and make it available for adapters to consume and process. + +{: .alert.alert-warning :} +Prebid functionality created to address regulatory requirements does not replace each party's responsibility to determine its own legal obligations and comply with all applicable laws. +**We recommend consulting with your legal counsel before determining how to utilize these features in support of your overall privacy approach. This module is not yet intended to replace other consent modules; it supplements them.** + +Below is a summary of the actions performed by the GPP consent management module: + +1. Fetch the user's GPP consent data from the IAB compliant CMP. +2. Incorporate this data into the auction objects for adapters to collect. +3. Proceed with the auction. + +In the case of a new user, CMPs will generally respond only after there is consent information available (i.e., the user has made their consent choices). +Making these selections can take some time for the average user, so the module provides timeout settings. + +If the timeout period expires or an error from the CMP is thrown, one of these actions occurs: + +- The auction is canceled outright. +- The auction proceeds without the user's consent information. + +## Page Integration + +To utilize this module, a Consent Management Platform (CMP) compatible with the [IAB GPP CMP spec](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Core/CMP%20API%20Specification.md) needs to be implemented on the site to interact with the user and obtain their consent choices. It's important to understand the details of how the CMP works before integrating it with Prebid.js. + +In general, implementation details for CMPs are not covered by Prebid.org, but we do recommend that you place the CMP code before the Prebid.js code in the head of the page in order to ensure the CMP's framework is loaded before the Prebid code executes. In addition, the community is collecting a set of [CMP best practices](/dev-docs/cmp-best-practices.html). + +Once the CMP is implemented, simply include this module into your build and add a `consentManagement` object in the `setConfig()` call. Adapters that support this feature will then be able to retrieve the consent information and incorporate it in their requests. + +Here are the parameters supported in the `consentManagement` object specific for the GPP consent module: + +{: .table .table-bordered .table-striped } +| Param | Type | Description | Example | +| --- | --- | --- | --- | +| gpp | `Object` | | | +| gpp.cmpApi | `string` | The CMP interface that is in use. Supported values are **'iab'** or **'static'**. Static allows integrations where IAB-formatted consent strings are provided in a non-standard way. Default is `'iab'`. | `'iab'` | +| gpp.timeout | `integer` | Length of time (in milliseconds) to allow the CMP to obtain the GPP consent information. Default is `10000`. | `10000` | +| gpp.consentData | `Object` | An object representing the IAB GPP consent data being passed directly; only used when cmpApi is 'static'. Default is `undefined`. | | +| gpp.consentData.sectionId | `integer` | Indicates the header section of the GPP consent string, recommended to be `3`. | | +| gpp.consentData.gppVersion | `integer` | The version number parsed from the header of the GPP consent string. | | +| gpp.consentData.sectionList | `Array of integers` | The sections contained within the encoded GPP string as parsed from the header. | | +| gpp.consentData.applicableSections | `Array of integers` | Section ID considered to be in force for this transaction. In most cases, this field should have a single section ID. In rare occasions where such a single section ID can not be determined, the field may contain up to 2 values. The value can be 0 or a Section ID specified by the Publisher / Advertiser, during stub / load. When no section is applicable, the value will be -1. | | +| gpp.consentData.gppString | `String` | The complete encoded GPP string. | | +| gpp.consentData.pingData | `Object` | An object representing the current status of the CMP at the time consent data was fetched. See PingReturn in [IAB's CMP API doc](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Core/CMP%20API%20Specification.md#ping) for further information. | | + +{: .alert.alert-info :} +In addition to the static approach described above, there is another means to pass already known GPP consent data of a user via the Prebid.js [First Party Data](https://docs.prebid.org/features/firstPartyData.html) feature. The values for `gppString` and `applicableSections` can be passed via the `ortb2.regs.gpp` and `ortb2.regs.gpp_sid` fields respectively; other fields in the GPP data object listed above are not available via the `ortb2` structure. If the GPP consent module is present and successfully obtains the consent information from the CMP, it will override the GPP values set originally in the `ortb2` object (as we assume the CMP's values will be more up-to-date). Please visit the [First Party Data](https://docs.prebid.org/features/firstPartyData.html) page for more overall information and examples. + +### Examples + +Example 1: IAB CMP using a custom timeout + +{% highlight js %} + var pbjs = pbjs || {}; + pbjs.que = pbjs.que || []; + pbjs.que.push(function() { + pbjs.setConfig({ + consentManagement: { + gpp: { + cmpApi: 'iab', + timeout: 8000 + } + } + }); + }); +{% endhighlight %} + +Example 2: Static CMP using custom data passing. + +{% highlight js %} + var pbjs = pbjs || {}; + pbjs.que = pbjs.que || []; + pbjs.que.push(function() { + pbjs.setConfig({ + consentManagement: { + gpp: { + cmpApi: 'static', + consentData: { + sectionId: 3, + gppVersion: 1, + sectionList: [5, 7] + applicableSections: [7] + gppString: 'DBACNYA~CPXxRfAPXxRfAAfKABENB-CgAAAAAAAAAAYgAAAAAAAA~1YNN', + pingData: {...} + } + } + } + }); + }); +{% endhighlight %} + +## Build the Package + +Follow the basic build instructions in the GitHub Prebid.js repo's main [README](https://github.com/prebid/Prebid.js/blob/master/README.md). To include the consent management module, an additional option must be added to the **gulp build** command: + +{% highlight bash %} +gulp build --modules=consentManagementGpp,bidAdapter1,bidAdapter2 +{% endhighlight %} + +You can also use the [Prebid.js Download](/download.html) page. + +## Adapter Integration + +{: .alert.alert-info :} + +If you are submitting changes to an adapter to support GPP, please also submit a PR to the [docs repo](https://github.com/prebid/prebid.github.io) to add the `gpp_supported: true` variable to your respective page in the [bidders directory](https://github.com/prebid/prebid.github.io/tree/master/dev-docs/bidders). **This will ensure that your adapter's name will automatically appear on the list of adapters supporting GPP.** + +### Bidder Adapter GPP Integration + +To find the GPP consent information to pass along to your system, adapters should look for the `bidderRequest.gppConsent` field in their `buildRequests()` method; this field includes a copy of the full GPPData object from the CMP, in case additional information (beyond the gppString and applicableSections values) is needed. Alternatively if only the consent string and/or the applicableSections values are needed, these two values can also be found in the `bidderRequest.ortb2.regs` field under the OpenRTB 2.6 field names (`gpp` and `gpp_sid`). +Here is a sample of how the data is structured in the `bidderRequest` object: + +{% highlight js %} +{ + "bidderCode": "bidderA", + "auctionId": "e3a336ad-2222-4a1c-bbbb-ecc7c5294a34", + ... + "timeout": 3000, + "gppConsent": { + "gppString": "BOJ/P2HOJ/P2HABABMAAAAAZ+A==", + "fullGppData": {...}, + "applicableSections": [7] + }, + "ortb2": { + "regs": { + "gpp": "BOJ/P2HOJ/P2HABABMAAAAAZ+A==", + "gpp_sid": [7] + } + }, + ... +} +{% endhighlight %} + +### UserSync Integration + +The `gppConsent` object is also available when registering `userSync` pixels. +The object can be accessed by including it as an argument in the `getUserSyncs` function: + +{% highlight js %} +getUserSyncs: function(syncOptions, responses, gdprConsent, usPrivacy, gppConsent) { +... +} +{% endhighlight %} + +Depending on your needs, you could include the consent information in a query of your pixel and/or, given the consent choices, determine if you should drop the pixels at all. + +## Adapters Supporting GPP + +Bidders on this list have self-declared their GPP support in their https://github.com/prebid/prebid.github.io/tree/master/dev-docs/bidders md file by adding "gpp_supported: true". + + + + + +
+ +
+ +## Further Reading + +- [IAB Global Privacy Platform Full Specification Repository](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform) +- [IAB Global Privacy Platform CMP API Specification](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Core/CMP%20API%20Specification.md) +- [Prebid Consent Management - GDPR Module](/dev-docs/modules/consentManagement.html) +- [Prebid Consent Management - US Privacy Module](/dev-docs/modules/consentManagementUsp.html) +- [CMP Best Practices](https://docs.prebid.org/dev-docs/cmp-best-practices.html) diff --git a/features/firstPartyData.md b/features/firstPartyData.md index 46718011b0..2aab129584 100644 --- a/features/firstPartyData.md +++ b/features/firstPartyData.md @@ -98,6 +98,10 @@ pbjs.setConfig({ interests: ["cars"] } } + }, + regs: { + gpp: "abc1234", + gpp_sid: [7] } } }); From 2ab5bd2d78145cacb1dfdf87ec7cf5cf67815628 Mon Sep 17 00:00:00 2001 From: bretg Date: Thu, 5 Jan 2023 14:18:32 -0500 Subject: [PATCH 011/763] gpp flag update (#4251) --- dev-docs/bidders/appnexus.md | 1 - dev-docs/bidders/openx.md | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/appnexus.md b/dev-docs/bidders/appnexus.md index e11bd262cb..dc8f9578fc 100644 --- a/dev-docs/bidders/appnexus.md +++ b/dev-docs/bidders/appnexus.md @@ -9,7 +9,6 @@ prebid_member: true userIds: criteo, identityLink, netId, pubProvidedId, uid2, unifiedId, schain_supported: true coppa_supported: true -gpp_supported: true usp_supported: true gpp_supported: true floors_supported: true diff --git a/dev-docs/bidders/openx.md b/dev-docs/bidders/openx.md index 026d1852bf..7e3fc168e3 100644 --- a/dev-docs/bidders/openx.md +++ b/dev-docs/bidders/openx.md @@ -10,6 +10,7 @@ schain_supported: true gdpr_supported: true usp_supported: true coppa_supported: true +gpp_supported: true floors_supported: true userIds: admixerId, adtelligentId, amxId, britepoolId, criteo, dapId, deepintentId, dmdId, fabrickId, hadronId, id5Id, identityLink, idxId, imuId, intentIqId, kinessoId, liveIntentId, lotamePanoramaId, merkleId, mwOpenLinkId, naveggId, netId, novatiq, parrableId, pubCommonId, publinkId, quantcastId, sharedId, tapadId, uid2, unifiedId, verizonMediaId, zeotapIdPlus prebid_member: true From 5798978da0a3cf3240ddd99a5aac880b481bcfe0 Mon Sep 17 00:00:00 2001 From: Matt Crute <872334+mbcrute@users.noreply.github.com> Date: Fri, 6 Jan 2023 14:18:26 -0500 Subject: [PATCH 012/763] Deprecate zeusPrimeRtdProvider (#4226) Added a deprecation warning to the zeusPrimeRtdProvider's docs. --- dev-docs/modules/zeusPrimeRtdProvider.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dev-docs/modules/zeusPrimeRtdProvider.md b/dev-docs/modules/zeusPrimeRtdProvider.md index 93df3cd365..a19df8cd38 100644 --- a/dev-docs/modules/zeusPrimeRtdProvider.md +++ b/dev-docs/modules/zeusPrimeRtdProvider.md @@ -9,10 +9,15 @@ module_type: rtd enable_download: true vendor_specific: true sidebarType: 1 +enable_download: false --- # Zeus Prime Real Time Data Module +# NOTE: ZEUS PRIME HAS BEEN DEPRECATED! +# THIS MODULE NO LONGER FUNCTIONS AND WILL BE REMOVED FROM A +# FUTURE VERSION OF PREBID. + The Zeus Prime RTD Provider provides integration of Zeus Prime onto sites with Prebid. This module will request information from Zeus Prime servers to add the page level targeting required for Prime into the customer's ad setup. Zeus Prime runs as soon as the code is initialized, so it can retrieve the information required from the Zeus Prime server to create the targeting key-values. Zeus Prime will provide two page level key-values: `zeus_` and `zeus_insights`. Zeus Prime provides contextual information about a pages content, and does not provide user information that could present privacy implications. From 28e998b11cb5a65cfc5368a118397a6be229385a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Jan 2023 12:36:39 -0700 Subject: [PATCH 013/763] Bump json5 from 1.0.1 to 1.0.2 (#4257) Bumps [json5](https://github.com/json5/json5) from 1.0.1 to 1.0.2. - [Release notes](https://github.com/json5/json5/releases) - [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md) - [Commits](https://github.com/json5/json5/compare/v1.0.1...v1.0.2) --- updated-dependencies: - dependency-name: json5 dependency-type: indirect ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3c9214ff12..cd0b0de3fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6868,13 +6868,10 @@ "dev": true }, "node_modules/json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, "bin": { "json5": "lib/cli.js" }, @@ -6995,9 +6992,9 @@ } }, "node_modules/loader-utils/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "dependencies": { "minimist": "^1.2.0" @@ -18588,13 +18585,10 @@ "dev": true }, "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true }, "jsonfile": { "version": "4.0.0", @@ -18697,9 +18691,9 @@ }, "dependencies": { "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { "minimist": "^1.2.0" From a43a92f2dc9c2a57883501b424a5988bd6671c3c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Jan 2023 12:42:23 -0700 Subject: [PATCH 014/763] Bump qs and browser-sync (#4258) Bumps [qs](https://github.com/ljharb/qs) to 6.11.0 and updates ancestor dependency [browser-sync](https://github.com/BrowserSync/browser-sync). These dependencies need to be updated together. Updates `qs` from 6.2.3 to 6.11.0 - [Release notes](https://github.com/ljharb/qs/releases) - [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md) - [Commits](https://github.com/ljharb/qs/compare/v6.2.3...v6.11.0) Updates `browser-sync` from 2.27.10 to 2.27.11 - [Release notes](https://github.com/BrowserSync/browser-sync/releases) - [Changelog](https://github.com/BrowserSync/browser-sync/blob/master/CHANGELOG.md) - [Commits](https://github.com/BrowserSync/browser-sync/compare/v2.27.10...v2.27.11) --- updated-dependencies: - dependency-name: qs dependency-type: indirect - dependency-name: browser-sync dependency-type: direct:development ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 93 ++++++++++++++++++++--------------------------- package.json | 2 +- 2 files changed, 40 insertions(+), 55 deletions(-) diff --git a/package-lock.json b/package-lock.json index cd0b0de3fd..fdd5679ae0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "popper.js": "^1.16.1" }, "devDependencies": { - "browser-sync": "^2.27.10", + "browser-sync": "^2.27.11", "browser-sync-webpack-plugin": "^2.0.1", "cross-env": "^7.0.2", "laravel-mix": "^5.0.7", @@ -2131,13 +2131,13 @@ "dev": true }, "node_modules/browser-sync": { - "version": "2.27.10", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.27.10.tgz", - "integrity": "sha512-xKm+6KJmJu6RuMWWbFkKwOCSqQOxYe3nOrFkKI5Tr/ZzjPxyU3pFShKK3tWnazBo/3lYQzN7fzjixG8fwJh1Xw==", + "version": "2.27.11", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.27.11.tgz", + "integrity": "sha512-U5f9u97OYJH66T0MGWWzG9rOQTW6ZmDMj97vsmtqwNS03JAwdLVES8eel2lD3rvAqQCNAFqaJ74NMacBI57vJg==", "dev": true, "dependencies": { - "browser-sync-client": "^2.27.10", - "browser-sync-ui": "^2.27.10", + "browser-sync-client": "^2.27.11", + "browser-sync-ui": "^2.27.11", "bs-recipes": "1.3.4", "bs-snippet-injector": "^2.0.1", "chokidar": "^3.5.1", @@ -2155,7 +2155,7 @@ "micromatch": "^4.0.2", "opn": "5.3.0", "portscanner": "2.2.0", - "qs": "6.2.3", + "qs": "^6.11.0", "raw-body": "^2.3.2", "resp-modifier": "6.0.2", "rx": "4.1.0", @@ -2175,9 +2175,9 @@ } }, "node_modules/browser-sync-client": { - "version": "2.27.10", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.27.10.tgz", - "integrity": "sha512-KCFKA1YDj6cNul0VsA28apohtBsdk5Wv8T82ClOZPZMZWxPj4Ny5AUbrj9UlAb/k6pdxE5HABrWDhP9+cjt4HQ==", + "version": "2.27.11", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.27.11.tgz", + "integrity": "sha512-okMNfD2NasL/XD1/BclP3onXjhahisk3e/kTQ5HPDT/lLqdBqNDd6QFcjI5I1ak7na2hxKQSLjryql+7fp5gKQ==", "dev": true, "dependencies": { "etag": "1.8.1", @@ -2191,9 +2191,9 @@ } }, "node_modules/browser-sync-ui": { - "version": "2.27.10", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.27.10.tgz", - "integrity": "sha512-elbJILq4Uo6OQv6gsvS3Y9vRAJlWu+h8j0JDkF0X/ua+3S6SVbbiWnZc8sNOFlG7yvVGIwBED3eaYQ0iBo1Dtw==", + "version": "2.27.11", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.27.11.tgz", + "integrity": "sha512-1T/Y8Pp1R68aUL7zVSFq0nxtr258xWd/nTasCAHX2M6EsGaswVOFtXsw3bKqsr35z+J+LfVfOdz1HFLYKxdgrA==", "dev": true, "dependencies": { "async-each-series": "0.1.1", @@ -2494,15 +2494,6 @@ "node": ">=4" } }, - "node_modules/browser-sync/node_modules/qs": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", - "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/browser-sync/node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -10473,15 +10464,15 @@ "dev": true }, "node_modules/socket.io-client": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.3.tgz", - "integrity": "sha512-I/hqDYpQ6JKwtJOf5ikM+Qz+YujZPMEl6qBLhxiP0nX+TfXKhW4KZZG8lamrD6Y5ngjmYHreESVasVCgi5Kl3A==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.4.tgz", + "integrity": "sha512-ZpKteoA06RzkD32IbqILZ+Cnst4xewU7ZYK12aS1mzHftFFjpoMz69IuhP/nL25pJfao/amoPI527KnuhFm01g==", "dev": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", "engine.io-client": "~6.2.3", - "socket.io-parser": "~4.2.0" + "socket.io-parser": "~4.2.1" }, "engines": { "node": ">=10.0.0" @@ -11339,9 +11330,9 @@ "dev": true }, "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -14715,13 +14706,13 @@ "dev": true }, "browser-sync": { - "version": "2.27.10", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.27.10.tgz", - "integrity": "sha512-xKm+6KJmJu6RuMWWbFkKwOCSqQOxYe3nOrFkKI5Tr/ZzjPxyU3pFShKK3tWnazBo/3lYQzN7fzjixG8fwJh1Xw==", + "version": "2.27.11", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.27.11.tgz", + "integrity": "sha512-U5f9u97OYJH66T0MGWWzG9rOQTW6ZmDMj97vsmtqwNS03JAwdLVES8eel2lD3rvAqQCNAFqaJ74NMacBI57vJg==", "dev": true, "requires": { - "browser-sync-client": "^2.27.10", - "browser-sync-ui": "^2.27.10", + "browser-sync-client": "^2.27.11", + "browser-sync-ui": "^2.27.11", "bs-recipes": "1.3.4", "bs-snippet-injector": "^2.0.1", "chokidar": "^3.5.1", @@ -14739,7 +14730,7 @@ "micromatch": "^4.0.2", "opn": "5.3.0", "portscanner": "2.2.0", - "qs": "6.2.3", + "qs": "^6.11.0", "raw-body": "^2.3.2", "resp-modifier": "6.0.2", "rx": "4.1.0", @@ -14964,12 +14955,6 @@ "is-wsl": "^1.1.0" } }, - "qs": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", - "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", - "dev": true - }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -15094,9 +15079,9 @@ } }, "browser-sync-client": { - "version": "2.27.10", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.27.10.tgz", - "integrity": "sha512-KCFKA1YDj6cNul0VsA28apohtBsdk5Wv8T82ClOZPZMZWxPj4Ny5AUbrj9UlAb/k6pdxE5HABrWDhP9+cjt4HQ==", + "version": "2.27.11", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.27.11.tgz", + "integrity": "sha512-okMNfD2NasL/XD1/BclP3onXjhahisk3e/kTQ5HPDT/lLqdBqNDd6QFcjI5I1ak7na2hxKQSLjryql+7fp5gKQ==", "dev": true, "requires": { "etag": "1.8.1", @@ -15107,9 +15092,9 @@ } }, "browser-sync-ui": { - "version": "2.27.10", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.27.10.tgz", - "integrity": "sha512-elbJILq4Uo6OQv6gsvS3Y9vRAJlWu+h8j0JDkF0X/ua+3S6SVbbiWnZc8sNOFlG7yvVGIwBED3eaYQ0iBo1Dtw==", + "version": "2.27.11", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.27.11.tgz", + "integrity": "sha512-1T/Y8Pp1R68aUL7zVSFq0nxtr258xWd/nTasCAHX2M6EsGaswVOFtXsw3bKqsr35z+J+LfVfOdz1HFLYKxdgrA==", "dev": true, "requires": { "async-each-series": "0.1.1", @@ -21635,15 +21620,15 @@ "dev": true }, "socket.io-client": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.3.tgz", - "integrity": "sha512-I/hqDYpQ6JKwtJOf5ikM+Qz+YujZPMEl6qBLhxiP0nX+TfXKhW4KZZG8lamrD6Y5ngjmYHreESVasVCgi5Kl3A==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.4.tgz", + "integrity": "sha512-ZpKteoA06RzkD32IbqILZ+Cnst4xewU7ZYK12aS1mzHftFFjpoMz69IuhP/nL25pJfao/amoPI527KnuhFm01g==", "dev": true, "requires": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", "engine.io-client": "~6.2.3", - "socket.io-parser": "~4.2.0" + "socket.io-parser": "~4.2.1" } }, "socket.io-parser": { @@ -22354,9 +22339,9 @@ "dev": true }, "typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", "dev": true }, "ua-parser-js": { diff --git a/package.json b/package.json index 5161ec3924..71ac66fae4 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ }, "homepage": "https://github.com/AtreNet/prebid.github.io#readme", "devDependencies": { - "browser-sync": "^2.27.10", + "browser-sync": "^2.27.11", "browser-sync-webpack-plugin": "^2.0.1", "cross-env": "^7.0.2", "laravel-mix": "^5.0.7", From e825c909a49cbd76681336e89a3a1cfc0c7de88d Mon Sep 17 00:00:00 2001 From: Andrew Date: Sat, 7 Jan 2023 06:39:52 -0800 Subject: [PATCH 015/763] Update kargo docs. (#4254) Co-authored-by: Andrew Fowler --- dev-docs/bidders/kargo.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/dev-docs/bidders/kargo.md b/dev-docs/bidders/kargo.md index d6439d923b..7b08665204 100644 --- a/dev-docs/bidders/kargo.md +++ b/dev-docs/bidders/kargo.md @@ -29,6 +29,18 @@ This adapter is known to use an HTTP 1 endpoint. Header bidding often generates ### Note: Kargo is an invitation-only marketplace. Please reach out to your Kargo account manager to get setup. Also, you *must* test on a mobile device, or emulate a mobile device by manipulating the user agent string sent to the server. +### Bidder Settings +The Kargo bid adapter uses browser local storage. Since Prebid.js 7.x, the access to it must be explicitly set. + +```js +// https://docs.prebid.org/dev-docs/publisher-api-reference/bidderSettings.html +pbjs.bidderSettings = { + kargo: { + storageAllowed: true + } +} +``` + ### Bid Params: {: .table .table-bordered .table-striped } From 3ebed6559988109e6cf2f87594030a91a0a86c72 Mon Sep 17 00:00:00 2001 From: bretg Date: Mon, 9 Jan 2023 10:37:31 -0500 Subject: [PATCH 016/763] GDPR enforcement wording update (#4260) Replaced enforcement (the 'e-word') in the instances where it makes sense to do so. There are many places where it doesn't make sense to change it because that word is actually coded into the configuration. --- dev-docs/modules/gdprEnforcement.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/dev-docs/modules/gdprEnforcement.md b/dev-docs/modules/gdprEnforcement.md index b8f8f0593d..426ebf93e1 100644 --- a/dev-docs/modules/gdprEnforcement.md +++ b/dev-docs/modules/gdprEnforcement.md @@ -2,7 +2,7 @@ layout: page_v2 page_type: module title: GDPR Enforcement Module -description: If you have users in Europe, you'll want this module that enforces GDPR consent +description: If you have users in Europe, you'll want this module that takes action based on a user’s GDPR choices module_code : gdprEnforcement display_name : GDPR Enforcement enable_download : true @@ -24,7 +24,7 @@ sidebarType : 1 {: .alert.alert-warning :} This module requires the [EU GDPR consent management module](/dev-docs/modules/consentManagement.html) (the base consent module), which reads consent values from the Consent Management Platform (CMP). The GDPR Enforcement Module -will then enforce the results. See the [base module page](/dev-docs/modules/consentManagement.html) for general background, usage, and legal disclaimers. +will then take action based on the results. See the [base module page](/dev-docs/modules/consentManagement.html) for general background, usage, and legal disclaimers. ## Overview @@ -41,7 +41,7 @@ The GDPR Enforcement Module adds the following: The following table details the Prebid.js activities that fall under the [Transparency and Consent Framework (TCF)](https://iabeurope.eu/iab-europe-transparency-consent-framework-policies/) scope: {: .table .table-bordered .table-striped } -| In-Scope Activity | TCF Legal Basis Required | Enforcement Activity | Prebid.js Version | +| In-Scope Activity | TCF Legal Basis Required | Activity | Prebid.js Version | | --- | --- | --- | --- | | Invoke usersync pixels | Purpose 1 - Store and/or access information on a device | May prevent one or more vendor usersyncs. | 3.14+ | | Invoke user ID modules | Purpose 1 - Store and/or access information on a device | May prevent one or more UserID modules from activating. | 3.14+ | @@ -70,7 +70,7 @@ The following fields related to GDPR enforcement are supported in the [`consentM | gdpr.rules[].purpose | `String` | Supported values: "storage" (Purpose 1), "basicAds" (Purpose 2), "measurement" (Purpose 7) | "storage" | | gdpr.rules[].enforcePurpose | `Boolean` | Determines whether to enforce the purpose consent. The default in Prebid.js 3.x is not to enforce purposes. Prebid.js 4.0 enforces legal basis for Purposes 1 and 2 by default. | true | | gdpr.rules[].enforceVendor | `Boolean` | Determines whether to enforce vendor signals for this purpose. The default in Prebid.js 3.x is not to enforce vendor signals. Prebid.js 4.0 enforces legal basis for Purposes 1 and 2 by default. | true | -| gdpr.rules[].vendorExceptions | `Array of Strings` | Defines a list of biddercodes or module names that are exempt from the enforcement of this Purpose. | ["bidderA", "userID-module-B"] | +| gdpr.rules[].vendorExceptions | `Array of Strings` | Defines a list of biddercodes or module names that are exempt from restrictions around this Purpose. | ["bidderA", "userID-module-B"] | | strictStorageEnforcement | `Boolean` | If false (the default), allows some use of storage regardless of purpose 1 consent - see [note](#strictStorageEnforcement) below | true | Notes: @@ -94,7 +94,7 @@ pbjs.setConfig({ The following examples cover a range of use cases and show how Prebid.js supports configuration of different business rules. -1) Enforce device access activity and basic ads. These are the default values (in Prebid.js 4.0) if the module is included in the build. +1) Restrict device access activity and basic ads. These are the default values (in Prebid.js 4.0) if the module is included in the build. ``` pbjs.setConfig({ @@ -120,7 +120,7 @@ pbjs.setConfig({ }); ``` -2) Enforce that the user consents to DeviceAccess as an activity and consider their per-vendor selection. However, idSystemA is a special case - the publisher has confirmed that this system obtains a user ID every auction and does not write to the local device. +2) Restrict that the user consents to DeviceAccess as an activity and consider their per-vendor selection. However, idSystemA is a special case - the publisher has confirmed that this system obtains a user ID every auction and does not write to the local device. ... rules: [{ @@ -130,7 +130,7 @@ pbjs.setConfig({ vendorExceptions: ["idSystemA"] }] -3) Enforce legal basis for both storage and basicAds, with the exception of "firstPartyBidder", which is always allowed to run an auction. Assumes the publisher has special legal basis for this entity. +3) Restrict for both storage and basicAds, with the exception of "firstPartyBidder", which is always allowed to run an auction. Assumes the publisher has special legal basis for this entity. ... rules: [{ @@ -144,7 +144,7 @@ pbjs.setConfig({ vendorExceptions: ["firstPartyBidder"] }] -4) Turn off enforcement of Purpose 1: don't enforce either the user's DeviceAccess consent or their per-vendor selection. +4) Turn off restriction of Purpose 1: don't enforce either the user's DeviceAccess consent or their per-vendor selection. ... rules: [{ @@ -168,7 +168,7 @@ pbjs.setConfig({ Prebid.js does not have access to the Global Vendor List (GVL), so it implements a "basic" form of TCF 'legal basis' validation using the supplied consent string. -A goal of basic enforcement is to confirm that there's enough evidence of consent to pass data on to vendors who do have access to the GVL and can fully parse and enforce. +A goal of 'basic enforcement' is to confirm that there's enough evidence of consent to pass data on to vendors who do have access to the GVL and can fully parse and enforce. Before allowing an activity tied to a TCF-protected Purpose for a given vendor, one of these scenarios must be true: From f8c8fa972517a185f63521d690734271e623f657 Mon Sep 17 00:00:00 2001 From: bretg Date: Mon, 9 Jan 2023 11:06:37 -0500 Subject: [PATCH 017/763] gdpr module summary update (#4261) --- dev-docs/modules/gdprEnforcement.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/modules/gdprEnforcement.md b/dev-docs/modules/gdprEnforcement.md index 426ebf93e1..f343bd7bc4 100644 --- a/dev-docs/modules/gdprEnforcement.md +++ b/dev-docs/modules/gdprEnforcement.md @@ -2,7 +2,7 @@ layout: page_v2 page_type: module title: GDPR Enforcement Module -description: If you have users in Europe, you'll want this module that takes action based on a user’s GDPR choices +description: If you have users in Europe, you can use this module to enable actions for processing under the GDPR and ePrivacy module_code : gdprEnforcement display_name : GDPR Enforcement enable_download : true From b9f1ba4cd7e924063cbb353b3c591df7553ba479 Mon Sep 17 00:00:00 2001 From: bretg Date: Tue, 10 Jan 2023 10:01:50 -0500 Subject: [PATCH 018/763] download page version check (#4262) --- dev-docs/modules/consentManagementGpp.md | 1 + dev-docs/modules/userid-submodules/teads.md | 1 + download.md | 165 +++++--------------- 3 files changed, 39 insertions(+), 128 deletions(-) diff --git a/dev-docs/modules/consentManagementGpp.md b/dev-docs/modules/consentManagementGpp.md index 98890dac0a..c0e3be1ff2 100644 --- a/dev-docs/modules/consentManagementGpp.md +++ b/dev-docs/modules/consentManagementGpp.md @@ -7,6 +7,7 @@ module_code : consentManagementGpp display_name : Consent Management - GPP enable_download : true recommended: true +min_js_version: 7.30.0 sidebarType : 1 --- diff --git a/dev-docs/modules/userid-submodules/teads.md b/dev-docs/modules/userid-submodules/teads.md index 4fd4a26135..a391c9a5bd 100644 --- a/dev-docs/modules/userid-submodules/teads.md +++ b/dev-docs/modules/userid-submodules/teads.md @@ -3,6 +3,7 @@ layout: userid title: Teads ID description: Teads ID User ID sub-module useridmodule: teadsId +pbjs_version_notes: please avoid using v7.20.0 and v7.21.0 --- diff --git a/download.md b/download.md index 339fe33d95..e1c9446856 100644 --- a/download.md +++ b/download.md @@ -132,6 +132,9 @@ function submit_download() { document.body.appendChild(link); link.click(); document.body.removeChild(link); + if (form_data['removedModules'].length > 0) { + alert("The following modules were removed from your download because they aren't present in Prebid.js version "+form_data['version']+": "+JSON.stringify(form_data['removedModules'])); + } }) .fail(function(e) { errorO = e; @@ -147,12 +150,30 @@ function get_form_data() { var bidders = []; var analytics = []; var version = $('.selectpicker').val(); + var removedModules = []; + + var version_restrictions=$('.version-restriction'); + for (var i = 0; i < version_restrictions.length; i++) { + var module=version_restrictions[i].getAttribute('moduleCode'); + var restriction_name=version_restrictions[i].getAttribute('name'); + var restriction_value=version_restrictions[i].getAttribute('value'); + if (restriction_name == "min-version") { + var module_version_array=restriction_value.split("."); + var pbjs_version_array=version.split("."); + if ((Number(pbjs_version_array[0]) < Number(module_version_array[0])) || + (Number(pbjs_version_array[0]) == Number(module_version_array[0]) && + Number(pbjs_version_array[1]) < Number(module_version_array[1]))) { + removedModules.push(module); + } + } + } var bidder_check_boxes = $('.bidder-check-box'); for (var i = 0; i < bidder_check_boxes.length; i++) { var box = bidder_check_boxes[i]; - if (box.checked) { - bidders.push(box.getAttribute('moduleCode')); + var module=box.getAttribute('moduleCode'); + if (box.checked && !removedModules.includes(module)) { + bidders.push(module); } } @@ -164,9 +185,11 @@ function get_form_data() { } } + var form_data = {}; form_data['modules'] = bidders.concat(analytics); form_data['version'] = version; + form_data['removedModules'] = removedModules; return form_data; } @@ -196,6 +219,7 @@ Prebid.js is open source software that is offered for free as a convenience. Whi {% assign bidder_pages = site.pages | where: "layout", "bidder" %} {% assign module_pages = site.pages | where: "page_type", "module" %} {% assign analytics_pages = site.pages | where: "layout", "analytics" %} +{% assign userid_pages = site.pages | where: "layout", "userid" %}

Select Prebid Version

@@ -208,7 +232,7 @@ Prebid.js is open source software that is offered for free as a convenience. Whi
{{ page.title }} {% if page.pbjs_version_notes %}
{{page.pbjs_version_notes}}
{% endif %}
@@ -220,152 +244,37 @@ Prebid.js is open source software that is offered for free as a convenience. Whi

Analytics Adapters

-{% for page in analytics_pages %}{% if page.enable_download == false %}{% continue %}{% endif %}
{% endfor %} +{% for page in analytics_pages %}{% if page.enable_download == false %}{% continue %}{% endif %}{% endfor %}

Recommended Modules

Prebid.org highly recommends that publishers utilize the following modules:
-{% for page in module_pages %}{% if page.recommended == true %}
{% endif %}{% endfor %} +{% for page in module_pages %}{% if page.recommended == true %}
{% endif %}{% endfor %}

General Modules

{% for page in module_pages %}{% if page.enable_download == false or page.recommended == true or page.vendor_specific == true %}{% continue %}{% endif %}{% endfor %}

Vendor-Specific Modules

These modules may require accounts with a service provider.
- {% for page in module_pages %}{% if page.enable_download == false or page.recommended == true %}{% continue %}{% endif %}{% if page.vendor_specific == true %}
+ {% for page in module_pages %}{% if page.enable_download == false or page.recommended == true %}{% continue %}{% endif %}{% if page.vendor_specific == true %}{% endif %}{% endfor %}

User ID Modules

-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
+
+ {% for page in userid_pages %}{% if page.enable_download == false %}{% continue %}{% endif %}
{% if page.pbjs_version_notes %}
{{page.pbjs_version_notes}}
{% endif %} +
{% endfor %}
+{% for page in module_pages %}{% if page.enable_download == false%}{% continue %}{% endif %}{% if page.min_js_version %}{% endif %} +{% endfor %} +
From da91f4979ff760c5311f8938536658ead9e1d0d0 Mon Sep 17 00:00:00 2001 From: geoffray-viously <95097046+geoffray-viously@users.noreply.github.com> Date: Tue, 10 Jan 2023 16:37:34 +0100 Subject: [PATCH 019/763] Viously Bid Adapter : New Adapter (#4058) * Add: viously.md for Viously Bid Adapter * Update viously bidder documentation * Add: video parameters * Update the header --- dev-docs/bidders/viously.md | 66 +++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 dev-docs/bidders/viously.md diff --git a/dev-docs/bidders/viously.md b/dev-docs/bidders/viously.md new file mode 100644 index 0000000000..4247bb6806 --- /dev/null +++ b/dev-docs/bidders/viously.md @@ -0,0 +1,66 @@ +--- +layout: bidder +title: Viously +description: Prebid Viously Bidder Adaptor +pbjs: true +pbs: false +biddercode: viously +media_types: video +gdpr_supported: true +gvl_id: none +usp_supported: true +prebid_member: false +floors_supported: false +fpd_supported: false +schain_supported: false +safeframes_ok: true +deals_supported: false +floors_supported: false +fpd_supported: false +ortb_blocking_supported: false +multiformat_supported: will-bid-on-one +--- + +### Note: +Viously Header Bidding adapter requires setup and approval. Please reach out to prebid@viously.com for more details. + +### Bid params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------------|----------|---------------------------------------------------------------------------------------------|------------|-----------| +| `pid` | required | Your publisher ID. This information will be given to you by the Viously team. | `1234` | `integer` | + +### Video Object + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|------------------|----------|--------------------------------------------------------------------------|--------------|------------------| +| `context` | required | The video context, either 'instream', 'outstream'. | `instream` | `String` | +| `playerSize` | required | The size (width, height) of the video player on the page, in pixels. | `[640, 480]` | `Array` | +| `playbackmethod` | required | Defines how the video inventory is initiated following the OpenRTB spec. | `[4, 5]` | `Array` | + +### Example + +``` +var adUnits = [ + { + code: 'test-viously', + mediaTypes: { + video: { + playerSize: [640, 360], + context: 'instream', + playbackmethod: [1, 2, 3, 4, 5, 6] + } + }, + bids: [ + { + bidder: 'viously', + params: { + pid: '20d30b78-43ec-11ed-b878-0242ac120002' + } + } + ] + } +] +``` From 968a8bf2b828893e939c104f5f1cfee0a23f1117 Mon Sep 17 00:00:00 2001 From: Demetrio Girardi Date: Tue, 10 Jan 2023 08:59:59 -0700 Subject: [PATCH 020/763] PBJS: document new `genericAnalyticsAdapter` module (#4092) * PBJS: document new `genericAnalyticsAdapter` module * Try using "N/A" as gvlid for generic analytics * Move generic analytics docs to its own page * softVendorExceptions, generic analytics note on gdpr enforcement * add min version Co-authored-by: Chris Huie --- dev-docs/analytics/generic.md | 14 ++ dev-docs/modules/gdprEnforcement.md | 3 +- dev-docs/modules/genericAnalyticsAdapter.md | 230 ++++++++++++++++++++ 3 files changed, 246 insertions(+), 1 deletion(-) create mode 100644 dev-docs/analytics/generic.md create mode 100644 dev-docs/modules/genericAnalyticsAdapter.md diff --git a/dev-docs/analytics/generic.md b/dev-docs/analytics/generic.md new file mode 100644 index 0000000000..336256b7d6 --- /dev/null +++ b/dev-docs/analytics/generic.md @@ -0,0 +1,14 @@ +--- +layout: analytics +title: Generic +description: Generic analytics adapter +modulecode: generic +gdpr_supported: true +usp_supported: true +coppa_supported: true +gvl_id: N/A +enable_download: true +min_js_version: 7.27.0 +--- + +See [module documentation](/dev-docs/modules/genericAnalyticsAdapter.html). diff --git a/dev-docs/modules/gdprEnforcement.md b/dev-docs/modules/gdprEnforcement.md index f343bd7bc4..35b79ebad4 100644 --- a/dev-docs/modules/gdprEnforcement.md +++ b/dev-docs/modules/gdprEnforcement.md @@ -70,7 +70,8 @@ The following fields related to GDPR enforcement are supported in the [`consentM | gdpr.rules[].purpose | `String` | Supported values: "storage" (Purpose 1), "basicAds" (Purpose 2), "measurement" (Purpose 7) | "storage" | | gdpr.rules[].enforcePurpose | `Boolean` | Determines whether to enforce the purpose consent. The default in Prebid.js 3.x is not to enforce purposes. Prebid.js 4.0 enforces legal basis for Purposes 1 and 2 by default. | true | | gdpr.rules[].enforceVendor | `Boolean` | Determines whether to enforce vendor signals for this purpose. The default in Prebid.js 3.x is not to enforce vendor signals. Prebid.js 4.0 enforces legal basis for Purposes 1 and 2 by default. | true | -| gdpr.rules[].vendorExceptions | `Array of Strings` | Defines a list of biddercodes or module names that are exempt from restrictions around this Purpose. | ["bidderA", "userID-module-B"] | +| gdpr.rules[].vendorExceptions | `Array of Strings` | Defines a list of biddercodes or module names that are exempt from the enforcement of this Purpose. | ["bidderA", "userID-module-B"] | +| gdpr.rules[].softVendorExceptions | `Array of Strings` | Defines a list of biddercodes or module names that are exempt from the enforcement of vendor signals for this purpose. Unlike with `vendorExceptions`, Purpose consent is still enforced . | ["bidderA", "userID-module-B"] | | strictStorageEnforcement | `Boolean` | If false (the default), allows some use of storage regardless of purpose 1 consent - see [note](#strictStorageEnforcement) below | true | Notes: diff --git a/dev-docs/modules/genericAnalyticsAdapter.md b/dev-docs/modules/genericAnalyticsAdapter.md new file mode 100644 index 0000000000..a243b63eed --- /dev/null +++ b/dev-docs/modules/genericAnalyticsAdapter.md @@ -0,0 +1,230 @@ +--- +layout: page_v2 +title: Generic analytics +description: Generic analytics adapter +module_code: genericAnalyticsAdapter +enable_download: false +--- + +## Generic analytics adapter + +### Description + +This is an analytics adapter that can interface with any backend, meant for publishers that prefer to manage their own analytics infrastructure. The simplest setup requires just a URL that will be sent all data from all Prebid events; with additional options for filtering or formatting. + +### Analytics Options + +{: .table .table-bordered .table-striped } +| Name | Scope | Type | Description | +|--------------|---------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `handler` | required unless `url` is provided | Function | Custom handler function - [example](#custom-handler) | +| `url` | required unless `handler` is provided | String | Data collection URL | +| `method` | optional | String | HTTP method used to call `url`. Defaults to `'POST'` | +| `batchSize` | optional | Number | Number of events to collect into a single call to `handler` or `url`. Defaults to `1` | +| `batchDelay` | optional | Number | Time (in milliseconds) to wait before calling `handler` or `url` with an incomplete batch (when fewer than `batchSize` events have been collected). Defaults to `100` | +| `events` | optional | Object | Map from event name to a custom format function. When provided, only events in this map will be collected, using the data returned by their corresponding function - [example](#event-formatters) | +| `gvlid` | optional | Number | Global vendor list ID to use for the purpose of GDPR purpose 7 enforcement - see [note](#gdpr) | +| `sampling` | optional | Number | Sampling rate, expressed as a number between 0 and 1. Data is collected only on this ratio of browser sessions. Defaults to `1` | + + + +### Note on GDPR enforcement + +If you are using the [GDPR enforcement module](/dev-docs/modules/gdprEnforcement.html) to enforce purpose 7, by default this module will be blocked when GDPR is in scope. +To enable it, you may either specify the `gvlid` option (if you are interfacing with a partner) or declare a `softVendorException` if you deem that vendor consent is not required for compliance: + +```javascript +pbjs.setConfig({ + consentManagement: { + gdpr: { + rules: [{ + purpose: "measurement", + enforcePurpose: true, + enforceVendor: true, + softVendorExceptions: ["generic"] + }] + } + } +}) +``` + + +### Examples + +#### Send all data to given URL using single requests + +```javascript +pbjs.enableAnalytics({ + provider: 'generic', + options: { + url: 'https://example.com' + } +}) +``` + +Example request payload: + +``` +{ + "eventType": "auctionInit", + "args": { + "auctionId": "97000db4-ae78-4e93-81d1-66b83ac10a74", + "timestamp": 1666207538126, + "auctionStatus": "inProgress", + "adUnits": [ + /* ... */ + ], + "noBids": [], + "bidsReceived": [], + "bidsRejected": [], + "winningBids": [], + "timeout": 2000, + "metrics": { + /* ... */ + } + } +} +``` + +if `options.method` is set to `'GET'`, the same JSON payload is encoded into a single search parameter named `data`, e.g. `https://example.com?data=%7B%22eventType%22%3A%22auctionInit%22...` + +#### Batch multiple events together + +```javascript +pbjs.enableAnalytics({ + provider: 'generic', + options: { + url: 'https://example.com', + batchSize: 10 + } +}); +``` + +Example request payload: + +``` +[ + { + "eventType": "auctionInit", + "args": { + "auctionId": "97000db4-ae78-4e93-81d1-66b83ac10a74", + "timestamp": 1666207538126, + "auctionStatus": "inProgress", + "adUnits": [ + /* ... */ + ], + "noBids": [], + "bidsReceived": [], + "bidsRejected": [], + "winningBids": [], + "timeout": 2000, + "metrics": { + /* ... */ + } + } + }, + { + "eventType": "bidRequested", + "args": { + "bidderCode": "appnexus", + "auctionId": "db4edde6-ee66-4779-b7ed-c7295d3e3c49", + "bidderRequestId": "3cf3eaf48bd5f48", + "uniquePbsTid": "1565fd02-d4fd-4369-bf8e-0dee2a00aca5", + "bids": [ + /* ... */ + ], + "auctionStart": 1666208826440, + "timeout": 10000, + "src": "s2s", + "refererInfo": { + /* ... */ + }, + "metrics": { + /* ... */ + }, + "ortb2": { + /* ... */ + }, + "uspConsent": "1YNN", + "start": 1666208826445, + "tid": "db4edde6-ee66-4779-b7ed-c7295d3e3c49" + } + }, + /* ... */ +] +``` + + + +#### Custom formatting + +```javascript +pbjs.enableAnalytics({ + provider: 'generic', + options: { + url: 'https://example.com', + batchSize: 10, + events: { + bidRequested(request) { + return { + type: 'REQUEST', + auctionId: request.auctionId, + bidder: request.bidderCode + } + }, + bidResponse(response) { + return { + type: 'RESPONSE', + auctionId: response.auctionId, + bidder: response.bidderCode + } + } + } + } +}) +``` + +Example request payload: + +``` +[ + { + "auctionId": "e41e3fcb-6209-4995-b0be-2aed21a8bdf6", + "bidder": "appnexus", + "type": "REQUEST" + }, + { + "auctionId": "e41e3fcb-6209-4995-b0be-2aed21a8bdf6", + "bidder": "appnexus", + "type": "RESPONSE" + } + /* ... */ +] +``` + + + +#### Custom handler + +```javascript +pbjs.enableAnalytics({ + provider: 'generic', + options: { + handler(data) { + // `data` is an array of length `batchSize`. If `events` is provided, the elements are the values returned + // by the format functions defined therein; otherwise, they have the format {eventType, args}. + fetch('https://example.com', { + method: 'POST', + body: JSON.stringify({ + location: window.location.href, + data + }) + }); + } + } +}) +``` + +### See also + +[Prebid.js events](/dev-docs/publisher-api-reference/getEvents.md) From 45be4e56bfda487094783fef0f16ffd4e7516428 Mon Sep 17 00:00:00 2001 From: Giovanni Sollazzo Date: Tue, 10 Jan 2023 17:01:45 +0100 Subject: [PATCH 021/763] AIDEM Bid Adapter PR dev-docs (#4137) * AIDEM Bid Adapter dev-docs * title to uppercase * Added publisherId as required bidder param * Header levels pushed down by 1 * added "sidebarType: 1" to header data * Added placementId Co-authored-by: darkstar --- dev-docs/bidders/aidem.md | 202 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 dev-docs/bidders/aidem.md diff --git a/dev-docs/bidders/aidem.md b/dev-docs/bidders/aidem.md new file mode 100644 index 0000000000..88c5dbe5ed --- /dev/null +++ b/dev-docs/bidders/aidem.md @@ -0,0 +1,202 @@ +--- +layout: bidder +title: AIDEM +description: AIDEM Bidder Adapter +biddercode: aidem +gdpr_supported: false +gvl_id: none +usp_supported: true +coppa_supported: false +schain_supported: false +dchain_supported: false +userId: none +media_types: banner, video +safeframes_ok: true +deals_supported: true +floors_supported: true +fpd_supported: false +pbjs: true +pbs: false +prebid_member: false +ortb_blocking_supported: false +sidebarType: 1 +--- + +## Description +This module connects publishers to AIDEM demand. + +This module is GDPR and CCPA compliant, and no 3rd party userIds are allowed. + + +### Global Bid Params +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------|------------|----------| +| `siteId` | required | Unique site ID | `'ABCDEF'` | `String` | +| `publisherId` | required | Unique publisher ID | `'FEDCBA'` | `String` | +| `placementId` | optional | Unique publisher tag ID | `'ABCDEF'` | `String` | + +#### Banner Bid Params +| Name | Scope | Description | Example | Type | +|------------|----------|--------------------------|---------------------------|---------| +| `sizes` | required | List of the sizes wanted | `[[300, 250], [300,600]]` | `Array` | + + +#### Video Bid Params +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------------------------|-----------------|-----------| +| `context` | required | One of instream, outstream, adpod | `'instream'` | `String` | +| `playerSize` | required | Width and height of the player | `'[640, 480]'` | `Array` | +| `maxduration` | required | Maximum video ad duration, in seconds | `30` | `Integer` | +| `minduration` | required | Minimum video ad duration, in seconds | `5` | `Integer` | +| `mimes` | required | List of the content MIME types supported by the player | `["video/mp4"]` | `Array` | +| `protocols` | required | An array of supported video protocols. At least one supported protocol must be specified, where: `2` = VAST 2.0 `3` = VAST 3.0 `5` = VAST 2.0 wrapper `6` = VAST 3.0 wrapper | `2` | `Array` | + + +#### Additional Config +| Name | Scope | Description | Example | Type | +|---------------------|----------|---------------------------------------------------------|---------|-----------| +| `coppa` | optional | Child Online Privacy Protection Act | `true` | `Boolean` | +| `consentManagement` | optional | [Consent Management Object](#consent-management-object) | `{}` | `Object` | + + +#### Consent Management Object +| Name | Scope | Description | Example | Type | +|--------|----------|--------------------------------------------------------------------------------------------------|---------|----------| +| `gdpr` | optional | GDPR Object see [Prebid.js doc](https://docs.prebid.org/dev-docs/modules/consentManagement.html) | `{}` | `Object` | +| `usp` | optional | USP Object see [Prebid.js doc](https://docs.prebid.org/dev-docs/modules/consentManagementUsp.html) | `{}` | `Object` | + + +#### Example Banner ad unit +```javascript +var adUnits = [{ + code: 'banner-prebid-test-site', + mediaTypes: { + banner: { + sizes: [ + [300, 600], + [300, 250] + ] + } + }, + bids: [{ + bidder: 'aidem', + params: { + siteId: 'prebid-test-site', + }, + }] +}]; +``` + +#### Example Video ad unit +```javascript +var adUnits = [{ + code: 'video-prebid-test-site', + mediaTypes: { + video: { + context: 'instream', + playerSize: [640, 480], + maxduration: 30, + minduration: 5, + mimes: ["video/mp4"], + protocols: 2 + } + }, + bids: [{ + bidder: 'aidem', + params: { + siteId: 'prebid-test-site', + }, + }] +}]; +``` + +#### Example GDPR Consent Management +```javascript +var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; + +pbjs.que.push(function (){ + pbjs.setConfig({ + consentManagement: { + gdpr:{ + cmpApi: 'iab' + } + } + }); +}) +``` + + +#### Example USP Consent Management +```javascript +var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; + +pbjs.que.push(function (){ + pbjs.setConfig({ + consentManagement: { + usp:{ + cmpApi: 'static', + consentData:{ + getUSPData:{ + uspString: '1YYY' + } + } + } + } + }); +}) +``` + + +#### Setting First Party Data (FPD) +```javascript +var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; + +pbjs.que.push(function (){ + pbjs.setConfig({ + ortb2: { + site: { + cat: ['IAB2'], + sectioncat: ['IAB2-2'], + keywords: 'power tools, drills' + }, + } + }); +}) +``` + +### Supported Media Types +| Type | Support | +|--------|--------------------------------------------------------------------| +| Banner | Support all [AIDEM Sizes](https://kb.aidem.com/ssp/lists/adsizes/) | +| Video | Support all [AIDEM Sizes](https://kb.aidem.com/ssp/lists/adsizes/) | + + +## Setup / Dev Guide +```shell +nvm use + +npm install + +gulp build --modules=aidemBidAdapter + +gulp serve --modules=aidemBidAdapter + +# Open a chrome browser with no ad blockers enabled, and paste in this URL. The `pbjs_debug=true` is needed if you want to enable `loggerInfo` output on the `console` tab of Chrome Developer Tools. +http://localhost:9999/integrationExamples/gpt/hello_world.html?pbjs_debug=true +``` + +If you need to run the tests suite but do *not* want to have to build the full adapter and serve it, simply run: +```shell +gulp test --file "test/spec/modules/aidemBidAdapter_spec.js" +``` + + +For video: gulp serve --modules=aidemBidAdapter,dfpAdServerVideo + +## FAQs +#### How do I view AIDEM bid request? +Navigate to a page where AIDEM is setup to bid. In the network tab, +search for requests to `zero.aidemsrv.com/bid/request`. From 7b25b6d97bbd05055dd2cc4f3dc0202459173d05 Mon Sep 17 00:00:00 2001 From: Gabriel Chicoye Date: Tue, 10 Jan 2023 17:35:52 +0100 Subject: [PATCH 022/763] prebid update (#4140) --- dev-docs/bidders/nexx360.md | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/dev-docs/bidders/nexx360.md b/dev-docs/bidders/nexx360.md index f699fb2942..6c51d4a5cb 100644 --- a/dev-docs/bidders/nexx360.md +++ b/dev-docs/bidders/nexx360.md @@ -21,11 +21,9 @@ sidebarType: 1 {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |---------------|----------|-----------------------|--------------------------------------|-----------| -| `account` | required | Nexx360 account ID | `'1067'` | `string` | -| `tagId` | required | Nexx360 tag ID | `'luvxjvgn'` | `string` | -| `bidfloor` | optional | Bidfloor applied to auction (default: 0) | `0.8` | `float` | -| `bidfloorCurrency` | optional | Bidfloor currency (default: `'USD'`) - Can be `'USD'` or `'EUR'` | `'USD'` | `string` | -| `keywords` | optional | Keywords used for targeting | `{ 'interest': ['cars', 'sports']}` | `object` | +| `tagId` | required | Nexx360 tag ID | `"luvxjvgn"` | `string` | +| `videoTagId` | optional | Nexx360 Video tag ID | `"luvxjvgn"` | `string` | +| `allBids` | optional | Return all bids | `true` | `boolean` | ### Test Parameters @@ -42,7 +40,6 @@ var adUnits = [ bids: [{ bidder: 'nexx360', params: { - account: '1067', tagId: 'luvxjvgn' } }] @@ -59,11 +56,29 @@ var adUnits = [ bids: [{ bidder: 'nexx360', params: { - account: '1067', tagId: 'luvxjvgn' } }] + }, + // Multiformat Ad + { + code: 'multi1', + mediaTypes: { + video: { + playerSize: [640, 480], + context: 'instream' + }, + banner: { + sizes: [[300, 250], [300,600]] + } + }, + bids: [{ + bidder: 'nexx360', + params: { + tagId: 'luvxjvgn', + videoTagId: 'luvxjvgn' + } + }] }; - ]; ``` From 35a8a006a19c11663abea3d38617f37e23b3cd6b Mon Sep 17 00:00:00 2001 From: Valdis Abrams <102524632+valdis-abrams-bidstack@users.noreply.github.com> Date: Tue, 10 Jan 2023 19:49:21 +0200 Subject: [PATCH 023/763] Bidstack: Add optional Placement ID field (#4173) * Bidstack adapter documentation * Bidstack Adapter Doc: Update doc with placementId field * Bidstack Adapter Doc: Update doc with cosent field * Clarify the description or consent attribute Co-authored-by: Arturs Lataks --- dev-docs/bidders/bidstack.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dev-docs/bidders/bidstack.md b/dev-docs/bidders/bidstack.md index f63c8fb2ea..42346681f7 100644 --- a/dev-docs/bidders/bidstack.md +++ b/dev-docs/bidders/bidstack.md @@ -30,4 +30,6 @@ The Bidstack Bidding adapter requires setup before beginning. Please contact us {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |---------------|----------|--------------|-----------|----------| -| `publisherId` | required | Publisher ID | `'be224bf2-fd3f-4afb-b6fc-4a97718be2f5'` | `string` | \ No newline at end of file +| `publisherId` | required | Publisher ID | `'be224bf2-fd3f-4afb-b6fc-4a97718be2f5'` | `string` | +| `placementId` | optional | Placement ID | `'some_placement_id'` | `string` | +| `consent` | optional | User EULA consent | `true` | `boolean` | From c30f09e976dfb37783d9f6c6d447c2c656abdb18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Udi=20Talias=20=E2=9A=9B=EF=B8=8F?= Date: Tue, 10 Jan 2023 20:03:02 +0200 Subject: [PATCH 024/763] Added video media type (#4204) --- dev-docs/bidders/kueezrtb.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/kueezrtb.md b/dev-docs/bidders/kueezrtb.md index dc1aab740c..f63a4576d9 100644 --- a/dev-docs/bidders/kueezrtb.md +++ b/dev-docs/bidders/kueezrtb.md @@ -10,7 +10,7 @@ usp_supported: true coppa_supported: false schain_supported: true floors_supported: true -media_types: banner +media_types: banner, video prebid_member: false safeframes_ok: false deals_supported: false From 2ff1ddc8c6abb4731b63ebf3f5e8593d03e52d39 Mon Sep 17 00:00:00 2001 From: bretg Date: Tue, 10 Jan 2023 13:03:40 -0500 Subject: [PATCH 025/763] Rubicon: new param (#4212) --- dev-docs/bidders/rubicon.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/rubicon.md b/dev-docs/bidders/rubicon.md index b8c8ca12ad..59016fc4c0 100644 --- a/dev-docs/bidders/rubicon.md +++ b/dev-docs/bidders/rubicon.md @@ -43,6 +43,7 @@ For both Prebid.js and Prebid Server, the Rubicon Project adapter requires setup | `visitor` | optional | See below for details on First Party Data. In release 4.29 and earlier, this parameter allows the definition of an object defining arbitrary key-value pairs concerning the visitor for use in targeting. The values must be arrays of strings. | `{"ucat":["new"], "search":["iphone"]}` | `object` | | `keywords` | optional | See below for details on First Party Data. In release 4.29 and earlier, this can be used to influence reports for client-side display. To get video or server-side reporting, please use First Party data or the inventory/visitor parameters. | `["travel", "tourism"]` | `Array` | | `video` | required for video | Video targeting parameters. See the [video section below](#rubicon-video). | `{"language": "en"}` | `object` | +| `bidonmultiformat` | optional | Beta parameter - please check with your account manager before setting this value | `boolean` | `true` | #### First Party Data From 085a0b0e67823f2132c29a8a5e2b23b15f31d85a Mon Sep 17 00:00:00 2001 From: bretg Date: Thu, 12 Jan 2023 12:30:31 -0500 Subject: [PATCH 026/763] AMP endpoint update (#4274) Was of sync for PBS-Java since https://github.com/prebid/prebid-server/issues/1817 --- prebid-server/endpoints/openrtb2/pbs-endpoint-amp.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.md b/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.md index eb335f478b..148d15efe3 100644 --- a/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.md +++ b/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.md @@ -32,8 +32,9 @@ For a more general reference, see the [Prebid AMP Implementation Guide | slot | optional | `String` | Added to OpenRTB request as imp[0].tagid | | timeout | optional | `String` | Added to OpenRTB request as tmax | | targeting | optional | `String` | First Party Data | -| gdpr_consent | optional | `String` | Consent string passed from CMP. Note this is used for both GDPR and CCPA. | -| consent_type | optional | `String` | If "1", request is TCFv1 and GDPR fields are ignored. If "2", the 'gdpr_consent' field is interpreted as TCFv2. If "3", the 'gdpr_consent' field is interpreted as us_privacy. | +| gdpr_consent | optional | `String` | (PBS-Go ony) Consent string passed from CMP. Note this is used for both GDPR and CCPA. | +| consent_string | optional | `String` | (PBS-Java only) Consent string passed from CMP. Note this is used for all privacy regulations. The consent_type field indicates which kind of string is present. | +| consent_type | optional | `String` | (PBS-Java only) If "1", request is TCFv1 and GDPR fields are ignored. If "2", the 'gdpr_consent' field is interpreted as TCFv2. If "3", the 'gdpr_consent' field is interpreted as us_privacy. | | gdpr_applies | optional | `String` | Takes the values "true", "false" or empty. This is used as the value of regs.ext.gdpr. If "true", regs.ext.gdpr:1, if "false", regs.ext.gdpr:0. | | addtl_consent | optional | `String` | GAM "additional consent". If present, this value is copied to user.ext.ConsentedProvidersSettings.consented_providers | | account | optional | `String` | Can be used to pass the Prebid-Server specific account ID. This is useful if `tag_id` parameters aren't unique across accounts. | From 8f9fb72dd24c9c587cefe8f4abdd43f34a4a436b Mon Sep 17 00:00:00 2001 From: bretg Date: Fri, 13 Jan 2023 10:00:08 -0500 Subject: [PATCH 027/763] PBS: add Java 'quick start' (#4276) * PBS: add Java 'quick start' * Update pbs-versions-java.md * Update pbs-versions-java.md --- prebid-server/versions/pbs-versions-java.md | 30 ++++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/prebid-server/versions/pbs-versions-java.md b/prebid-server/versions/pbs-versions-java.md index 7f68600244..cb32c51d7b 100644 --- a/prebid-server/versions/pbs-versions-java.md +++ b/prebid-server/versions/pbs-versions-java.md @@ -13,7 +13,7 @@ title: Prebid Server | Versions | Java The Java version of Prebid Server is for those who:
  • Want to host Programmatic Guaranteed
  • -
  • Prefer the Java language
  • +
  • Or just prefer the Java language
@@ -31,9 +31,6 @@ We recommend you review the [feature comparison list](/prebid-server/features/pb ## Code Repositories -The repositories are currently in the Rubicon-Project GitHub organization, but -will soon move to the Prebid org. - - [Prebid Server - Java](https://github.com/prebid/prebid-server-java) - [Prebid Cache Server - Java](https://github.com/prebid/prebid-cache-java) @@ -42,6 +39,31 @@ will soon move to the Prebid org. See [Hosting your own Prebid Server](/prebid-server/hosting/pbs-hosting.html) for important architectural considerations, then follow the instructions for [Installing PBS-Java](/prebid-server/developers/installing-java.html). +## Quick Start + +There are a few test requests in sample/requests that work with prebid-config-file-bidders.yaml and the files in the samples/stored directory. + +1) Follow the instructions in the root-level README.txt file to build the server + +2) Start the server pointing to a config in the sample directory. e.g. + +``` +java -jar target/prebid-server.jar --spring.config.additional-location=sample/prebid-config.yaml +``` + +3) Use one of the stored requests in the sample directory with curl: + +```bash +cd sample +curl --header "X-Forwarded-For: 151.101.194.216" -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' -H 'Referer: https://example.com/demo/' -H "Content-Type: application/json" http://localhost:8080/openrtb2/auction --data @FILENAME +``` + +Where FILENAME is one of: + +- rubicon-storedresponse.json - this is a request that calls for a stored-auction-response. +- appnexus-disabled-gdpr.json - this is a request that actually calls the appnexus endpoint after disabling GDPR by setting regs.ext.gdpr:0 +- pbs-stored-req-test-video.json - this is a stored-request/response chain returning a VAST document + ## References - [Building an Analytics Adapter](/prebid-server/developers/pbs-build-an-analytics-adapter.html#adding-an-analytics-adapter-in-pbs-java) From de23e850eac73621ebe2c88162a369f40116863d Mon Sep 17 00:00:00 2001 From: deubaka <1931819+deubaka@users.noreply.github.com> Date: Fri, 13 Jan 2023 22:18:14 +0100 Subject: [PATCH 028/763] VISX: Update type support for uid (#4273) * Update uid for video configuration - Updated type documentation of `uid` for video configuration - Synced to latest upstream master * Fix typo in parameter description --- dev-docs/bidders/visx.md | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/dev-docs/bidders/visx.md b/dev-docs/bidders/visx.md index 1be9147e0e..33352fd21c 100644 --- a/dev-docs/bidders/visx.md +++ b/dev-docs/bidders/visx.md @@ -30,6 +30,13 @@ Please reach out to your account manager to enable Prebid.js for your account. ### Configuration: Currency +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +| ----- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -------- | --------- | +| `uid` | required | The publisher's ad unit ID in VIS.X. The parameter can be either an `integer` or `string` for Prebid.js, however `integer` is preferred. | `903536` | `integer` | + +### Configuration + The YOC VIS.X adapter has the ability to work in different currencies. Currently, this adapter supports `EUR`, `USD`, `GBP`, `PLN`. Defaults to `EUR`. If your Ad Server uses `EUR`, you don't need any additional currency settings. If you would like to trade with VIS.X in a currency different from `EUR`, you should implement some additional settings. @@ -86,25 +93,26 @@ pbjs.setConfig({ ### Bid params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------|----------|-------------------------------------|------------|----------| -| `uid` | required | The publisher's Ad unit ID in VIS.X. | `903536` | `integer` | + +| Name | Scope | Description | Example | Type | +| ----- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -------- | --------- | +| `uid` | required | The publisher's ad unit ID in VIS.X. The parameter can be either an `integer` or `string` for Prebid.js, however `integer` is preferred. | `903536` | `integer` | ### Media type Banner object params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------|----------|-------------------------------------|------------|----------| -| `sizes` | required | All sizes this ad unit can accept. | `[[300, 250], [300, 600]]` | `array of integer arrays` | +| Name | Scope | Description | Example | Type | +| ------- | -------- | ---------------------------------- | -------------------------- | ------------------------- | +| `sizes` | required | All sizes this ad unit can accept. | `[[300, 250], [300, 600]]` | `array of integer arrays` | ### Media type Video object params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------|----------|-------------------------------------|------------|----------| -| `context` | required | The video context, only 'instream' is allowed. | `'instream'` | `string` | -| `playerSize` | required | The size (width, height) of the video player on the page, in pixels. | `[640, 480]` | `integer array` | -| `mimes` | optional | Content MIME types supported. | `['video/mp4', 'video/x-ms-wmv']` | `string array` | +| Name | Scope | Description | Example | Type | +| ------------ | -------- | -------------------------------------------------------------------- | --------------------------------- | --------------- | +| `context` | required | The video context, only 'instream' is allowed. | `'instream'` | `string` | +| `playerSize` | required | The size (width, height) of the video player on the page, in pixels. | `[640, 480]` | `integer array` | +| `mimes` | optional | Content MIME types supported. | `['video/mp4', 'video/x-ms-wmv']` | `string array` | ### Example of Banner Ad unit From 85f86069a6ea507025020d999ba64184357e1fcb Mon Sep 17 00:00:00 2001 From: AndreaC <67786179+darkstarac@users.noreply.github.com> Date: Fri, 13 Jan 2023 23:36:43 +0100 Subject: [PATCH 029/763] AIDEM Bidder Adapter: Table layout fix (#4277) * AIDEM Bid Adapter dev-docs * title to uppercase * Added publisherId as required bidder param * Header levels pushed down by 1 * added "sidebarType: 1" to header data * Added placementId * fixed tables layout Co-authored-by: Giovanni Sollazzo Co-authored-by: darkstar --- dev-docs/bidders/aidem.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/dev-docs/bidders/aidem.md b/dev-docs/bidders/aidem.md index 88c5dbe5ed..346e929ec2 100644 --- a/dev-docs/bidders/aidem.md +++ b/dev-docs/bidders/aidem.md @@ -29,6 +29,8 @@ This module is GDPR and CCPA compliant, and no 3rd party userIds are allowed. ### Global Bid Params + +{: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |---------------|----------|---------------------|------------|----------| | `siteId` | required | Unique site ID | `'ABCDEF'` | `String` | @@ -36,12 +38,16 @@ This module is GDPR and CCPA compliant, and no 3rd party userIds are allowed. | `placementId` | optional | Unique publisher tag ID | `'ABCDEF'` | `String` | #### Banner Bid Params + +{: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |------------|----------|--------------------------|---------------------------|---------| | `sizes` | required | List of the sizes wanted | `[[300, 250], [300,600]]` | `Array` | #### Video Bid Params + +{: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |---------------|----------|-----------------------------------------|-----------------|-----------| | `context` | required | One of instream, outstream, adpod | `'instream'` | `String` | @@ -53,6 +59,8 @@ This module is GDPR and CCPA compliant, and no 3rd party userIds are allowed. #### Additional Config + +{: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |---------------------|----------|---------------------------------------------------------|---------|-----------| | `coppa` | optional | Child Online Privacy Protection Act | `true` | `Boolean` | @@ -60,6 +68,8 @@ This module is GDPR and CCPA compliant, and no 3rd party userIds are allowed. #### Consent Management Object + +{: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |--------|----------|--------------------------------------------------------------------------------------------------|---------|----------| | `gdpr` | optional | GDPR Object see [Prebid.js doc](https://docs.prebid.org/dev-docs/modules/consentManagement.html) | `{}` | `Object` | @@ -168,6 +178,8 @@ pbjs.que.push(function (){ ``` ### Supported Media Types + +{: .table .table-bordered .table-striped } | Type | Support | |--------|--------------------------------------------------------------------| | Banner | Support all [AIDEM Sizes](https://kb.aidem.com/ssp/lists/adsizes/) | From f2bb0bf53bdac9e904b3ee3f78da453e48280567 Mon Sep 17 00:00:00 2001 From: Veronika Solovei Date: Sat, 14 Jan 2023 20:05:06 -0800 Subject: [PATCH 030/763] Fixed bidder specific FPD config format (#4268) Co-authored-by: vsolovei --- .../openrtb2/pbs-endpoint-auction.md | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md b/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md index 73c53f7ef5..6eced1002b 100644 --- a/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md +++ b/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md @@ -1012,15 +1012,26 @@ Bidder-specific data can be defined with ext.prebid.bidderconfig: ``` "ext": { "prebid": { - "bidderconfig": { - "bidders": ["bidderA", "bidderB"] - }, - "config": { - "ortb2": { - "site": { ... }, - "user": { ... } + "bidderconfig": [ + { + "bidders": ["bidderA", "bidderB"], + "config": { + "ortb2": { + "site": { ... }, + "user": { ... } + } + } + }, + { + "bidders": ["bidderC"], + "config": { + "ortb2": { + "site": { ... }, + "user": { ... } + } + } } - } + ] } } ``` From 73d407d9aa3556a61d94e078df88d6a603f6bee7 Mon Sep 17 00:00:00 2001 From: Chris Huie Date: Sat, 14 Jan 2023 21:14:16 -0700 Subject: [PATCH 031/763] Fix broken links on analytics page (#4255) * Update adkernelAdn.md * update liveyield --- dev-docs/analytics/adkernelAdn.md | 2 +- dev-docs/analytics/liveyield.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-docs/analytics/adkernelAdn.md b/dev-docs/analytics/adkernelAdn.md index c483625dde..f2a9ef39d2 100644 --- a/dev-docs/analytics/adkernelAdn.md +++ b/dev-docs/analytics/adkernelAdn.md @@ -12,5 +12,5 @@ gvl_id: 14 #### Registration -Please visit https://adkernel.com/dsp-suite/ for more information. +Please visit [https://adkernel.com/dsp-suite/](https://adkernel.com/dsp-suite/) for more information. diff --git a/dev-docs/analytics/liveyield.md b/dev-docs/analytics/liveyield.md index 9c7d2fe5f9..1fa2bdc97a 100644 --- a/dev-docs/analytics/liveyield.md +++ b/dev-docs/analytics/liveyield.md @@ -8,5 +8,5 @@ enable_download: false #### Registration -Please visit https://www.pubocean.com/liveyield for more information. +Please visit [https://www.pubocean.com/liveyield](https://www.pubocean.com/liveyield) for more information. From b0b341f59ae99cfb373aeb75f332b1b23c4b9c84 Mon Sep 17 00:00:00 2001 From: nicolasresetdigital <86322485+nicolasresetdigital@users.noreply.github.com> Date: Sun, 15 Jan 2023 01:32:03 -0300 Subject: [PATCH 032/763] resetdigital Bid Adapter: add gdpr, coppa support (#4256) Co-authored-by: nicolas taglienti --- dev-docs/bidders/resetdigital.md | 43 ++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/dev-docs/bidders/resetdigital.md b/dev-docs/bidders/resetdigital.md index a1443af080..534d241cea 100644 --- a/dev-docs/bidders/resetdigital.md +++ b/dev-docs/bidders/resetdigital.md @@ -5,9 +5,9 @@ description: Reset Digital Bidder Module pbjs: true pbs: true biddercode: resetdigital -gdpr_supported: false -usp_supported: false -coppa_supported: false +gdpr_supported: true +usp_supported: true +coppa_supported: true schain_supported: true floors_supported: true userIds: check with bidder @@ -25,6 +25,39 @@ sidebarType: 1 | Name | Scope | Description | Example | Type | |----------|----------|-------------|------------------------------------|----------| -| `pubId` | required | Publisher account id | `'123pubid'` | `string` | -| `zoneId` | optional | Ad zone specific id if provided | `'456zoneId'` | `string` | +| `pubId` | required | Publisher account id | `'123pubId'` | `string` | +| `siteID` | optional | Publisher site id | `'123siteId'` | `string` | +| `zoneId` | optional | Used for extra fields | `{}` | `object` | | `forceBid` | optional | Returns test bid | true | `boolean` | +| `position` | optional | Set the page position. Valid values are "atf" and "btf". | `'atf'` | `string` | +| `bidFloor` | optional | Sets the global floor -- no bids will be made under this value. | `0.50` | `float` | +| `latLong` | optional | Sets the latitude and longitude for the visitor | `[40.7608, 111.8910]` | `Array` | +| `inventory` | optional | This parameter allows the definition of an object defining arbitrary key-value pairs concerning the page for use in targeting. The values must be arrays of strings. | `{"rating":["5-star"], "prodtype":["tech","mobile"]}` | `object` | +| `visitor` | optional | This parameter allows the definition of an object defining arbitrary key-value pairs concerning the visitor for use in targeting. The values must be arrays of strings. | `{"ucat":["new"], "search":["iphone"]}` | `object` | +| `keywords` | optional | This can be used to influence reports for client-side display. To get video or server-side reporting, please use First Party data or the inventory/visitor parameters. | `["travel", "tourism"]` | `Array` | + + + +#### mediaTypes.video + +The following video parameters are supported here so publishers may fully declare their video inventory: + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|----------------|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|-----------| +| context | required | instream or outstream |"outstream" | string | +| playerSize| required | width, height of the player in pixels | [640,360] - will be translated to w and h in bid request | array | +| mimes | required | List of content MIME types supported by the player (see openRTB v2.5 for options) | ["video/mp4"]| array| +| protocols | required | Supported video bid response protocol values
1: VAST 1.0
2: VAST 2.0
3: VAST 3.0
4: VAST 1.0 Wrapper
5: VAST 2.0 Wrapper
6: VAST 3.0 Wrapper
7: VAST 4.0
8: VAST 4.0 Wrapper | [2,3,5,6] | array| +| api | required | Supported API framework values:
1: VPAID 1.0
2: VPAID 2.0
3: MRAID-1
4: ORMMA
5: MRAID-2 | [2] | array | +| linearity | required | OpenRTB2 linearity. 1: linear (in-stream ad), 2: non-linear (overlay ad) | 1 | integer | +| maxduration | recommended | Maximum video ad duration in seconds. | 30 | integer | +| minduration | recommended | Minimum video ad duration in seconds | 6 | integer | +| playbackmethod | recommended | Playback methods that may be in use. Only one method is typically used in practice. (see openRTB v2.5 section 5.10 for options)| [2]| array | +| skip | optional | Indicates if the player will allow the video to be skipped, where 0 = no, 1 = yes. | 1 | integer | +| skipafter| optional | Number of seconds a video must play before skipping is enabled; only applicable if the ad is skippable. | 6 | integer| +| minbitrate | optional | Minimum bit rate in Kbps. | 300 | integer | +| maxbitrate | optional | Maximum bit rate in Kbps. | 9600 | integer | +| startdelay | recommended | Indicates the start delay in seconds for pre-roll, mid-roll, or post-roll ad placements.
>0: Mid-Roll (value indicates start delay in second)
0: Pre-Roll
-1: Generic Mid-Roll
-2: Generic Post-Roll | 0 | integer | +| placement | recommended | Placement type for the impression. (see openRTB v2.5 section 5.9 for options) | 1 | integer | From baea8c7312449ae4ed503ec497f2f8b35278469c Mon Sep 17 00:00:00 2001 From: bretg Date: Sat, 14 Jan 2023 23:38:09 -0500 Subject: [PATCH 033/763] removing old bid adapters not ported to 5.0 (#4253) --- dev-docs/bidders/1ad4good.md | 21 ---- dev-docs/bidders/7xbid.md | 19 ---- dev-docs/bidders/aardvark.md | 24 ----- dev-docs/bidders/adbutler.md | 23 ----- dev-docs/bidders/adfinity.md | 20 ---- dev-docs/bidders/adform.md | 51 ---------- dev-docs/bidders/adglare.md | 20 ---- dev-docs/bidders/admedia.md | 20 ---- dev-docs/bidders/adspend.md | 24 ----- dev-docs/bidders/advenue.md | 18 ---- dev-docs/bidders/advertly.md | 18 ---- dev-docs/bidders/atomx.md | 17 ---- dev-docs/bidders/bidfluence.md | 20 ---- dev-docs/bidders/bidlab.md | 23 ----- dev-docs/bidders/bidphysics.md | 25 ----- dev-docs/bidders/byplay.md | 18 ---- dev-docs/bidders/c1x.md | 29 ------ dev-docs/bidders/cedato.md | 28 ------ dev-docs/bidders/clicktripz.md | 19 ---- dev-docs/bidders/colombia.md | 18 ---- dev-docs/bidders/cosmos.md | 24 ----- dev-docs/bidders/dailyhunt.md | 118 ----------------------- dev-docs/bidders/decenterads.md | 25 ----- dev-docs/bidders/dgads.md | 20 ---- dev-docs/bidders/djax.md | 18 ---- dev-docs/bidders/edgequeryx.md | 28 ------ dev-docs/bidders/emoteev.md | 21 ---- dev-docs/bidders/envivo.md | 18 ---- dev-docs/bidders/fidelity.md | 24 ----- dev-docs/bidders/haxmedia.md | 22 ----- dev-docs/bidders/hpmdnetwork.md | 21 ---- dev-docs/bidders/imonomy.md | 20 ---- dev-docs/bidders/ironsource.md | 80 ---------------- dev-docs/bidders/jcm.md | 20 ---- dev-docs/bidders/komoona.md | 20 ---- dev-docs/bidders/lemma.md | 23 ----- dev-docs/bidders/loopme.md | 21 ---- dev-docs/bidders/lunamedia.md | 26 ----- dev-docs/bidders/meazy.md | 20 ---- dev-docs/bidders/mobfox.md | 19 ---- dev-docs/bidders/mobsmart.md | 24 ----- dev-docs/bidders/nafdigital.md | 25 ----- dev-docs/bidders/nanointeractive.md | 138 --------------------------- dev-docs/bidders/nasmediaAdmixer.md | 24 ----- dev-docs/bidders/newborntownWeb.md | 19 ---- dev-docs/bidders/outcon.md | 20 ---- dev-docs/bidders/performax.md | 40 -------- dev-docs/bidders/piximedia.md | 23 ----- dev-docs/bidders/platformio.md | 106 -------------------- dev-docs/bidders/projectLimelight.md | 21 ---- dev-docs/bidders/reklamstore.md | 19 ---- dev-docs/bidders/reload.md | 50 ---------- dev-docs/bidders/resultsmedia.md | 20 ---- dev-docs/bidders/rtbdemand.md | 21 ---- dev-docs/bidders/rtbsolutions.md | 23 ----- dev-docs/bidders/segmento.md | 18 ---- dev-docs/bidders/sekindoUM.md | 19 ---- dev-docs/bidders/smartrtb.md | 68 ------------- dev-docs/bidders/smms.md | 19 ---- dev-docs/bidders/somo.md | 23 ----- dev-docs/bidders/stv.md | 23 ----- dev-docs/bidders/taphype.md | 20 ---- dev-docs/bidders/tim.md | 19 ---- dev-docs/bidders/topRTB.md | 18 ---- dev-docs/bidders/trendqube.md | 23 ----- dev-docs/bidders/uol.md | 28 ------ dev-docs/bidders/vi.md | 21 ---- dev-docs/bidders/videofy.md | 24 ----- dev-docs/bidders/vmg.md | 17 ---- dev-docs/bidders/vuble.md | 57 ----------- dev-docs/bidders/welect.md | 47 --------- dev-docs/bidders/windtalker.md | 106 -------------------- dev-docs/bidders/xhb.md | 19 ---- dev-docs/bidders/zedo.md | 20 ---- 74 files changed, 2205 deletions(-) delete mode 100644 dev-docs/bidders/1ad4good.md delete mode 100644 dev-docs/bidders/7xbid.md delete mode 100644 dev-docs/bidders/aardvark.md delete mode 100644 dev-docs/bidders/adbutler.md delete mode 100644 dev-docs/bidders/adfinity.md delete mode 100644 dev-docs/bidders/adform.md delete mode 100644 dev-docs/bidders/adglare.md delete mode 100644 dev-docs/bidders/admedia.md delete mode 100644 dev-docs/bidders/adspend.md delete mode 100644 dev-docs/bidders/advenue.md delete mode 100644 dev-docs/bidders/advertly.md delete mode 100644 dev-docs/bidders/atomx.md delete mode 100644 dev-docs/bidders/bidfluence.md delete mode 100644 dev-docs/bidders/bidlab.md delete mode 100644 dev-docs/bidders/bidphysics.md delete mode 100644 dev-docs/bidders/byplay.md delete mode 100644 dev-docs/bidders/c1x.md delete mode 100644 dev-docs/bidders/cedato.md delete mode 100644 dev-docs/bidders/clicktripz.md delete mode 100644 dev-docs/bidders/colombia.md delete mode 100644 dev-docs/bidders/cosmos.md delete mode 100644 dev-docs/bidders/dailyhunt.md delete mode 100644 dev-docs/bidders/decenterads.md delete mode 100644 dev-docs/bidders/dgads.md delete mode 100644 dev-docs/bidders/djax.md delete mode 100644 dev-docs/bidders/edgequeryx.md delete mode 100644 dev-docs/bidders/emoteev.md delete mode 100644 dev-docs/bidders/envivo.md delete mode 100644 dev-docs/bidders/fidelity.md delete mode 100644 dev-docs/bidders/haxmedia.md delete mode 100644 dev-docs/bidders/hpmdnetwork.md delete mode 100644 dev-docs/bidders/imonomy.md delete mode 100644 dev-docs/bidders/ironsource.md delete mode 100644 dev-docs/bidders/jcm.md delete mode 100644 dev-docs/bidders/komoona.md delete mode 100644 dev-docs/bidders/lemma.md delete mode 100644 dev-docs/bidders/loopme.md delete mode 100644 dev-docs/bidders/lunamedia.md delete mode 100644 dev-docs/bidders/meazy.md delete mode 100644 dev-docs/bidders/mobfox.md delete mode 100644 dev-docs/bidders/mobsmart.md delete mode 100644 dev-docs/bidders/nafdigital.md delete mode 100644 dev-docs/bidders/nanointeractive.md delete mode 100644 dev-docs/bidders/nasmediaAdmixer.md delete mode 100644 dev-docs/bidders/newborntownWeb.md delete mode 100644 dev-docs/bidders/outcon.md delete mode 100644 dev-docs/bidders/performax.md delete mode 100644 dev-docs/bidders/piximedia.md delete mode 100644 dev-docs/bidders/platformio.md delete mode 100644 dev-docs/bidders/projectLimelight.md delete mode 100644 dev-docs/bidders/reklamstore.md delete mode 100644 dev-docs/bidders/reload.md delete mode 100644 dev-docs/bidders/resultsmedia.md delete mode 100644 dev-docs/bidders/rtbdemand.md delete mode 100644 dev-docs/bidders/rtbsolutions.md delete mode 100644 dev-docs/bidders/segmento.md delete mode 100644 dev-docs/bidders/sekindoUM.md delete mode 100644 dev-docs/bidders/smartrtb.md delete mode 100644 dev-docs/bidders/smms.md delete mode 100644 dev-docs/bidders/somo.md delete mode 100644 dev-docs/bidders/stv.md delete mode 100644 dev-docs/bidders/taphype.md delete mode 100644 dev-docs/bidders/tim.md delete mode 100644 dev-docs/bidders/topRTB.md delete mode 100644 dev-docs/bidders/trendqube.md delete mode 100644 dev-docs/bidders/uol.md delete mode 100644 dev-docs/bidders/vi.md delete mode 100644 dev-docs/bidders/videofy.md delete mode 100644 dev-docs/bidders/vmg.md delete mode 100644 dev-docs/bidders/vuble.md delete mode 100644 dev-docs/bidders/welect.md delete mode 100644 dev-docs/bidders/windtalker.md delete mode 100644 dev-docs/bidders/xhb.md delete mode 100644 dev-docs/bidders/zedo.md diff --git a/dev-docs/bidders/1ad4good.md b/dev-docs/bidders/1ad4good.md deleted file mode 100644 index bcba2e07a3..0000000000 --- a/dev-docs/bidders/1ad4good.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -layout: bidder -title: 1ad4good -description: Prebid One Ad for Good(1ad4good.org) Bidder Adaptor -pbjs: true -biddercode: 1ad4good -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Note: -This adapter is for displaying free ads for various not profits. You can find more info at [1ad4good.org])(http://1ad4good.org). - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|-------------|---------|----------| -| `placementId` | required | Meaningless, but required id | `234234` | `integer` | -| `cpm` | optional | forces bidder to insert custom cpm bid | 0.50 | `decimal` | diff --git a/dev-docs/bidders/7xbid.md b/dev-docs/bidders/7xbid.md deleted file mode 100644 index 6bb329fac8..0000000000 --- a/dev-docs/bidders/7xbid.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: bidder -title: 7xbid -description: Prebid 7xbid Bidder Adaptor -pbjs: true -biddercode: 7xbid -media_types: banner, native -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|-------------|---------|----------| -| `placementId` | required | This is placement Id | `1425292` | `integer` | -| `currency` | optional | 3-letter ISO 4217 code defining the currency of the bid (currently support USD and JPY), default is JPY | `'USD'` | `string` | diff --git a/dev-docs/bidders/aardvark.md b/dev-docs/bidders/aardvark.md deleted file mode 100644 index b312c591b0..0000000000 --- a/dev-docs/bidders/aardvark.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: bidder -title: Aardvark -description: Prebid Aardvark Bidder Adaptor -pbjs: true -biddercode: aardvark -gdpr_supported: true -usp_supported: true -schain_supported: true -userIds: unifiedId -gvl_id: 52 -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|------|----------|--------------------|----------|----------| -| `ai` | required | The rtk auction ID | `'XBC1'` | `string` | -| `sc` | required | The rtk shortcode | `'AF2g'` | `string` | -| `categories` | optional | Deal ID Categories | `['news','sports']` | `array` | diff --git a/dev-docs/bidders/adbutler.md b/dev-docs/bidders/adbutler.md deleted file mode 100644 index c1b64b08ec..0000000000 --- a/dev-docs/bidders/adbutler.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: bidder -title: AdButler -description: Prebid AdButler Bidder Adaptor -pbjs: true -biddercode: adbutler -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------------|----------|------------------------------------------------------|------------------|----------| -| `accountID` | required | Account ID | `'167283'` | `string` | -| `zoneID` | required | Zone ID | `'210093'` | `string` | -| `keyword` | optional | Keyword(s) used for custom targeting | `'green,orange'` | `string` | -| `minCPM` | optional | Minimum CPM value to accept | `'1.00'` | `string` | -| `maxCPM` | optional | Maximum CPM value to accept | `'5.00'` | `string` | -| `extra` | optional | Pass other AdButler parameters like 'tuid' or 'kw' | `{kw: "green"}` | `object` | diff --git a/dev-docs/bidders/adfinity.md b/dev-docs/bidders/adfinity.md deleted file mode 100644 index f12c555bf6..0000000000 --- a/dev-docs/bidders/adfinity.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: bidder -title: Adfinity -description: Prebid Adfinity Bidder Adaptor -pbjs: true -biddercode: adfinity -media_types: banner, video, native -gdpr_supported: true -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|----------------|----------|----------------------------------------------------------|------------|-----------| -| `placement_id` | required | Placement Id will be generated on Adfinity Platform. | `0` | `integer` | -| `traffic` | optional | Type traffic | `'banner'` | `string` | diff --git a/dev-docs/bidders/adform.md b/dev-docs/bidders/adform.md deleted file mode 100644 index cf5b6f5be7..0000000000 --- a/dev-docs/bidders/adform.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -layout: bidder -title: Adform -description: Prebid Adform Bidder Adaptor -biddercode: adform -media_types: banner, video -gdpr_supported: true -usp_supported: true -prebid_member: true -pbjs: true -pbs: true -userIds: all -gvl_id: 50 -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -**Adform bid adapter is deprecated since Prebid 5.0. Please refer to [AdformOpenRTB adapter](#adf) documentation to fetch bids from Adform demand sources.** - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------------|----------|-----------------------------------------------|----------------------------|-----------| -| `mid` | required | | `12345` | `integer` | -| `adxDomain` | optional | The Adform domain | `'adx.adform.net'` | `string` | -| `priceType` | optional | An expected price type (net or gross) of bids | `'net'` | `string` | -| `mkv` | optional | Comma-separated key-value pairs | `'city:NY'` | `string` | -| `mkw` | optional | Comma-separated keywords | `'news,sport'` | `string` | -| `minp` | optional | Minimum CPM price | `2.55` | `number` | -| `cdims` | optional | Comma-separated creative dimentions | `'300x250'` | `string` | -| `url` | optional | Custom targeting URL | `'https://some.app/?home'` | `string` | - -Note: Spaces are not allowed between comma-separated list values. For example: -``` -// valid params -{ - mid: 12345, - mkv: 'city:NY,city:London', - mkv: 'news,sport', - cdims: '300x250,250x300' -} -// invalid params -{ - mid: 12345, - mkv: 'city:NY, city:London', - mkv: 'news, sport', - cdims: '300x250, 250x300' -} -``` diff --git a/dev-docs/bidders/adglare.md b/dev-docs/bidders/adglare.md deleted file mode 100644 index 73e6781af3..0000000000 --- a/dev-docs/bidders/adglare.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: bidder -title: AdGlare Ad Server -description: Prebid Adapter for AdGlare Ad Server -pbjs: true -biddercode: adglare -media_types: banner -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------------|----------|--------------------------------------|--------------------------------------|----------| -| `domain ` | required | Your (white label) ad serving domain | `'try.engine.adglare.net'` | `string` | -| `zID` | required | The zone ID | `'475579334'` | `string` | -| `type` | required | The zone type | `'banner'` | `string` | diff --git a/dev-docs/bidders/admedia.md b/dev-docs/bidders/admedia.md deleted file mode 100644 index 452ca07fe8..0000000000 --- a/dev-docs/bidders/admedia.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: bidder -title: AdMedia -description: Prebid AdMedia Bidder Adaptor -pbjs: true -biddercode: admedia -media_types: banner -gdpr_supported: false -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------|----------|------------------------------------|----------|----------| -| `aid` | required | The Affiliate ID for the Publisher | `'1234'` | `string` | diff --git a/dev-docs/bidders/adspend.md b/dev-docs/bidders/adspend.md deleted file mode 100644 index 4c6d39c2a4..0000000000 --- a/dev-docs/bidders/adspend.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: bidder -title: AdSpend -description: Prebid AdSpend Bidder Adaptor -pbjs: true -biddercode: adspend -media_types: banner -gdpr_supported: false -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - - -### Bid Params - -{: .table .table-bordered .table-striped } - -| Name | Scope | Description | Example | Type | -|---------------|----------|----------------------------------------------------------------------------|------------------------|-----------------| -| `pubcid` | required | Publisher ID. | `0` | `string` | -| `bidfloor` | required | Minimum bid for this impression expressed in CPM. | `0.03` | `float` | - -Please note that cookie support is required diff --git a/dev-docs/bidders/advenue.md b/dev-docs/bidders/advenue.md deleted file mode 100644 index 5d347a27f2..0000000000 --- a/dev-docs/bidders/advenue.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: bidder -title: Advenue -description: Prebid Advenue Bidder Adaptor -pbjs: true -biddercode: advenue -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example |type| -| :----------- | :--------- | :------------ | :----------------- |:---| -| `placementId` | required | Placement Id will be generated on Advenue Platform. | 0 |integer| -| `traffic` | optional | Type traffic | 'banner' |string| diff --git a/dev-docs/bidders/advertly.md b/dev-docs/bidders/advertly.md deleted file mode 100644 index 52345e07d6..0000000000 --- a/dev-docs/bidders/advertly.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: bidder -title: advertly -description: Prebid ADVERTLY Bidder Adapter -pbjs: true -biddercode: advertly -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-----------------|----------|----------------------------------------------------------------------------------------|-----------------------------|-----------| -| `publisherId` | required | Publisher id associated with Advertly | `1` | `integer` | diff --git a/dev-docs/bidders/atomx.md b/dev-docs/bidders/atomx.md deleted file mode 100644 index 191267d0b6..0000000000 --- a/dev-docs/bidders/atomx.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: bidder -title: Atomx -description: Prebid Atomx Bidder Adaptor -pbjs: true -biddercode: atomx -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|------|----------|--------------------|---------|-----------| -| `id` | required | Atomx placement ID | `1234` | `integer` | diff --git a/dev-docs/bidders/bidfluence.md b/dev-docs/bidders/bidfluence.md deleted file mode 100644 index 2540405884..0000000000 --- a/dev-docs/bidders/bidfluence.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: bidder -title: Bidfluence -description: Bidfluence Adaptor for Prebidjs -pbjs: true -biddercode: bidfluence -gdpr_supported: true -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|----------------|----------|--------------|------------------------------------------|----------| -| `placementId` | required | Placement Id | `'1000'` | `string` | -| `publisherId` | required | Publisher Id | `'1000'` | `string` | -| `reservePrice` | optional | Floor price | `'0.5"` | `string` | diff --git a/dev-docs/bidders/bidlab.md b/dev-docs/bidders/bidlab.md deleted file mode 100644 index 1527f2f2c2..0000000000 --- a/dev-docs/bidders/bidlab.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: bidder -title: Bidlab -description: Prebid Bidlab Bidder Adapter -pbjs: true -biddercode: bidlab -gdpr_supported: true -media_types: banner, video -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Note: - -The Bidlab Bidding adapter requires setup before beginning. Please contact us at hello@bidlab.ai - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|-----------------------|-----------|-----------| -| `placementId` | required | Bidlab placement id | `'1234asdf'` | `'string'` | diff --git a/dev-docs/bidders/bidphysics.md b/dev-docs/bidders/bidphysics.md deleted file mode 100644 index fe84f61246..0000000000 --- a/dev-docs/bidders/bidphysics.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -layout: bidder -title: BidPhysics -description: Prebid BidPhysics Bidder Adaptor -pbjs: true -biddercode: bidphysics -gdpr_supported: true -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Note: - -The BidPhysics Header Bidding adaptor requires approval from the BidPhysics team. Please reach out to for more information. - - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|------|----------|--------------------|-------------|-----------| -| `unitId` | optional | Unit Id | `'13000'` | `string` | -| `networkId` | optional | Network Id | `'2300000'` | `string` | -| `publisherId` | optional | Publisher Id | `'8ba96b13-540d-4f8a-9f1b-2a7e804769cc'` | `string` | diff --git a/dev-docs/bidders/byplay.md b/dev-docs/bidders/byplay.md deleted file mode 100644 index 5bd03ad73b..0000000000 --- a/dev-docs/bidders/byplay.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: bidder -title: ByPlay -description: Prebid ByPlay Bidder Adaptor -pbjs: true -biddercode: byplay -media_types: video -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------------|----------|----------------|----------|----------| -| `sectionId` | required | The section ID | `'7986'` | `string` | diff --git a/dev-docs/bidders/c1x.md b/dev-docs/bidders/c1x.md deleted file mode 100644 index 9efac82fe9..0000000000 --- a/dev-docs/bidders/c1x.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -layout: bidder -title: C1X -description: Prebid C1X Bidder Adaptor -pbs: false -pbjs: true -biddercode: c1x -media_types: banner -gdpr_supported: true -pbs_app_supported: false -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Note: - -The C1X Header Bidding adaptor requires approval from the C1X team. Please reach out to for more information. - -### Bid params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|----------------|----------|-----------------------------------------------------------------|-------------------------------------|----------| -| `placementId` | required | Placement ID | `'12345'` | `string` | -| `siteId` | required | Site ID from which the request is originating | `'999'` | `string` | -| `dealId` | optional | Deal ID to get the specific deal from our DSP | `'123456'` | `string` | -| `floorPriceMap`| optional | Minimum floor prices needed from the DSP's to enter the auction | `{"300x250": 4.00,"300x600": 3.00}` | `object` | -| `pageurl` | optional | Url of the webpage where the request is originating from | `'www.example.com'` | `string` | diff --git a/dev-docs/bidders/cedato.md b/dev-docs/bidders/cedato.md deleted file mode 100644 index 7cc5e47b4f..0000000000 --- a/dev-docs/bidders/cedato.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -layout: bidder -title: Cedato -description: Prebid Cedato Bidder Adapter -top_nav_section: dev_docs -media_types: banner, video -gdpr_supported: true -usp_supported: true -nav_section: reference -pbjs: true -biddercode: cedato -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -| ---- | ----- | ----------- | ------- | ---- | -| `player_id` | required | The player ID from Cedato | `1450133326` | `integer` | -| `bidfloor` | optional | Bid floor value | `0.01` | `integer` | - -### Note - -The Cedato adapter requires setup and approval from the Cedato team. -Please reach out to your account team or publishers@cedato.com for more information. diff --git a/dev-docs/bidders/clicktripz.md b/dev-docs/bidders/clicktripz.md deleted file mode 100644 index a2868cd6c6..0000000000 --- a/dev-docs/bidders/clicktripz.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: bidder -title: Clicktripz -description: Prebid Clicktripz Bidder Adaptor -pbjs: true -biddercode: clicktripz -media_types: banner -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|-------------|---------|----------| -| `placementId` | required | The Placement ID from Clicktripz | `'4312c63f'` | `string` | -| `siteId` | required | The site ID from Clicktripz | `'prebid'` | `string` | diff --git a/dev-docs/bidders/colombia.md b/dev-docs/bidders/colombia.md deleted file mode 100644 index 865c7bb3c3..0000000000 --- a/dev-docs/bidders/colombia.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: bidder -title: COLOMBIA -description: Prebid COLOMBIA Bidder Adaptor -pbjs: true -biddercode: colombia -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|------------------|---------|----------| -| `placementId` | required | The placement ID(Adunit Id) | | `string` | diff --git a/dev-docs/bidders/cosmos.md b/dev-docs/bidders/cosmos.md deleted file mode 100644 index b2360d741e..0000000000 --- a/dev-docs/bidders/cosmos.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: bidder -title: COSMOS -description: Prebid COSMOS Bidder Adapter -pbjs: true -biddercode: cosmos -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Integration Note: - -Cosmos bidder adapter requires setup and approval from the Cosmos team. Please reach out to your account manager for more information and to start using it. - -### Bid params - -{: .table .table-bordered .table-striped } - -| Name | Scope | Description | Example | Type | -| ------------------- | -------- | ------------------------------------- | ------------ | --------- | -| `publisherId` | required | The publisher ID from Cosmos | `1001` | `integer` | -| `tagId` | optional | Identifier for specific ad placement | `1001` | `integer` | -| `bidFloor` | optional | The minimum bid value | `1.07` | `float` | diff --git a/dev-docs/bidders/dailyhunt.md b/dev-docs/bidders/dailyhunt.md deleted file mode 100644 index 956059637d..0000000000 --- a/dev-docs/bidders/dailyhunt.md +++ /dev/null @@ -1,118 +0,0 @@ ---- -layout: bidder -title: Dailyhunt -description: Prebid Dailyhunt Bidder Adaptor -pbjs: true -biddercode: dailyhunt -media_types: display, native, video -gdpr_supported: true -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|------|----------|-------------|---------|------| -| `placement_id` | required | Serving ads based on placement_id. Contact Dailyhunt for placement_id. | `1` | `int` | -| `publisher_id` | required | Serving ads based on publisher_id. Contact Dailyhunt for publisher_id. | `1` | `int` | -| `partner_name` | required | Serving ads based on partner_name. Contact Dailyhunt for partner_name. | `dailyhunt` | `string` | -| `test_mode` | optional | Serving test mode campaign only. | `true` | `bool` | -| `bidfloor` | optional | Minimum bid for this bid expressed in CPM. | `1.4` | `float` | -| `video` | optional | A Video object required if this bid is offered as a video ad opportunity. It is ortb video object. | `video: { w: 640, h: 480, mimes: ["video/mp4"] }` | `object` | -|`site` | optional | Details about the publisher’s website. It is ortb site object. | `site:{id:"102855",cat:["IAB3-1"],domain:"http://m.dailyhunt.in",page:"http://m.dailyhunt.in/1234.html "}` | `object` | -| `device` | optional | Details about the user’s device to which the impression will be delivered. It is ortb device object. | `device: { ip: "64.124.253.1", os: "OS X", ua: "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.16) }` | `object` | -| `user` | optional | Details about the human user of the device; the advertising audience. It is ortb user object. | `user: { id: "456789876567897654678987656789", gender: "M", gender: 1990, keywords: "marketing,traveling,reading" }` | `object` | -| `publisher` | optional | Details about the Publisher of the site. It is ortb publisher object. | `publisher: { id: "8953", name: "dailyhunt", "cat": [ "IAB3-1" ], "domain": "m.dailyhunt.in" }` | `object` | - -**Notes: The `video`, `site`, `device`, `user`, `publisher` objects are all ORTB objects. Please refer to the [ORTB documentation](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) for additional details.** - -### Test Parameters -``` - var adUnits = [ - { - code: '/83414793/prebid_test_display', - sizes: [[300, 250], [320, 50]], - mediaTypes: { - banner : { - sizes: [[300, 250], [320, 50]], - } - }, - bids: [ - { - bidder: 'dailyhunt', - params: { - placement_id: 1, - publisher_id: 1, - partner_name: 'dailyhunt', - device: { - ip: "182.23.143.212" - } - } - } - ] - }, - { - code: '/83414793/prebid_test_native', - sizes: [[300, 250]], - mediaTypes: { - native: { - title: { - required: true - }, - body: { - required: true - }, - image: { - required: true - }, - cta: { - required: true - } - } - }, - bids: [ - { - bidder: 'dailyhunt', - params: { - placement_id: 1, - publisher_id: 1, - partner_name: 'dailyhunt', - device: { - ip: "182.23.143.212" - } - } - } - ] - }, - { - code: '/83414793/prebid_test_video', - mediaTypes: { - video: { - playerSize: [1280, 720], - context: 'instream' - } - }, - bids: [ - { - bidder: 'dailyhunt', - params: { - placement_id: 1, - publisher_id: 1, - partner_name: 'dailyhunt', - device: { - ip: "182.23.143.212" - }, - video: { - mimes: [ - 'video/mp4' - ] - } - } - } - ] - } - ]; -``` diff --git a/dev-docs/bidders/decenterads.md b/dev-docs/bidders/decenterads.md deleted file mode 100644 index bbbabcd0ef..0000000000 --- a/dev-docs/bidders/decenterads.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -layout: bidder -title: DecenterAds -description: Prebid DecenterAds Bidder Adaptor -pbs: true -pbjs: true -biddercode: decenterads -media_types: banner, video, native -gdpr_supported: true -pbs_app_supported: true -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Note: - -The Example Bidding adapter requires setup before beginning. Please contact us at support@decenterads.com - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|--------------|-----------|----------| -| `placementId` | required | Placement ID | `'12345'` | `string` | diff --git a/dev-docs/bidders/dgads.md b/dev-docs/bidders/dgads.md deleted file mode 100644 index b8c5945736..0000000000 --- a/dev-docs/bidders/dgads.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: bidder -title: dgads -description: Prebid dgads Bidder Adapter -pbjs: true -biddercode: dgads -media_types: native -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|--------------|---------|----------| -| `site_id` | required | Publisher ID | `'12'` | `string` | -| `location_id` | required | Placement ID | `'23'` | `string` | diff --git a/dev-docs/bidders/djax.md b/dev-docs/bidders/djax.md deleted file mode 100644 index 1e221cf939..0000000000 --- a/dev-docs/bidders/djax.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: bidder -title: DJAX -description: Prebid djax Bidder Adapter -pbjs: true -biddercode: djax -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-----------------|----------|----------------------------------------------------------------------------------------|-----------------------------|-----------| -| `publisherId` | required | Publisher id associated with DJAX | `1` | `integer` | diff --git a/dev-docs/bidders/edgequeryx.md b/dev-docs/bidders/edgequeryx.md deleted file mode 100644 index 9c2c8d6be6..0000000000 --- a/dev-docs/bidders/edgequeryx.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -layout: bidder -title: Edge Query X -description: Prebid for Edge Query X Adaptor -pbjs: true -biddercode: edgequeryx -media_types: display -gdpr_supported: true -schain_supported: true -usp_supported: true -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Note: -The Edge Query bidder adaptor requires setup and approval from the Edge Query team. Please reach out to your account manager for more information and start using it. - -### Bid params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|------------|----------|----------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------|-----------| -| `accountId`| required | The account ID | `test` | `string` | -| `widgetId` | required | The widget ID | `test` | `string` | -| `domain` | optional | The network domain (default see example) | `'https://deep.edgequery.io'` | `string` | -| `appName` | optional | Mobile application name | `'Edge Query Preview'` | `string` | - diff --git a/dev-docs/bidders/emoteev.md b/dev-docs/bidders/emoteev.md deleted file mode 100644 index 3218b13d60..0000000000 --- a/dev-docs/bidders/emoteev.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -layout: bidder -title: Emoteev -description: Prebid Emoteev Bidder Adaptor -pbjs: true -biddercode: emoteev -gdpr_supported: true -userIds: pubCommonId -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|--------------|----------|--------------------------------------------------------------------------|----------------|---------| -| `adSpaceId` | required | Provided by Emoteev team | `5084` | Integer | -| `context` | required | One of `'in-content'`, `'footer'`, `'overlay'`, `'wallpaper'` | `'in-content'` | String | -| `externalId` | optional | Use it when you want to link your bids to some specific id on your side. | `12` | Integer | diff --git a/dev-docs/bidders/envivo.md b/dev-docs/bidders/envivo.md deleted file mode 100644 index 0633e5b44d..0000000000 --- a/dev-docs/bidders/envivo.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: bidder -title: envivo -description: Prebid envivo Bidder Adapter -pbjs: true -biddercode: envivo -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-----------------|----------|----------------------------------------------------------------------------------------|-----------------------------|-----------| -| `publisherId` | required | Publisher id associated with envivo | `1` | `integer` | diff --git a/dev-docs/bidders/fidelity.md b/dev-docs/bidders/fidelity.md deleted file mode 100644 index eecae01850..0000000000 --- a/dev-docs/bidders/fidelity.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: bidder -title: Fidelity Media -description: Prebid Fidelity Media Bidder Adapter -pbjs: true -schain_supported: true -biddercode: fidelity -media_types: banner -gdpr_supported: true -usp_supported: true -gvl_id: 408 -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|--------|----------|--------------------------------------------------|--------------------------|----------| -| zoneid | required | The ad zone or tag specific ID | `'27248'` | `string` | -| floor | optional | The floor CPM price for the request | `0.1234` | `float` | -| server | optional | Bidder domain (default `'x.fidelity-media.com'`) | `'x.fidelity-media.com'` | `string` | diff --git a/dev-docs/bidders/haxmedia.md b/dev-docs/bidders/haxmedia.md deleted file mode 100644 index 8165df26bb..0000000000 --- a/dev-docs/bidders/haxmedia.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -layout: bidder -title: Haxmedia -description: Prebid Haxmedia Bidder Adapter -biddercode: haxmedia -usp_supported: true -schain_supported: true -media_types: banner, video, native -gdpr: true -pbjs: true -pbs: false -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Prebid.JS Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|----------------|----------|----------------------------------------------------------|------------|-----------| -| `placementId` | required | Placement Id will be generated on Haxmedia Platform. | `'0'` | `string` | diff --git a/dev-docs/bidders/hpmdnetwork.md b/dev-docs/bidders/hpmdnetwork.md deleted file mode 100644 index caf98f5a2a..0000000000 --- a/dev-docs/bidders/hpmdnetwork.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -layout: bidder -title: HPMD Network -description: Prebid HPMD Network Bidder Adaptor -pbjs: true -biddercode: hpmdnetwork -media_types: banner -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -Note: -The HPMD Network adapter requires setup and approval beforehand. - -### Bid parameters - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|-----------|----------------------------------------------------------|--------------------|------------------| -| `placementId` | required | The slot ID from HPMD Network. | `'2362'` | `string` | diff --git a/dev-docs/bidders/imonomy.md b/dev-docs/bidders/imonomy.md deleted file mode 100644 index cd0ab76d8c..0000000000 --- a/dev-docs/bidders/imonomy.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: bidder -title: Imonomy -description: Prebid Imonomy Bidder Adaptor -pbjs: true -biddercode: imonomy -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - - - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|--------------------------------|--------------------------------------|----------| -| `hbid` | required | header-bidding id from Imonomy | `'14567718624'` | `string` | -| `placementId` | required | placement id from Imonomy | `'e69148e0ba6c4c07977dc2daae5e1577'` | `string` | diff --git a/dev-docs/bidders/ironsource.md b/dev-docs/bidders/ironsource.md deleted file mode 100644 index 6a15b00ef1..0000000000 --- a/dev-docs/bidders/ironsource.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -layout: bidder -title: IronSource -description: Prebid IronSource Bidder Adaptor -pbjs: true -biddercode: ironsource -media_types: no-display, video -schain_supported: true -gdpr_supported: true -usp_supported: true -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Note - -The IronSource adapter requires setup and approval. Please reach out to prebid-digital-brands@ironsrc.com to setup an IronSource account. - -### Bid Parameters - -#### Video - -{: .table .table-bordered .table-striped } -| Name | Scope | Type | Description | Example -| ---- | ----- | ---- | ----------- | ------- -| `isOrg` | required | String | IronSource publisher Id provided by your IronSource representative | "56f91cd4d3e3660002000033" -| `floorPrice` | optional | Number | Minimum price in USD.

**WARNING:**
Misuse of this parameter can impact revenue | 2.00 -| `ifa` | optional | String | The ID for advertisers (also referred to as "IDFA") | "XXX-XXX" -| `testMode` | optional | Boolean | This activates the test mode | false - -## Example -```javascript -var adUnits = [ - { - code: 'dfp-video-div', - sizes: [[640, 480]], - mediaTypes: { - video: { - playerSize: [[640, 480]], - context: 'instream' - } - }, - bids: [{ - bidder: 'ironsource', - params: { - isOrg: '56f91cd4d3e3660002000033', // Required - floorPrice: 5.00, // Optional - ifa: 'XXX-XXX', // Optional - testMode: false // Optional - } - }] - } - ]; -``` - -### Configuration -IronSource recommends setting UserSync by iframe for monetization. - -For Prebid.js v1.15.0 and later: - -pbjs.setConfig({ - userSync: { - filterSettings: { - iframe: { - bidders: '*', // '*' represents all bidders - filter: 'include' - } - } - } -}); - -For Prebid.js v1.14.0 and before: - -pbjs.setConfig({ - userSync: { - iframeEnabled: true, - enabledBidders: ['ironsource'] - } -}); diff --git a/dev-docs/bidders/jcm.md b/dev-docs/bidders/jcm.md deleted file mode 100644 index f38c2b660c..0000000000 --- a/dev-docs/bidders/jcm.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: bidder -title: J Carter Marketing -description: Prebid J Carter Marketing Bidder Adaptor -pbjs: true -biddercode: jcm -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|-------------|---------|----------| -| `id` | required | | | `string` | -| `siteId` | required | | | `string` | -| `tier2SiteID` | optional | | | `string` | -| `tier3SiteID` | optional | | | `string` | diff --git a/dev-docs/bidders/komoona.md b/dev-docs/bidders/komoona.md deleted file mode 100644 index 5f28ab163e..0000000000 --- a/dev-docs/bidders/komoona.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: bidder -title: Komoona -description: Prebid Komoona Bidder Adaptor -pbjs: true -biddercode: komoona -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - - - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|--------------------------------|--------------------------------------|----------| -| `hbid` | required | header-bidding id from Komoona | `'1f5b2c10e66e419580bd943b9af692ab'` | `string` | -| `placementId` | required | placement id from Komoona | `'e69148e0ba6c4c07977dc2daae5e1577'` | `string` | diff --git a/dev-docs/bidders/lemma.md b/dev-docs/bidders/lemma.md deleted file mode 100644 index d2ff6c6778..0000000000 --- a/dev-docs/bidders/lemma.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: bidder -title: LEMMA -description: Prebid Lemma Bidder Adapter -pbjs: true -biddercode: lemma -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Integration Note: - -Lemma bidder adapter requires setup and approval from the Lemma team. Please reach out to your account manager for more information and to start using it. - -### Bid params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -| ------------------- | -------- | ------------------------------------- | ------------ | --------- | -| `pubId` | required | The publisher ID from Lemma | `1001` | `integer` | -| `adunitId` | required | Identifier for specific ad adunit | `1001` | `integer` | -| `bidFloor` | optional | The minimum bid value | `1.07` | `float` | diff --git a/dev-docs/bidders/loopme.md b/dev-docs/bidders/loopme.md deleted file mode 100644 index d235ce3df5..0000000000 --- a/dev-docs/bidders/loopme.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -layout: bidder -title: LoopMe -description: Prebid LoopMe Bidder Adaptor -pbjs: true -biddercode: loopme -gdpr_supported: true -media_types: banner, video -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|--------------------------|--------------|----------| -| `ak` | required | LoopMe Application Key | `'cc885e3acc'` | `string` | - -Test LoopMe application keys: banner - cc885e3acc, video - 223051e07f diff --git a/dev-docs/bidders/lunamedia.md b/dev-docs/bidders/lunamedia.md deleted file mode 100644 index f05d2e9bf8..0000000000 --- a/dev-docs/bidders/lunamedia.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -layout: bidder -title: Luna Media -description: Prebid Luna Media Bidder Adapter -pbjs: true -pbs: true -biddercode: lunamedia -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Note: -For more information about Luna Media, please contact info@lunamedia.io - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|------------------|----------|------------------|------------------------------------------|-------------------| -| `placement ` | required | | `'263'` | `string` | -| `pubid` | required | | `'0cf8d6d643e13d86a5b6374148a4afac'` | `string` | -| `mimes` | optional | video only | `['video/mp4', 'application/javascript']`| `array of strings`| -| `playbackmethod` | optional | video only | `[2,6]` | `array of numbers`| -| `maxduration` | optional | video only | `30` | `number` | -| `skip` | optional | video only | `0 or 1` | `number` | diff --git a/dev-docs/bidders/meazy.md b/dev-docs/bidders/meazy.md deleted file mode 100644 index 03a7dc505d..0000000000 --- a/dev-docs/bidders/meazy.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: bidder -title: Meazy -description: Prebid Meazy Bidder Adaptor -pbjs: true -biddercode: meazy -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid params - -### Note -To enable Meazy bid adaptor we kindly ask you to sign up as a Publisher: team@meazy.co - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|------|----------|---------------------|------------------------------------------|----------| -| pid | required | Meazy Publisher ID | `'6910b7344ae566a1'` | `string` | diff --git a/dev-docs/bidders/mobfox.md b/dev-docs/bidders/mobfox.md deleted file mode 100644 index 5dbcae3909..0000000000 --- a/dev-docs/bidders/mobfox.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: bidder -title: MobFox -description: Prebid MobFox Bidder Adaptor -pbjs: true -biddercode: mobfox -media_types: video -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------------|----------|------------------------------------------------------------------------|--------------------------------------|-----------| -| `s` | required | The hash of your inventory to identify which app is making the request | `'267d72ac3f77a3f447b32cf7ebf20673'` | `string` | -| `imp_instl` | optional | set to 1 if using interstitial otherwise delete or set to 0 | `1` | `integer` | diff --git a/dev-docs/bidders/mobsmart.md b/dev-docs/bidders/mobsmart.md deleted file mode 100644 index 5105ad3afe..0000000000 --- a/dev-docs/bidders/mobsmart.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: bidder -title: Mobsmart -description: Prebid Mobsmart SSP Bidder Adaptor -pbjs: true -biddercode: mobsmart -media_types: banner -userIds: pubCommonId -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Note: -The Mobsmart Bidding adapter requires setup and approval beforehand. -For more information, visit [Mobsmart website](https://kpis.jp/en/product_mobsmart). - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|--------------|----------|-----------------------------------------|----------|-----------| -| `floorPrice` | optional | Floor price | `10` | `Integer` | -| `currency` | optional | Currency of request and response | `'JPY'` | `string` | diff --git a/dev-docs/bidders/nafdigital.md b/dev-docs/bidders/nafdigital.md deleted file mode 100644 index e82b3e56db..0000000000 --- a/dev-docs/bidders/nafdigital.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -layout: bidder -title: NAF Digital -description: Prebid NAF Digital Bidder Adaptor -top_nav_section: dev_docs -nav_section: reference -pbjs: true -biddercode: nafdigital -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Note: - -The NAF Digital bidder adapter requires setup and approval from the NAF Digital team. Please reach out to your account manager for more information and to start using it. - -### Bid Params - -{: .table .table-bordered .table-striped } - -| Name | Scope | Description | Example | Type | -| ---- | ----- | ----------- | ------- | ---- | -| `publisherId` | required | The publisher ID from NAF Digital | `2141020` | `integer` | -| `bidFloor` | optional | The minimum bid value desired | `1.23` | `float` | diff --git a/dev-docs/bidders/nanointeractive.md b/dev-docs/bidders/nanointeractive.md deleted file mode 100644 index e6862a61d3..0000000000 --- a/dev-docs/bidders/nanointeractive.md +++ /dev/null @@ -1,138 +0,0 @@ ---- -layout: bidder -title: Nano Interactive -description: Prebid Nano Interactive Bidder Adapter -pbjs: true -pbs: true -biddercode: nanointeractive -media_types: banner -gdpr_supported: true -gvl_id: 72 -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Requirements: -To be able to get identification key (`pid`), please contact us at
-`https://www.nanointeractive.com/publishers`
- -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|----------------|----------|--------------------------------------------------|------------------------------|----------| -| `pid` | required | Identification key, provided by Nano Interactive | `'5afaa0280ae8996eb578de53'` | `string` | -| `category` | optional | Contextual taxonomy | `'automotive'` | `string` | -| `categoryName` | optional | Contextual taxonomy (from URL query param) | `'cat_name'` | `string` | -| `nq` | optional | User search query | `'automobile search query'` | `string` | -| `name` | optional | User search query (from URL query param) | `'search_param'` | `string` | -| `subId` | optional | Channel - used to separate traffic sources | `'123'` | `string` | - -#### Configuration -The `category` and `categoryName` are mutually exclusive. If you pass both, `categoryName` takes precedence. -
-The `nq` and `name` are mutually exclusive. If you pass both, `name` takes precedence. - -#### Example with only required field `pid` - var adUnits = [{ - code: 'nano-div', - sizes: [[300, 250], [300,600]], - bids: [{ - bidder: 'nanointeractive', - params: { - pid: '5afaa0280ae8996eb578de53' - } - }] - }]; - -#### Example with `category` - var adUnits = [{ - code: 'nano-div', - sizes: [[300, 250], [300,600]], - bids: [{ - bidder: 'nanointeractive', - params: { - pid: '5afaa0280ae8996eb578de53', - category: 'automotive', - subId: '123' - } - }] - }]; - -#### Example with `categoryName` - var adUnits = [{ - code: 'nano-div', - sizes: [[300, 250], [300,600]], - bids: [{ - bidder: 'nanointeractive', - params: { - pid: '5afaa0280ae8996eb578de53', - // Category "automotive" is in the URL like: - // https://www....?cat_name=automotive&... - categoryName: 'cat_name', - subId: '123' - } - }] - }]; - -#### Example with `nq` - var adUnits = [{ - code: 'nano-div', - sizes: [[300, 250], [300,600]], - bids: [{ - bidder: 'nanointeractive', - params: { - pid: '5afaa0280ae8996eb578de53', - // User searched "automobile search query" (extracted from search text field) - nq: 'automobile search query', - subId: '123' - } - }] - }]; - -#### Example with `name` - var adUnits = [{ - code: 'nano-div', - sizes: [[300, 250], [300,600]], - bids: [{ - bidder: 'nanointeractive', - params: { - pid: '5afaa0280ae8996eb578de53', - // User searched "automobile search query" and it is in the URL like: - // https://www....?search_param=automobile%20search%20query&... - name: 'search_param', - subId: '123' - } - }] - }]; - -#### Example with `category` and `nq` - var adUnits = [{ - code: 'nano-div', - sizes: [[300, 250], [300,600]], - bids: [{ - bidder: 'nanointeractive', - params: { - pid: '5afaa0280ae8996eb578de53', - category: 'automotive', - nq: 'automobile search query', - subId: '123' - } - }] - }]; - -#### Example with `categoryName` and `name` - var adUnits = [{ - code: 'nano-div', - sizes: [[300, 250], [300,600]], - bids: [{ - bidder: 'nanointeractive', - params: { - pid: '5afaa0280ae8996eb578de53', - categoryName: 'cat_name', - name: 'search_param', - subId: '123' - } - }] - }]; diff --git a/dev-docs/bidders/nasmediaAdmixer.md b/dev-docs/bidders/nasmediaAdmixer.md deleted file mode 100644 index 82302c282e..0000000000 --- a/dev-docs/bidders/nasmediaAdmixer.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: bidder -title: Nasmedia Admixer -description: Prebid Nasmedia Admixer Bidder Adapter -pbjs: true -biddercode: nasmediaAdmixer -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - - -### Note: - -The Nasmedia Admixer Bidder Adapter requires setup and approval from the Nasmedia Admixer team. -Please reach out to for more information. - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------------|----------|--------------------------------------------|--------------|----------| -| `media_key` | required | Publisher Key provided by Nasmedia Admixer | `'19038695'` | `string` | -| `adunit_id` | required | Adunit Id provided by Nasmedia Admixer | `'24190632'` | `string` | diff --git a/dev-docs/bidders/newborntownWeb.md b/dev-docs/bidders/newborntownWeb.md deleted file mode 100644 index 4a52a053e4..0000000000 --- a/dev-docs/bidders/newborntownWeb.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: bidder -title: newborntownWeb -description: Prebid newborntownWeb Bidder Adaptor -pbjs: true -biddercode: newborntownWeb -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|-------------|---------|----------| -| `publisher_id` | required | Publisher ID which is obtained from sfp.solomath.com | `'1238122'` | `string` | -| `slot_id` | required | Ad Slot ID which is obtained from sfp.solomath.com | `'123123'` | `string` | -| `bidfloor` | required | As a min CPM of this inventory sold | `0.2` | `float` | diff --git a/dev-docs/bidders/outcon.md b/dev-docs/bidders/outcon.md deleted file mode 100644 index 745acbfab4..0000000000 --- a/dev-docs/bidders/outcon.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: bidder -title: Outcon -description: Prebid Outcon Bidder Adaptor -pbjs: true -biddercode: outcon -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|--------------------------------------------|---------------------------|---------| -| `pod` | optional |require if not send internalId and publisher|"5beeb24a306ea47660632043" | `string`| -| `internalId` | optional |require if not send pod |"563643562" | `string`| -| `publisher` | optional |require if not send pod |"5beeb24a306ea47660632043" | `string`| -| `demo` | optional |require for testing |"true" | `boolean` | diff --git a/dev-docs/bidders/performax.md b/dev-docs/bidders/performax.md deleted file mode 100644 index adda61d5de..0000000000 --- a/dev-docs/bidders/performax.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -layout: bidder -title: Performax -description: Prebid Performax Bidder Adaptor -pbjs: true -biddercode: performax -media_types: banner -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Note: -Performax adapter requires setup and approval from the Performax team. Please reach out to your account team or info@performax.cz for more information. - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|--------------------|------------------------------|----------| -| `slotId` | required | Slot ID | `32572` | `Integer`| - -### Example - -```javascript - var adUnits = [ - { - code: 'performax-div', - sizes: [[300, 300]], - bids: [ - { - bidder: "performax", - params: { - slotId: 28 // required - } - } - ] - } - ]; -``` diff --git a/dev-docs/bidders/piximedia.md b/dev-docs/bidders/piximedia.md deleted file mode 100644 index 0c6c1a67e5..0000000000 --- a/dev-docs/bidders/piximedia.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: bidder -title: Piximedia -description: Piximedia Bidder Adaptor -pbjs: true -gdpr_supported: true -usp_supported: true -coppa_supported: true -schain_supported: true -biddercode: piximedia -media_types: banner -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|--------------------|---------------|----------| -| `siteId` | required | the site ID | `'SITE'` | `string` | -| `placementId` | required | the placement ID | `'PLACEMENT'` | `string` | diff --git a/dev-docs/bidders/platformio.md b/dev-docs/bidders/platformio.md deleted file mode 100644 index 69308fc33a..0000000000 --- a/dev-docs/bidders/platformio.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -layout: bidder -title: Platform.io -description: Prebid Platform.io Bidder Adapter -pbjs: true -biddercode: platformio -media_types: native, video -gdpr_supported: true -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Disclosure - -This bidder sets `adId` on the bid response and hasn't responded to the Prebid.js team to confirm uniqueness -of this value. See [Issue 6381](https://github.com/prebid/Prebid.js/issues/6381). - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|----------------------------------|----------------|----------| -| `pubId` | required | The publisher account ID | `'28082'` | `string` | -| `siteId` | required | The publisher site ID | `'26047'` | `string` | -| `placementId` | required | Identifies specific ad placement | `'17394'` | `string` | -| `bidFloor` | optional | The bid floor | `'0.001'` | `string` | -| `ifa` | optional | IFA ID | `'XXX-XXX'` | `string` | -| `latitude` | optional | Latitude | `'40.712775'` | `string` | -| `longitude` | optional | Longitude | `'-74.005973'` | `string` | - -### test params - -``` - var adUnits = [{ - code: 'dfp-native-div', - mediaTypes: { - native: { - title: { - required: true, - len: 75 - }, - image: { - required: true - }, - body: { - len: 200 - }, - icon: { - required: false - } - } - }, - bids: [{ - bidder: 'platformio', - params: { - pubId: '29521', - siteId: '26048', - placementId: '123', - bidFloor: '0.001', // optional - ifa: 'XXX-XXX', // optional - latitude: '40.712775', // optional - longitude: '-74.005973', // optional - } - }] - }, - { - code: 'dfp-banner-div', - mediaTypes: { - banner: { - sizes: [ - [300, 250],[300,600] - ], - } - }, - bids: [{ - bidder: 'platformio', - params: { - pubId: '29521', - siteId: '26049', - placementId: '123', - } - }] - }, - { - code: 'dfp-video-div', - mediaTypes: { - video: { - playerSize: [[640, 480]], - context: "instream" - } - }, - bids: [{ - bidder: 'platformio', - params: { - pubId: '29521', - siteId: '26049', - placementId: '123', - video: { - skippable: true, - } - } - }] - } - ]; -``` diff --git a/dev-docs/bidders/projectLimelight.md b/dev-docs/bidders/projectLimelight.md deleted file mode 100644 index 7a243221a5..0000000000 --- a/dev-docs/bidders/projectLimelight.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -layout: bidder -title: Project Limelight -description: Prebid Project Limelight Bidder Adaptor -pbjs: true -biddercode: project-limelight -aliasCode: projectLimeLight -media_types: video -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example |type| -| :----------- | :--------- | :------------ | :----------------- |:---| -| `host` | required | Ad network's RTB host | `'exchange.ortb.net'` | `string` | -| `adUnitId` | required | Ad Unit Id will be generated on Limelight Digital Platform. | 0 |integer| -| `adUnitType` | required | Type of Ad Unit (`'video'`, `'banner'`) | `'banner'` |string| diff --git a/dev-docs/bidders/reklamstore.md b/dev-docs/bidders/reklamstore.md deleted file mode 100644 index 2ae7aceeda..0000000000 --- a/dev-docs/bidders/reklamstore.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: bidder -title: ReklamStore -description: Prebid ReklamStore Bidder Adaptor -biddercode: reklamstore -pbjs: true -gdpr_supported: true -media_types: banner -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|------------|----------|----------------------------------------|---------------|----------| -| `regionId` | required | The placement id provided by ReklamStore | `1234567` | `integer` | diff --git a/dev-docs/bidders/reload.md b/dev-docs/bidders/reload.md deleted file mode 100644 index a9d287e471..0000000000 --- a/dev-docs/bidders/reload.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -layout: bidder -title: Reload -description: Reload Prebid Adaptor -pbjs: true -biddercode: reload -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -| ------------- | -------- | ----------------------------------------------- | ---------------------------------- |----------| -| `plcmID` | required | Placement ID (provided by Reload) | "4234897234" | `string` | -| `partID` | required | Partition ID (provided by Reload) | "part_01" | `string` | -| `opdomID` | required | Internal parameter (provided by Reload) | 0 | `int` | -| `bsrvID` | required | Internal parameter (provided by Reload) | 12 | `int` | -| `type` | optional | Internal parameter (provided by Reload) | "pcm" | `string` | - - -## Example - -```javascript -var adUnits = [ - // Banner adUnit - { - code: 'banner-div', - mediaTypes: { - banner: { - sizes: [ - [300, 250] - ], - } - }, - bids: [{ - bidder: 'reload', - params: { - plcmID: '4234897234', - partID: 'part_2', - opdomID: 0, - bsrvID: 0, - type: 'pcm' - } - }] - }]; -``` diff --git a/dev-docs/bidders/resultsmedia.md b/dev-docs/bidders/resultsmedia.md deleted file mode 100644 index 2e4258e013..0000000000 --- a/dev-docs/bidders/resultsmedia.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: bidder -title: ResultsMedia -description: Prebid ResultsMedia Bidder Adaptor -pbjs: true -biddercode: resultsmedia -media_types: video, banner -gdpr_supported: true -schain_supported: true -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|-------------|---------|----------| -| zoneId | required | The zone ID from ResultsMedia. | 12345 | integer | diff --git a/dev-docs/bidders/rtbdemand.md b/dev-docs/bidders/rtbdemand.md deleted file mode 100644 index a8812495fa..0000000000 --- a/dev-docs/bidders/rtbdemand.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -layout: bidder -title: Rtbdemand bidder -description: Prebid Rtbdemand Media Bidder Adapter -top_nav_section: dev_docs -nav_section: reference -pbjs: true -biddercode: rtbdemand -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|----------|----------|-------------------------------------|---------------------------|----------| -| `zoneid` | required | The ad zone or tag specific ID | `'9999'` | `string` | -| `floor` | optional | The floor CPM price for the request | `0.1234` | `float` | -| `server` | optional | Bidder domain | `'bidding.rtbdemand.com'` | `string` | diff --git a/dev-docs/bidders/rtbsolutions.md b/dev-docs/bidders/rtbsolutions.md deleted file mode 100644 index f80efbcfe7..0000000000 --- a/dev-docs/bidders/rtbsolutions.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: bidder -title: RTB Solutions -description: Prebid RTB Solutions Bidder Adaptor -pbjs: true -biddercode: rtbsolutions -media_types: banner -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|--------|----------|-------------|---------|----------| -| `blockId` | required | Block ID assigned in settings | | `string` | -| `s1` | optional | Sub 1 | | `string` | -| `s2` | optional | Sub 2 | | `string` | -| `s3` | optional | Sub 3 | | `string` | -| `s4` | optional | Sub 4 | | `string` | - diff --git a/dev-docs/bidders/segmento.md b/dev-docs/bidders/segmento.md deleted file mode 100644 index dcc7cc1555..0000000000 --- a/dev-docs/bidders/segmento.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: bidder -title: Segmento -description: Prebid Segmento Bidder Adaptor -pbjs: true -biddercode: segmento -media_types: banner -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|-------------------------------------------------|---------|----------| -| `placementId` | required | Placement id will be generated by Segmento DSP. | `548` | `number` | diff --git a/dev-docs/bidders/sekindoUM.md b/dev-docs/bidders/sekindoUM.md deleted file mode 100644 index dcc9638a5e..0000000000 --- a/dev-docs/bidders/sekindoUM.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: bidder -title: SekindoUM -description: Prebid SekindoUM Bidder Adaptor -pbjs: true -biddercode: sekindoUM -media_types: video -gdpr_supported: true -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-----------|----------|-------------|---------|----------| -| `spaceId` | required | | | `string` | diff --git a/dev-docs/bidders/smartrtb.md b/dev-docs/bidders/smartrtb.md deleted file mode 100644 index e901431698..0000000000 --- a/dev-docs/bidders/smartrtb.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -layout: bidder -title: SmartRTB -description: SmartRTB / smrtb.com Bidder Module -biddercode: smartrtb -gdpr_supported: true -media_types: banner, video -userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId -pbjs: true -pbs: true -pbs_app_supported: true -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Registration - -Please contact us to create a new Smart RTB Marketplace account, and for any assistance in configuration. -You may email info@smrtb.com for inquiries. - -### Prebid.js Bid Params - -{: .table .table-bordered .table-striped } - -| Name | Scope | Description | Example | Type | -|----------|----------|-------------|------------------------------------|----------| -| `zoneId` | required | | `z_261b6c7e7d4d4985393b293cc903d1` | `string` | -| `forceBid` | optional | Returns test bid | true | `boolean` | - -### Prebid Server Bid Params - -{: .table .table-bordered .table-striped } - -| Name | Scope | Description | Example | Type | -|----------|----------|-------------|------------------------------------|----------| -| `pub_id` | required | Publisher ID assigned to you. | `'siteA'` | `string` | -| `zone_id` | optional | Enables mapping for further settings and reporting in the Marketplace UI. | `'z_261b6c7e7d4d4985393b293cc903d1'` | `string` | -| `force_bid` | optional | If zone ID is mapped, this may be set to always return fake sample bids (banner, video) | true | `boolean` | - -### Test Prebid Server Request - -This sample request is our global test placement and should always return a branded banner bid. - -``` - { - "id": "abc", - "site": { - "page": "prebid.org" - }, - "imp": [{ - "id": "test", - "banner": { - "format": [{ - "w": 300, - "h": 250 - }] - }, - "ext": { - "smartrtb": { - "pub_id": "test", - "zone_id": "N4zTDq3PPEHBIODv7cXK", - "force_bid": true - } - } - }] - } -``` diff --git a/dev-docs/bidders/smms.md b/dev-docs/bidders/smms.md deleted file mode 100644 index b69b9a037b..0000000000 --- a/dev-docs/bidders/smms.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: bidder -title: SMMS -description: Prebid SMMS Bidder Adaptor -pbjs: true -biddercode: smms -media_types: banner, native -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|-------------|---------|----------| -| `placementId` | required | This is placement Id | `1440837` | `integer` | -| `currency` | optional | 3-letter ISO 4217 code defining the currency of the bid (currently support USD and JPY), default is JPY | `'USD'` | `string` | diff --git a/dev-docs/bidders/somo.md b/dev-docs/bidders/somo.md deleted file mode 100644 index 11b8ef3305..0000000000 --- a/dev-docs/bidders/somo.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: bidder -title: Somo Audience -description: Somo Audience Bidder Adapter -pbjs: true -biddercode: somo -prevBiddercode: somoAudience -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Disclosure - -This bidder sets `adId` on the bid response and hasn't responded to the Prebid.js team to confirm uniqueness -of this value. See [Issue 6381](https://github.com/prebid/Prebid.js/issues/6381). - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|----------------------------------------|--------------------------------------|----------| -| `placementId` | required | Placement ID provided by Somo Audience | `'22a58cfb0c9b656bff713d1236e930e8'` | `string` | diff --git a/dev-docs/bidders/stv.md b/dev-docs/bidders/stv.md deleted file mode 100644 index 8d9fba29ad..0000000000 --- a/dev-docs/bidders/stv.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: bidder -title: Stv -description: Prebid Stv Bidder Adaptor -pbjs: true -biddercode: stv -media_types: banner,video -gdpr_supported: false -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - - -### Bid Params - -{: .table .table-bordered .table-striped } - -| Name | Scope | Description | Example | Type | -|---------------|----------|----------------------------------------------------------------------------|------------------------|-----------------| -| `placement` | required | Placement ID from stv. | `'prer0-0%3D4137'` | `string` | -| `pfilter` | optional | Selection filter. | {`min_duration:1`} | `object` | -| `noskip` | optional | No skip flag: 0 - false, 1 - true | `1` | `integer` | diff --git a/dev-docs/bidders/taphype.md b/dev-docs/bidders/taphype.md deleted file mode 100644 index 7c922fe479..0000000000 --- a/dev-docs/bidders/taphype.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: bidder -title: TapHype -description: Prebid TapHype Bidder Adaptor -pbjs: true -biddercode: taphype -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Note: -The TapHype adaptor requires setup and approval from your TapHype account manager. Please reach out to your account manager to enable Prebid.js for your account. - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|------------------------------------|---------|-----------| -| `placementId` | required | The placement ID from TapHype. | `12345` | `integer` | diff --git a/dev-docs/bidders/tim.md b/dev-docs/bidders/tim.md deleted file mode 100644 index 7f758e0a57..0000000000 --- a/dev-docs/bidders/tim.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: bidder -title: Tim Media -description: Prebid Tim Bidder Adaptor -pbjs: true -biddercode: tim -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|-------------|----------|----------| -|`placementCode`| required | |'testcode'| `string` | -| `publisherid` | required | |'testid' | `string` | -| `bidfloor` | optional | | 1 | `number` | diff --git a/dev-docs/bidders/topRTB.md b/dev-docs/bidders/topRTB.md deleted file mode 100644 index 83bf6def2a..0000000000 --- a/dev-docs/bidders/topRTB.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: bidder -title: TOPRTB -description: Prebid topRTB Bidder Adapter -pbjs: true -biddercode: topRTB -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-----------------|----------|----------------------------------------------------------------------------------------|-----------------------------|-----------| -| `adUnitId` | required | adUnit id associated with topRTB | `'3ec5a94f00cf4cc2858bc21533542827'` | `string` | diff --git a/dev-docs/bidders/trendqube.md b/dev-docs/bidders/trendqube.md deleted file mode 100644 index 50a695a19c..0000000000 --- a/dev-docs/bidders/trendqube.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: bidder -title: Trendqube -description: Prebid Trendqube Bidder Adapter -pbjs: true -biddercode: trendqube -gdpr_supported: true -media_types: banner, video -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Note: - -The Trendqube Bidding adapter requires setup before beginning. Please contact us at wls_team@smartyads.com - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|-----------------------|-----------|-----------| -| `placementId` | required | Adprime placement id | `'1234asdf'` | `'string'` | diff --git a/dev-docs/bidders/uol.md b/dev-docs/bidders/uol.md deleted file mode 100644 index 0a92404907..0000000000 --- a/dev-docs/bidders/uol.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -layout: bidder -title: UOL -description: Prebid UOL Bidder Adaptor -pbjs: true -biddercode: uol -gdpr_supported: false -media_types: banner -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - - -### Note: -The UOL Project adapter requires setup and approval from the UOL Project team, even for existing UOL Project publishers. Please reach out to your account team or l-prebid@uolinc.com for more information. - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | -|-----------------+----------+------------------------------------------------------------------+------------------------| -| `placementId` | required | UOL placement ID | '123124', 123154 | -| `test` | optional | Activate AdServer test endpoint | true, false | -| `cpmFactor` | optional | Positive Integer value that will be used by the AdServer as a cpm multiplier. If passed, also requires 'test' flag to be set to 'true' | 1, 2, 5 | - -## Note: -Currently, the UOL bidAdapter is under initial tests. Please follow this page for updates regarding required parameters and new features. diff --git a/dev-docs/bidders/vi.md b/dev-docs/bidders/vi.md deleted file mode 100644 index 631d0bdfe2..0000000000 --- a/dev-docs/bidders/vi.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -layout: bidder -title: vi -description: vi bid adapter -pbjs: true -biddercode: vi -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### bid params -{: .table .table-bordered .table-striped } - -| Name | Scope | Description | Example | -| :------------ | :------- | :---------------------------------------------- | :--------------------------------- | -| `pubId` | required | Publisher ID, provided by vi | 'sb_test' | -| `lang` | required | Ad language, in ISO 639-1 language code format | 'en-US', 'es-ES', 'de' | -| `cat` | required | Ad IAB category (top-level or subcategory), single one supported | 'IAB1', 'IAB9-1' | -| `bidFloor` | optional | Lowest value of expected bid price | 0.001 | -| `useSizes` | optional | Specifies from which section of the config sizes are taken, possible values are 'banner', 'video'. If omitted, sizes from both sections are merged. | 'banner' | diff --git a/dev-docs/bidders/videofy.md b/dev-docs/bidders/videofy.md deleted file mode 100644 index 230c211ba6..0000000000 --- a/dev-docs/bidders/videofy.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: bidder -title: Videofy -description: Prebid Videofy Bidder Adaptor -pbjs: true -biddercode: videofy -media_types: video -gdpr_supported: true -usp_supported: true -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Note: -For more information about [Videofy](https://videofy.ai/), please contact support1@videofy.ai - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|------------------|----------|------------------|------------------------------|----------| -| `AV_PUBLISHERID` | required | Publisher/Netid | `'55b88d4a181f465b3e8b4567'` | `string` | -| `AV_CHANNELID` | required | Channel id | `'5a5f17a728a06102d14c2718'` | `string` | diff --git a/dev-docs/bidders/vmg.md b/dev-docs/bidders/vmg.md deleted file mode 100644 index 4060ad7c90..0000000000 --- a/dev-docs/bidders/vmg.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: bidder -title: VMG -description: Connects Google Ad Manager to the VMG Predict engine. -pbjs: true -biddercode: vmg -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|------------|----------|------------------------|---------|----------| -| (none) | optional | no params required | `''` | n/a | diff --git a/dev-docs/bidders/vuble.md b/dev-docs/bidders/vuble.md deleted file mode 100644 index c525f0b7a9..0000000000 --- a/dev-docs/bidders/vuble.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -layout: bidder -title: Vuble -description: Prebid Vuble Bidder Adaptor -pbjs: true -biddercode: vuble -media_types: video -gdpr_supported: true -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Note: -The Vuble adapter requires setup and approval from the Vuble team, even for existing Vuble publishers. Please reach out to your account team, or contact publishers-us@vuble.tv or publishers-fr@vuble.tv for more information. - -### Bid params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|--------------|----------|---------------------------------------------------------------------------------------------------|--------------------------|-----------| -| `env` | required | The environment. Must be 'net' or 'com'. This information will be given to you by the Vuble team. | `'net'` | `string` | -| `pubId` | required | Your publisher ID. This information will be given to you by the Vuble team. | `3` | `integer` | -| `zoneId` | required | A zone ID for the SSP. | `12345` | `integer` | -| `referrer` | optional | The page's referrer. Not mandatory but recommended. | `'http://www.vuble.tv/'` | `string` | -| `floorPrice` | optional | The desired floor price. If none is given, the floor price will depend on the zone ID. | `5.00` | `float` | - -### Example - -``` -var adUnits = [ - { - code: 'test-vuble-instream', - sizes: [[640, 360]], - mediaTypes: { - video: { - context: 'instream' - } - }, - bids: [ - { - bidder: 'vuble', - params: { - env: 'net', - pubId: 18, - zoneId: '12345', - referrer: "http://www.vuble.tv/", - floorPrice: 5.00 - } - } - ] - } -] -``` - -{: .alert.alert-info :} -Sizes set in the `adUnit` object will also apply to the Vuble bid requests. diff --git a/dev-docs/bidders/welect.md b/dev-docs/bidders/welect.md deleted file mode 100644 index 8bfbba063c..0000000000 --- a/dev-docs/bidders/welect.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -layout: bidder -title: Welect -description: Prebid Welect Bidder Adapter -biddercode: welect -media_types: no-display, video -gvlid: 282 -pbjs: true -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Note: -The Welect adapter requires setup and approval from the Welect team, even for partners that already work with us. Please reach out to our team at olaf.peters@welect.de. - -### Bid params - -| Name | Scope | Description | Example | Type | -|--------------|----------|---------------------------------------------------------------------------------------------------|--------------------------|-----------| -| `placementId` | required | Your personal id which will be given to you by the Welect team. | `'aliasexample'` | `string` | -| `domain` | optional | Not mandatory but recommended. Our Team will provide you with a domain, if not given defaults to www.welect.de | `'www.welect.de'` | `string` | - -### Example - -``` -var adUnits = [ - { - code: 'test-welect-instream', - sizes: [[640, 360]], - mediaTypes: { - video: { - context: 'instream' - } - }, - bids: [ - { - bidder: 'welect', - params: { - placementId: 'examplePlacement', - domain: 'www.welect.de', - } - } - ] - } -] -``` diff --git a/dev-docs/bidders/windtalker.md b/dev-docs/bidders/windtalker.md deleted file mode 100644 index 526f24b367..0000000000 --- a/dev-docs/bidders/windtalker.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -layout: bidder -title: Windtalker -description: Prebid Windtalker Bidder Adapter -pbjs: true -biddercode: windtalker -media_types: native, video -gdpr_supported: true -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Disclosure - -This bidder sets `adId` on the bid response and hasn't responded to the Prebid.js team to confirm uniqueness -of this value. See [Issue 6381](https://github.com/prebid/Prebid.js/issues/6381). - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|----------------------------------|----------------|----------| -| `pubId` | required | The publisher account ID | `'28082'` | `string` | -| `siteId` | required | The publisher site ID | `'26047'` | `string` | -| `size` | required | Ad size identifier | `'300X250'` | `string` | -| `placementId` | required | Identifies specific ad placement | `'17394'` | `string` | -| `bidFloor` | optional | The bid floor | `'0.001'` | `string` | -| `ifa` | optional | IFA ID | `'XXX-XXX'` | `string` | -| `latitude` | optional | Latitude | `'40.712775'` | `string` | -| `longitude` | optional | Longitude | `'-74.005973'` | `string` | - -### test params - -``` - var adUnits = [{ - code: 'dfp-native-div', - mediaType: 'native', - mediaTypes: { - native: { - title: { - required: true, - len: 75 - }, - image: { - required: true - }, - body: { - len: 200 - }, - icon: { - required: false - } - } - }, - bids: [{ - bidder: 'windtalker', - params: { - pubId: '29521', - siteId: '26048', - placementId: '123', - } - }] - }, - { - code: 'dfp-banner-div', - mediaTypes: { - banner: { - sizes: [ - [300, 250] - ], - } - }, - bids: [{ - bidder: 'windtalker', - params: { - pubId: '29521', - siteId: '26049', - size: '300X250', - placementId: '123', - } - }] - }, - { - code: 'dfp-video-div', - sizes: [640, 480], - mediaTypes: { - video: { - context: "instream" - } - }, - bids: [{ - bidder: 'windtalker', - params: { - pubId: '29521', - siteId: '26049', - size: '640X480', - placementId: '123', - video: { - skippable: true, - } - } - }] - } - ]; -``` diff --git a/dev-docs/bidders/xhb.md b/dev-docs/bidders/xhb.md deleted file mode 100644 index 656d6bf072..0000000000 --- a/dev-docs/bidders/xhb.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: bidder -title: Xaxis -description: Prebid Xaxis Bidder Adaptor -biddercode: xhb -pbjs: true -media_types: video, native -gdpr_supported: true -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|-------------|---------|----------| -| `placementId` | required | | | `string` | diff --git a/dev-docs/bidders/zedo.md b/dev-docs/bidders/zedo.md deleted file mode 100644 index 46effc1ecd..0000000000 --- a/dev-docs/bidders/zedo.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: bidder -title: ZEDO -description: Prebid ZEDO Bidder Adapter -pbjs: true -biddercode: zedo -enable_download: false -pbjs_version_notes: not ported to 5.x -sidebarType: 1 ---- - - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-----------------|----------|----------------------------------------------------------------------------------------|-----------------------------|-----------| -| `channelCode` | required | Publisher code associated with ZEDO | `2264004118` | `integer` | -| `dimId` | required | ZEDO dimension Id associated with the adunit | `9` | `integer` | -| `pubId` | optional | ZEDO Publisher Id associated with the adunit | `0` | `integer` | From ffb1dcbc2022ea3f0cfe37b602b5932891577d73 Mon Sep 17 00:00:00 2001 From: Olivier Date: Sun, 15 Jan 2023 05:38:54 +0100 Subject: [PATCH 034/763] Adagio: update params description table (#4250) --- dev-docs/bidders/adagio.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/dev-docs/bidders/adagio.md b/dev-docs/bidders/adagio.md index 9db93d23e2..d3a19b3ef5 100644 --- a/dev-docs/bidders/adagio.md +++ b/dev-docs/bidders/adagio.md @@ -47,9 +47,7 @@ pbjs.bidderSettings = { | `placement`* | required | Refers to the placement of an adunit in a page.
Must not contain any information about the type of device.
- max length: 30
- max distinctives values: 10 | `'ban_atf'` | `string` | | `adUnitElementId` | required | Refers to the adunit html attribute id in a page. | `'gpt-ban-atf'` | `string` | | `pagetype`* | highly recommended | Describes what kind of content will be present in the page.
- max length: 30
- max distinctives values: 50 | `'article'` | `string` | -| `environment`* | recommended | Environment where the page is displayed.
- max length: 30
- max distinctives values: 10 | `'desktop'` | `string` | | `category`* | recommended | Category of the content displayed in the page.
- max length: 30
- max distinctives values: 50 | `'sport'` | `string` | -| `subcategory`* | optional | Subcategory of the content displayed in the page.
- max length: 30
- max distinctives values: 50 | `'handball'` | `string` | | `video` | optional | OpenRTB 2.5 video options object.
All options will override ones defined in mediaTypes.video | `{skip: 1, playbackmethod: [6]}` | `object` | | `native` | optional | Partial OpenRTB Native 1.2 request object. Supported fields are:
- context
-plcmttype | `{context: 1, plcmttype: 2}` | `object` | @@ -66,8 +64,6 @@ pbjs.bidderSettings = { Adagio will use FPD data as fallback for the params below: - pagetype -- environment - category -- subcategory If the FPD value is an array, the 1st value of this array will be used. From d912363dcf9a5297a458b169a792cb6f3227a97a Mon Sep 17 00:00:00 2001 From: Krzysztof Desput Date: Sun, 15 Jan 2023 05:54:41 +0100 Subject: [PATCH 035/763] Add docs for Holid bid adapter (#4232) * Add docs for Holid bid adapter * Fix bid params table style * Update holid.md Added to the header to ensure it works correctly with the recent navigation updates. Co-authored-by: Jean Stemp <38964447+jeanstemp@users.noreply.github.com> --- dev-docs/bidders/holid.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 dev-docs/bidders/holid.md diff --git a/dev-docs/bidders/holid.md b/dev-docs/bidders/holid.md new file mode 100644 index 0000000000..44a69d13fb --- /dev/null +++ b/dev-docs/bidders/holid.md @@ -0,0 +1,37 @@ +--- +layout: bidder +title: Holid +description: Prebid Holid Bidder Adapter +biddercode: holid +pbjs: true +media_types: banner +gdpr_supported: true +usp_supported: true +prebid_member: false +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +| ---------- | -------- | ---------------------------- | --------- | -------- | +| `adUnitID` | required | Ad Unit ID provided by Holid | `'12345'` | `string` | + + +### Configuration + +To increase the match rate and monetization, Holid recommends turning on iframe-based user sync. + +```javascript +pbjs.setConfig({ + userSync: { + filterSettings: { + iframe: { + bidders: '*', // '*' means all bidders + filter: 'include' + } + } + } +}); +``` From d82148e78eb54c28bf9092271aa49a60e66f5367 Mon Sep 17 00:00:00 2001 From: Jason Quaccia Date: Sat, 14 Jan 2023 20:57:31 -0800 Subject: [PATCH 036/763] Updated setConfig doc page to include details about optional category targeting (#4192) * updated docs to include optional category targeting * updated docs --- dev-docs/publisher-api-reference/setConfig.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dev-docs/publisher-api-reference/setConfig.md b/dev-docs/publisher-api-reference/setConfig.md index 953df031d0..3fed130886 100644 --- a/dev-docs/publisher-api-reference/setConfig.md +++ b/dev-docs/publisher-api-reference/setConfig.md @@ -752,6 +752,8 @@ The targeting key names and the associated prefix value filtered by `allowTarget | CACHE_ID | `hb_cache_id` | yes | Network cache ID for AMP or Mobile | | CACHE_HOST | `hb_cache_host` | yes | | | ADOMAIN | `hb_adomain` | no | Set to bid.meta.advertiserDomains[0]. Use cases: report on VAST errors, set floors on certain buyers, monitor volume from a buyer, track down bad creatives. | +| ACAT | `hb_acat` | no | Set to bid.meta.primaryCatId. Optional category targeting key that can be sent to ad servers that stores the value of the Primary IAB category ID if present. Use cases: category exclusion with an ad server order or programmatic direct deal on another ad slot (good for contextual targeting and/or brand +safety/suitability). | | title | `hb_native_title` | yes | | | body | `hb_native_body` | yes | | | body2 | `hb_native_body2` | yes | | From a06cd987341aba12e9afda2714a536a9cb45d865 Mon Sep 17 00:00:00 2001 From: Demetrio Girardi Date: Tue, 17 Jan 2023 13:25:19 -0700 Subject: [PATCH 037/763] Fix download page module name for userID modules (#4283) * Fix download page module name for userID modules * Use full module name in userId pages --- dev-docs/modules/userid-submodules/33across.md | 4 +--- dev-docs/modules/userid-submodules/admixer.md | 3 +-- dev-docs/modules/userid-submodules/adquery.md | 3 +-- dev-docs/modules/userid-submodules/adtelligent.md | 3 +-- dev-docs/modules/userid-submodules/amxrtb.md | 2 +- dev-docs/modules/userid-submodules/audienceone.md | 3 +-- dev-docs/modules/userid-submodules/britepool.md | 3 +-- dev-docs/modules/userid-submodules/cpexid.md | 3 +-- dev-docs/modules/userid-submodules/criteo.md | 3 +-- dev-docs/modules/userid-submodules/deepintent.md | 3 +-- dev-docs/modules/userid-submodules/dmd.md | 3 +-- dev-docs/modules/userid-submodules/fabrick.md | 3 +-- dev-docs/modules/userid-submodules/floc.md | 4 +--- dev-docs/modules/userid-submodules/ftrack.md | 3 +-- dev-docs/modules/userid-submodules/gravito.md | 3 +-- dev-docs/modules/userid-submodules/growthcode.md | 3 +-- dev-docs/modules/userid-submodules/hadron.md | 3 +-- dev-docs/modules/userid-submodules/id5.md | 3 +-- dev-docs/modules/userid-submodules/idplus.md | 4 +--- dev-docs/modules/userid-submodules/idx.md | 3 +-- dev-docs/modules/userid-submodules/imuid.md | 3 +-- dev-docs/modules/userid-submodules/intentiq.md | 3 +-- dev-docs/modules/userid-submodules/just.md | 3 +-- dev-docs/modules/userid-submodules/kinesso.md | 3 +-- dev-docs/modules/userid-submodules/liveintent.md | 3 +-- dev-docs/modules/userid-submodules/lotame.md | 3 +-- dev-docs/modules/userid-submodules/mediawallah.md | 3 +-- dev-docs/modules/userid-submodules/merkle.md | 3 +-- dev-docs/modules/userid-submodules/navegg.md | 3 +-- dev-docs/modules/userid-submodules/netid.md | 3 +-- dev-docs/modules/userid-submodules/novatiq.md | 4 +--- dev-docs/modules/userid-submodules/onekey.md | 3 +-- dev-docs/modules/userid-submodules/parrable.md | 3 +-- dev-docs/modules/userid-submodules/publisherlink.md | 3 +-- dev-docs/modules/userid-submodules/pubprovided.md | 3 +-- dev-docs/modules/userid-submodules/quantcast.md | 5 +---- dev-docs/modules/userid-submodules/ramp.md | 3 +-- dev-docs/modules/userid-submodules/sharedid.md | 3 +-- dev-docs/modules/userid-submodules/tapad.md | 3 +-- dev-docs/modules/userid-submodules/teads.md | 4 +--- dev-docs/modules/userid-submodules/trustpid.md | 3 +-- dev-docs/modules/userid-submodules/unified.md | 3 +-- dev-docs/modules/userid-submodules/unified2.md | 3 +-- dev-docs/modules/userid-submodules/yahoo.md | 3 +-- download.md | 2 +- 45 files changed, 45 insertions(+), 95 deletions(-) diff --git a/dev-docs/modules/userid-submodules/33across.md b/dev-docs/modules/userid-submodules/33across.md index 34af5d641f..5eb89be1e4 100644 --- a/dev-docs/modules/userid-submodules/33across.md +++ b/dev-docs/modules/userid-submodules/33across.md @@ -2,7 +2,7 @@ layout: userid title: 33Across ID description: 33Across ID User ID sub-module -useridmodule: 33acrossId +useridmodule: 33acrossIdSystem --- @@ -49,5 +49,3 @@ pbjs.setConfig({ } }); ``` - - diff --git a/dev-docs/modules/userid-submodules/admixer.md b/dev-docs/modules/userid-submodules/admixer.md index edf22e1ded..14147fa3da 100644 --- a/dev-docs/modules/userid-submodules/admixer.md +++ b/dev-docs/modules/userid-submodules/admixer.md @@ -2,7 +2,7 @@ layout: userid title: AdmixerID description: AdmixerID User ID sub-module -useridmodule: admixerId +useridmodule: admixerIdSystem --- @@ -50,4 +50,3 @@ gulp build --modules=admixerIdSystem } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/adquery.md b/dev-docs/modules/userid-submodules/adquery.md index a356537d0c..df509d54ea 100644 --- a/dev-docs/modules/userid-submodules/adquery.md +++ b/dev-docs/modules/userid-submodules/adquery.md @@ -2,7 +2,7 @@ layout: userid title: adQuery QiD description: adQuery QiD User ID sub-module -useridmodule: qid +useridmodule: adqueryIdSystem --- @@ -40,4 +40,3 @@ This will add a `userId.qid` property to all bidRequests. This will be read by t qid: 'p9v2dpnuckkzhuc92i' } ``` - diff --git a/dev-docs/modules/userid-submodules/adtelligent.md b/dev-docs/modules/userid-submodules/adtelligent.md index 6da8de9666..6e47d5ee2a 100644 --- a/dev-docs/modules/userid-submodules/adtelligent.md +++ b/dev-docs/modules/userid-submodules/adtelligent.md @@ -2,7 +2,7 @@ layout: userid title: Adtelligent description: Adtelligent User ID sub-module -useridmodule: adtelligent +useridmodule: adtelligentIdSystem --- @@ -46,4 +46,3 @@ Example with a short storage for ~10 minutes and refresh in 5 minutes: } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/amxrtb.md b/dev-docs/modules/userid-submodules/amxrtb.md index 912e09ea6a..87ff9cf460 100644 --- a/dev-docs/modules/userid-submodules/amxrtb.md +++ b/dev-docs/modules/userid-submodules/amxrtb.md @@ -2,7 +2,7 @@ layout: userid title: AMX RTB ID description: AMX RTB ID User ID sub-module -useridmodule: amxId +useridmodule: amxIdSystem --- diff --git a/dev-docs/modules/userid-submodules/audienceone.md b/dev-docs/modules/userid-submodules/audienceone.md index 1d98312c3d..39cbf7b21b 100644 --- a/dev-docs/modules/userid-submodules/audienceone.md +++ b/dev-docs/modules/userid-submodules/audienceone.md @@ -2,7 +2,7 @@ layout: userid title: AudienceOne ID by DAC description: AudienceOne ID by DAC User ID sub-module -useridmodule: dacId +useridmodule: dacIdSystem --- @@ -37,4 +37,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/britepool.md b/dev-docs/modules/userid-submodules/britepool.md index afab3e943e..1a0718b239 100644 --- a/dev-docs/modules/userid-submodules/britepool.md +++ b/dev-docs/modules/userid-submodules/britepool.md @@ -2,7 +2,7 @@ layout: userid title: BritePool description: BritePool User ID sub-module -useridmodule: britepoolId +useridmodule: britepoolIdSystem --- @@ -56,4 +56,3 @@ The BritePool privacy policy is at [https://britepool.com/services-privacy-notic } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/cpexid.md b/dev-docs/modules/userid-submodules/cpexid.md index 16c1d4f481..de5da58642 100644 --- a/dev-docs/modules/userid-submodules/cpexid.md +++ b/dev-docs/modules/userid-submodules/cpexid.md @@ -2,7 +2,7 @@ layout: userid title: Czech Publisher Exchange ID (CPExID) description: Czech Publisher Exchange ID (CPExID) User ID sub-module -useridmodule: cpexId +useridmodule: cpexIdSystem --- @@ -29,4 +29,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/criteo.md b/dev-docs/modules/userid-submodules/criteo.md index 743d2e4ba1..c300f1fd0f 100644 --- a/dev-docs/modules/userid-submodules/criteo.md +++ b/dev-docs/modules/userid-submodules/criteo.md @@ -2,7 +2,7 @@ layout: userid title: Criteo ID for Exchanges description: Criteo ID for Exchanges User ID sub-module -useridmodule: criteo +useridmodule: criteoIdSystem --- @@ -35,4 +35,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/deepintent.md b/dev-docs/modules/userid-submodules/deepintent.md index 9d0d248b86..f77036025d 100644 --- a/dev-docs/modules/userid-submodules/deepintent.md +++ b/dev-docs/modules/userid-submodules/deepintent.md @@ -2,7 +2,7 @@ layout: userid title: Deepintent description: Deepintent User ID sub-module -useridmodule: deepintentId +useridmodule: deepintentIdSystem --- @@ -59,4 +59,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/dmd.md b/dev-docs/modules/userid-submodules/dmd.md index 8f9d3d4fcf..5ccaaf26f1 100644 --- a/dev-docs/modules/userid-submodules/dmd.md +++ b/dev-docs/modules/userid-submodules/dmd.md @@ -2,7 +2,7 @@ layout: userid title: DMD ID by DMD Marketing Corp description: DMD ID by DMD Marketing Corp User ID sub-module -useridmodule: dmdId +useridmodule: dmdIdSystem --- @@ -44,4 +44,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/fabrick.md b/dev-docs/modules/userid-submodules/fabrick.md index 04e802dfaa..70ea8f526b 100644 --- a/dev-docs/modules/userid-submodules/fabrick.md +++ b/dev-docs/modules/userid-submodules/fabrick.md @@ -2,7 +2,7 @@ layout: userid title: Fabrick ID by Neustar description: Fabrick ID by Neustar User ID sub-module -useridmodule: fabrickId +useridmodule: fabrickIdSystem --- @@ -81,4 +81,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/floc.md b/dev-docs/modules/userid-submodules/floc.md index 76cb33b932..4f8ef53773 100644 --- a/dev-docs/modules/userid-submodules/floc.md +++ b/dev-docs/modules/userid-submodules/floc.md @@ -2,7 +2,7 @@ layout: userid title: FLoC ID description: FLoC ID User ID sub-module -useridmodule: flocId +useridmodule: flocIdSystem --- @@ -25,5 +25,3 @@ A3dHTSoNUMjjERBLlrvJSelNnwWUCwVQhZ5tNQ+sll7y+LkPPVZXtB77u2y7CweRIxiYaGw GXNlW1/dFp8VMEgIAAAB+eyJvcmlnaW4iOiJodHRwczovL3NoYXJlZGlkLm9yZzo0NDMiLC JmZWF0dXJlIjoiSW50ZXJlc3RDb2hvcnRBUEkiLCJleHBpcnkiOjE2MjYyMjA3OTksImlzU 3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9 - - diff --git a/dev-docs/modules/userid-submodules/ftrack.md b/dev-docs/modules/userid-submodules/ftrack.md index 03e730eb26..3766109676 100644 --- a/dev-docs/modules/userid-submodules/ftrack.md +++ b/dev-docs/modules/userid-submodules/ftrack.md @@ -2,7 +2,7 @@ layout: userid title: FTrack ID from Flashtalking By Mediaocean description: FTrack ID from Flashtalking By Mediaocean User ID sub-module -useridmodule: FTrack +useridmodule: ftrackIdSystem --- @@ -56,4 +56,3 @@ pbjs.setConfig({ | storage.name | Required | String | The name of the local storage where the user ID will be stored. FTrack **requires** `"FTrackId"`. | `"FTrackId"` | | storage.expires | Optional | Integer | How long (in days) the user ID information will be stored. FTrack recommends `90`. | `90` | | storage.refreshInSeconds | Optional | Integer | How many seconds until the FTrack ID will be refreshed. FTrack strongly recommends 8 hours between refreshes | `8*3600` | - diff --git a/dev-docs/modules/userid-submodules/gravito.md b/dev-docs/modules/userid-submodules/gravito.md index 55b5f2a0b8..743292f107 100644 --- a/dev-docs/modules/userid-submodules/gravito.md +++ b/dev-docs/modules/userid-submodules/gravito.md @@ -2,7 +2,7 @@ layout: userid title: GRAVITO ID by Gravito Ltd. description: GRAVITO ID by Gravito Ltd. User ID sub-module -useridmodule: gravitompId +useridmodule: gravitoIdSystem --- @@ -32,4 +32,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/growthcode.md b/dev-docs/modules/userid-submodules/growthcode.md index 89552536fc..d337f53b2c 100644 --- a/dev-docs/modules/userid-submodules/growthcode.md +++ b/dev-docs/modules/userid-submodules/growthcode.md @@ -2,7 +2,7 @@ layout: userid title: GrowthCode description: GrowthCode User ID sub-module -useridmodule: growthCodeId +useridmodule: growthCodeIdSystem --- @@ -45,4 +45,3 @@ The following configuration parameters are available: | params.url | Optional | String | Custom URL for server | | | params.publisher_id | Optional | String | Name if the variable that holds your publisher ID | `"_sharedID"` | | params.publisher_id_storage | Optional | String | Publisher ID storage (cookie, html5) | `"html5"` | - diff --git a/dev-docs/modules/userid-submodules/hadron.md b/dev-docs/modules/userid-submodules/hadron.md index 52830ce834..d6ffdf61ef 100644 --- a/dev-docs/modules/userid-submodules/hadron.md +++ b/dev-docs/modules/userid-submodules/hadron.md @@ -2,7 +2,7 @@ layout: userid title: Hadron ID from Audigent description: Hadron ID from Audigent User ID sub-module -useridmodule: hadronId +useridmodule: hadronIdSystem --- @@ -49,4 +49,3 @@ The following configuration parameters are available: | params.url | Optional | String | Set an alternate GET url for HadronId with this parameter | | params.urlArg | Optional | Object | Optional url parameter for params.url | | params.partnerId | Required | Number | This is the Audigent Partner ID obtained from Audigent. | - diff --git a/dev-docs/modules/userid-submodules/id5.md b/dev-docs/modules/userid-submodules/id5.md index 246054bde4..aab352be64 100644 --- a/dev-docs/modules/userid-submodules/id5.md +++ b/dev-docs/modules/userid-submodules/id5.md @@ -2,7 +2,7 @@ layout: userid title: ID5 Universal ID description: ID5 Universal ID User ID sub-module -useridmodule: id5Id +useridmodule: id5IdSystem --- @@ -76,4 +76,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/idplus.md b/dev-docs/modules/userid-submodules/idplus.md index c791858206..60298c955b 100644 --- a/dev-docs/modules/userid-submodules/idplus.md +++ b/dev-docs/modules/userid-submodules/idplus.md @@ -2,7 +2,7 @@ layout: userid title: ID+ description: ID+ User ID sub-module -useridmodule: zeotapIdPlus +useridmodule: zeotapIdPlusIdSystem --- @@ -34,5 +34,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - - diff --git a/dev-docs/modules/userid-submodules/idx.md b/dev-docs/modules/userid-submodules/idx.md index b73f8e7e9f..6bc58d7c48 100644 --- a/dev-docs/modules/userid-submodules/idx.md +++ b/dev-docs/modules/userid-submodules/idx.md @@ -2,7 +2,7 @@ layout: userid title: IDx description: IDx User ID sub-module -useridmodule: idx +useridmodule: idxIdSystem --- @@ -39,4 +39,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/imuid.md b/dev-docs/modules/userid-submodules/imuid.md index 8642171e72..419307620d 100644 --- a/dev-docs/modules/userid-submodules/imuid.md +++ b/dev-docs/modules/userid-submodules/imuid.md @@ -2,7 +2,7 @@ layout: userid title: IM-UID by Intimate Merger description: IM-UID by Intimate Merger User ID sub-module -useridmodule: imuid +useridmodule: imuIdSystem --- IM-UID, provided by [Intimate Merger](https://corp.intimatemerger.com/), is a universal identifier that designed for publishers, platforms and advertisers to perform segmentation and targeting even in environments where 3rd party cookies are not available. IM-UID is currently only available in Japan. @@ -42,4 +42,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/intentiq.md b/dev-docs/modules/userid-submodules/intentiq.md index 0c6396008c..4a99dc6f03 100644 --- a/dev-docs/modules/userid-submodules/intentiq.md +++ b/dev-docs/modules/userid-submodules/intentiq.md @@ -2,7 +2,7 @@ layout: userid title: Intent IQ ID description: Intent IQ ID User ID sub-module -useridmodule: intentIqId +useridmodule: intentIqIdSystem --- @@ -116,4 +116,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/just.md b/dev-docs/modules/userid-submodules/just.md index d94d283645..5bbaad6e49 100644 --- a/dev-docs/modules/userid-submodules/just.md +++ b/dev-docs/modules/userid-submodules/just.md @@ -2,7 +2,7 @@ layout: userid title: Just ID description: Just ID User ID sub-module -useridmodule: justId +useridmodule: justIdSystem --- @@ -61,4 +61,3 @@ pbjs.setConfig({ ## Just ID Disclosure This module in `COMBINED` mode loads external JavaScript to generate optimal quality user ID. It is possible to retrieve user ID, without loading additional script by this module in `BASIC` mode. - diff --git a/dev-docs/modules/userid-submodules/kinesso.md b/dev-docs/modules/userid-submodules/kinesso.md index ba5f152499..7ddcb3dabb 100644 --- a/dev-docs/modules/userid-submodules/kinesso.md +++ b/dev-docs/modules/userid-submodules/kinesso.md @@ -2,7 +2,7 @@ layout: userid title: Kinesso ID description: Kinesso ID User ID sub-module -useridmodule: kpuid +useridmodule: kinessoIdSystem --- @@ -38,4 +38,3 @@ The Kinesso ID privacy policy is covered under the [Kinesso Privacy Notice](http | name | Required | String | The name of this module. | `'kpuid'` | | params | Required | Object | Details for KinessoId initialization | | | params.accountid | Required | Int | Your SSP Account Id | 123 | - diff --git a/dev-docs/modules/userid-submodules/liveintent.md b/dev-docs/modules/userid-submodules/liveintent.md index a49124a547..e06e309e9c 100644 --- a/dev-docs/modules/userid-submodules/liveintent.md +++ b/dev-docs/modules/userid-submodules/liveintent.md @@ -2,7 +2,7 @@ layout: userid title: LiveIntent nonID description: LiveIntent nonID User ID sub-module -useridmodule: liveIntentId +useridmodule: liveIntentIdSystem --- @@ -167,4 +167,3 @@ pbjs.setConfig({ } }) ``` - diff --git a/dev-docs/modules/userid-submodules/lotame.md b/dev-docs/modules/userid-submodules/lotame.md index 9aa85953bd..d2ecd784c4 100644 --- a/dev-docs/modules/userid-submodules/lotame.md +++ b/dev-docs/modules/userid-submodules/lotame.md @@ -2,7 +2,7 @@ layout: userid title: Lotame Panorama ID description: Lotame Panorama ID User ID sub-module -useridmodule: lotamePanoramaId +useridmodule: lotamePanoramaIdSystem --- @@ -44,4 +44,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/mediawallah.md b/dev-docs/modules/userid-submodules/mediawallah.md index da47a0dde9..f9a470b045 100644 --- a/dev-docs/modules/userid-submodules/mediawallah.md +++ b/dev-docs/modules/userid-submodules/mediawallah.md @@ -2,7 +2,7 @@ layout: userid title: MediaWallah OpenLinkID description: MediaWallah OpenLinkID User ID sub-module -useridmodule: mwOpenLinkId +useridmodule: mwOpenLinkIdSystem --- @@ -46,4 +46,3 @@ pbjs.setConfig({ } }) ``` - diff --git a/dev-docs/modules/userid-submodules/merkle.md b/dev-docs/modules/userid-submodules/merkle.md index 74f5844434..f4172fbbef 100644 --- a/dev-docs/modules/userid-submodules/merkle.md +++ b/dev-docs/modules/userid-submodules/merkle.md @@ -2,7 +2,7 @@ layout: userid title: Merkle ID description: Merkle IDUser ID sub-module -useridmodule: merkleId +useridmodule: merkleIdSystem --- @@ -30,4 +30,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/navegg.md b/dev-docs/modules/userid-submodules/navegg.md index e9560d606e..c0221d2518 100644 --- a/dev-docs/modules/userid-submodules/navegg.md +++ b/dev-docs/modules/userid-submodules/navegg.md @@ -2,7 +2,7 @@ layout: userid title: Navegg ID description: Navegg ID User ID sub-module -useridmodule: naveggId +useridmodule: naveggIdSystem --- [Navegg](https://www.navegg.com) enables publishers, advertisers and agencies to use their own first party data together to activate media in a cookie-less way across several Ad Tech platforms. Navegg has one of the largest data networks in Latin America which also allows the enhancement of data with unique categories. @@ -20,4 +20,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/netid.md b/dev-docs/modules/userid-submodules/netid.md index 2d7871180b..5f00309047 100644 --- a/dev-docs/modules/userid-submodules/netid.md +++ b/dev-docs/modules/userid-submodules/netid.md @@ -2,7 +2,7 @@ layout: userid title: netID description: netID User ID sub-module -useridmodule: netId +useridmodule: netIdSystem --- @@ -26,4 +26,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/novatiq.md b/dev-docs/modules/userid-submodules/novatiq.md index 942fb54428..706e73e287 100644 --- a/dev-docs/modules/userid-submodules/novatiq.md +++ b/dev-docs/modules/userid-submodules/novatiq.md @@ -2,7 +2,7 @@ layout: userid title: Novatiq Hyper ID description: Novatiq Hyper ID User ID sub-module -useridmodule: novatiq +useridmodule: novatiqIdSystem --- @@ -93,5 +93,3 @@ pbjs.setConfig({ If you have any questions, please reach out to us at [prebid@novatiq.com](mailto:prebid@novatiq.com) - - diff --git a/dev-docs/modules/userid-submodules/onekey.md b/dev-docs/modules/userid-submodules/onekey.md index 81f2bcd9b7..8c35696b02 100644 --- a/dev-docs/modules/userid-submodules/onekey.md +++ b/dev-docs/modules/userid-submodules/onekey.md @@ -2,7 +2,7 @@ layout: userid title: OneKey IDs & Preferences description: OneKey IDs & Preferences User ID sub-module -useridmodule: oneKeyData +useridmodule: oneKeyIdSystem --- @@ -48,4 +48,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/parrable.md b/dev-docs/modules/userid-submodules/parrable.md index ce7d32cf76..8799a1786c 100644 --- a/dev-docs/modules/userid-submodules/parrable.md +++ b/dev-docs/modules/userid-submodules/parrable.md @@ -2,7 +2,7 @@ layout: userid title: Parrable ID description: Parrable ID User ID sub-module -useridmodule: parrableId +useridmodule: parrableIdSystem --- @@ -75,4 +75,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/publisherlink.md b/dev-docs/modules/userid-submodules/publisherlink.md index 5122a02e83..385a9bd896 100644 --- a/dev-docs/modules/userid-submodules/publisherlink.md +++ b/dev-docs/modules/userid-submodules/publisherlink.md @@ -2,7 +2,7 @@ layout: userid title: Publisher Link description: Publisher Link User ID sub-module -useridmodule: publinkId +useridmodule: publinkIdSystem --- @@ -51,4 +51,3 @@ In addition to the parameters documented above in the Basic Configuration sectio } }); ``` - diff --git a/dev-docs/modules/userid-submodules/pubprovided.md b/dev-docs/modules/userid-submodules/pubprovided.md index 6468f9555f..dd1b031700 100644 --- a/dev-docs/modules/userid-submodules/pubprovided.md +++ b/dev-docs/modules/userid-submodules/pubprovided.md @@ -2,7 +2,7 @@ layout: userid title: PubProvided ID description: PubProvided ID User ID sub-module -useridmodule: pubProvidedId +useridmodule: pubProvidedIdSystem --- @@ -86,4 +86,3 @@ gulp build --modules=pubProvidedIdSystem | params.eidsFunction | Optional | function | any function that exists in the page | getIdsFn() | | uids.atype | optional | int | ADCOM - Type of user agent the match is from | `"1"` | | uids.ext.stype | Optional | String | Description of how the id was generated and by whom ('ppuid','DMP','other') | `DMP` | - diff --git a/dev-docs/modules/userid-submodules/quantcast.md b/dev-docs/modules/userid-submodules/quantcast.md index b4912b859a..ef333c1351 100644 --- a/dev-docs/modules/userid-submodules/quantcast.md +++ b/dev-docs/modules/userid-submodules/quantcast.md @@ -2,7 +2,7 @@ layout: userid title: Quantcast ID description: Quantcast ID User ID sub-module -useridmodule: quantcastId +useridmodule: quantcastIdSystem --- The Prebid Quantcast ID module stores a Quantcast ID in a first party cookie. The ID is then made available in the bid request. The ID from the cookie added in the bidstream allows Quantcast to more accurately bid on publisher inventories without third party cookies, which can result in better monetization across publisher sites from Quantcast. And, it’s free to use! For easier integration, you can work with one of our SSP partners, like PubMatic, who can facilitate the legal process as well as the software integration for you. @@ -43,6 +43,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - - - diff --git a/dev-docs/modules/userid-submodules/ramp.md b/dev-docs/modules/userid-submodules/ramp.md index b00b4a6fdf..ad9ca6985d 100644 --- a/dev-docs/modules/userid-submodules/ramp.md +++ b/dev-docs/modules/userid-submodules/ramp.md @@ -2,7 +2,7 @@ layout: userid title: RampID description: RampID User ID sub-module -useridmodule: identityLink +useridmodule: identityLinkIdSystem --- @@ -84,4 +84,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/sharedid.md b/dev-docs/modules/userid-submodules/sharedid.md index 2bb3ee85de..d2b966a512 100644 --- a/dev-docs/modules/userid-submodules/sharedid.md +++ b/dev-docs/modules/userid-submodules/sharedid.md @@ -2,7 +2,7 @@ layout: userid title: SharedID description: SharedID User ID sub-module -useridmodule: sharedId +useridmodule: sharedIdSystem --- @@ -102,4 +102,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/tapad.md b/dev-docs/modules/userid-submodules/tapad.md index 8843303011..482b0da35c 100644 --- a/dev-docs/modules/userid-submodules/tapad.md +++ b/dev-docs/modules/userid-submodules/tapad.md @@ -2,7 +2,7 @@ layout: userid title: Tapad ID description: Tapad ID User ID sub-module -useridmodule: tapadId +useridmodule: tapadIdSystem --- @@ -48,4 +48,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/teads.md b/dev-docs/modules/userid-submodules/teads.md index a391c9a5bd..dd8f7fffcb 100644 --- a/dev-docs/modules/userid-submodules/teads.md +++ b/dev-docs/modules/userid-submodules/teads.md @@ -2,7 +2,7 @@ layout: userid title: Teads ID description: Teads ID User ID sub-module -useridmodule: teadsId +useridmodule: teadsIdSystem pbjs_version_notes: please avoid using v7.20.0 and v7.21.0 --- @@ -50,5 +50,3 @@ This will add a `userId.teadsId` property to all bidRequests. This will be read teadsId: '2e3a00de-3800-11ed-a261-0242ac120002' } ``` - - diff --git a/dev-docs/modules/userid-submodules/trustpid.md b/dev-docs/modules/userid-submodules/trustpid.md index 717ac511c9..2addb60bca 100644 --- a/dev-docs/modules/userid-submodules/trustpid.md +++ b/dev-docs/modules/userid-submodules/trustpid.md @@ -2,7 +2,7 @@ layout: userid title: Trustpid description: Trustpid User ID sub-module -useridmodule: trustpid +useridmodule: trustpidSystem --- @@ -51,4 +51,3 @@ pbjs.setConfig({ ## Truspid onboarding If you wish to find out more about Trustpid, please contact onboarding@trustpid.com - diff --git a/dev-docs/modules/userid-submodules/unified.md b/dev-docs/modules/userid-submodules/unified.md index 85eea4afb9..9425a699cf 100644 --- a/dev-docs/modules/userid-submodules/unified.md +++ b/dev-docs/modules/userid-submodules/unified.md @@ -2,7 +2,7 @@ layout: userid title: Unified ID description: Unified ID User ID sub-module -useridmodule: unifiedId +useridmodule: unifiedIdSystem --- @@ -93,4 +93,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/unified2.md b/dev-docs/modules/userid-submodules/unified2.md index ef0e56482c..cc410d5b56 100644 --- a/dev-docs/modules/userid-submodules/unified2.md +++ b/dev-docs/modules/userid-submodules/unified2.md @@ -2,7 +2,7 @@ layout: userid title: Unified ID 2.0 description: Unified ID 2.0 User ID sub-module -useridmodule: uid2 +useridmodule: uid2IdSystem --- @@ -84,4 +84,3 @@ pbjs.setConfig({ } }); {% endhighlight %} - diff --git a/dev-docs/modules/userid-submodules/yahoo.md b/dev-docs/modules/userid-submodules/yahoo.md index cc0fbd8b59..f6e86cb903 100644 --- a/dev-docs/modules/userid-submodules/yahoo.md +++ b/dev-docs/modules/userid-submodules/yahoo.md @@ -2,7 +2,7 @@ layout: userid title: Yahoo ConnectID description: Yahoo ConnectID User ID sub-module -useridmodule: connectId +useridmodule: connectIdSystem --- Yahoo ConnectID is a person based ID and does not depend on 3rd party cookies. It enables ad tech platforms to recognize and match users consistently across the open web. Built on top of Yahoo’s robust and proprietary ID Graph it delivers a higher find rate of audiences on publishers’ sites user targeting that respects privacy. @@ -106,4 +106,3 @@ pbjs.setConfig({ } }) ``` - diff --git a/download.md b/download.md index e1c9446856..2728e6f03d 100644 --- a/download.md +++ b/download.md @@ -268,7 +268,7 @@ These modules may require accounts with a service provider.

User ID Modules

- {% for page in userid_pages %}{% if page.enable_download == false %}{% continue %}{% endif %}
{{ page.title }}{% if page.pbjs_version_notes %}
{{page.pbjs_version_notes}}
{% endif %} + {% for page in userid_pages %}{% if page.enable_download == false %}{% continue %}{% endif %}
{% if page.pbjs_version_notes %}
{{page.pbjs_version_notes}}
{% endif %}
{% endfor %}
From 6e5f670b9826a9e3edb51d3b60f307ea552757b8 Mon Sep 17 00:00:00 2001 From: nitzanappush <116559356+nitzanappush@users.noreply.github.com> Date: Wed, 18 Jan 2023 11:45:04 +0200 Subject: [PATCH 038/763] Appush Bid Adapter: init (#4220) * initial new Appush adapter * updates * init new Appush Prebid.JS adapter --- dev-docs/bidders/appush.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/appush.md b/dev-docs/bidders/appush.md index 8ef80e71c4..500c7d0b4a 100644 --- a/dev-docs/bidders/appush.md +++ b/dev-docs/bidders/appush.md @@ -4,7 +4,7 @@ title: Appush description: Prebid Appush Bidder Adapter biddercode: appush media_types: banner, video, native -pbjs: false +pbjs: true pbs: true gvl_id: 879 safeframes_ok: true From 935c35b7cd1036d8357cc8f1e2245244e8e0188a Mon Sep 17 00:00:00 2001 From: nitzanappush <116559356+nitzanappush@users.noreply.github.com> Date: Fri, 20 Jan 2023 01:41:12 +0200 Subject: [PATCH 039/763] Appush Bid Adapter: doc edit only (#4285) * initial new Appush adapter * updates * init new Appush Prebid.JS adapter * changes --- dev-docs/bidders/appush.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/appush.md b/dev-docs/bidders/appush.md index 500c7d0b4a..94bb59ced3 100644 --- a/dev-docs/bidders/appush.md +++ b/dev-docs/bidders/appush.md @@ -15,7 +15,7 @@ ortb_blocking_supported: partial sidebarType: 1 --- -### Prebid Server Params +### Prebid Params {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | From 009cb269371927d29dd1452b82b2b90f4234f63d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20Hoeksema?= <37441336+danielsao@users.noreply.github.com> Date: Fri, 20 Jan 2023 00:42:35 +0100 Subject: [PATCH 040/763] Update ats.md (#4287) --- dev-docs/analytics/ats.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/analytics/ats.md b/dev-docs/analytics/ats.md index 3c666c6b7e..4555c522c8 100644 --- a/dev-docs/analytics/ats.md +++ b/dev-docs/analytics/ats.md @@ -23,7 +23,7 @@ The LiveRamp privacy policy is at [https://liveramp.com/privacy/service-privacy- {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |-------------|---------|--------------------|-----------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|------------------| -| pid | required | This is the Placement ID, a unique identifier that is used to identify each publisher, obtained from registering with LiveRamp. | `"999"` | `int` | +| pid | required | This is the Placement ID, a unique identifier that is used to identify each publisher, obtained from registering with LiveRamp. | `"999"` | `string` | #### Example Configuration From a26d7a5c19e2652c44ed0d9fe260f77f1b7e6679 Mon Sep 17 00:00:00 2001 From: rimaburder-index <55195208+rimaburder-index@users.noreply.github.com> Date: Fri, 20 Jan 2023 09:33:23 -0500 Subject: [PATCH 041/763] Updated ix.md on how to enable the Index adapter (#4290) Corrected step 1 for server-side on how to enable the Index adapter --- dev-docs/bidders/ix.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/dev-docs/bidders/ix.md b/dev-docs/bidders/ix.md index c51712a7f5..ddb8c7a771 100644 --- a/dev-docs/bidders/ix.md +++ b/dev-docs/bidders/ix.md @@ -138,13 +138,9 @@ In this configuration Prebid.js calls Index directly from the browser using our ## Set up Prebid.js to call Index through Prebid Server (server-side adapter) -In this configuration, Prebid.js makes a call to Prebid Server and then Prebid Server uses our server-side adapter to call Index. Complete the following steps to complete the Index-specific configuration: +In this configuration, Prebid.js makes a call to Prebid Server and then Prebid Server uses our server-side adapter to call Index. Complete the following steps to configure Index as a demand source: -1. In your PrebidServer adapter configuration Prebid.js, you must enable the Index adapter as follows: -```javascript - adapters.ix.enabled=true - adapters.ix.endpoint=http:// -``` +1. If you are hosting your own Prebid Server instance, see [Setup instructions to call Index through Prebid Server](https://docs.prebid.org/dev-docs/pbs-bidders.html#setup-instructions-to-call-index-through-prebid-server). 2. In the `[pbjs.setConfig()]` function, within the `s2sConfig` property, add `ix` to the `bidders` attribute. 3. Define the Index-specific parameters at the bidder level. For Index's bidder-specific parameters, see the [Bid request parameters](#bid-request-parameters) section below. 4. Define your ad units in the `adUnit` object. For more information about this object, see Prebid's [Ad Unit Reference](https://docs.prebid.org/dev-docs/adunit-reference.html) documentation. From cbb934a9896e71161846dba3463df80e66993a7b Mon Sep 17 00:00:00 2001 From: Oleksii Varlamov <4lexvav@gmail.com> Date: Tue, 24 Jan 2023 20:33:37 +0200 Subject: [PATCH 042/763] Document for adding a PBS Go Module (#4225) --- prebid-server/developers/add-a-module-go.md | 306 ++++++++++++++ prebid-server/developers/add-a-module-java.md | 2 +- prebid-server/developers/add-a-module.md | 8 +- prebid-server/pbs-modules/ortb2-blocking.md | 395 ++++++++++++++++-- 4 files changed, 674 insertions(+), 37 deletions(-) create mode 100644 prebid-server/developers/add-a-module-go.md diff --git a/prebid-server/developers/add-a-module-go.md b/prebid-server/developers/add-a-module-go.md new file mode 100644 index 0000000000..845bfc9fc4 --- /dev/null +++ b/prebid-server/developers/add-a-module-go.md @@ -0,0 +1,306 @@ +--- +layout: page_v2 +sidebarType: 5 +title: Prebid Server | Developers | Adding a Go Module + +--- + +# Prebid Server - Adding a Go Module +{: .no_toc} + +* TOC +{:toc } + +## Overview + +This document details how to make a module for PBS-Go. + +You will want to be familiar with the following background information: + +- the [module overview](/prebid-server/developers/add-a-module.html) +- the [PBS-Go Modularity Tech Spec](https://docs.google.com/document/d/1CmamniQpwcI3p0_rHe2F17zV4sEhzpOdrqU7zuZVZ_I/edit?usp=sharing) + +### Contributing + +Check out the [PBS-Go contribution guide](https://github.com/prebid/prebid-server/blob/master/docs/developers/contributing.md) before introducing any code changes. + +## Module Directory Layout + +The Prebid Server repository contains a package `modules` located in the root project directory. It includes all available PBS modules. So, in order to add a new module, fork the repository and create a folder with the desired name inside the `modules` folder with the following structure: + +``` ++- prebid-server/ + +- modules/ <- package with modules that implement various hooks + +- builder.go <- contains a list of all available modules + +- {YOUR_VENDOR_NAME}/ <- top-level package used to group modules from the same vendor + +- {YOUR_MODULE_NAME}/ <- package with source code of your module + +- module.go <- file with module initialization function +``` +Module directory names (`{YOUR_VENDOR_NAME}/YOUR_MODULE_NAME/}`) must consist of valid identifiers. +A valid identifier is defined as a sequence of one or more letters, including an underscore character (`_`), and digits. +All other symbols such as `-`, `.`, etc. are not permitted. + +### Your module's build file + +Here's a partial example of your module-specific `module.go` file: + +``` +package your_module_name + +import ( + "context" + "encoding/json" + + "github.com/prebid/prebid-server/hooks/hookstage" + "github.com/prebid/prebid-server/modules/moduledeps" +) + +func Builder(config json.RawMessage, deps moduledeps.ModuleDeps) (interface{}, error) { + return Module{}, nil +} + +// Module must implement at least 1 hook interface. +type Module struct{} + +func (m Module) HandleBidderRequestHook( + ctx context.Context, + invocationCtx hookstage.ModuleInvocationContext, + payload hookstage.BidderRequestPayload, +) (hookstage.HookResult[hookstage.BidderRequestPayload], error) { + result := hookstage.HookResult[hookstage.BidderRequestPayload]{} + + // hook handling logic + + return result, nil +} +``` + +In the example above, our module only implements the `bidder-request` hook interface. + +The module's `Builder` function receives 2 arguments: +1. `config json.RawMessage` - represents a global config of your module, see [Configuration](#configuration). +2. `deps moduledeps.ModuleDeps` - contains dependencies that your module might require. + +and returns 2 values: +1. `interface{}` - must implement at least 1 hook interface, see [hooks](#hook-interfaces). PBS uses type assertion to find out which hook interfaces implemented by module. +2. `error` - any error occurred during module initialization. + +### Expose your module to PBS + +All available modules are exposed through the `modules/builder.go` file. This file is auto-generated, so you shouldn’t edit it manually. + +To register a new module, you just need to run one of the following commands from the PBS root directory: + - `make build-modules` + - or `go generate modules/modules.go` + +This command scans the `modules/` directory for files matching the pattern `modules/*/*/module.go` and adds all matching packages to the `modules/builder.go` file. + +## Module Code + +The quick start is to take a look in two places: +- the [prebid ortb2blocking module](https://github.com/prebid/prebid-server/tree/master/modules/prebid/ortb2blocking) +- the [hook source code and tests](https://github.com/prebid/prebid-server/tree/master/hooks) + +### Adding module documentation +It is required to add a "README.md" file to the root of your module folder. It's recommended to specify the description of what the implemented module does, links to external documentation and include maintainer contact info (email, slack, etc). + +The documentation must also live on the docs.prebid.org site. Please add a markdown file to https://github.com/prebid/prebid.github.io/tree/master/prebid-server/pbs-modules + +### Hook Interfaces + +The Prebid server processing workflow is divided into several 'stages' where module authors can inject a specific function signature called a 'hook'. + +The Prebid Server host company will define which modules to run in which order by setting up a configuration defining which hooks run serially and which can run in parallel. + +The supported stages are described in the [general module overview](/prebid-server/developers/add-a-module.html#2-understand-the-endpoints-and-stages) and in PBS-Core source code at the "github.com/prebid/prebid-server/hooks" package. + +These are the available hooks that can be implemented in a module: + +- github.com/prebid/prebid-server/hooks/hookstage.Entrypoint +- github.com/prebid/prebid-server/hooks/hookstage.RawAuctionRequest +- github.com/prebid/prebid-server/hooks/hookstage.ProcessedAuctionRequest +- github.com/prebid/prebid-server/hooks/hookstage.BidderRequest +- github.com/prebid/prebid-server/hooks/hookstage.RawBidderResponse +- github.com/prebid/prebid-server/hooks/hookstage.AllProcessedBidResponses +- github.com/prebid/prebid-server/hooks/hookstage.AuctionResponse + +In a module it is not necessary to implement all mentioned interfaces but at least one is required by your functionality. + +### Examples + +1) To **update** the request in the `BidderRequest`, your implementation would return a hook result with a change set: +``` +import ( + "context" + + "github.com/prebid/prebid-server/hooks/hookstage" +) + +type Module struct{} + +func (m Module) HandleBidderRequestHook( + ctx context.Context, + invocationCtx hookstage.ModuleInvocationContext, + payload hookstage.BidderRequestPayload, +) (hookstage.HookResult[hookstage.BidderRequestPayload], error) { + changeSet := hookstage.ChangeSet[hookstage.BidderRequestPayload]{} + changeSet.BidderRequest().BAdv().Update([]string{"a.com"}) + + return hookstage.HookResult[hookstage.BidderRequestPayload]{ChangeSet: changeSet}, nil +} +``` + +Please note, the `hookstage.ChangeSet` has a restricted set of methods, but methods can be easily extended when more use cases come up. + +For more complex payload updates, you can choose another method: +``` +func (m Module) HandleBidderRequestHook( + ctx context.Context, + invocationCtx hookstage.ModuleInvocationContext, + payload hookstage.BidderRequestPayload, +) (hookstage.HookResult[hookstage.BidderRequestPayload], error) { + battrByImp := map[string][]adcom1.CreativeAttribute{"imp_ID1": []adcom1.CreativeAttribute{adcom1.AttrAudioAuto}} + changeSet := hookstage.ChangeSet[hookstage.BidderRequestPayload]{} + changeSet.AddMutation(func(payload hookstage.BidderRequestPayload) (hookstage.BidderRequestPayload, error) { + for i, imp := range payload.BidRequest.Imp { + if battr, ok := battrByImp[imp.ID]; ok { + imp.Banner.BAttr = battr + payload.BidRequest.Imp[i] = imp + } + } + return payload, nil + }, hookstage.MutationUpdate, "bidrequest", "imp", "banner", "battr") + + return hookstage.HookResult[hookstage.BidderRequestPayload]{ChangeSet: changeSet}, nil +} +``` + +2) To **reject** the bidder in the `BidderRequest`, your hook implementation would return a hook result with a reject flag and an NBR code: +``` +func (m Module) HandleBidderRequestHook( + ctx context.Context, + invocationCtx hookstage.ModuleInvocationContext, + payload hookstage.BidderRequestPayload, +) (hookstage.HookResult[hookstage.BidderRequestPayload], error) { + return hookstage.HookResult[hookstage.BidderRequestPayload]{Reject: true, NbrCode: 7}, nil +} +``` + +Refer [here](https://github.com/InteractiveAdvertisingBureau/openrtb/blob/master/OpenRTB%20v3.0%20FINAL.md#list--no-bid-reason-codes-) for a list of available No Bid Response Codes. + +3) To supply [analytics tags](/prebid-server/developers/module-atags.html) in the `BidderRequest`, your hook implementation would return a hook result with analytics tags: +``` +import ( + "context" + + "github.com/prebid/prebid-server/hooks/hookstage" + "github.com/prebid/prebid-server/hooks/hookanalytics" +) + +func (m Module) HandleBidderRequestHook( + ctx context.Context, + invocationCtx hookstage.ModuleInvocationContext, + payload hookstage.BidderRequestPayload, +) (hookstage.HookResult[hookstage.BidderRequestPayload], error) { + return hookstage.HookResult[hookstage.BidderRequestPayload]{ + AnalyticsTags: hookanalytics.Analytics{ + Activities: []hookanalytics.Activity{ + { + Name: "enforce_blocking", + Status: hookanalytics.ActivityStatusSuccess, + Results: []hookanalytics.Result{ + { + Status: hookanalytics.ResultStatusBlock, + Values: map[string]interface{}{ + "attributes": []string{"bcat"}, + "bcat": []string{"IAB-1"}, + }, + AppliedTo: hookanalytics.AppliedTo{Bidder: "appnexus", ImpIds: []string{"imp_ID1"}}, + }, + { + Status: hookanalytics.ResultStatusAllow, + AppliedTo: hookanalytics.AppliedTo{Bidder: "appnexus", ImpIds: []string{"imp_ID2"}}, + }, + }, + }, + }, + }, + }, nil +} +``` + +More test implementations for each hook can be found in unit-tests at [https://github.com/prebid/prebid-server/tree/master/modules/prebid/ortb2blocking](https://github.com/prebid/prebid-server/tree/master/modules/prebid/ortb2blocking) folder. + +### Configuration + +It's possible to define default module configuration which can be read by the module at PBS startup. Please see the [Configuration](https://docs.google.com/document/d/1CmamniQpwcI3p0_rHe2F17zV4sEhzpOdrqU7zuZVZ_I/edit#heading=h.mh3urph3k1mk) section of the technical specification. + +An example configuration for hooks might look like this: +```json +{ + "hooks": { + "enabled": true, + "modules": { + "vendor1": { + "module1": { + "enabled": true + } + } + }, + "host_execution_plan": { + "endpoints": { + "/openrtb2/auction": { + "stages": { + "bidder_request": { + "groups": [ + { + "timeout": 10, + "hook_sequence": [ + { + "module_code": "vendor1.module1", + "hook_impl_code": "code123" + } + ] + } + ] + } + } + } + } + } + } +} +``` + +### Testing + +Unit tests are required. Each implemented hook must be at least 90% covered by unit tests. + +### How to build and install a module + +Read about the module building in the [building section](https://docs.google.com/document/d/1CmamniQpwcI3p0_rHe2F17zV4sEhzpOdrqU7zuZVZ_I/edit#heading=h.o8dv0neoq4xm) of the technical specification. + +## Analytics Adapters and Modules + +Each module can inject analytics tags into the request as described in the analytics tags section. + +Analytics adapters receive these tags through the Auction/AMP analytic object. + +To get analytics tags you need to go into: + +``` +AuctionObject/AmpObject + -> HookExecutionOutcome (iterate through stages) + -> Groups (iterate through groups) + -> InvocationResults (go through hooks invocation results and find interested one) + -> AnalyticsTags +``` + +The `AnalyticsTags` object has activities with collection of `github.com/prebid/prebid-server/hooks/hookanalytics.Result` objects inside. Each `Result` has the `Values` field which holds arbitrary values set by a module. + +It depends on the particular module implementation how to parse their analytics tags, since the internal structure is custom and depends on the module. Therefore, analytics modules that want to report on specific behavior need to be coded to know about that module. See the prebid ortb2blocking module for an example of what analytics tags may be available. + +## Further Reading + +- [PBS Module Overview](/prebid-server/developers/add-a-module.html) +- [PBS Module Analytics Tags Conventions](/prebid-server/developers/module-atags.html) diff --git a/prebid-server/developers/add-a-module-java.md b/prebid-server/developers/add-a-module-java.md index 5e99e3b3dd..72cd01982b 100644 --- a/prebid-server/developers/add-a-module-java.md +++ b/prebid-server/developers/add-a-module-java.md @@ -105,7 +105,7 @@ The documentation must also live on the docs.prebid.org site. Please add a markd ### Hook Interfaces -The Prebid server processing workflow is divided into serveal 'stages' where module authors can code agaist a specific function signature called a 'hook'. +The Prebid server processing workflow is divided into several 'stages' where module authors can code agaist a specific function signature called a 'hook'. The Prebid Server host company will define which modules to run in which order by setting up a configuration defining which hooks run, and which can run in parallel. diff --git a/prebid-server/developers/add-a-module.md b/prebid-server/developers/add-a-module.md index 09e87e5fcf..ab608c1521 100644 --- a/prebid-server/developers/add-a-module.md +++ b/prebid-server/developers/add-a-module.md @@ -11,10 +11,6 @@ title: Prebid Server | Developers | Adding a Module This document guides you through the process of developing a module for host companies to plug into their instance of Prebid Server. We encourage you to look at existing modules for working examples. You can also ask us questions by [submitting a GitHub issue](https://github.com/prebid/prebid-server/issues/new). -{: .alert.alert-info :} -Modules are currently only supported in [PBS-Java](https://github.com/prebid/prebid-server-java). - - * TOC {:toc } @@ -23,7 +19,7 @@ Modules are currently only supported in [PBS-Java](https://github.com/prebid/pre The ability to add optional modules in [Prebid.js](/prebid/prebidjs.html) has been widely used, with dozens of interesting features forming a healthy ecosystem of vendor choice that's good for publishers and the industry. -Prebid Server (Java) supports a rich module interface that +Prebid Server supports a rich module interface that allows anyone to contribute functionality at predefined places along the request pipeline. Here's the general development process: @@ -162,7 +158,7 @@ about how to format ATags. The details of the implementation depend on the platform. - PBS-Java: see [Adding a PBS-Java module](/prebid-server/developers/add-a-module-java.html) -- PBS-Go: TBD +- PBS-Go: see [Adding a PBS-Go module](/prebid-server/developers/add-a-module-go.html) Other rules for open source PBS pull request: diff --git a/prebid-server/pbs-modules/ortb2-blocking.md b/prebid-server/pbs-modules/ortb2-blocking.md index a752d2380c..8543098500 100644 --- a/prebid-server/pbs-modules/ortb2-blocking.md +++ b/prebid-server/pbs-modules/ortb2-blocking.md @@ -12,9 +12,6 @@ sidebarType : 5 * TOC {:toc } -{: .alert.alert-warning :} -Currently only available for the Java version of Prebid Server - ## Overview This module helps support bidders that aren't full-service SSPs by allowing @@ -71,7 +68,7 @@ There is no host-company level config for this module. ### Account-Level Config -Here's a general template for the account config: +Here's a general template for the account config used in PBS-Java: ``` { "hooks": { @@ -80,13 +77,13 @@ Here's a general template for the account config: "attributes": { "ATTRIBUTE": { // badv, bcat, bapp, btype, battr DEFAULT_SETTINGS, - "action-overrides": [{ + "action-overrides": { OVERRIDE_SETTING: [{ "conditions": { ... }, // the value below will be the datatype of the SETTING "override": VALUE }] - }] + } } } } @@ -98,10 +95,39 @@ Here's a general template for the account config: } ``` +PBS-Go version of the same config: +``` +{ + "hooks": { + "modules": { + "prebid": { + "ortb2blocking": { // start of this module's config + "attributes": { + "ATTRIBUTE": { // badv, bcat, bapp, btype, battr + DEFAULT_SETTINGS, + "action_overrides": { + OVERRIDE_SETTING: [{ + "conditions": { ... }, + // the value below will be the datatype of the SETTING + "override": VALUE + }] + } + } + } + } + } + }, + "execution_plan": { + ... + } + } +} +``` + The 'ATTRIBUTE' above is one of the 5 blockable entities defined in OpenRTB. A 'SETTING' is a feature this module supports. The following sections detail each of the 5 blockable entities. -Here's a detailed example: +Here's a detailed example for PBS-Java: ``` { "hooks": { @@ -197,6 +223,102 @@ Here's a detailed example: } ``` +For PBS-Go: +``` +{ + "hooks": { + "modules": { + "prebid": { + "ortb2blocking": { + "attributes": { + "badv": { + "enforce_blocks": false, + "blocked_adomain": [], + "action_overrides": { + "blocked_adomain": [ + { + "override": [ "example.com" ], + "conditions": { + "bidders": [ "bidderA" ] + } + } + ] + } + }, + "bcat": { + "enforce_blocks": false, + "blocked_adv_cat": [], + "action_overrides": { + "blocked_adv_cat": [ + { + "override": [ "IAB7" ], + "conditions": { + "bidders": [ "bidderA" ] + } + } + ] + } + }, + "battr": { + "enforce_blocks": false, + "action_overrides": { + "blocked_banner_attr": [ + { + "override": [1,3,8,9,10,13,14,17], + "conditions": { + "bidders": [ "bidderA" ] + } + } + ] + }, + "blocked_banner_attr": [] + } + } + } + } + }, + "execution_plan": { + "endpoints": { + "/openrtb2/amp": { + "stages": { + "bidder_request": { + "groups": [ + { + "timeout": 5, + "hook_sequence": [ + { + "module_code": "prebid.ortb2blocking", + "hook_impl_code": "ortb2-blocking-bidder-request" + } + ] + } + ] + } + } + }, + "/openrtb2/auction": { + "stages": { + "bidder_request": { + "groups": [ + { + "timeout": 5, + "hook_sequence": [ + { + "module_code": "prebid.ortb2blocking", + "hook_impl_code": "ortb2-blocking-bidder-request" + } + ] + } + ] + } + } + } + } + } + } +} +``` + ### Configuration Details The module supports flexibile definition of behavior surrounding the 5 blocked attributes. Here are the details. @@ -213,7 +335,7 @@ This attribute is related to the 'badv' of the request, and the 'adomain' of the | block-unknown-adomain | Whether to block responses not specifying adomain. Only active if enforce-blocks is true. | boolean | bidders (array of strings), media-types (array of strings) | | allowed-adomain-for-deals | List of adomains allowed for deals in general or a specific dealid. | array of strings | deal-ids (array of strings). This isn't a true override - values are added to the global. | -Here's an example account config with several scenarios: +Here's an example account config for PBS-Java with several scenarios: ``` { "hooks": { @@ -228,7 +350,7 @@ Here's an example account config with several scenarios: "blocked-adomain": [ "a.com", "b.com", "c.com" ], // but deals can return this one "allowed-adomain-for-deals": [ "a.com" ], - "action-overrides": [{ + "action-overrides": { "blocked-adomain": [{ // c.com allowed on these bidders for video "conditions": { @@ -264,8 +386,7 @@ Here's an example account config with several scenarios: "override": [ "b.com" ] } ] - } - ] + } } } } @@ -274,6 +395,68 @@ Here's an example account config with several scenarios: } ``` +For PBS-Go: +``` +{ + "hooks": { + "modules": { + "prebid": { + "ortb2blocking": { // start of this module's config + "attributes": { + "badv": { + // enforce domain blocks by default + "enforce_blocks": true, + "block_unknown_adomain": true, + // these are the default undesirable domains + "blocked_adomain": [ "a.com", "b.com", "c.com" ], + // but deals can return this one + "allowed_adomain_for_deals": [ "a.com" ], + "action_overrides": { + "blocked_adomain": [{ + // c.com allowed on these bidders for video + "conditions": { + "bidders": [ "bidderA", "bidderB" ], + "media_types": [ "video" ] + }, + "override": [ "a.com", "b.com" ] + }, + { + // more domains blocked for this bidder + "conditions": { + "bidders": [ "bidderc" ] + }, + "override": [ "a.com", "b.com", "c.com", "d.com", "e.com" ] + } + ], + "block_unknown_adomain": [ + { + // don't block unnknown for video bids from this bidder + "conditions": { + "bidders": [ "bidderA" ], + "media_types": [ "video" ] + }, + "override": false + } + ], + "allowed_adomain_for_deals": [ + { + // this deal is for normally blocked domain b.com + "conditions": { + "deal_ids": [ "12345678" ] + }, + "override": [ "b.com" ] + } + ] + } + } + } + } + } + } + } +} +``` + #### Blocked Advertiser Category This attribute is related to the 'bcat' of the request and 'cat' of the response. @@ -286,7 +469,7 @@ This attribute is related to the 'bcat' of the request and 'cat' of the response | block-unknown-adv-cat | Whether to block responses not specifying cat. Only active if enforce-blocks is true. | boolean | bidders (array of strings), media-types (array of strings) | | allowed-adv-cat-for-deals | List of adomains allowed for deals in general or a specific dealid. | array of strings | deal-ids (array of strings). This isn't a true override - values are added to the global.| -Here's an example account config with several scenarios: +Here's an example account config for PBS-Java with several scenarios: ``` { "hooks": { @@ -300,7 +483,7 @@ Here's an example account config with several scenarios: "blocked-adv-cat": [ "IAB-1", "IAB-2" ], // deals can return this cat "allowed-adv-cat-for-deals": [ "IAB-1" ], - "action-overrides": [ { + "action-overrides": { "blocked-adv-cat": [ { // block additional categories for video @@ -337,8 +520,7 @@ Here's an example account config with several scenarios: "override": [ "IAB-2" ] } ] - } - ] + } } } } @@ -347,6 +529,68 @@ Here's an example account config with several scenarios: } ``` +For PBS-Go +``` +{ + "hooks": { + "modules": { + "prebid": { + "ortb2blocking": { // start of this module's config + "attributes": { + "bcat": { + // don't enforce blocks + "enforce_blocks": false, + // block these categories by default + "blocked_adv_cat": [ "IAB-1", "IAB-2" ], + // deals can return this cat + "allowed_adv_cat_for_deals": [ "IAB-1" ], + "action_overrides": { + "blocked_adv_cat": [ + { + // block additional categories for video + "conditions": { + "media_types": [ "video" ] + }, + "override": [ "IAB-1", "IAB-2", "IAB-3", "IAB-4" ] + } + ], + "enforce_blocks": [ + { + // enforce bcat blocks for this bidder + "conditions": { + "bidders": [ "bidderA" ] + }, + "override": true + } + ], + "block_unknown_adv_cat": [ + { + // enforce unknown cat for this bidder + "conditions": { + "bidders": [ "bidderA" ] + }, + "override": true + } + ], + "allowed_adv_cat_for_deals": [ + { + // this deal ID allowed to be this category + "conditions": { + "deal_ids": [ "1111111" ] + }, + "override": [ "IAB-2" ] + } + ] + } + } + } + } + } + } + } +} +``` + #### Blocked App This attribute is related to the 'bapp' of the request and 'bundle' of the response. @@ -358,7 +602,7 @@ This attribute is related to the 'bapp' of the request and 'bundle' of the respo | enforce-blocks | Whether to enforce bundles in responses | boolean | bidders (array of strings), media-types (array of strings) | | allowed-bapp-for-deals | List of bundles allowed for deals in general or a specific dealid. | array of strings | deal-ids (array of strings). This isn't a true override - values are added to the global. | -Here's an example account config: +Here's an example account config for PBS-Java: ``` { "hooks": { @@ -370,8 +614,7 @@ Here's an example account config: "enforce-blocks": false, // these bundles blocked by default "blocked-app": [ "app1", "app2" ], - "action-overrides": [ - { + "action-overrides": { "blocked-app": [ { // this bidder also blocked for an additional app @@ -381,8 +624,7 @@ Here's an example account config: "override": [ "app1", "app2", "app3" ] } ] - } - ] + } } } } @@ -391,6 +633,39 @@ Here's an example account config: } ``` +For PBS-Go +``` +{ + "hooks": { + "modules": { + "prebid": { + "ortb2blocking": { // start of this module's config + "attributes": { + "bapp": { + // don't enforce + "enforce_blocks": false, + // these bundles blocked by default + "blocked_app": [ "app1", "app2" ], + "action_overrides": { + "blocked_app": [ + { + // this bidder also blocked for an additional app + "conditions": { + "bidders": [ "bidderA" ] + }, + "override": [ "app1", "app2", "app3" ] + } + ] + } + } + } + } + } + } + } +} +``` + #### Blocked Banner Type This attribute is related to the 'btype' of the request. @@ -406,7 +681,7 @@ Note: no enforcement is possible because the creative type is not explictly part of the response and Prebid Server does not currently contain logic to parse creatives to derive the type. -Here's an example account config: +Here's an example account config for PBS-Java: ``` { "hooks": { @@ -416,8 +691,7 @@ Here's an example account config: "btype": { // block these types for all bidders "blocked-banner-type": [ 3, 4 ], - "action-overrides": [ - { + "action-overrides": { "blocked-banner-type": [ { // block an additional type for this bidder @@ -427,8 +701,7 @@ Here's an example account config: "override": [ 3, 4, 5 ] } ] - } - ] + } } } } @@ -437,6 +710,37 @@ Here's an example account config: } ``` +For PBS-Go +``` +{ + "hooks": { + "modules": { + "prebid": { + "ortb2blocking": { // start of this module's config + "attributes": { + "btype": { + // block these types for all bidders + "blocked_banner_type": [ 3, 4 ], + "action_overrides": { + "blocked_banner_type": [ + { + // block an additional type for this bidder + "conditions": { + "bidders": [ "bidderA" ] + }, + "override": [ 3, 4, 5 ] + } + ] + } + } + } + } + } + } + } +} +``` + #### Blocked Banner Attributes This attribute is related to the 'battr' of the request and 'attr' of the response. @@ -450,7 +754,7 @@ This attribute is related to the 'battr' of the request and 'attr' of the respon See Table 5.3 in the [OpenRTB 2.5 spec](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) for the possible values. -Here's an example account config: +Here's an example account config for PBS-Java: ``` { "hooks": { @@ -462,8 +766,7 @@ Here's an example account config: "enforce-blocks": false, // block these attributes for all bidders "blocked-banner-attr": [ 1, 8, 9, 10 ], - "action-overrides": [ - { + "action-overrides": { "enforce-blocks": [ { // enforce the attr block for this bidder @@ -473,8 +776,7 @@ Here's an example account config: "override": true } ] - } - ] + } } } } @@ -482,6 +784,39 @@ Here's an example account config: } } ``` + +For PBS-Go +``` +{ + "hooks": { + "modules": { + "prebid": { + "ortb2blocking": { // start of this module's config + "attributes": { + "battr": { + // don't enforce + "enforce_blocks": false, + // block these attributes for all bidders + "blocked_banner_attr": [ 1, 8, 9, 10 ], + "action_overrides": { + "enforce_blocks": [ + { + // enforce the attr block for this bidder + "conditions": { + "bidders": [ "bidderA" ] + }, + "override": true + } + ] + } + } + } + } + } + } + } +} +``` ## Analytics Tags There's only one analytics activity defined by this module: "enforce-blocking". From 9905bbd1adf175c69a3a1f9f95bd2f94c1bde8cb Mon Sep 17 00:00:00 2001 From: Ian <68525743+decaffeinatedio@users.noreply.github.com> Date: Tue, 24 Jan 2023 10:57:27 -0800 Subject: [PATCH 043/763] remove reference to installedmodules returning an empty array (#4292) --- dev-docs/publisher-api-reference/installedModules.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/dev-docs/publisher-api-reference/installedModules.md b/dev-docs/publisher-api-reference/installedModules.md index 1696077a67..465de4dcd9 100644 --- a/dev-docs/publisher-api-reference/installedModules.md +++ b/dev-docs/publisher-api-reference/installedModules.md @@ -13,6 +13,3 @@ gulp build --modules=a,b,c ``` pbjs.installedModules would have the value ['a','b','c']. - -If you happen to compile in all 400+ modules (not a good idea!), the value of pbjs.installedModules will be an empty array. - From c464942808065a6cf7e9f98171688c9507a44f65 Mon Sep 17 00:00:00 2001 From: Seba Perez Date: Tue, 24 Jan 2023 16:47:12 -0300 Subject: [PATCH 044/763] Update eplanning adapter media_types (#4298) --- dev-docs/bidders/eplanning.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/eplanning.md b/dev-docs/bidders/eplanning.md index 35681e1247..aff7ca10e9 100644 --- a/dev-docs/bidders/eplanning.md +++ b/dev-docs/bidders/eplanning.md @@ -4,6 +4,7 @@ title: E-Planning description: Prebid E-Planning Bidder Adapter pbjs: true pbs: true +media_types: banner, video biddercode: eplanning usp_supported: true gdpr_supported: true From d993ab843d03f3890b3bcaa296cd1ef88cc99c61 Mon Sep 17 00:00:00 2001 From: Patrick McCann Date: Tue, 24 Jan 2023 15:59:54 -0500 Subject: [PATCH 045/763] Update userId.md (#4301) --- dev-docs/modules/userId.md | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/dev-docs/modules/userId.md b/dev-docs/modules/userId.md index 8a2fd56917..b259a38bf4 100644 --- a/dev-docs/modules/userId.md +++ b/dev-docs/modules/userId.md @@ -161,20 +161,6 @@ The Rubicon bid adapter would then receive {% endfor %} - -## Adapters Supporting the User ID Sub-Modules - -{% assign bidder_pages = site.pages | where: "layout", "bidder" %} - - - -{% for item in bidder_pages %} -{% if item.userIds != nil %} - -{% endif %} -{% endfor %} -
BidderIDs Supported
{{item.biddercode}}{{item.userIds}}
- ## Bidder Adapter Implementation If your ID structure is complicated, it is helpful to add tests for `pbjs.getUserIds()`, `pbjs.getUserIdsAsEids()` and `pbjs.getUserIdsAsync()`. From 29b40aa4f65bf38231056db55b2760ac802f3d56 Mon Sep 17 00:00:00 2001 From: shahinrahbariasl <56240400+shahinrahbariasl@users.noreply.github.com> Date: Wed, 25 Jan 2023 10:34:00 -0500 Subject: [PATCH 046/763] IX Bid Adapter: add gpp support flag to ix bidder doc (#4291) Co-authored-by: shahin.rahbariasl --- dev-docs/bidders/ix.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/ix.md b/dev-docs/bidders/ix.md index ddb8c7a771..09daf85dc5 100644 --- a/dev-docs/bidders/ix.md +++ b/dev-docs/bidders/ix.md @@ -12,6 +12,7 @@ coppa_supported: true gdpr_supported: true floors_supported: true usp_supported: true +gpp_supported: true media_types: banner, video, native fpd_supported: true gvl_id: 10 From 87ac6f43daf4a6e4c6a737a2232e4366475de3f3 Mon Sep 17 00:00:00 2001 From: Patrick McCann Date: Wed, 25 Jan 2023 13:46:14 -0500 Subject: [PATCH 047/763] Update gdprEnforcement.md (#4306) --- dev-docs/modules/gdprEnforcement.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/modules/gdprEnforcement.md b/dev-docs/modules/gdprEnforcement.md index 35b79ebad4..7623ed7c1f 100644 --- a/dev-docs/modules/gdprEnforcement.md +++ b/dev-docs/modules/gdprEnforcement.md @@ -59,7 +59,7 @@ A page needs to define configuration rules about how Prebid.js should enforce ea {: .alert.alert-info :} To turn on Prebid.js enforcement you must: 1) Include the gdprEnforcement module in the Prebid.js build -and 2) setConfig `consentManagement.gdpr.cmp` to either 'iab' or 'static' +and 2) setConfig `consentManagement.gdpr.cmpApi` to either 'iab' or 'static' The following fields related to GDPR enforcement are supported in the [`consentManagement`](/dev-docs/modules/consentManagement.html) object: From 0f66ab256d71567c4d51b1bb7a603271a0641fbd Mon Sep 17 00:00:00 2001 From: Patrick McCann Date: Wed, 25 Jan 2023 14:04:48 -0500 Subject: [PATCH 048/763] Update firstPartyData.md -- delete site when app occurs (#4307) * Update firstPartyData.md * Update firstPartyData.md --- features/firstPartyData.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/features/firstPartyData.md b/features/firstPartyData.md index 2aab129584..bcca76f29c 100644 --- a/features/firstPartyData.md +++ b/features/firstPartyData.md @@ -233,9 +233,9 @@ pbjs.setBidderConfig({ // different bidders can receive different data }); {% endhighlight %} -### Supplying App Content Data +### Supplying App or DOOH ORTB Objects -Occasionally, an app which embeds a webview might run Prebid.js. In this case, the app object is often specified for OpenRTB, and the site object would be invalid. When this happens, one should specify app.content.data in place of site.content.data. +Occasionally, an app which embeds a webview might run Prebid.js. In this case, the app object is often specified for OpenRTB, and the site object would be invalid. When this happens, one should specify app.content.data in place of site.content.data. We can also imagine scenarios where billboards or similar displays are running Prebid.js. In the case of a DOOH object existing, both the site object and the app object are considered invalid. {% highlight js %} pbjs.setConfig({ From 73243dfc41d1729f5feab353dd87b84b6144dce1 Mon Sep 17 00:00:00 2001 From: Chris Huie Date: Thu, 26 Jan 2023 10:49:01 -0700 Subject: [PATCH 049/763] pr conflict update (#4266) --- dev-docs/bidders/taboola.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dev-docs/bidders/taboola.md b/dev-docs/bidders/taboola.md index 956ed22219..258721c073 100644 --- a/dev-docs/bidders/taboola.md +++ b/dev-docs/bidders/taboola.md @@ -18,6 +18,8 @@ safeframes_ok: true fpd_supported: false ortb_blocking_supported: partial deals_supported: false +pbs_app_supported: false +multiformat_supported: will-not-bid sidebarType: 1 --- From 248c952c80ea2de6f2a5c7e89100428d2c6c848f Mon Sep 17 00:00:00 2001 From: Daria Boyko Date: Thu, 26 Jan 2023 19:56:24 +0200 Subject: [PATCH 050/763] Create admixeradx.md + update admixer.md with floor support (#4279) * Create admixeradx.md * add floor support for admixer bid adapter Co-authored-by: Chris Huie --- dev-docs/bidders/admixer.md | 1 + dev-docs/bidders/admixeradx.md | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 dev-docs/bidders/admixeradx.md diff --git a/dev-docs/bidders/admixer.md b/dev-docs/bidders/admixer.md index 268726ae71..3fa223044c 100644 --- a/dev-docs/bidders/admixer.md +++ b/dev-docs/bidders/admixer.md @@ -12,6 +12,7 @@ schain_supported: true gvl_id: 511 userIds: AdmixerID prebid_member: true +floors_supported: true sidebarType: 1 --- diff --git a/dev-docs/bidders/admixeradx.md b/dev-docs/bidders/admixeradx.md new file mode 100644 index 0000000000..c4747708c8 --- /dev/null +++ b/dev-docs/bidders/admixeradx.md @@ -0,0 +1,24 @@ +--- +layout: bidder +title: AdmixerADX +description: Prebid AdmixerADX Bidder Adaptor +pbjs: true +biddercode: admixeradx +aliasCode: admixer +media_types: banner, video, native +gdpr_supported: true +usp_supported: true +schain_supported: true +gvl_id: 511 +userIds: AdmixerID +prebid_member: true +floors_supported: true +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|------------------------------------------------------------------------------------------------------------------|----------------------------------------|----------| +| `zone` | required | The unique identifier of the ad placement. Could be obtained from the AdBlender UI or from your account manager. | "e5ff8e48-4bd0-4a2c-9236-55530ab8981d" | `string` | +| `kvTargeting` | optional | Key/Value - a pair of the unique values that will be used for the custom targeting option. | {key1: value2, key2: value2} | `object` | From b7abc5e5eb1a74e9ec289c0e39c35feb798b3fc6 Mon Sep 17 00:00:00 2001 From: erictmf <120136093+erictmf@users.noreply.github.com> Date: Thu, 26 Jan 2023 12:58:33 -0500 Subject: [PATCH 051/763] MobileFuse Adapter: native support added to docs (#4299) --- dev-docs/bidders/mobilefuse.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/mobilefuse.md b/dev-docs/bidders/mobilefuse.md index 55f3a1a53c..83da0561ff 100644 --- a/dev-docs/bidders/mobilefuse.md +++ b/dev-docs/bidders/mobilefuse.md @@ -3,7 +3,7 @@ layout: bidder title: MobileFuse pbs: true pbjs: false -media_types: banner, video +media_types: banner, video, native gdpr_supported: true schain_supported: true usp_supported: true From 9b20d465bebe7f50107e068bbc9208155711be87 Mon Sep 17 00:00:00 2001 From: Filip Stamenkovic Date: Fri, 27 Jan 2023 15:34:50 +0100 Subject: [PATCH 052/763] Docs for native openRTB (#3497) * more details about ortb native * added a section for bid adapters * move paragraph up * wordsmithing * added link to ortb spec Co-authored-by: Muki Seiler * fixed link * Fix ad-unit-define creative link * fix native-implementation link * add clickUrlUnesc; add openrtb spec links * fixes Co-authored-by: Michele Nasti Co-authored-by: bretg Co-authored-by: Muki Seiler --- dev-docs/adunit-reference.md | 232 ++++----- dev-docs/bidder-adaptor.md | 27 +- prebid/native-implementation-legacy.md | 474 +++++++++++++++++++ prebid/native-implementation.md | 629 ++++++++++++++++++------- 4 files changed, 1054 insertions(+), 308 deletions(-) create mode 100644 prebid/native-implementation-legacy.md diff --git a/dev-docs/adunit-reference.md b/dev-docs/adunit-reference.md index f0bfcc0c40..7464ca1ad3 100644 --- a/dev-docs/adunit-reference.md +++ b/dev-docs/adunit-reference.md @@ -86,102 +86,9 @@ See the table below for the list of properties in the `mediaTypes` object of the #### adUnit.mediaTypes.native -The `native` object contains the following properties that correspond to the assets of the native ad. +The `native` object contains properties that correspond to the assets of the native ad. -{: .table .table-bordered .table-striped } -| Name | Scope | Type | Description | -|---------------+----------+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | Optional | String | A [pre-defined native type]({{site.baseurl}}/dev-docs/show-native-ads.html#pre-defined-native-types) used as a shorthand, e.g., `type: 'image'` implies required fields `image`, `title`, `sponsoredBy`, `clickUrl`. | -| `title` | Optional | Object | The title object is to be used for the title element of the native ad. For properties, see [`native.title`](#adUnit.mediaTypes.native.title). | -| `body` | Optional | Object | The body object is to be used for the body element of the native ad. For properties, see [`native.body`](#adUnit.mediaTypes.native.body). | -| `sponsoredBy` | Optional | Object | The name of the brand associated with the ad. For properties, see [`native.sponsoredBy`](#adUnit.mediaTypes.native.sponsoredby). | -| `icon` | Optional | Object | The brand icon that will appear with the ad. For properties, see [`native.icon`](#adUnit.mediaTypes.native.icon). | -| `image` | Optional | Object | The image object is to be used for the main image of the native ad. For properties, see [`native.image`](#adUnit.mediaTypes.native.image). | -| `clickUrl` | Optional | Object | Where the user will end up if they click the ad. For properties, see [`native.clickUrl`](#adUnit.mediaTypes.native.clickUrl). | -| `cta` | Optional | String | *Call to Action* text, e.g., "Click here for more information". | - - - -##### adUnit.mediaTypes.native.image - -{: .table .table-bordered .table-striped } -| Name | Scope | Type | Description | -|-----------------+----------+---------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------| -| `required` | Optional | Boolean | Whether this asset is required. | -| `sizes` | Optional | Array[Number] or Array[Array[Number]] | All sizes this image can accept. Examples: `[400, 600]`, `[[300, 250], [300, 600]]`. | -| `aspect_ratios` | Optional | Array[Object] | Alongside `sizes`, you can define allowed aspect ratios. For properties, see [`image.aspect_ratios`](#adUnit.mediaTypes.native.image.aspect_ratios). | - - - -###### adUnit.mediaTypes.native.image.aspect_ratios - -{: .table .table-bordered .table-striped } -| Name | Scope | Type | Description | -|----------------+----------+---------+------------------------------------------------------------------------------------------------------| -| `min_height` | Optional | Integer | The minimum height required for an image to serve (in pixels). | -| `min_width` | Optional | Integer | The minimum width required for an image to serve (in pixels). | -| `ratio_height` | Required | Integer | This, combined with `ratio_width`, determines the required aspect ratio for an image that can serve. | -| `ratio_width` | Required | Integer | See above. | - - - -##### adUnit.mediaTypes.native.title - -{: .table .table-bordered .table-striped } -| Name | Scope | Type | Description | -|------------+----------+---------+------------------------------------------------------| -| `required` | Optional | Boolean | Whether a title asset is required on this native ad. | -| `len` | Optional | Integer | Maximum length of title text, in characters. | - - - -##### adUnit.mediaTypes.native.sponsoredBy - -{: .table .table-bordered .table-striped } -| Name | Scope | Type | Description | -|------------+----------+---------+-----------------------------------------------------------| -| `required` | Optional | Boolean | Whether a brand name asset is required on this native ad. | - - - -##### adUnit.mediaTypes.native.clickUrl - -{: .table .table-bordered .table-striped } -| Name | Scope | Type | Description | -|------------+----------+---------+----------------------------------------------------------| -| `required` | Optional | Boolean | Whether a click URL asset is required on this native ad. | - - - -##### adUnit.mediaTypes.native.body - -{: .table .table-bordered .table-striped } -| Name | Scope | Type | Description | -|------------+----------+---------+---------------------------------------------------| -| `required` | Optional | Boolean | Whether body text is required for this native ad. | -| `len` | Optional | Integer | Maximum length of body text, in characters. | - - - -##### adUnit.mediaTypes.native.icon - -{: .table .table-bordered .table-striped } -| Name | Scope | Type | Description | -|-----------------+----------+---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------| -| `required` | Optional | Boolean | Whether an icon asset is required on this ad. | -| `sizes` | Optional | Array[Number] or Array[Array[Number]] | All sizes this icon can accept. Examples: `[400, 600]`, `[[300, 250], [300, 600]]`. | -| `aspect_ratios` | Optional | Array[Object] | Instead of `sizes`, you can define allowed aspect ratios. For properties, see [`icon.aspect_ratios`](#adUnit.mediaTypes.native.icon.aspect_ratios). | - - - -###### adUnit.mediaTypes.native.icon.aspect_ratios - -{: .table .table-bordered .table-striped } -| Name | Scope | Type | Description | -|----------------+----------+---------+------------------------------------------------------------------------------------------------------| -| `min_width` | Optional | Integer | The minimum width required for an image to serve (in pixels). | -| `ratio_height` | Required | Integer | This, combined with `ratio_width`, determines the required aspect ratio for an image that can serve. | -| `ratio_width` | Required | Integer | See above. | +See [Prebid Native Implementation](/prebid/native-implementation.html) for details. @@ -195,25 +102,25 @@ The `native` object contains the following properties that correspond to the ass | `useCacheKey` | Optional | Boolean | Defaults to `false`. While context `'instream'` always will return an vastUrl in bidResponse, `'outstream'` will not. Setting this `true` will use cache url defined in global options also for outstream responses. | | `placement` | Recommended | Integer | 1=in-stream, 2=in-banner, 3=in-article, 4=in-feed, 5=interstitial/floating. **Highly recommended** because some bidders require more than context=outstream. | | `playerSize` | Optional | Array[Integer,Integer] | The size (width, height) of the video player on the page, in pixels. Example: `playerSize: [640, 480]` | -| `api` | Recommended | Array[Integer] | List of supported API frameworks for this impression. If an API is not explicitly listed, it is assumed not to be supported. For list, see [OpenRTB spec][openRTB]. If your video player or video ads SDK supports [Open Measurement][OpenMeasurement], **recommended** to set `7` for OMID-1| +| `api` | Recommended | Array[Integer] | List of supported API frameworks for this impression. If an API is not explicitly listed, it is assumed not to be supported. For list, see [OpenRTB 2.5 spec][openRTB]. If your video player or video ads SDK supports [Open Measurement][OpenMeasurement], **recommended** to set `7` for OMID-1| | `mimes` | Recommended | Array[String] | Content MIME types supported, e.g., `"video/x-ms-wmv"`, `"video/mp4"`. **Required by OpenRTB when using [Prebid Server][pbServer]**. | -| `protocols` | Optional | Array[Integer] | Array of supported video protocols. For list, see [OpenRTB spec][openRTB]. **Required by OpenRTB when using [Prebid Server][pbServer]**. | -| `playbackmethod` | Optional | Array[Integer] | Allowed playback methods. If none specified, all are allowed. For list, see [OpenRTB spec][openRTB]. **Required by OpenRTB when using [Prebid Server][pbServer]**. | -| `minduration` | Recommended | Integer | Minimum video ad duration in seconds, see [OpenRTB spec][openRTB]. | -| `maxduration` | Recommended | Integer | Maximum video ad duration in seconds, see [OpenRTB spec][openRTB]. | -| `w` | Recommended | Integer | Width of the video player in device independent pixels (DIPS)., see [OpenRTB spec][openRTB]. | -| `h` | Recommended | Integer | Height of the video player in device independent pixels (DIPS)., see [OpenRTB spec][openRTB]. | -| `startdelay` | Recommended | Integer | Indicates the start delay in seconds, see [OpenRTB spec][openRTB]. | -| `placement` | Optional | Integer | Placement type for the impression, see [OpenRTB spec][openRTB]. | -| `linearity` | Optional | Integer | Indicates if the impression must be linear, nonlinear, etc, see [OpenRTB spec][openRTB]. | -| `skip` | Optional | Integer | Indicates if the player will allow the video to be skipped, where 0 = no, 1 = yes., see [OpenRTB spec][openRTB]. | -| `skipmin` | Optional | Integer | Videos of total duration greater than this number of seconds can be skippable; only applicable if the ad is skippable., see [OpenRTB spec][openRTB]. | -| `skipafter` | Optional | Integer | Number of seconds a video must play before skipping is enabled; only applicable if the ad is skippable., see [OpenRTB spec][openRTB]. | -| `minbitrate` | Optional | Integer | Minimum bit rate in Kbps., see [OpenRTB spec][openRTB]. | -| `maxbitrate` | Optional | Integer | Maximum bit rate in Kbps., see [OpenRTB spec][openRTB]. | -| `delivery` | Optional | Array[Integer] | Supported delivery methods (e.g., streaming, progressive), see [OpenRTB spec][openRTB]. | -| `pos` | Optional | Integer | Ad position on screen, see [OpenRTB spec][openRTB]. | -| `playbackend` | Optional | Integer | The event that causes playback to end, see [OpenRTB spec][openRTB]. | +| `protocols` | Optional | Array[Integer] | Array of supported video protocols. For list, see [OpenRTB 2.5 spec][openRTB]. **Required by OpenRTB when using [Prebid Server][pbServer]**. | +| `playbackmethod` | Optional | Array[Integer] | Allowed playback methods. If none specified, all are allowed. For list, see [OpenRTB 2.5 spec][openRTB]. **Required by OpenRTB when using [Prebid Server][pbServer]**. | +| `minduration` | Recommended | Integer | Minimum video ad duration in seconds, see [OpenRTB 2.5 spec][openRTB]. | +| `maxduration` | Recommended | Integer | Maximum video ad duration in seconds, see [OpenRTB 2.5 spec][openRTB]. | +| `w` | Recommended | Integer | Width of the video player in device independent pixels (DIPS)., see [OpenRTB 2.5 spec][openRTB]. | +| `h` | Recommended | Integer | Height of the video player in device independent pixels (DIPS)., see [OpenRTB 2.5 spec][openRTB]. | +| `startdelay` | Recommended | Integer | Indicates the start delay in seconds, see [OpenRTB 2.5 spec][openRTB]. | +| `placement` | Optional | Integer | Placement type for the impression, see [OpenRTB 2.5 spec][openRTB]. | +| `linearity` | Optional | Integer | Indicates if the impression must be linear, nonlinear, etc, see [OpenRTB 2.5 spec][openRTB]. | +| `skip` | Optional | Integer | Indicates if the player will allow the video to be skipped, where 0 = no, 1 = yes., see [OpenRTB 2.5 spec][openRTB]. | +| `skipmin` | Optional | Integer | Videos of total duration greater than this number of seconds can be skippable; only applicable if the ad is skippable., see [OpenRTB 2.5 spec][openRTB]. | +| `skipafter` | Optional | Integer | Number of seconds a video must play before skipping is enabled; only applicable if the ad is skippable., see [OpenRTB 2.5 spec][openRTB]. | +| `minbitrate` | Optional | Integer | Minimum bit rate in Kbps., see [OpenRTB 2.5 spec][openRTB]. | +| `maxbitrate` | Optional | Integer | Maximum bit rate in Kbps., see [OpenRTB 2.5 spec][openRTB]. | +| `delivery` | Optional | Array[Integer] | Supported delivery methods (e.g., streaming, progressive), see [OpenRTB 2.5 spec][openRTB]. | +| `pos` | Optional | Integer | Ad position on screen, see [OpenRTB 2.5 spec][openRTB]. | +| `playbackend` | Optional | Integer | The event that causes playback to end, see [OpenRTB 2.5 spec][openRTB]. | If `'video.context'` is set to `'adpod'` then the following parameters are also available. @@ -447,28 +354,41 @@ pbjs.addAdUnits({ code: slot.code, mediaTypes: { native: { - image: { - required: true, - sizes: [150, 50] - }, - title: { - required: true, - len: 80 - }, - sponsoredBy: { - required: true - }, - clickUrl: { - required: true - }, - body: { - required: true - }, - icon: { - required: true, - sizes: [50, 50] - } - } + ortb: { + ver: "1.2", + assets: [{ + required: 1, + img: { + type: 1, + hmin: 50 + }, + },{ + required: 1, + title: { + len: 80 + }, + },{ + required: 1, + data: { + type: 1, + len: 30 + }, + },{ + required: 1, + data: { + type: 2, + len: 100 + }, + },{ + required: 1, + img: { + type: 3, + hmin: 200, + wmin: 267 + } + }] + } + } }, bids: [ { @@ -498,7 +418,16 @@ pbjs.addAdUnits([{ ] }, native: { - type: 'image' + ortb: { + ver: "1.2", + assets: [{ + required: 1, + img: { + type: 1, + hmin: 50 + } + }] + } }, }, bids: [{ @@ -539,7 +468,16 @@ pbjs.addAdUnits([{ ] }, native: { - type: 'image' + ortb: { + ver: "1.2", + assets: [{ + required: 1, + img: { + type: 1, + hmin: 50 + } + }] + } }, video: { context: 'outstream', @@ -669,23 +607,23 @@ For more information on Interstitial ads, reference the [Interstitial feature pa ## Related Topics -+ [Publisher API Reference]({{site.baseurl}}/dev-docs/publisher-api-reference) ++ [Publisher API Reference](/dev-docs/publisher-api-reference) + [Conditional Ad Units][conditionalAds] -+ [Show Native Ads]({{site.baseurl}}/dev-docs/show-native-ads.html) -+ [Show Video Ads]({{site.baseurl}}/dev-docs/show-video-with-a-dfp-video-tag.html) -+ [Show Outstream Video Ads]({{site.baseurl}}/dev-docs/show-outstream-video-ads.html) -+ [Show Long-Form Video Ads]({{site.baseurl}}/prebid-video/video-long-form.html) -+ [Prebid.org Video Examples]({{site.baseurl}}/examples/video/) ++ [Show Native Ads](/prebid/native-implementation.html) ++ [Show Video Ads](/dev-docs/show-video-with-a-dfp-video-tag.html) ++ [Show Outstream Video Ads](/dev-docs/show-outstream-video-ads.html) ++ [Show Long-Form Video Ads](/prebid-video/video-long-form.html) ++ [Prebid.org Video Examples](/examples/video/) + [Prebid.org Native Examples](/dev-docs//examples/native-ad-example.html) -[conditionalAds]: {{site.baseurl}}/dev-docs/conditional-ad-units.html -[setConfig]: {{site.baseurl}}/dev-docs/publisher-api-reference/setConfig.html -[configureResponsive]: {{site.baseurl}}/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-Responsive-Ads +[conditionalAds]: /dev-docs/conditional-ad-units.html +[setConfig]: /dev-docs/publisher-api-reference/setConfig.html +[configureResponsive]: /dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-Responsive-Ads [openRTB]: https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf -[pbServer]: {{site.baseurl}}/prebid-server/overview/prebid-server-overview.html +[pbServer]: /prebid-server/overview/prebid-server-overview.html [OpenMeasurement]: https://iabtechlab.com/standards/open-measurement-sdk/ [videoModule]: {{site.github.url}}/prebid-video/video-module.html diff --git a/dev-docs/bidder-adaptor.md b/dev-docs/bidder-adaptor.md index fc86aba6d5..2600288810 100644 --- a/dev-docs/bidder-adaptor.md +++ b/dev-docs/bidder-adaptor.md @@ -981,7 +981,18 @@ In order for your bidder to support the native media type: 4. Your code, including tests, should check whether native support is enabled (through the global flag `FEATURES.NATIVE`) before doing #2 or #3. This allows users not interested in native to build your adapter without any native-specific code. 5. Your spec must declare NATIVE in the supportedMediaTypes array. -The adapter code samples below fulfills requirement #2, unpacking the server's reponse and: +There are two ways Prebid supports native: +- The preferred method is for publishers to [define their native assets directly in OpenRTB format](/prebid/native-implementation.html). +- The legacy way is for pubs to supply a [Prebid-proprietary native asset syntax](/prebid/native-implementation-legacy.html). + +### ORTB Native + +1. Read the bidrequest.ortb object +2. Set the bidresponse object appropriately + +### Legacy Native + +The adapter code sample below fulfills requirement #2, unpacking the server's reponse and: 1. Checking for native assets on the response. 2. If present, filling in the `native` object with those assets. @@ -1010,7 +1021,7 @@ else if (FEATURES.NATIVE && rtbBid.rtb.native) { {% endhighlight %} -The full list of assets your bidder can set are defined in [Table 3: Native Assets Recognized by Prebid.js](/prebid/native-implementation.html). All assets can be returned as strings, or images can be returned as objects with attributes `url`, `height`, and `width`. +The full list of assets your bidder can set are defined [by legacy Prebid.js](/prebid/native-implementation-legacy.html#3-prebidjs-native-adunit-overview). All assets can be returned as strings, or images can be returned as objects with attributes `url`, `height`, and `width`. Here's an example of returning image sizes: @@ -1038,6 +1049,18 @@ The targeting key `hb_native_image` (about which your can read more in the [Nati If `image` is a string, `hb_native_image` will be populated with that string (a URL). +### Transitioning Between Native Approaches + +For some time, Prebid engineers will try to ensure that legacy-style request definitions will continue to work. However, Prebid.JS is internally converting everything to OpenRTB. So, OpenRTB is the way to go if you want to ensure your native adapter will continue to work for the long run. + +We assume that in the first times all adapters will only understand legacy-style native, so we expose two functions in `native.js`: + +- `convertOrtbRequestToProprietaryNative(bidRequests)` - this function will convert OpenRTB-style native requests to legacy format. Actually, we've already added this conversion to all adapters so they will not fail when an OpenRTB definition is used by publisher. + +- `toOrtbNativeRequest(legacyNativeAssets)` - In the future, you should convert your bid adapter to assume that OpenRTB is the standard. If, however, you encounter a native bid without the `ortb` property, you can call this function to convert legacy assets to OpenRTB. + +For the bid response, Prebid expects to find your OpenRTB bid response under `bid.native.ortb` property. + ## Adding Unit Tests Every adapter submission must include unit tests. For details about adapter testing requirements, see the **Writing Tests** section of [CONTRIBUTING.md](https://github.com/prebid/Prebid.js/blob/master/CONTRIBUTING.md). diff --git a/prebid/native-implementation-legacy.md b/prebid/native-implementation-legacy.md new file mode 100644 index 0000000000..4a37542297 --- /dev/null +++ b/prebid/native-implementation-legacy.md @@ -0,0 +1,474 @@ +--- + +layout: page_v2 +title: Prebid.js Legacy Native Implementation Guide +description: Prebid.js Legacy Native Implementation Guide +sidebarType: 1 + +--- + +# Prebid.js Legacy Native Implementation Guide +{: .no_toc} + +{% capture version2 %} +Prebid recommends new native implementations use the [OpenRTB method of defining native ads](/prebid/native-implementation.html). +{% endcapture %} +{% include alerts/alert_important.html content=version2 %} + +* TOC +{:toc} + + +## Overview + +A native ad is made up of assets such as a title, description, and image URL that are plugged into a publisher-defined HTML template. The template includes placeholder macros for those assets, and may be styled to match the form of the surrounding page. + +At a high level, Prebid.js’ support for native ads works like this: + +- The publisher establishes one or more native rendering templates and sets up the ad server. +- The publisher defines which AdUnits are eligible for native ads and the bidders participating in the auction. +- Prebid.js requests native demand from bidder adapters that support the “native” mediatype. +- Native bids are stored in the Prebid.js memory space. +- The call to the ad server is made as usual. +- If the native ad wins, it’s displayed and any trackers are fired. + +{: .alert.alert-info :} +To determine whether a bidder can supply native demand, check the [bidder parameter page](/dev-docs/bidders.html). + +## 1. Set up your ad server ad slot and HTML div + +Create your ad server in-page implementation as usual. See [Setting Up Prebid Native in GAM](/adops/gam-native.html) for instructions for how to do this with Google Ad Manager. + +## 2. Determine where the native template will be defined + +There are three options for defining the native template: + +- If you want to manage your creative within the ad server (e.g. Google Ad Manager), follow the instructions for [AdServer-Defined Template](#41-implementing-adserver-defined-template). +- If you’d prefer to manage your creative within the Prebid.js AdUnit, follow the instructions for [AdUnit-Defined Template](#42-implementing-adunit-defined-template). +- If you’d prefer to manage your creative from a separate piece of JavaScript, follow the instructions for the [Custom Renderer](#43-implementing-the-custom-renderer-scenario). + +This table summarizes how the 3 approaches work: + +**Table 1: Native Implementation Approaches** + +{: .table .table-bordered .table-striped } +| Component | AdServer-Defined Creative Scenario | AdUnit-Defined Creative Scenario | Custom Renderer Scenario | +| --- | --- |--- | --- | +| Prebid.js | mediaTypes. native.sendTargetingKeys: false | sendTargetingKeys:false and mediaTypes.native.adTemplate contains ##macros## | sendTargetingKeys:false and mediaTypes.native.rendererUrl | +| Ad Server Key Value Pairs | hb_adid | hb_adid | hb_adid | +| Ad Server | Native template loads native-render.js and calls renderNativeAd(). Uses Prebid ##macro## format. | Native creative loads native-render.js and calls renderNativeAd() with requestAllAssets: true | Native creative loads native-render.js and calls renderNativeAd(), with requestAllAssets:true | +| Prebid Universal Creative | renderNativeAd resolves macros in the creative body and CSS. | renderNativeAd resolves ##macros## in adTemplate and CSS, appending the adTemplate to the creative body | renderNativeAd loads javascript from renderUrl, calls the renderAd function, appending the results to the creative body. | +| Javascript rendering function | n/a | n/a | Receives hash of attributes, responsible for resolving any macro format and returning an HTML block. | + +## 3. Prebid.js Native AdUnit Overview + +The Prebid.js AdUnit needs to defines a native mediatype object to tell bidders which assets are required. This table defines all attributes that could be included in AdUnit.mediatypes.native. Specific examples of the three different scenarios follow. + +**Table 2: Prebid.js AdUnit Native MediaType Options** + +{: .table .table-bordered .table-striped } +| Attribute | Scope | Description | Example | Type | +| --- | --- | --- | --- | --- | +| sendTargetingKeys | optional | Defines whether or not to send the hb_native_ASSET targeting keys to the ad server. Defaults to `true` for now, though we recommend setting this to `false` and utilizing one of the ways to define a native template. | `false` | boolean | +| adTemplate | optional | Used in the ‘AdUnit-Defined Creative Scenario’, this value controls the Native template right in the page. | See [example](#42-implementing-adunit-defined-template) below. | escaped ES5 string | +| rendererUrl | optional | Used in the ‘Custom Renderer Scenario’, this points to javascript code that will produce the Native template. | 'https://host/path.js' | string | +| type | optional | A “type” is like a macro that defines a group of assets. The only value currently supported is ‘image’, which implies the following assets: image, title, sponsoredBy, clickUrl, body, icon, and cta. The first 4 are required attributes. | `image` | string | +| ASSETCODE. required | optional | Defines whether native bids must include this asset. Defaults to `false`. | `true` | boolean | +| ASSETCODE. len | optional | For text assets, bidders should pass this value through to the endpoint. Prebid.js does not enforce the responses and there’s no default. | 40 | integer | +| ASSETCODE. sizes | optional | For image assets, bidders may pass this value through to the endpoint. Prebid.js does not enforce the responses and there’s no default. Format is an array with two elements: [WIDTH, HEIGHT] | `[50, 50]` | array of integers | +| ASSETCODE. aspect_ratios | optional | For image assets, bidders may pass this value through to the endpoint. Prebid.js does not enforce the responses and there’s no default. Format is an object with the attributes in the rows below. | | object | +| ASSETCODE. aspect_ratios.min_width | optional | Part of the aspect_ratios object, bidders may pass this value through to the endpoint. Prebid.js does not enforce the responses and there’s no default. | 50 | integer | +| ASSETCODE. aspect_ratios.min_height | optional | Part of the aspect_ratios object, bidders may pass this value through to the endpoint. Prebid.js does not enforce the responses and there’s no default. | 75 | integer | +| ASSETCODE. aspect_ratios.ratio_width | optional | Part of the aspect_ratios object, bidders may pass this value through to the endpoint. Prebid.js does not enforce the responses and there’s no default. | 2 | integer | +| ASSETCODE. aspect_ratios.ratio_height | optional | Part of the aspect_ratios object, bidders may pass this value through to the endpoint. Prebid.js does not enforce the responses and there’s no default. | 3 | integer | +| ext.CUSTOMASSET | optional | Non-standard or bidder-specific assets can be supplied on the `ext` here. Attributes on custom assets are documented by the vendor. | | | + + +**Table 3: Native Assets Recognized by Prebid.js** + +{% include dev-docs/native-assets.md %} + +{: .alert.alert-warning :} +Specific bidders may not support all of the fields listed below or may return differing responses for the assets that are requested. + +### 3.1. Two ways to define image sizes + +{% include dev-docs/native-image-asset-sizes.md %} + +### 3.2 Custom native assets + +In order to fit special bidder requirements, Prebid.js supports defining assets beyond the standard set. Simply define custom attributes in mediaTypes.native.ext, and they can be retrieved at render time. Other than being under the `ext` object, custom assets are declared in the same way as the standard ones. + +{: .alert.alert-success :} +Note: The `native-render.js::renderNativeAd()` function must be called with `requestAllAssets: true`. + +Bid adapters will declare which custom assets they support in their documentation. It is recommended to prefix the asset name with the bidderCode to avoid collision issues. + +```javascript +mediaTypes { + native: { + body: { + required: true + }, + ext: { + bidderA_specialtracking: { // custom asset + required: false + } + } +} +``` + +In the native template, simply access the custom value with the normal Prebid ##macro## format assuming `hb_native_` as the prefix. For example: + +``` +
+ ... render a lovely creative ... + ... refer to ##hb_native_bidderA_specialtracking## when appropriate ... +
+``` + +## 4. Implementing the Native Template + +- If you want to manage your creative within the ad server (e.g. Google Ad Manager), follow the instructions for [AdServer-Defined Creative](#41-implementing-adserver-defined-template). +- If you’d prefer to manage your creative within the Prebid.js AdUnit, follow the instructions for [AdUnit-Defined Creative](#42-implementing-adunit-defined-template) +- If you’d prefer to manage your creative from a separate piece of JavaScript, follow the instructions for the [Custom Renderer](#43-implementing-the-custom-renderer-scenario). + +### 4.1. Implementing AdServer-Defined Template + +In this scenario, the body of the native creative template is managed within the ad server and includes special Prebid.js macros. + +#### Turn Targeting Keys off in Prebid.js + +When the native AdUnit is defined in the page, declare `sendTargetingKeys: false` in the native Object. This will prevent Prebid.js from sending all the native-related ad server targeting variables. + +Example Native AdUnit: +``` +pbjs.addAdUnits({ + code: slot.code, + mediaTypes: { + native: { + sendTargetingKeys: false, + image: { + required: true, + sizes: [150, 50] + }, + title: { + required: true, + len: 80 + }, + sponsoredBy: { + required: true + }, + clickUrl: { + required: true + }, + privacyLink: { + required: false + }, + body: { + required: true + }, + icon: { + required: true, + sizes: [50, 50] + } + } + }, + bids: [{ + ... + }] +}); +``` + +Here’s an example native AdUnit using the ‘type’ feature, which implies a number of required and optional attributes. + +``` +const adUnits = [{ + code: 'adUnit-code', + mediaTypes: { + sendTargetingKeys: false, + native: { + type: 'image' + } + } + bids: [{ + ... + }] +}]; +``` +#### Native Template in AdServer + +There are three key aspects of the native template: + +1. Build the creative with special Prebid.js macros, e.g. ##hb_native_assetname##. (See the Native Assets table above for an exhaustive list of assets and macros.) Note that macros can be placed in the body (HTML) and/or head (CSS) of the native creative. +2. Load the Prebid.js native rendering code. You may utilize the jsdelivr version of native-render.js or host your own copy. If you use the version hosted on jsdelivr, make sure any necessary ad server permissions are established. +3. Invoke the Prebid.js native rendering function with an object containing the following attributes: + 1. adid - used to identify which Prebid.js creative holds the appropriate native assets + 2. pubUrl - the URL of the page, which is needed for the HTML postmessage call + 3. requestAllAssets - tells the renderer to get all the native assets from Prebid.js rather than having to scan the template to find which specific assets are needed. + +Example creative HTML: +``` +
+ + +``` + +{: .alert.alert-warning :} +When using 'Send All Bids' mode you should update `pbNativeTagData.adId = "%%PATTERN:hb_adid_BIDDERCODE%%";` for each bidder’s creative + +Example CSS: +``` +.sponsored-post { + background-color: #fffdeb; + font-family: sans-serif; + padding: 10px 20px 10px 20px; +} + +.content { + overflow: hidden; +} + +.thumbnail { + width: 120px; + height: 100px; + float: left; + margin: 0 20px 10px 0; + background-image: url(##native_image##); + background-size: cover; +} + +h1 { + font-size: 18px; + margin: 0; +} + +a { + color: #0086b3; + text-decoration: none; +} + +p { + font-size: 16px; + color: #444; + margin: 10px 0 10px 0; +} + +.attribution { + color: #fff; + font-size: 9px; + font-weight: bold; + display: inline-block; + letter-spacing: 2px; + background-color: #ffd724; + border-radius: 2px; + padding: 4px; +} +``` +### 4.2 Implementing AdUnit-Defined Template + +In this scenario, the body of the native creative template is managed within the Prebid.js AdUnit and includes special Prebid.js macros. + +#### Prebid.js AdUnit Setup + +When the Native AdUnit is defined in the page: + +- Declare `sendTargetingKeys: false` in the native Object. This will prevent Prebid.js from sending all the native-related ad server targeting variables. +- Define the adTemplate as an escaped ES5 string using Prebid.js ##macros##. (See the appendix for an exhaustive list of assets and macros.) Note that this approach only affects the HTML body. Any CSS definitions need to be defined in the body of the template or in the AdServer. + +Example AdUnit: +``` +var adUnits = [{ + code: 'native-div', + mediaTypes: { + native: { + sendTargetingKeys: false, + adTemplate: "
\r\n
<\/div>\r\n
\r\n

\r\n \r\n ##hb_native_title##\r\n <\/a>\r\n <\/h1>\r\n

##hb_native_body##<\/p>\r\n \t

\r\n \t##hb_native_brand##\r\n \t<\/div>\r\n\t<\/div>\r\n<\/div>", + title: { + required: true, + len: 800 + }, + image: { + required: true, + sizes: [989, 742], + }, + sponsoredBy: { + required: true + } + } + } + } +}]; +``` +#### Native Template in the AdServer + +Even though the body of the native creative is defined in the AdUnit, an AdServer creative is still needed. There are two key aspects of the native creative in this scenario: + +1. Load the Prebid.js native rendering code. You may utilize the jsdelivr version of native-render.js or host your own copy. If you use the version hosted on jsdelivr, make sure any necessary ad server permissions are established. +2. Invoke the Prebid.js native rendering function with an object containing the following attributes: + 1. adid - used to identify which Prebid.js creative holds the appropriate native assets + 2. pubUrl - the URL of the page, which is needed for the HTML postmessage call + 3. requestAllAssets - tells the renderer to get all the native assets from Prebid.js. The rendering function cannot currently scan a template defined in the AdUnit. + +Example Creative HTML +``` + + +``` + +{: .alert.alert-warning :} +When using 'Send All Bids' mode you should update `pbNativeTagData.adId = "%%PATTERN:hb_adid_BIDDERCODE%%";` for each bidder’s creative + +### 4.3 Implementing the Custom Renderer Scenario + +In this scenario, the body of the native creative is managed from an external JavaScript file. + +#### Prebid.js AdUnit Setup + +When the Native AdUnit is defined in the page: + +- Declare`sendTargetingKeys: false` in the Native Object. This will prevent Prebid.js from sending all the native-related ad server targeting variables. +- Define the `rendererUrl` as a URL that defines a `window.renderAd` function in the creative iframe. Any CSS definitions need to be defined in the body (e.g. ` - + @@ -49,6 +58,7 @@ }); function initAdserver() { + window.gptLoaded.then(() => { if (pbjs.initAdserverSet) return; pbjs.initAdserverSet = true; googletag.cmd.push(function() { @@ -57,6 +67,7 @@ googletag.pubads().refresh(); }); }); + }); } setTimeout(function() { diff --git a/_includes/video/pb-os-nas-renderer.html b/_includes/video/pb-os-nas-renderer.html index 35a8a624ad..1c9137eed3 100644 --- a/_includes/video/pb-os-nas-renderer.html +++ b/_includes/video/pb-os-nas-renderer.html @@ -6,7 +6,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/_layouts/video_sample.html b/_layouts/video_sample.html index d2cf058f25..e46677cc17 100644 --- a/_layouts/video_sample.html +++ b/_layouts/video_sample.html @@ -1,23 +1,7 @@ -{% if page.videoType == "pb-is-br" %} - {% include /video/pb-is-br.html %} -{% elsif page.videoType == "pb-is-amp" %} - {% include /video/pb-is-amp.html %} -{% elsif page.videoType == "pb-is-app" %} - {% include /video/pb-is-app.html %} -{% elsif page.videoType == "pb-is-bc" %} - {% include /video/pb-is-bc.html %} -{% elsif page.videoType == "pb-is-fp" %} - {% include /video/pb-is-fp.html %} -{% elsif page.videoType == "pb-is-jw01" %} +{% if page.videoType == "pb-is-jw01" %} {% include /video/pb-is-jw01.html %} {% elsif page.videoType == "pb-is-jw02" %} {% include /video/pb-is-jw02.html %} -{% elsif page.videoType == "pb-is-kl" %} - {% include /video/pb-is-kl.html %} -{% elsif page.videoType == "pb-is-ol" %} - {% include /video/pb-is-ol.html %} -{% elsif page.videoType == "pb-is-rd" %} - {% include /video/pb-is-rd.html %} {% elsif page.videoType == "pb-is-sb" %} {% include /video/pb-is-sb.html %} {% elsif page.videoType == "pb-is-vjs" %} @@ -30,8 +14,6 @@ {% include /video/pbs-jw02.html %} {% elsif page.videoType == "pbs-kl" %} {% include /video/pbs-kl.html %} -{% elsif page.videoType == "pbs-oy" %} - {% include /video/pbs-oy.html %} {% elsif page.videoType == "pbs-rd" %} {% include /video/pbs-rd.html %} {% elsif page.videoType == "pbs-vjs" %} @@ -50,14 +32,6 @@ {% include /video/pb-os-basic-ima.html %} {% elsif page.videoType == "pb-lf-fw" %} {% include /video/pb-lf-fw.html %} -{% elsif page.videoType == "pb-cp-fp" %} - {% include /video/pb-cp-fp.html %} -{% elsif page.videoType == "pb-cp-jw" %} - {% include /video/pb-cp-jw.html %} -{% elsif page.videoType == "pb-cp-kl" %} - {% include /video/pb-cp-kl.html %} -{% elsif page.videoType == "pb-cp-vjs" %} - {% include /video/pb-cp-vjs.html %} {% endif %} @@ -102,16 +76,5 @@ {% endif %} {% endif %} - - diff --git a/dev-docs/show-video-with-a-dfp-video-tag.md b/dev-docs/show-video-with-a-dfp-video-tag.md index a2a724ccec..37abf718e6 100644 --- a/dev-docs/show-video-with-a-dfp-video-tag.md +++ b/dev-docs/show-video-with-a-dfp-video-tag.md @@ -206,16 +206,6 @@ Below, find links to end-to-end "working examples" integrating Prebid.js demand + [VideoJS]({{site.github.url}}/examples/video/instream/videojs/pb-ve-videojs.html) + [Instream and Banner Mixed](/dev-docs/examples/instream-banner-mix.html) -### Using Prebid Server Video - -+ [Brid]({{site.baseurl}}/examples/video/server/brid/pbs-ve-brid.html) -+ [JW Player - Platform]({{site.baseurl}}/examples/video/server/jwplayer/pbs-ve-jwplayer-platform.html) -+ [JW Player - Hosted]({{site.baseurl}}/examples/video/server/jwplayer/pbs-ve-jwplayer-hosted.html) -+ [Kaltura]({{site.baseurl}}/examples/video/server/kaltura/pbs-ve-kaltura.html) -+ [Ooyala]({{site.baseurl}}/examples/video/server/ooyala/pbs-ve-ooyala.html) -+ [VideoJS]({{site.baseurl}}/examples/video/server/videojs/pbs-ve-videojs.html) - - ## Related Topics + [Setting up Prebid Video in Google Ad Manager]({{site.baseurl}}/adops/setting-up-prebid-video-in-dfp.html) diff --git a/examples/video/crossplayer/flowplayer/pb-cp-flowplayer.html b/examples/video/crossplayer/flowplayer/pb-cp-flowplayer.html deleted file mode 100644 index 7b18799ba0..0000000000 --- a/examples/video/crossplayer/flowplayer/pb-cp-flowplayer.html +++ /dev/null @@ -1,276 +0,0 @@ ---- -layout: video_sample -title: Prebid Video | Instream Example with Flowplayer -description: An example of an instream pre-roll ad using Cross-Player Prebid Communication Component and Flowplayer. -videoType: pb-cp-fp -isVideo: true -sidebarType: 4 ---- - - - -
-
-
-

{{ page.title }}

-

{{page.description }}

-
- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- -
-
- -

The button will be enabled only during ads

-
- -
- -
- -
- - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-

- To allow the Cross-Player plugin to load your custom build of Prebid.js ensure that the option key `prebidPath` is set to the custom build's location. If `prebidPath` is not set, the plugin will point to `//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js`.

-
- -

Place this code in the page header.

-
-
-
-<link rel="stylesheet" href="//cdn.flowplayer.com/releases/native/stable/style/flowplayer.css">
-<script src="//cdn.flowplayer.com/releases/native/stable/flowplayer.min.js"></script>
-<script src="//cdn.flowplayer.com/releases/native/stable/plugins/ads.min.js"></script>
-<script src="//imasdk.googleapis.com/js/sdkloader/ima3.js"></script>
-
-<style>
-        #player {
-            max-width: 40em;
-            width: 100%;
-            float: left;
-        }
-
-        #controls {
-            float: left;
-            padding: 1em;
-        }
-    </style>
-
-<script type="text/javascript">
-  var options = {
-    biddersSpec: {
-      code: 'video1',
-      sizes: [640,480],
-      mediaTypes: {
-        video: {
-                context: 'instream',
-                playerSize: [640, 480],
-                mimes: ['video/mp4'],
-                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-                playbackmethod: [2],
-                skip: 1
-        }
-      },
-      bids: [
-        {
-          bidder: 'appnexus',
-          params: {
-              placementId: '13232361'  // Add your own placement id here 
- } - } - } - ] - }, - prebidConfigOptions: { - cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' - } - }, - dfpParameters: { - params: { - iu: '/19968336/prebid_cache_video_adunit', - cust_params: { - section: "blog", - anotherKey: "anotherValue" - }, - output: "vast" - } - }, - }; - function doHeaderBidding() { - window.prebidPluginCP.doPrebid(options); - } - -</script> -<script src="//acdn.adnxs.com/video/plugins/cp/PrebidPluginCP.min.js" onload="doHeaderBidding()"></script> -
-
- -

Place this code in the page body.

-
- -
-
-<div id="player"></div>
-<!--video player div-->
-<div id="player"></div>
-<div id="controls">
-    <button id="ad-toggle" disabled>
-        Toggle ad playback
-    </button>
-    <p>The button will be enabled only during ads</p>
-</div>
-
-<script type="text/javascript">
-var messageId = 100;
-var asyncTag = function() {
-  var message = {
-    command: 'PPCP:prebidRequest',
-    messageId: ++messageId
-  };
-  return new Promise(function(resolve) {
-    var listener = function(event) {
-      if (event && event.data) {
-        var data = {};
-        try {
-            data = JSON.parse(event.data);
-        } catch (error) { }
-        if (data.command === 'PPCP:prebidResponse' && data.messageId === messageId) {
-          window.removeEventListener('message', listener);
-          if (data.url && data.url != 'failed') {
-            resolve(data.url);
-          }
-          else {
-            resolve(null);
-          }
-        }
-      }
-    };
-    window.addEventListener('message', listener);
-    top.postMessage(JSON.stringify(message), '*');
-    setTimeout(function() {
-      window.removeEventListener('message', listener);
-      resolve(null);
-    }, 2000);
-  })
-}
-
-
-var player = flowplayer('#player', {
-src: "//edge.flowplayer.org/drive.mp4",
-title: "Flowplayer demo",
-description: "Demo showing ads",
-autoplay: true,
-ima: {
-  ads: [
-    {"time":0,"adTag":asyncTag}
-  ]
-},
-token:"eyJraWQiOiJZSVI0VVJZODA2TGoiLCJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJjIjoie1wiYWNsXCI6NixcImlkXCI6XCJZSVI0VVJZODA2TGpcIn0iLCJpc3MiOiJGbG93cGxheWVyIn0.YUoY8b2vl1Z15PikwgYeWQ8Cp85C-TvtmwIJ_UFxpfAYYH8yiiUrhmd3SaY_qb3AvVDz45xVV6R9wizYl-NRGQ"
-})
-
-var btn = document.querySelector('#ad-toggle');
-
-btn.addEventListener('click', function() {
-if (player.ads.adPlaying) player.ads.pause();
-else player.ads.resume();
-})
-
-function toggleDisabled(disabled) {
-return function() { btn.disabled = disabled }
-}
-
-player.ads.on(flowplayer.AdEvents.AD_STARTED, toggleDisabled(false));
-player.ads.on(flowplayer.AdEvents.AD_COMPLETED, toggleDisabled(true));
-player.ads.on(flowplayer.AdEvents.AD_SKIPPED, toggleDisabled(true));
-
-</script>
-      
-
- -
-
- - - - - - diff --git a/examples/video/crossplayer/jwplayer/pb-cp-jwplayer.html b/examples/video/crossplayer/jwplayer/pb-cp-jwplayer.html deleted file mode 100644 index 6f741b1ed7..0000000000 --- a/examples/video/crossplayer/jwplayer/pb-cp-jwplayer.html +++ /dev/null @@ -1,235 +0,0 @@ ---- -layout: video_sample -title: Prebid Video | Instream Example with JW Player (Platform) -description: An example of an instream pre-roll ad using Cross-Player Prebid Communication Component and JW Player (Platform). -videoType: pb-cp-jw -isVideo: true -sidebarType: 4 ---- - - - -
-
-
-

{{ page.title }}

-

{{page.description }}

-
- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-

- To allow the Cross-Player plugin to load your custom build of Prebid.js ensure that the option key `prebidPath` is set to the custom build's location. If `prebidPath` is not set, the plugin will point to `//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js`.

-
- -

Place this code in the page header.

-
-
-
-<script type="text/javascript">
-var options = {
-  biddersSpec: {
-    code: 'video1',
-    sizes: [640,480],
-    mediaTypes: {
-      video: {
-  context: 'instream',
-  playerSize: [640, 480],
-  mimes: ['video/mp4'],
-  protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-  playbackmethod: [2],
-  skip: 1
-      }
-    },
-    bids: [
-      {
-        bidder: 'appnexus',
-        params: {
-          placementId: '13232361'  // Add your own placement id here
- } - } - ] - }, - prebidConfigOptions: { - cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' - } - }, - dfpParameters: { - params: { - iu: '/19968336/prebid_cache_video_adunit', - cust_params: { - section: "blog", - anotherKey: "anotherValue" - }, - output: "vast" - } - }, -}; -function doHeaderBidding() { - window.prebidPluginCP.doPrebid(options); -} - -</script> -<script src="//acdn.adnxs.com/video/plugins/cp/PrebidPluginCP.min.js" onload="doHeaderBidding()"></script> -
-
- -

Place this code in the page body.

-
- -
-  
-  <div id="myElement1"></div>
-
-  <!-- This line loads a player without loading any video content -->
-  <!-- Replace this with the correct url for your player -->
-  <script src="YOUR_JW_URL"></script>
-  <script>
-      // we initialize our player instance, specifying the div to load it into
-      var playerInstance = jwplayer('myElement1');
-
-      function invokeVideoPlayer(url) {
-          // this calls setup on the player we initialized
-          // this will use the settings defined in the player we loaded above unless you override them here
-          playerInstance.setup({
-              "file": "https://vjs.zencdn.net/v/oceans.mp4",
-              // or "file" could be replaced with "playlist" and a URL
-              // from your JW Platform account in either json or rss format.
-              "width": 640,
-              "height": 480,
-              // we enable vast advertising for this player
-              "advertising": {
-                  "client": "vast",
-                  // url is the vast tag url that we passed in when we called invokeVideoPlayer in the header
-                  "tag": url
-              },
-          });
-      }
-
-      var messageId = 100;
-      var getVastUrl = function() {
-        var message = {
-          command: 'PPCP:prebidRequest',
-          messageId: ++messageId
-        };
-        return new Promise(function(resolve) {
-          var listener = function(event) {
-            if (event && event.data) {
-              var data = {};
-              try {
-                data = JSON.parse(event.data);
-              } catch (error) { }
-              if (data.command === 'PPCP:prebidResponse' && data.messageId === messageId) {
-                window.removeEventListener('message', listener);
-                if (data.url && data.url != 'failed') {
-                  resolve(data.url);
-                }
-                else {
-                  resolve(null);
-                }
-              }
-            }
-          };
-          window.addEventListener('message', listener);
-          top.postMessage(JSON.stringify(message), '*');
-          setTimeout(function() {
-            window.removeEventListener('message', listener);
-            resolve(null);
-          }, 2000);
-        })
-      };
-
-      getVastUrl().then(function(url) {
-        invokeVideoPlayer(url);
-      })
-      .catch(function() {
-        invokeVideoPlayer(null);
-      });
-  </script>
-      
-
- -
-
- - - - - - - - - diff --git a/examples/video/crossplayer/kaltura/pb-cp-kaltura.html b/examples/video/crossplayer/kaltura/pb-cp-kaltura.html deleted file mode 100644 index 6aac173d26..0000000000 --- a/examples/video/crossplayer/kaltura/pb-cp-kaltura.html +++ /dev/null @@ -1,281 +0,0 @@ ---- -layout: video_sample -title: Prebid Video | Instream Example with Kaltura -description: An example of an instream pre-roll ad using Cross-Player Prebid Communication Component and Kaltura. -videoType: pb-cp-kl -isVideo: true -sidebarType: 4 ---- - - - -
-
-
-

{{ page.title }}

-

{{page.description }}

-
- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-

- To allow the Cross-Player plugin to load your custom build of Prebid.js ensure that the option key `prebidPath` is set to the custom build's location. If `prebidPath` is not set, the plugin will point to `//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js`.

-
- -
-

Place this code in the page header.

-
-
-<script type="text/javascript">
-var options = {
-  biddersSpec: {
-    code: 'video1',
-    sizes: [640,480],
-    mediaTypes: {
-      video: {
-	context: 'instream',
-	playerSize: [640, 480],
-	mimes: ['video/mp4'],
-	protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-	playbackmethod: [2],
-	skip: 1
-      }
-    },
-    bids: [
-      {
-        bidder: 'appnexus',
-        params: {
-          placementId: '13232361'  // Add your own placement id here
- } - } - ] - }, - prebidConfigOptions: { - cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' - } - }, - dfpParameters: { - params: { - iu: '/19968336/prebid_cache_video_adunit', - cust_params: { - section: "blog", - anotherKey: "anotherValue" - }, - output: "vast" - } - }, -}; -function doHeaderBidding() { - window.prebidPluginCP.doPrebid(options); -} - -</script> -<script src="//acdn.adnxs.com/video/plugins/cp/PrebidPluginCP.min.js" onload="doHeaderBidding()"></script> -
- -
- - -
-

Place this code in the page body.

-
-
-<div id="myPlayer" style="width:640px; height:480px;"></div>
-<!-- INCLUDE KALTURA PLAYER SCRIPT
-
-Add the script for your Kaltura player. This will be part of
-the code you will copy-paste from Kaltura. -->
-
-<script src="https://cdnapi.kaltura.com/p/2222001/sp/222200100/embedIframeJs/uiconf_id/37440401/partner_id/2222001"></script>
-
-    <script type="text/javascript">
-     invokeVideoPlayer = function(url) {
-
-       /* EMBED KALTURA PLAYER
-
-         Call `kWidget.embed()` and pass in a JSON object of your
-         player settings. Most of this JSON object will be part of
-         the code you will copy paste from Kaltura.
-
-         Documentation for kWidget available here:
-         https://player.kaltura.com/docs/kwidget */
-
-         kWidget.embed({
-             "targetId": "myPlayer",
-             "wid": "_2222001",
-             "uiconf_id": 37440401,
-
-             /* ADD VAST SETTINGS TO THE PLAYER SETTINGS
-
-                 Inside `flashVars`, add another key called `"vast"` and
-                 pass in a JSON object with:
-
-                 - the position where you want your ad to play
-
-                 - the URL of the ad (which in this case will be the `url`
-                 we got back from Prebid) */
-
-             "flashvars": {
-                 "streamerType": "auto",
-                 "vast": {
-                     "plugin": true,
-                     "prerollUrl": url,
-                 }
-             },
-             "entry_id": "1_k4eka7er",
-
-             /* ADD A READY CALLBACK AND GET A REFERENCE TO THE PLAYER
-
-                 Add a ready callback to the player settings. This allows
-                 us to get a reference to the player (stored in the
-                 variable `kdp`) in order to interact with it later. */
-
-             readyCallback: function(playerId) {
-                 console.log("Kaltura player " + playerId + " is ready.");
-             }
-           });
-       }
-       var messageId = 100;
-       var getVastUrl = function() {
-         var message = {
-           command: 'PPCP:prebidRequest',
-           messageId: ++messageId
-         };
-         return new Promise(function(resolve) {
-           var listener = function(event) {
-             if (event && event.data) {
-               var data = {};
-               try {
-                   data = JSON.parse(event.data);
-               } catch (error) { }
-               if (data.command === 'PPCP:prebidResponse' && data.messageId === messageId) {
-                 window.removeEventListener('message', listener);
-                 if (data.url && data.url != 'failed') {
-                   resolve(data.url);
-                 }
-                 else {
-                   resolve(null);
-                 }
-               }
-             }
-           };
-           window.addEventListener('message', listener);
-           top.postMessage(JSON.stringify(message), '*');
-           setTimeout(function() {
-             window.removeEventListener('message', listener);
-             resolve(null);
-           }, 2000);
-         })
-       };
-
-       getVastUrl().then(function(url) {
-         invokeVideoPlayer(url);
-       })
-       .catch(function() {
-         invokeVideoPlayer(null);
-       });
-   </script>
-
-
- -
-
- - - - - - - - - diff --git a/examples/video/crossplayer/videojs/pb-cp-videojs.html b/examples/video/crossplayer/videojs/pb-cp-videojs.html deleted file mode 100644 index e180a1df47..0000000000 --- a/examples/video/crossplayer/videojs/pb-cp-videojs.html +++ /dev/null @@ -1,299 +0,0 @@ ---- -layout: video_sample -title: Prebid Video | Instream Example with VideoJS -description: An example of an instream pre-roll ad using Cross-Player Prebid Communication Component and VideoJS. -videoType: pb-cp-vjs -isVideo: true -sidebarType: 4 ---- - - - -
-
-
-

{{ page.title }}

-

{{page.description }}

-
- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- - - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-

- To allow the Cross-Player plugin to load your custom build of Prebid.js ensure that the option key `prebidPath` is set to the custom build's location. If `prebidPath` is not set, the plugin will point to `//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js`.

-
- -

Place this code in the page header.

-
-
-
-<!-- use recent version of videojs to ensure proper functioning with the iOS devices -->
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/video.js/6.4.0/video-js.css">
-<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/video.js/6.4.0/video.js"></script>
-<!-- videojs-vast-vpaid -->
-<link href="https://cdnjs.cloudflare.com/ajax/libs/videojs-vast-vpaid/2.0.2/videojs.vast.vpaid.min.css" rel="stylesheet">
-<script src="https://cdnjs.cloudflare.com/ajax/libs/videojs-vast-vpaid/2.0.2/videojs_5.vast.vpaid.min.js"></script>
-
-<script type="text/javascript">
-  var options = {
-    biddersSpec: {
-      code: 'video1',
-      sizes: [640,480],
-      mediaTypes: {
-        video: {
-    context: 'instream',
-    playerSize: [640, 480],
-    mimes: ['video/mp4'],
-    protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-    playbackmethod: [2],
-    skip: 1
-        }
-      },
-      bids: [
-        {
-          bidder: 'appnexus',
-          params: {
-            placementId: '13232361'  // Add your own placement id here
- } - } - ] - }, - prebidConfigOptions: { - cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' - } - }, - dfpParameters: { - params: { - iu: '/19968336/prebid_cache_video_adunit', - cust_params: { - section: "blog", - anotherKey: "anotherValue" - }, - output: "vast" - } - }, - }; - function doHeaderBidding() { - window.prebidPluginCP.doPrebid(options); - } - -</script> -<script src="//acdn.adnxs.com/video/plugins/cp/PrebidPluginCP.min.js" onload="doHeaderBidding()"></script> - -
-
- -

Place this code in the page body.

-
- -
-
-<div class="example-video-container">
-<video id="vid1" class="video-js vjs-default-skin vjs-big-play-centered" controls data-setup='{}' width='640' height='480'>
-  <source src="https://vjs.zencdn.net/v/oceans.mp4" type='video/mp4'/>
-  <source src="https://vjs.zencdn.net/v/oceans.webm" type='video/webm'/>
-  <source src="https://vjs.zencdn.net/v/oceans.ogv" type='video/ogg'/>
-</video>
-</div>
-<script>
-var page_load_time;
-
-page_load_time = new Date().getTime() - performance.timing.navigationStart;
-console.log(page_load_time + "ms -- Player loading!");
-
-var vid1 = videojs('vid1');
-
-page_load_time = new Date().getTime() - performance.timing.navigationStart;
-console.log(page_load_time + "ms -- Player loaded!");
-
-function invokeVideoPlayer(url) {
-
-  page_load_time = new Date().getTime() - performance.timing.navigationStart;
-  console.log(page_load_time + "ms -- Prebid VAST url = " + url);
-
-  /* Access the player instance by calling `videojs()` and passing
-    in the player's ID. Add a `ready` listener to make sure the
-    player is ready before interacting with it. */
-
-  videojs("vid1").ready(function() {
-
-      page_load_time = new Date().getTime() - performance.timing.navigationStart;
-      console.log(page_load_time + "ms -- Player is ready!");
-
-      /* PASS SETTINGS TO VAST PLUGIN
-
-        Pass in a JSON object to the player's `vastClient` (defined
-        by the VAST/VPAID plugin we're using). The requires an
-        `adTagUrl`, which will be the URL returned by Prebid. You
-        can view all the options available for the `vastClient`
-        here:
-
-        https://github.com/MailOnline/videojs-vast-vpaid#options */
-
-      var player = this;
-      var vastAd = player.vastClient({
-          adTagUrl: url,
-          playAdAlways: true,
-          verbosity: 4,
-          vpaidFlashLoaderPath: "https://github.com/MailOnline/videojs-vast-vpaid/blob/RELEASE/bin/VPAIDFlash.swf?raw=true",
-          autoplay: true
-      });
-
-      page_load_time = new Date().getTime() - performance.timing.navigationStart;
-      console.log(page_load_time + "ms -- Prebid VAST tag inserted!");
-
-      player.muted(true);
-      player.play();
-
-      page_load_time = new Date().getTime() - performance.timing.navigationStart;
-      console.log(page_load_time + "ms -- invokeVideoPlayer complete!");
-
-  });
-}
-var messageId = 100;
-var getVastUrl = function() {
-var message = {
-  command: 'PPCP:prebidRequest',
-  messageId: ++messageId
-};
-return new Promise(function(resolve) {
-  var listener = function(event) {
-    if (event && event.data) {
-      var data = {};
-      try {
-          data = JSON.parse(event.data);
-      } catch (error) { }
-      if (data.command === 'PPCP:prebidResponse' && data.messageId === messageId) {
-        window.removeEventListener('message', listener);
-        if (data.url && data.url != 'failed') {
-          resolve(data.url);
-        }
-        else {
-          resolve(null);
-        }
-      }
-    }
-  };
-  window.addEventListener('message', listener);
-  top.postMessage(JSON.stringify(message), '*');
-  setTimeout(function() {
-    window.removeEventListener('message', listener);
-    resolve(null);
-  }, 2000);
-})
-};
-
-getVastUrl().then(function(url) {
-  invokeVideoPlayer(url);
-})
-.catch(function() {
-  invokeVideoPlayer(null);
-});
-
-</script>
-      
-
- -
-
- - - - -
diff --git a/examples/video/index.md b/examples/video/index.md index 434817b52e..4faadf4926 100644 --- a/examples/video/index.md +++ b/examples/video/index.md @@ -1,7 +1,7 @@ --- layout: page_v2 title: Prebid Video Examples -description: This section provides examples of instream, outstream, server and long-form videos with Prebid.js. +description: This section provides examples of instream, outstream and long-form videos with Prebid.js. sidebarType: 4 --- @@ -19,28 +19,17 @@ The following examples are available: ## Instream - - [Brid](/examples/video/server/brid/pbs-ve-brid.html) - [Brightcove](/examples/video/instream/brightcove/pb-ve-brightcove.html) - [Flowplayer](/examples/video/instream/flowplayer/pb-ve-flowplayer.html) - [JW Player](/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html) - [JW Player (Self-Hosted)](/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html) - [Kaltura](/examples/video/instream/kaltura/pb-ve-kaltura.html) - - [Ooyala](/examples/video/instream/ooyala/pb-ve-ooyala.html) - [VideoJS](/examples/video/instream/videojs/pb-ve-videojs.html) ## Instream and Banner Mixed Page - [Instream/Banner Mixed](/dev-docs/examples/instream-banner-mix.html) -## Server - - - [Brid](/examples/video/server/brid/pbs-ve-brid.html) - - [JW Player](/examples/video/server/jwplayer/pbs-ve-jwplayer-platform.html) - - [JW Player (Self-Hosted)](/examples/video/server/jwplayer/pbs-ve-jwplayer-hosted.html) - - [Kaltura](/examples/video/server/kaltura/pbs-ve-kaltura.html) - - [Ooyala](/examples/video/server/ooyala/pbs-ve-ooyala.html) - - [VideoJS](/examples/video/server/videojs/pbs-ve-videojs.html) - ## Outstream - [Google Ad Manager](/examples/video/outstream/pb-ve-outstream-dfp.html) diff --git a/examples/video/instream/adplayerpro/pb-ve-adplayerpro.html b/examples/video/instream/adplayerpro/pb-ve-adplayerpro.html deleted file mode 100644 index 54aa70a952..0000000000 --- a/examples/video/instream/adplayerpro/pb-ve-adplayerpro.html +++ /dev/null @@ -1,157 +0,0 @@ ---- -layout: video_sample -title: Prebid Video | Instream Example with AdPlayer.Pro Player -description: An example of an instream pre-roll ad using Prebid.js and AdPlayer.Pro player. -videoType: pb-is-app -isVideo: true -sidebarType: 4 ---- - - - -
-
-
-

{{ page.title }}

-

{{page.description }}

-
- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-
- -

Place this code in the page header.

-
-
-
-<script async src="//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script>
-<script type="text/javascript" src="https://static.adplayer.pro/player/demo.js"></script> -<script> - var pbjs = pbjs || {}; - pbjs.que = pbjs.que || []; - - // define invokeVideoPlayer in advance in case we get the bids back from prebid before the entire page loads
- var tempTag = false; - var invokeVideoPlayer = function(url) { - tempTag = url; - } - - var videoAdUnit = { - code: 'video1', - mediaTypes: { - video: { - context: 'instream', - playerSize: [640, 480], - mimes: ['video/mp4'], - protocols: [1, 2, 3, 4, 5, 6, 7, 8], - playbackmethod: [2], - skip: 1 - } - }, - bids: [{ - bidder: 'appnexus', - params: { - placementId: 13232361 // Add your own placement id here
- } - }] - }; - - pbjs.que.push(function() { - pbjs.addAdUnits(videoAdUnit); // add your ad units to the bid request
- pbjs.setConfig({ - debug: true, - cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' - } - }); - - pbjs.requestBids({ - bidsBackHandler: function(bids) { - var videoUrl = pbjs.adServers.dfp.buildVideoUrl({ - adUnit: videoAdUnit, - params: { - iu: '/19968336/prebid_cache_video_adunit', - cust_params: { - section: 'blog', - anotherKey: 'anotherValue' - }, - output: 'vast' - } - }); - invokeVideoPlayer(videoUrl); - } - }); - }); - -</script> -
-
- -

Place this code in the page body.

-
- -
-<!--player div-->
-<div id="playerContainerADP" style="width:640px; height:480px;"></div>
-<script type="text/javascript">
-  invokeVideoPlayer = function(url) {
-        AdPlayerPro('playerContainerADP').setup({
-          "file": "https://static.adplayer.pro/video/640.mp4",
-          "width": 640,
-          "height": 480,
-          "autoStart": true,
-          "muted": true,
-          "advertising": {
-            "tag": url
-          }
-        });
-  };
-
-  if (tempTag) {
-    invokeVideoPlayer(tempTag);
-    tempTag = false;
-  }
-  </script>
-      
-
- -
-
- - - -
- - - diff --git a/examples/video/instream/akamai/pb-ve-amp.html b/examples/video/instream/akamai/pb-ve-amp.html deleted file mode 100644 index 26444f8100..0000000000 --- a/examples/video/instream/akamai/pb-ve-amp.html +++ /dev/null @@ -1,252 +0,0 @@ ---- -layout: video_sample -title: Prebid Video | Instream Example with Akamai Adaptive Media Player (AMP) -description: An example of an instream pre roll ad with Akamai AMP and Prebid.js. Akamai AMP also provides a built-in prebid plugin - wich simplifies and integrates the common prebid.js bidding workflow without extra efforts. -videoType: pb-is-amp -isVideo: true -sidebarType: 4 ---- - -
-
-
-

{{ page.title }}

-

{{page.description }}

-
- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production - use. It includes all available adapters. Production implementations should build from source or - customize the build using the Download page to make sure only the necessary bidder adapters are - included.

-
- -
-
-
- - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-
- -

Place this code in the page header.

-
-
-<script async src="//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script>
-<script type="text/javascript" src="https://amp.akamaized.net/hosted/1.x/player?apikey=sample"></script> -<script> - var pbjs = pbjs || {}; - pbjs.que = pbjs.que || []; - var tempTag = false; - var invokeVideoPlayer = function(url) { - tempTag = url; - } - - var videoAdUnit = { - code: 'video1', - mediaTypes: { - video: { - context: 'instream', - playerSize: [640, 480], - mimes: ['video/mp4'], - protocols: [1, 2, 3, 4, 5, 6, 7, 8], - playbackmethod: [2], - skip: 1 - } - }, - bids: [{ - bidder: 'appnexus', - params: { - placementId: 13232361 /* Add own placement id */ - } - }] - }; - - pbjs.que.push(function() { - pbjs.addAdUnits(videoAdUnit); - pbjs.setConfig({ - debug: true, - cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' - } - }); - - pbjs.requestBids({ - bidsBackHandler: function(bids) { - var videoUrl = pbjs.adServers.dfp.buildVideoUrl({ - adUnit: videoAdUnit, - params: { - iu: '/19968336/prebid_cache_video_adunit', - cust_params: { - section: 'blog', - anotherKey: 'anotherValue' - }, - output: 'vast' - } - }); - invokeVideoPlayer(videoUrl); - } - }); - }); - -</script> -
- -
- - -
-

Place this code in the page body.

-
-<!--player container-->
-<div style="width:604px; height:341px;">
-    <div id="akamai-player" </div>
-</div>
-<script type="text/javascript">
-  invokeVideoPlayer = function(url) {
-    var config = {
-        plugins: {
-            ima: {
-                resources: [
-                    { src: "//imasdk.googleapis.com/js/sdkloader/ima3.js", type: "text/javascript", async: true },
-                    { src: "${paths.plugins}ima/Ima.min.js", type: "text/javascript", async: true }
-                ],
-                adTagUrl: url
-            }
-        },
-        autoplay: 'muted',
-        media: {
-            src: "https://mdtp-a.akamaihd.net/customers/akamai/video/VfE.mp4"
-        }
-    }
-
-    akamai.amp.AMP.create('#akamai-player', config)
-  };
-
-  if (tempTag) {
-    invokeVideoPlayer(tempTag);
-    tempTag = false;
-  }
-  </script>
-            
-
-
- -

Using Prebid Plugin for AMP

-

As an alternative an adUnit can be passed within the built-int prebid plugin for AMP. The prebid bid request will be handled by prebid plugin automatically just before the ad request takes place.

-

The plugin can be implemented by providing a prebid object to the player config as follows

-
-
-    <head>
-        <script type="text/javascript" src="https://amp.akamaized.net/hosted/1.x/player?apikey=sample"></script>
-    </head>
-    <body>
-        <!--player container-->
-         <div style="width:604px; height:341px;">
-            <div id="akamai-player"/div> </div>
-        </div>
-        <script type="text/javascript">
-        var config = {
-            plugins: {
-              prebid: {
-                adServer: {
-                  name: "dfp"
-                },
-                resources: [
-                  { src: "https://cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js", type: "text/javascript", async: true },
-                  { src: "${paths.plugins}prebid/Prebid.min.js", type: "text/javascript", async: true }
-                ],
-                adUnits: {
-                  code: "video-1",
-                  mediaTypes: {
-                    video: {
-                      playerSize: [640, 480],
-                      context: 'instream',
-                      mimes: ['video/mp4'],
-                      protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-                      playbackmethod: [2]
-                    }
-                  },
-                  bids: [
-                    {
-                      bidder: "appnexus",
-                      params: {
-                        placementId: 13232361 /* Test placementId not for prod */
-                      }
-                    }
-                  ]
-                },
-                options: {
-                  cache: {
-                    url: "https://prebid.adnxs.com/pbc/v1/cache"
-                  },
-                  enableSendAllBids: true
-                }
-              },
-              ima: {
-                resources: [
-                  { src: "//imasdk.googleapis.com/js/sdkloader/ima3.js", type: "text/javascript", async: true },
-                  { src: "${paths.plugins}ima/Ima.min.js", type: "text/javascript", async: true }
-                ],
-                adTagUrl: {
-                  params: {
-                    sz: "640x480",
-                    iu: "/19968336/prebid_cache_video_adunit",
-                    output: "vast",
-                    correlator: "#{now}"
-                  }
-                }
-              }
-            },
-            autoplay: 'muted',
-            media: {
-                src: "https://mdtp-a.akamaihd.net/customers/akamai/video/VfE.mp4"
-            }
-          };
-
-        akamai.amp.AMP.create('#akamai-player', config)
-      </script>
-    </body>
-      
-
-
- - - - - diff --git a/examples/video/instream/brid/pb-ve-brid.html b/examples/video/instream/brid/pb-ve-brid.html deleted file mode 100644 index 9b719ea9c1..0000000000 --- a/examples/video/instream/brid/pb-ve-brid.html +++ /dev/null @@ -1,190 +0,0 @@ ---- -layout: video_sample -title: Prebid Video | Instream Example with Brid Player -description: An example of an instream pre-roll ad using Prebid.js and Brid player. -videoType: pb-is-br -isVideo: true -sidebarType: 4 ---- - - -
-
-
-

{{ page.title }}

-

{{page.description }}

-
- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-
- -

Place this code in the page header.

-
-
-
-<script async src="//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script>
-<script type="text/javascript" src="//services.brid.tv/player/build/brid.min.js"></script> -<script> - var pbjs = pbjs || {}; - pbjs.que = pbjs.que || []; - - // define invokeVideoPlayer in advance in case we get the bids back from prebid before the entire page loads
- var tempTag = false; - var invokeVideoPlayer = function(url){ - tempTag = url; - } - - /* - Prebid Video adUnit - */ - - var videoAdUnit = { - code: 'video1', - sizes: [640,480], - mediaTypes: { - video: { - context: 'instream', - playerSize: [640, 480], - mimes: ['video/mp4'], - protocols: [1, 2, 3, 4, 5, 6, 7, 8], - playbackmethod: [2], - skip: 1 - } - }, - bids: [ - { - bidder: 'appnexusAst', - params: { - placementId: '13232361' // Add your own placement id here
- } - } - ] - }; - - pbjs.que.push(function(){ - // add your ad units to the bid request
- pbjs.addAdUnits(videoAdUnit); - - pbjs.setConfig({ - usePrebidCache: true, - cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' - } - }); - - pbjs.requestBids({ - bidsBackHandler: function(bids) { - var videoUrl = pbjs.adServers.dfp.buildVideoUrl({ - adUnit: videoAdUnit, - params: { - iu: '/19968336/prebid_cache_video_adunit', - cust_params: { - section: "blog", - anotherKey: "anotherValue" - }, - output: "vast" - } - }); - invokeVideoPlayer(videoUrl); - } - }); - }); - - pbjs.bidderSettings = - { - 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 "10.00"; - } - }, { - key: "hb_size", - val: function (bidResponse) { - return bidResponse.size; - - } - } - ] - } - }; - -</script> -
- -
- -

Place this code in the page body.

-
- -
-
-<div id="myDiv" class="brid" style="width:640px; height:360;"></div>
-
-<script type="text/javascript">
-  invokeVideoPlayer = function(url) {
-  $bp("myDiv", {"id":"17041","width":"640","height":"360","video":"400684",
-  "Ad": [
-          {
-              "mobile": url, // Array of url's will get called in succession
-              "desktop": null, // Array of url's will get called in succession
-              "adType": "0", // Type 0 for pre roll
-              "adTimeType": "s",
-              "overlayStartAt": null,
-              "overlayDuration": null,
-              "cuepoints": null
-          }
-      ]
-  });
-  }
-  </script>
-      
-
-
-
- - - - - diff --git a/examples/video/instream/brightcove/pb-ve-brightcove.html b/examples/video/instream/brightcove/pb-ve-brightcove.html deleted file mode 100644 index 202b1f906b..0000000000 --- a/examples/video/instream/brightcove/pb-ve-brightcove.html +++ /dev/null @@ -1,298 +0,0 @@ ---- -layout: video_sample -title: Prebid Video | Instream Example with Brightcove Player -description: An example of an instream pre-roll ad using Prebid.js and Brightcove player. -videoType: pb-is-bc -isVideo: true -sidebarType: 4 ---- - - - -
-
-
-

{{ page.title }}

-

{{page.description }}

-
- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- -
- - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-
- -

Place this code in the page header.

-
-
-
-<script async src="//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script>
-<!--brightcove & prebid js code--> -<script> - var pbjs = pbjs || {}; - pbjs.que = pbjs.que || []; - iosDevice = !!navigator.platform.match(/iPhone|iPod|iPad/); - - /* PRE-DEFINE `invokeVideoPlayer` - - Because we have no way of knowing when all the bids will be - returned from Prebid we can't be sure that the browser will - reach the point where `invokeVideoPlayer` is defined before - `bidsBackHandler` fires and tries to call it. - - To prevent an "`invokeVideoPlayer` not defined" error, we - pre-define it before we make the call to Prebid, and redefine - it later on with the code to create the player and play the - ad. - - In this first version, it simply stores the winning VAST to - use later. */ - - var tempTag = false; - var invokeVideoPlayer = function(url) { - tempTag = url; - } - - var videoAdUnit = { - code: 'video1', - mediaTypes: { - video: { - context: 'instream', - playerSize: [640, 480], - mimes: ['video/mp4'], - protocols: [1, 2, 3, 4, 5, 6, 7, 8], - playbackmethod: [2], - skip: 1 - } - }, - bids: [{ - bidder: 'appnexus', - params: { - placementId: iosDevice ? 13239390 : 13232361 // Add your own placement id here. - } - }] - }; - - pbjs.que.push(function() { - pbjs.addAdUnits(videoAdUnit); - pbjs.setConfig({ - debug: true, - cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' - } - }); - pbjs.requestBids({ - bidsBackHandler: function(bids) { - var videoUrl = pbjs.adServers.dfp.buildVideoUrl({ - adUnit: videoAdUnit, - params: { - iu: '/19968336/prebid_cache_video_adunit', - cust_params: { - section: 'blog', - anotherKey: 'anotherValue' - }, - output: 'vast' - } - }); - invokeVideoPlayer(videoUrl); - } - }); - }); - -</script> -
-
- -

Place this code in the page body.

-
- -
-
-<!-- INCLUDE PLAYER AND IMA3 PLUGIN SCRIPTS
-
-First, include the player script from Brightcove. This will
-also be part of the embed code provided by Video Cloud. Then
-include the ima3 plugin script.
-
-Since we are not configuring the plugin in Video Cloud, we
-need to include this script on the page.  -->
-
-<script src="//players.brightcove.net/5530036758001/HJMTvh2YZ_default/index.min.js"></script>
-<script src="//players.brightcove.net/videojs-ima3/2/videojs.ima3.min.js"></script>
-
-<script type="text/JavaScript">
-
-    // REDEFINE `invokeVideoPlayer`
- function invokeVideoPlayer(url) { - - // USE `bc()` TO REFERENCE VIDEO PLAYER, PASS OPTIONS INTO IMA3 PLUGIN
- bc("myVideo").ima3({ - serverUrl: url, - debug: true, - timeout: 5000, - ima3SdkSettings: { - "disableCustomPlaybackForIOS10Plus": true - }, - adTechOrder: [ - "html5", - "flash" - ], - }); - - // ADD A `ready` LISTENER AND INTERACT WITH THE PLAYER   - - // Call `videojs()` and pass in the ID of the video element to   - // get a reference to the player. Call `.ready` on the player   - // to set up the event listener, and place any code that will   - // interact with the player inside the callback (such as   - // loading media files, logging events for the player or ads).
- - videojs("myVideo").ready(function() { - var myPlayer = this; - - // LOAD THE MEDIA FILE   - - // Once we know the player is ready and we have our prebid ad   - // ready, load the content video from Brightcove Studio.   - - // Replace this ID with the ID with one of your own media file IDs   - // which can be found in your Brightcove Studio account.
- - myPlayer.catalog.getVideo("5530880848001", function(error, video){ - myPlayer.catalog.load(video); - if(error) { - console.log("There was an error retrieving the media file: " + error); - } - }); - - myPlayer.on("ima3error", function() { - console.log("There was an ima3 error."); - }); - }); - }; - - // ACCOUNT FOR PAGE SPEED   - - // If prebid returned bids before the browser reached the end of   - // the page, the first version of `invokeVideoPlayer` will have   - // been called from `bidsBackHandler` so the winning vast tag   - // will be stored in `tempTag`.   - - // If that's the case, we want to call the 'real' version of   - // `invokeVideoPlayer` with the stored url to create the player   - // and play the ad.   - - // If `tempTag` is not defined, that means the browser reached   - // the end of the page before the bids came back from prebid,   - // meaning the 'real' version of `invokeVideoPlayer` was already   - // called.
- - if (tempTag) { - invokeVideoPlayer(tempTag); - tempTag = false; - } - </script> -
-
-
-
- - - - - - - - - diff --git a/examples/video/instream/flowplayer/pb-ve-flowplayer.html b/examples/video/instream/flowplayer/pb-ve-flowplayer.html deleted file mode 100644 index a7d4dd1774..0000000000 --- a/examples/video/instream/flowplayer/pb-ve-flowplayer.html +++ /dev/null @@ -1,193 +0,0 @@ ---- -layout: video_sample -title: Prebid Video | Instream Example with Flowplayer -description: An example of an instream pre-roll ad using Prebid.js and Flowplayer. -videoType: pb-is-fp -isVideo: true -sidebarType: 4 ---- - - - -
-
-
-

{{ page.title }}

-

{{page.description }}

-
- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - - -
- -
- -
- - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-
- -

Place this code in the page header.

-
-
-
-<script async src="//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script>
-<link rel="stylesheet" href="//cdn.flowplayer.com/releases/native/3/stable/style/flowplayer.css">
-<script src="//cdn.flowplayer.com/releases/native/3/stable/flowplayer.min.js"></script>
-<script src="//cdn.flowplayer.com/releases/native/3/stable/plugins/ads.min.js"></script>
-<script src="//imasdk.googleapis.com/js/sdkloader/ima3.js"></script>
-<style>
-    #player {
-        max-width: 40em;
-        width: 100%;
-        float: left;
-    }
-
-</style>
-<script>
-  var pbjs = pbjs || {};
-  pbjs.que = pbjs.que || [];
-
-  const BIDDER1_PROVIDER = 'appnexus';
-  const BIDDER1_PLACEMENT_ID = '13232361';
-
-  // The ad tag in Flowplayer can be actual ad tag or promise to an ad tag.  
-  // We return the ad tag if it is available before the player is ready to play  
-  // Otherwise the player waits for 2 secs for tag to be available.
- var adtag = null - var timeout = 2000 - window.prebid_fetcher = function() { - if (adtag) return Promise.resolve(adtag) - - return new Promise(function (resolve) { - setTimeout(function() { - resolve(adtag) - }, timeout) - }) - } - - /* - Prebid Video adUnit - */ - - var videoAdUnit = { - code: 'video1', - sizes: [640,480], - mediaTypes: { - video: { - context: 'instream', - playerSize: [640, 480], - mimes: ['video/mp4'], - protocols: [1, 2, 3, 4, 5, 6, 7, 8], - playbackmethod: [2], - skip: 1 - } - }, - bids: [ - { - bidder: BIDDER1_PROVIDER, - params: { - placementId: BIDDER1_PLACEMENT_ID - } - } - ] - }; - - pbjs.que.push(function(){ - pbjs.addAdUnits(videoAdUnit); // add your ad units to the bid request
- - pbjs.setConfig({ - debug: true, - cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' - } - }); - - pbjs.requestBids({ - bidsBackHandler: function(bids) { - var videoUrl = pbjs.adServers.dfp.buildVideoUrl({ - adUnit: videoAdUnit, - params: { - iu: '/19968336/prebid_cache_video_adunit', - cust_params: { - section: "blog", - anotherKey: "anotherValue" - }, - output: "vast" - } - }); - adtag = videoUrl; - } - }); - }); - -</script> -
-
- -

Place this code in the page body.

-
- -
-
-<div id="player"></div>
-<!--video player div-->
-<div id="player"></div>
-<div id="controls">
-    <button id="ad-toggle" disabled>
-        Toggle ad playback
-    </button>
-    <p>The button will be enabled only during ads</p>
-</div>
-
-<script type="text/javascript">
-  var player = flowplayer('#player', {
-    src: "//edge.flowplayer.org/drive.mp4",
-    title: "Flowplayer demo",
-    description: "Demo showing ads",
-    ima: {
-      ads: [{
-        time: 0, // preroll
-        adTag: 'flowplayer://prebid_fetcher' // this will try to call window.prebid_fetcher
-      ]
-    },
-    token:"eyJraWQiOiJZSVI0VVJZODA2TGoiLCJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJjIjoie1wiYWNsXCI6NixcImlkXCI6XCJZSVI0VVJZODA2TGpcIn0iLCJpc3MiOiJGbG93cGxheWVyIn0.YUoY8b2vl1Z15PikwgYeWQ8Cp85C-TvtmwIJ_UFxpfAYYH8yiiUrhmd3SaY_qb3AvVDz45xVV6R9wizYl-NRGQ"
-  })
-
-</script>
-      
-
-
-
- - - - - - diff --git a/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html b/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html index b880a48e04..9b5f087581 100644 --- a/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html +++ b/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html @@ -7,8 +7,6 @@ sidebarType: 4 --- - -
@@ -16,163 +14,173 @@

{{ page.title }}

{{page.description }}

- -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-
- -

Place this code in the page header.

-
-
-
-
-<script async src="//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script>
-<script type="text/javascript" src="https://ssl.p.jwpcdn.com/player/v/7.2.4/jwplayer.js"></script>
-<script type="text/javascript">
-  jwplayer.key = "YOUR_JW_PLAYER_KEY"; //Test Key - replace this with your own valid JWPlayer license key
-</script> -<script> - var pbjs = pbjs || {}; - pbjs.que = pbjs.que || []; - - // define invokeVideoPlayer in advance in case we get the bids back from prebid before the entire page loads
- var tempTag = false; - var invokeVideoPlayer = function(url) { - tempTag = url; - } - - var videoAdUnit = { - code: 'video1', - mediaTypes: { - video: { - context: 'instream', - playerSize: [640, 480], - mimes: ['video/mp4'], - protocols: [1, 2, 3, 4, 5, 6, 7, 8], - playbackmethod: [2], - skip: 1 - } - }, - bids: [{ - bidder: 'appnexus', - params: { - placementId: 13232361 // Add your own placement id here
- } - }] - }; - - pbjs.que.push(function() { - pbjs.addAdUnits(videoAdUnit); // add your ad units to the bid request
- pbjs.setConfig({ - debug: true, - cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' - } - }); - - pbjs.requestBids({ - bidsBackHandler: function(bids) { - var videoUrl = pbjs.adServers.dfp.buildVideoUrl({ - adUnit: videoAdUnit, - params: { - iu: '/19968336/prebid_cache_video_adunit', - cust_params: { - section: 'blog', - anotherKey: 'anotherValue' - }, - output: 'vast' - } - }); - invokeVideoPlayer(videoUrl); - } - }); - }); - -</script> -
+
-

Place this code in the page body.

-
- - -
-
-
-<!--player div-->
-<div id="playerContainerJW" style='width:640px; height:480px; border:1px solid black;'></div>
-<script>
-  var jwPlayerInstance = jwplayer("playerContainerJW");
-
-  invokeVideoPlayer = function(url) {
-      jwPlayerInstance.setup({
-          "file": "https://vjs.zencdn.net/v/oceans.mp4",
-          "width": 640,
-          "height": 480,
-          "autostart": true,
-          "mute": false,
-          "advertising": {
-              client: "vast",
-          }
-      });
-
-      jwPlayerInstance.on('beforePlay', function() {
-          jwPlayerInstance.playAd(url);
+    
 	
- diff --git a/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html b/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html index e2116360fb..26fb0faa8d 100644 --- a/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html +++ b/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html @@ -16,168 +16,171 @@

{{ page.title }}

{{page.description }}

- -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- - - - -
- -

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-
- -

Place this code in the page header.

-
-
-
-<!--Prebid.js and video player code-->
-<script async src="//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script>
-<script>
-    var pbjs = pbjs || {};
-    pbjs.que = pbjs.que || [];
-
-    // define invokeVideoPlayer in advance in case we get the bids back from prebid before the entire page loads
- var tempTag = false; - var invokeVideoPlayer = function(url) { - tempTag = url; - } - - var videoAdUnit = { - code: 'video1', - mediaTypes: { - video: { - context: 'instream', - playerSize: [640, 480], - mimes: ['video/mp4'], - protocols: [1, 2, 3, 4, 5, 6, 7, 8], - playbackmethod: [2], - skip: 1 - } - }, - bids: [{ - bidder: 'appnexus', - params: { - placementId: 13232361 //put your placement id here
- } - }] - }; - - pbjs.que.push(function() { - //put your adunits here
- pbjs.addAdUnits(videoAdUnit); - - pbjs.setConfig({ - debug: true, - cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' - } - }); - - pbjs.requestBids({ - bidsBackHandler: function(bids) { - var videoUrl = pbjs.adServers.dfp.buildVideoUrl({ - adUnit: videoAdUnit, - params: { - iu: '/19968336/prebid_cache_video_adunit', - cust_params: { - section: 'blog', - anotherKey: 'anotherValue' - }, - output: 'vast' - } - }); - invokeVideoPlayer(videoUrl); - } - }); - }); - -</script> -
-
- -

Place this code in the page body.

-
- -
-  
-<div id="myElement1"></div>
-
-<!-- Replace this with the correct url for your player -->
-<script src="YOUR_JW_URL"></script>
-<script>
-    // we initialize our player instance, specifying the div to load it into
- var playerInstance = jwplayer('myElement1'); - - function invokeVideoPlayer(url) { - // this calls setup on the player we initialized   - // this will use the settings defined in the player we loaded above unless you override them here
- playerInstance.setup({ - "file": "https://vjs.zencdn.net/v/oceans.mp4", - // or "file" could be replaced with "playlist" and a URL - // from your JW Platform account in either json or rss format. - "width": 640, - "height": 480, - // we enable vast advertising for this player
- "advertising": { - "client": "vast", - // url is the vast tag url that we passed in when we called invokeVideoPlayer in the header
- "tag": url - }, - }); - } - - if (tempTag) { - invokeVideoPlayer(tempTag); - tempTag = false; - } - -</script> - -
-
+
+

(Sorry, video code examples aren't available with your cookie privacy settings.)

+

Cookie Settings


+
+ +
- - - - + - - + diff --git a/examples/video/instream/kaltura/pb-ve-kaltura.html b/examples/video/instream/kaltura/pb-ve-kaltura.html deleted file mode 100644 index a5ce534724..0000000000 --- a/examples/video/instream/kaltura/pb-ve-kaltura.html +++ /dev/null @@ -1,286 +0,0 @@ ---- -layout: video_sample -title: Prebid Video | Instream Example with Kaltura -description: An example of an instream pre-roll ad using Prebid.js and Kaltura. -videoType: pb-is-kl -isVideo: true -sidebarType: 4 ---- - - - -
-
-
-

{{ page.title }}

-

{{page.description }}

-
- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-
- -
-

Place this code in the page header.

-
-
-<script>
-    var pbjs = pbjs || {};
-    pbjs.que = pbjs.que || [];
-
-    /* PRE-DEFINE `invokeVideoPlayer`
-
-    Because we have no way of knowing when all the bids will be
-    returned from Prebid we can't be sure that the browser will
-    reach the point where `invokeVideoPlayer` is defined before
-    `bidsBackHandler` fires and tries to call it.
-
-    To prevent an "`invokeVideoPlayer` not defined" error, we
-    pre-define it before we make the call to Prebid, and redefine
-    it later on with the code to create the player and play the
-    ad.
-
-    In this first version it simply stores the winning VAST to use
-    later. */
-
-    var tempTag = false;
-    var invokeVideoPlayer = function(url) {
-        tempTag = url;
-    }
-
-    var videoAdUnit = {
-        code: 'video1',
-        mediaTypes: {
-            video: {
-                context: 'instream',
-                playerSize: [640, 480],
-                mimes: ['video/mp4'],
-                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-                playbackmethod: [2],
-                skip: 1
-            }
-        },
-        bids: [{
-            bidder: 'appnexus',
-            params: {
-                placementId: 13232361  // Add your own placement ID here
- } - }] - }; - - pbjs.que.push(function() { - pbjs.addAdUnits(videoAdUnit); // add your ad units to the bid request
- - pbjs.setConfig({ - debug: true, - cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' - } - }); - - pbjs.requestBids({ - bidsBackHandler: function(bids) { - var videoUrl = pbjs.adServers.dfp.buildVideoUrl({ - adUnit: videoAdUnit, - params: { - iu: '/19968336/prebid_cache_video_adunit', - cust_params: { - section: 'blog', - anotherKey: 'anotherValue' - }, - output: 'vast' - } - }); - invokeVideoPlayer(videoUrl); - } - }); - }); - -</script> -
- -
- - -
-

Place this code in the page body.

-
-
-<div id="myPlayer" style="width:640px; height:480px;"></div>
-<!-- INCLUDE KALTURA PLAYER SCRIPT
-
- Add the script for your Kaltura player. This will be part of
- the code you will copy-paste from Kaltura. -->
-
-<script src="https://cdnapi.kaltura.com/p/2222001/sp/222200100/embedIframeJs/uiconf_id/37440401/partner_id/2222001"></script>
-
-<script>
-    invokeVideoPlayer = function(url) {
-
-        /* EMBED KALTURA PLAYER
-
-           Call `kWidget.embed()` and pass in a JSON object of your
-           player settings. Most of this JSON object will be part of
-           the code you will copy paste from Kaltura.
-
-           Documentation for kWidget available here:
-           https://player.kaltura.com/docs/kwidget */
-
-        kWidget.embed({
-            "targetId": "myPlayer",
-            "wid": "_2222001",
-            "uiconf_id": 37440401,
-
-            /* ADD VAST SETTINGS TO THE PLAYER SETTINGS
-
-               Inside `flashVars`, add another key called `"vast"` and
-               pass in a JSON object with:
-
-               - the position where you want your ad to play
-
-               - the URL of the ad (which in this case will be the `url`
-               we got back from Prebid) */
-
-            "flashvars": {
-                "streamerType": "auto",
-                "vast": {
-                    "plugin": true,
-                    "prerollUrl": url,
-                }
-            },
-            "entry_id": "1_k4eka7er",
-
-            /* ADD A READY CALLBACK AND GET A REFERENCE TO THE PLAYER
-
-               Add a ready callback to the player settings. This allows
-               us to get a reference to the player (stored in the
-               variable `kdp`) in order to interact with it later. */
-
-            readyCallback: function(playerId) {
-                console.log("Kaltura player " + playerId + " is ready.");
-            }
-        });
-    }
-
-    /* ACCOUNT FOR PAGE SPEED
-
-       If Prebid returned bids before the browser reached the end of
-       the page, the first version of `invokeVideoPlayer` will have
-       been called from `bidsBackHandler` so the winning VAST tag
-       will be stored in the `tempTag` variable.
-
-       If that's the case, we want to call the 'real' version of
-       `invokeVideoPlayer` with the stored URL to create the player
-       and play the ad.
-
-       If `tempTag` is not defined, that means the browser reached
-       the end of the page before the bids came back from Prebid,
-       meaning the 'real' version of `invokeVideoPlayer` was already
-       called. */
-
-    if (tempTag) {
-        invokeVideoPlayer(tempTag);
-        tempTag = false;
-    }
-
-</script>  
-
-
- -
-
- - - - - - - - - - diff --git a/examples/video/instream/ooyala/pb-ve-ooyala.html b/examples/video/instream/ooyala/pb-ve-ooyala.html deleted file mode 100644 index 605ed7fe46..0000000000 --- a/examples/video/instream/ooyala/pb-ve-ooyala.html +++ /dev/null @@ -1,352 +0,0 @@ ---- -layout: video_sample -title: Prebid Video | Instream Example with Ooyala player -description: An example of an instream pre-roll ad using Prebid.js and Ooyala player . -videoType: pb-is-ol -isVideo: true -sidebarType: 4 ---- - - - -
-
-
-

{{ page.title }}

-

{{page.description }}

-
- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-
- -

Place this code in the page header.

-
-
-
-<script async src="//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script>
-<!-- LOAD OOYALA PLUGINS
-
- Load the Ooyala player scripts you plan to use.
-
- You must load the core player script, the scripts for
- whatever video formats you want to support, and the scripts
- for the ad manager you want to use.
-
- The scripts themselves and a guide for choosing which ones
- you need can be found here:
-
- https://help.ooyala.com/video-platform/documentation/concepts/pbv4_plugins.html
--->
-
-<!-- CORE PLAYER REQUIRED -->
-<script src="//player.ooyala.com/static/v4/production/latest/core.min.js"></script>
-
-<!-- VIDEO PLUGINS -->
-<script src="//player.ooyala.com/static/v4/production/latest/video-plugin/main_html5.min.js"></script>
-<script src="//player.ooyala.com/static/v4/production/latest/video-plugin/bit_wrapper.min.js"></script>
-<script src="//player.ooyala.com/static/v4/production/latest/video-plugin/osmf_flash.min.js"></script>
-
-<!-- HTML5 SKIN -->
-<script src="//player.ooyala.com/static/v4/production/latest/skin-plugin/html5-skin.min.js"></script>
-
-<!-- SKIN ASSET -->
-<link rel="stylesheet" href="//player.ooyala.com/static/v4/production/latest/skin-plugin/html5-skin.min.css" />
-
-<!-- IMA PLUGIN -->
-<script src="//player.ooyala.com/static/v4/production/latest/ad-plugin/google_ima.js"></script>
-<script>
-    var pbjs = pbjs || {};
-    pbjs.que = pbjs.que || [];
-    iosDevice = !!navigator.platform.match(/iPhone|iPod|iPad/);
-    console.log("|||| Start of prebid: " + performance.now());
-
-    /* PRE-DEFINE `invokeVideoPlayer`
-
-       Because we have no way of knowing when all the bids will be
-       returned from prebid we can't be sure that the browser will
-       reach the point where `invokeVideoPlayer` is defined before
-       bidsBackHandler fires and tries to call it.
-
-       To prevent a `invokeVideoPlayer not defined` error, we
-       pre-define it before we make the call to prebid, and redefine
-       it later on with the code to create the player and play the
-       ad. In this first version it simply stores the winning VAST to
-       use later.  */
-
-    var tempTag = false;
-    var invokeVideoPlayer = function(url) {
-        tempTag = url;
-    }
-
-    var videoAdUnit = {
-        code: 'video1',
-        mediaTypes: {
-            video: {
-    context: 'instream',
-    playerSize: [640, 480],
-    mimes: ['video/mp4'],
-    protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-    playbackmethod: [2],
-    skip: 1
-            }
-        },
-        bids: [{
-            bidder: 'appnexus',
-            params: {
-                placementId: iosDevice ? 13239390 : 13232361 // Add your own placement id here.
-            }
-        }]
-    };
-
-    pbjs.que.push(function() {
-        pbjs.addAdUnits(videoAdUnit); // add your ad units to the bid request
- - /* Use the Prebid Cache - required for video ads */ - - pbjs.setConfig({ - debug: true, - cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' - } - }); - - pbjs.requestBids({ - bidsBackHandler: function(bids) { - - /* Build the DFP video URL */ - - var videoUrl = pbjs.adServers.dfp.buildVideoUrl({ - adUnit: videoAdUnit, - params: { - iu: '/19968336/prebid_cache_video_adunit', - cust_params: { - section: 'blog', - anotherKey: 'anotherValue' - }, - output: 'vast' - } - }); - invokeVideoPlayer(videoUrl); - } - }); - }); - -</script> -
- -

Place this code in the page body.

-
- -
-
-<script>
-    var invokeVideoPlayer = function(url) {
-        console.log("invoking video player with url " + url);
-
-        /* DEFINE PLAYER SETTINGS
-
-           Define the settings you want for your player in a JSON
-           object. These lines will be part of the embed code you
-           copy-paste from Ooyala Backlot, we just need to add the ad
-           parameters.  */
-
-        var playerParam = {
-            'pcode': 'lsbWkyOjtI6LOjmlqk2o5I-TsWRA',
-            'playerBrandingId': '45b8294c6ad14265b2b47586c911cb07',
-            'debug': true,
-            'autoplay': true,
-            'initialVolume': 0.0,
-            'skin': {
-                'config': '//player.ooyala.com/static/v4/stable/4.6.9/skin-plugin/skin.json',
-                'inline': {
-                    'adScreen': {
-                        'showAdMarquee': true,
-                        'showAdCountDown': true,
-                        'showControlBar': true,
-                        'useGoogleAdUI': true
-                    }
-                }
-            },
-
-            /* ADD THE AD PARAMETERS TO THE PLAYER SETTINGS
-
-               Create a new JSON object in the player parameters. The key
-               should be the ad manager you're using (in our case we're
-               using the Google IMA ads manager, so the key is
-               `"google-ima-ads-manager"`). The IMA ads manager requires
-               an ad set (which we've named `"all_ads"`).
-
-               For more information see the Ooyala docs:
-
-               https://help.ooyala.com/video-platform/concepts/pbv4_ads_dev_google_ima.html:
-
-               Make sure the ad parameters are properly formatted JSON.
-             */
-            "google-ima-ads-manager": {
-                "all_ads": [{
-                    "position": "0",
-                    "position_type": "t",
-                    "tag_url": url
-                }],
-                'showAdControls': true
-            }
-        };
-
-        /* INITIALIZE THE PLAYER
-
-           Use the `OO.ready()` event to make sure that all the
-           necessary Ooyala plugins have loaded before attempting to
-           create the player. Once it has, call `create()` and pass
-           in:
-
-           - the div you're creating the player in
-
-           - the ID of the content video
-
-           - the player settings we created above */
-
-        OO.ready(function() {
-            console.log("OO is ready, invoking");
-            console.dir(playerParam);
-            window.pp = OO.Player.create('container', 'ltcG54NzE6Bxk08Mqs1_KMcQZDN7lH8N', playerParam);
-        });
-    }
-
-    /* ACCOUNT FOR PAGE SPEED
-
-       If Prebid returned bids before the browser reached the end of
-       the page, the first version of `invokeVideoPlayer` will have
-       been called from `bidsBackHandler`, so the winning VAST tag will
-       be stored in `tempTag`.
-
-       If that's the case, we want to call the "real" version of
-       `invokeVideoPlayer` with the stored URL to create the player and
-       play the ad.
-
-       If `tempTag` is not defined, that means the browser reached the
-       end of the page before the bids came back from Prebid, meaning
-       the "real" version of `invokeVideoPlayer` was already called.
-     */
-
-    if (tempTag) {
-        invokeVideoPlayer(tempTag);
-        tempTag = false;
-    }
-
-</script>
-      
-
-
-
- - - - diff --git a/examples/video/instream/radiant/pb-ve-radiant.html b/examples/video/instream/radiant/pb-ve-radiant.html deleted file mode 100644 index ddfa9b9d8c..0000000000 --- a/examples/video/instream/radiant/pb-ve-radiant.html +++ /dev/null @@ -1,326 +0,0 @@ ---- -layout: video_sample -title: Prebid Video | Instream Example with Radiant Media Player -description: An example of an instream pre-roll ad using Prebid.js and Radiant Media Player . -videoType: pb-is-rd -isVideo: true -sidebarType: 4 ---- - -
-
-
-

{{ page.title }}

-

{{page.description }}

-
- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-
- -

Place this code in the page header.

-
-
-
-<!--production version of prebid.js-->
-<script async src="//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script>
-
-<!-- Radiant Media Player core library - debug browser console mode (use rmp.min.js for production) -->
-<script src="https://cdn.radiantmediatechs.com/rmp/5.5.6/js/rmp.debug.js"></script>
-      
-
- - -

Place this code in the page body.

-
- -
-
-<script>
-  /* our app where we run player
-     our app variables */
-  var pbApp = {};
-  pbApp.playerSetup = false;
-  pbApp.prebidTempTag = false;
-  pbApp.debug = true;
-  /* in case pre-bidding takes too long or fails we provide a playerSetupTimeout and fallbackAdTagUrl
-     to insure player setup happens - this is optional */
-  pbApp.playerSetupTimeout = 5000;
-  pbApp.fallbackAdTagUrl = 'https://www.radiantmediaplayer.com/vast/tags/inline-linear-1.xml';
-  /* no console - no logs */
-  if (typeof window.console === 'undefined' || typeof window.console.log === 'undefined' || typeof window.console.dir === 'undefined') {
-    pbApp.debug = false;
-  }
-
-  /* invokeVideoPlayer may not be defined when bidsBackHandler runs
-     we pre-defined it here so as to capture the returned adTagUrl to be passed to the player */
-  pbApp.invokeVideoPlayer = function (adTagUrl) {
-    pbApp.prebidTempTag = adTagUrl;
-  };
-
-  /* prebid.js variables */
-  var pbjs;
-  pbjs = pbjs || {};
-  pbjs.que = pbjs.que || [];
-
-  /* Prebid video ad unit
-     This is a working example but you must use your own settings/bidders for production
-     More docs at https://prebid.org/prebid-video/video-overview.html */
-  var videoAdUnit = {
-    code: 'video1',
-    mediaTypes: {
-      video: {
-        context: 'instream',
-        playerSize: [640, 480],
-        mimes: ['video/mp4'],
-        protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-        playbackmethod: [2],
-        skip: 1
-      }
-    },
-    bids: [{
-      bidder: 'appnexus',
-      params: {
-        placementId: 13232361
-      }
-    }]
-  };
-
-  pbjs.que.push(function () {
-    pbjs.addAdUnits(videoAdUnit);
-
-    pbjs.setConfig({
-      debug: true,
-      cache: {
-        url: 'https://prebid.adnxs.com/pbc/v1/cache'
-      }
-    });
-
-    pbjs.requestBids({
-      bidsBackHandler: function (bids) {
-        if (pbApp.debug) {
-          window.console.dir(bids);
-        }
-        var videoUrl = pbjs.adServers.dfp.buildVideoUrl({
-          adUnit: videoAdUnit,
-          params: {
-            iu: '/19968336/prebid_cache_video_adunit',
-            cust_params: {
-              section: 'blog',
-              anotherKey: 'anotherValue'
-            },
-            output: 'vast'
-          }
-        });
-        pbApp.invokeVideoPlayer(videoUrl);
-      }
-    });
-  });
-
-  /* here we re-define invokeVideoPlayer with Radiant Media Player set-up */
-  pbApp.invokeVideoPlayer = function (adTagUrl) {
-    if (pbApp.playerSetup) {
-      return;
-    }
-    pbApp.playerSetup = true;
-    if (pbApp.debug) {
-      window.console.log('invokeVideoPlayer with Prebid VAST url = ' + adTagUrl);
-    }
-    var src = {
-      mp4: [
-        'https://www.rmp-streaming.com/media/bbb-360p.mp4'
-      ]
-    };
-    var settings = {
-      licenseKey: 'Kl8lZ292K3N6MmVvZD9yb201ZGFzaXMzMGRiMEElXyo=',
-      src: src,
-      width: 640,
-      height: 360,
-      /*we enabled ads for our player
-       note that we requested a winning bid for skippable auto_play_sound_off so player starts muted autoplay*/
-      ads: true,
-      autoplay: true,
-      muted: true,
-      // we use Google IMA in this demo, but you can use rmp-vast as well depending on your requirements
- adParser: 'ima', - // since we may request a skippable ads we set adDisableCustomPlaybackForIOS10Plus: true to allow rendering of skippable ads on iOS
- adDisableCustomPlaybackForIOS10Plus: true, - // here is our winner VAST adTagUrl
- adTagUrl: adTagUrl, - poster: 'https://www.radiantmediaplayer.com/images/poster-rmp-showcase.jpg' - }; - var elementID = 'rmpPlayer'; - var rmp = new RadiantMP(elementID); - rmp.init(settings); - - }; - - /* in case we already have a winning bid let's use the returned adTagUrl to run player */ - if (pbApp.prebidTempTag) { - pbApp.invokeVideoPlayer(pbApp.prebidTempTag); - pbApp.prebidTempTag = false; - } - - /* in case something went wrong (latency, network errors, bid issues ...) and we have no winning bid we still need to run the player - this is done after pbApp.playerSetupTimeout ms and we use fallbackAdTagUrl as adTagUrl to pass to the player */ - setTimeout(function () { - if (pbApp.playerSetup) { - return; - } - pbApp.invokeVideoPlayer(pbApp.fallbackAdTagUrl); - }, pbApp.playerSetupTimeout); - </script> -
-
-
-
- - - - diff --git a/examples/video/instream/videojs/pb-ve-videojs.html b/examples/video/instream/videojs/pb-ve-videojs.html index c99dc1785e..c3be4fd6bd 100644 --- a/examples/video/instream/videojs/pb-ve-videojs.html +++ b/examples/video/instream/videojs/pb-ve-videojs.html @@ -16,231 +16,246 @@

{{ page.title }}

{{page.description }}

- -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- +
+

(Sorry, video code examples aren't available with your cookie privacy settings.)

+

Cookie Settings


- - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-
- -

Place this code in the page header.

-
-
-
-<script async src="//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script>
-<!-- use recent version of videojs to ensure proper functioning with the iOS devices -->
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/video.js/6.4.0/video-js.css">
-<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/video.js/6.4.0/video.js"></script>
-<!-- videojs-vast-vpaid -->
-<link href="https://cdnjs.cloudflare.com/ajax/libs/videojs-vast-vpaid/2.0.2/videojs.vast.vpaid.min.css" rel="stylesheet">
-<script src="https://cdnjs.cloudflare.com/ajax/libs/videojs-vast-vpaid/2.0.2/videojs_5.vast.vpaid.min.js"></script>
-
-<script>
-    var pbjs = pbjs || {};
-    pbjs.que = pbjs.que || [];
-
-
-    /* Prebid video ad unit */
-
-    var videoAdUnit = {
-        code: 'video1',
-        mediaTypes: {
-            video: {
-                context: 'instream',
-                playerSize: [640, 480],
-                mimes: ['video/mp4'],
-                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-                playbackmethod: [2],
-                skip: 1
-            }
-        },
-        bids: [{
-            bidder: 'appnexus',
-            params: {
-                placementId: 13232361
-            }
-        }]
-    };
-
-    pbjs.que.push(function() {
-        pbjs.addAdUnits(videoAdUnit);
-
-        pbjs.setConfig({
-            debug: true,
-            cache: {
-                url: 'https://prebid.adnxs.com/pbc/v1/cache'
-            }
-        });
-
-        pbjs.requestBids({
-            bidsBackHandler: function(bids) {
-                var videoUrl = pbjs.adServers.dfp.buildVideoUrl({
-                    adUnit: videoAdUnit,
-                    params: {
-                        iu: '/19968336/prebid_cache_video_adunit',
-                        cust_params: {
-                            section: 'blog',
-                            anotherKey: 'anotherValue'
-                        },
-                        output: 'vast'
-                    }
-                });
-                invokeVideoPlayer(videoUrl);
-            }
-        });
-    });
-
-</script>
-      
-
- -

Place this code in the page body.

-
- -
-
-<div class="example-video-container">
-  <video id="vid1" class="video-js vjs-default-skin vjs-big-play-centered" controls data-setup='{}' width='640' height='480'>
-    <source src="https://vjs.zencdn.net/v/oceans.mp4" type='video/mp4'/>
-    <source src="https://vjs.zencdn.net/v/oceans.webm" type='video/webm'/>
-    <source src="https://vjs.zencdn.net/v/oceans.ogv" type='video/ogg'/>
-  </video>
-</div>
-
-
-<script>
-    var page_load_time;
-
-    page_load_time = new Date().getTime() - performance.timing.navigationStart;
-    console.log(page_load_time + "ms -- Player loading!");
-
-    var vid1 = videojs('vid1');
-
-    page_load_time = new Date().getTime() - performance.timing.navigationStart;
-    console.log(page_load_time + "ms -- Player loaded!");
-
-    function invokeVideoPlayer(url) {
-
-        page_load_time = new Date().getTime() - performance.timing.navigationStart;
-        console.log(page_load_time + "ms -- Prebid VAST url = " + url);
-
-        /* Access the player instance by calling `videojs()` and passing
-           in the player's ID. Add a `ready` listener to make sure the
-           player is ready before interacting with it. */
-
-        videojs("vid1").ready(function() {
-
-            page_load_time = new Date().getTime() - performance.timing.navigationStart;
-            console.log(page_load_time + "ms -- Player is ready!");
-
-            /* PASS SETTINGS TO VAST PLUGIN
-
-               Pass in a JSON object to the player's `vastClient` (defined
-               by the VAST/VPAID plugin we're using). The requires an
-               `adTagUrl`, which will be the URL returned by Prebid. You
-               can view all the options available for the `vastClient`
-               here:
-
-               https://github.com/MailOnline/videojs-vast-vpaid#options */
-
-            var player = this;
-            var vastAd = player.vastClient({
-                adTagUrl: url,
-                playAdAlways: true,
-                verbosity: 4,
-                vpaidFlashLoaderPath: "https://github.com/MailOnline/videojs-vast-vpaid/blob/RELEASE/bin/VPAIDFlash.swf?raw=true",
-                autoplay: true
-            });
-
-            page_load_time = new Date().getTime() - performance.timing.navigationStart;
-            console.log(page_load_time + "ms -- Prebid VAST tag inserted!");
-
-            player.muted(true);
-            player.play();
-
-            page_load_time = new Date().getTime() - performance.timing.navigationStart;
-            console.log(page_load_time + "ms -- invokeVideoPlayer complete!");
-
-        });
-    }
-
-</script>
-      
-
+

diff --git a/examples/video/long-form/pb-ve-lf-freewheel.html b/examples/video/long-form/pb-ve-lf-freewheel.html index 3b1958aa9d..d82bf5b3ee 100644 --- a/examples/video/long-form/pb-ve-lf-freewheel.html +++ b/examples/video/long-form/pb-ve-lf-freewheel.html @@ -13,127 +13,105 @@

{{ page.title }}

{{page.description }}

- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- -
-
-
- - - -
-
-
- -
-
-
-
-
Ad:
- - -
-
-
-
+ +
+

(Sorry, video code examples aren't available with your cookie privacy settings.)

+

Cookie Settings


+
+ +
- - - - - - - - + diff --git a/examples/video/outstream/basic-ima.html b/examples/video/outstream/basic-ima.html index df6b7ff99d..0d012a810b 100644 --- a/examples/video/outstream/basic-ima.html +++ b/examples/video/outstream/basic-ima.html @@ -36,30 +36,39 @@

{{ page.title }}

{{ page.description }}

- -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-
-
- -
-
+
+

(Sorry, video code examples aren't available with your cookie privacy settings.)

+

Cookie Settings


+
-
-
-

-           
-
+
@@ -126,18 +135,24 @@

{{ page.title }}

pbjs.que.push(() => { pbjs.addAdUnits(videoAdUnit); - pbjs.requestBids({ - bidsBackHandler: (bids) => { - const highestCpmBids = pbjs.getHighestCpmBids('adContainer'); - pbjs.renderAd(document, highestCpmBids[0].adId); - } + window.onetrustLoaded.then(() => { + pbjs.requestBids({ + bidsBackHandler: (bids) => { + const highestCpmBids = pbjs.getHighestCpmBids('adContainer'); + pbjs.renderAd(document, highestCpmBids[0].adId); + } + }); }); }); diff --git a/examples/video/outstream/pb-ve-outstream-dfp.html b/examples/video/outstream/pb-ve-outstream-dfp.html index 45a1230de7..60a99d48d3 100644 --- a/examples/video/outstream/pb-ve-outstream-dfp.html +++ b/examples/video/outstream/pb-ve-outstream-dfp.html @@ -15,131 +15,144 @@

{{ page.title }}

{{page.description }}

- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- -
- -
-

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

-
- -
-

Prebid Outstream Video Ad

- -
- -
-

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?

-
-
- - - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-
- -

Place this code in the page header.

-
-
-
-<script async src="//securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
-
-<script>
-
-    var pbjs = pbjs || {};
-    pbjs.que = pbjs.que || [];
-
-    var googletag = googletag || {};
-    googletag.cmd = googletag.cmd || [];
-
-    var PREBID_TIMEOUT = 1000;
-
-    var adUnits = [{
-        code: 'video1',
-        mediaTypes: {
-            video: {
-                context: 'outstream',
-                playerSize: [640, 480],
-                mimes: ['video/mp4'],
-                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-                playbackmethod: [2],
-                skip: 1
-            }
-        },
-        bids: [
-            {
-                bidder: 'appnexus',
-                params: {
-                    placementId: 13232385
-                }
-            }
-        ]
-    }];
-
-    pbjs.que.push(function() {
-        pbjs.addAdUnits(adUnits);
-        pbjs.requestBids({
-            bidsBackHandler: initAdserver
-        });
-    });
-
-    function initAdserver() {
-        if (pbjs.initAdserverSet) return;
-        pbjs.initAdserverSet = true;
-        googletag.cmd.push(function() {
-            pbjs.que.push(function() {
-                pbjs.setTargetingForGPTAsync();
-                googletag.pubads().refresh();
-            });
-        });
-    }
-
-    setTimeout(function() {
-        initAdserver();
-    }, PREBID_TIMEOUT);
-
-    googletag.cmd.push(function() {
-        var slot1 = googletag.defineSlot('/19968336/prebid_outstream_adunit_1', [[1, 1]], 'video1').addService(googletag.pubads());
-        googletag.pubads().disableInitialLoad();
-        googletag.pubads().enableSingleRequest();
-        googletag.enableServices();
-    });
-
-</script>
-      
-
- - -

Place this code in the page body.

-
-
-
-<div id='video1'>
-    <p>Prebid Outstream Video Ad</p>
-    <script type='text/javascript'>
-        googletag.cmd.push(function() {
-            googletag.display('video1');
-        });
-
-    </script>
-</div>
-
-      
+ +
+

(Sorry, video code examples aren't available with your cookie privacy settings.)

+

Cookie Settings


+ +
diff --git a/examples/video/outstream/pb-ve-outstream-no-server-specify-renderer.html b/examples/video/outstream/pb-ve-outstream-no-server-specify-renderer.html index ab09e8518f..ffcff33694 100644 --- a/examples/video/outstream/pb-ve-outstream-no-server-specify-renderer.html +++ b/examples/video/outstream/pb-ve-outstream-no-server-specify-renderer.html @@ -7,8 +7,6 @@ sidebarType: 4 --- - -
@@ -16,129 +14,141 @@

{{ page.title }}

{{page.description }}

- -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

+
+

(Sorry, video code examples aren't available with your cookie privacy settings.)

+

Cookie Settings


-
-
-

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

-
- -
-

Prebid Outstream Video Ad

-
- -
-

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?

-
-
+
diff --git a/examples/video/outstream/pb-ve-outstream-no-server.html b/examples/video/outstream/pb-ve-outstream-no-server.html index 4b96f20e91..eb5c183dba 100644 --- a/examples/video/outstream/pb-ve-outstream-no-server.html +++ b/examples/video/outstream/pb-ve-outstream-no-server.html @@ -7,8 +7,6 @@ sidebarType: 4 --- - -
@@ -16,99 +14,106 @@

{{ page.title }}

{{page.description }}

- -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
+
+

(Sorry, video code examples aren't available with your cookie privacy settings.)

+

Cookie Settings


+
-
+
- -
-

Prebid Outstream Video Ad

-

- diff --git a/examples/video/server/brid/pbs-ve-brid.html b/examples/video/server/brid/pbs-ve-brid.html deleted file mode 100644 index 0590ef792e..0000000000 --- a/examples/video/server/brid/pbs-ve-brid.html +++ /dev/null @@ -1,182 +0,0 @@ ---- -layout: video_sample -title: Prebid Video | Prebid Server Example with Brid player -description: An example of a pre-roll ad using Prebid Server and Brid player. -videoType: pbs-br -isVideo: true -sidebarType: 4 ---- - - - -
-
-
-

{{ page.title }}

-

{{page.description }}

-
- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-
- -

Place this code in the page header.

-
-
-
-<script async src="//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script>
-
-<script type="text/javascript" src="//services.brid.tv/player/build/brid.min.js"></script>
-<script>
-    var pbjs = pbjs || {};
-    pbjs.que = pbjs.que || [];
-
-    /* PRE-DEFINE `invokeVideoPlayer`
-
-    Because we have no way of knowing when all the bids will be
-    returned from Prebid we can't be sure that the browser will
-    reach the point where `invokeVideoPlayer` is defined before
-    `bidsBackHandler` fires and tries to call it.
-
-    To prevent an "`invokeVideoPlayer` not defined" error, we
-    pre-define it before we make the call to Prebid, and redefine
-    it later on with the code to create the player and play the
-    ad.
-
-    In this first version, it simply stores the winning VAST to
-    use later. */
-
-    var tempTag = false;
-    var invokeVideoPlayer = function(url) {
-        tempTag = url;
-    };
-
-    /* Prebid video ad unit */
-
-    var videoAdUnit = {
-        code: 'video1',
-        mediaTypes: {
-            video: {
-                context: 'instream',
-                playerSize: [640, 480],
-                mimes: ['video/mp4'],
-                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-                playbackmethod: [2],
-                skip: 1
-            }
-        },
-        bids: [{
-            bidder: 'appnexus',
-            params: {
-                placementId: 13232361 // Add your own placement id here
- } - }] - }; - - pbjs.que.push(function() { - - // configure prebid to use prebid cache and prebid server   - // make sure to add your own accountId to your s2sConfig object
- pbjs.setConfig({ - cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' - }, - debug: true, - enableSendAllBids: true, - s2sConfig: { - endpoint: 'https://prebid.adnxs.com/pbs/v1/openrtb2/auction', - enabled: true, - accountId: 'c9d412ee-3cc6-4b66-9326-9f49d528f13e', - bidders: ['appnexus'] - } - }); - - pbjs.addAdUnits(videoAdUnit); // add your ad units to the bid request
- - pbjs.requestBids({ - bidsBackHandler: function(bids) { - console.log("got some bids"); - console.log(bids); - var videoUrl = pbjs.adServers.dfp.buildVideoUrl({ - adUnit: videoAdUnit, - params: { - iu: '/19968336/prebid_cache_video_adunit', - cust_params: { - section: 'blog', - anotherKey: 'anotherValue' - }, - output: 'vast' - } - }); - invokeVideoPlayer(videoUrl); - } - }); - }); - -</script> - -
-
- - -

Place this code in the page body.

-
-
-
-<div id="myDiv" class="brid" style="width:640px; height:360;"></div>
-
-<script type="text/javascript">
-  invokeVideoPlayer = function(url) {
-    $bp("myDiv", {"id":"17041","width":"640","height":"360","video":"400684",
-    "Ad": [
-            {
-                "mobile": url, // Array of url's will get called in succession
- "desktop": null, // Array of url's will get called in succession
- "adType": "0", // Type 0 for pre roll
- "adTimeType": "s", - "overlayStartAt": null, - "overlayDuration": null, - "cuepoints": null - } - ] - }); - } -</script> -
-
-
-
- - - - - diff --git a/examples/video/server/jwplayer/pbs-ve-jwplayer-hosted.html b/examples/video/server/jwplayer/pbs-ve-jwplayer-hosted.html deleted file mode 100644 index 372974066e..0000000000 --- a/examples/video/server/jwplayer/pbs-ve-jwplayer-hosted.html +++ /dev/null @@ -1,206 +0,0 @@ ---- -layout: video_sample -title: Prebid Video | Prebid Server Example with JW Player (Self-Hosted) -description: An example of a pre-roll ad using Prebid Server and JW Player (Hosted). -videoType: pbs-jw02 -isVideo: true -sidebarType: 4 ---- - - -
-
-
-

{{ page.title }}

-

{{page.description }}

-
- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-
- -

Place this code in the page header.

-
-
-  
-<script async src="//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script>
-<script type="text/javascript" src="https://ssl.p.jwpcdn.com/player/v/8.0.5/jwplayer.js"></script>
-<script type="text/javascript">
-    jwplayer.key = "YOUR_JW_PLAYER_KEY"; //Test Key - replace this with your own valid JWPlayer license key
-</script> - -<script> - var pbjs = pbjs || {}; - pbjs.que = pbjs.que || []; - - /* PRE-DEFINE `invokeVideoPlayer` - - Because we have no way of knowing when all the bids will be - returned from Prebid we can't be sure that the browser will - reach the point where `invokeVideoPlayer` is defined before - `bidsBackHandler` fires and tries to call it. - - To prevent an "`invokeVideoPlayer` not defined" error, we - pre-define it before we make the call to Prebid, and redefine - it later on with the code to create the player and play the - ad. - - In this first version, it simply stores the winning VAST to - use later. */ - - var tempTag = false; - var invokeVideoPlayer = function(url) { - tempTag = url; - }; - - /* Prebid video ad unit */ - - var videoAdUnit = { - code: 'video1', - mediaTypes: { - video: { - context: 'instream', - playerSize: [640, 480], - mimes: ['video/mp4'], - protocols: [1, 2, 3, 4, 5, 6, 7, 8], - playbackmethod: [2], - skip: 1 - } - }, - bids: [{ - bidder: 'appnexus', - params: { - placementId: 13232361 // Add your own placement id here
- } - }] - }; - - pbjs.que.push(function() { - - // configure prebid to use prebid cache and prebid server
- // make sure to add your own accountId to your s2sConfig object
- pbjs.setConfig({ - cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' - }, - debug: true, - enableSendAllBids: true, - s2sConfig: { - endpoint: 'https://prebid.adnxs.com/pbs/v1/openrtb2/auction', - enabled: true, - accountId: 'c9d412ee-3cc6-4b66-9326-9f49d528f13e', - bidders: ['appnexus'] - } - }); - - - pbjs.addAdUnits(videoAdUnit); // add your ad units to the bid request
- - pbjs.requestBids({ - bidsBackHandler: function(bids) { - console.log("got some bids"); - console.log(bids); - var videoUrl = pbjs.adServers.dfp.buildVideoUrl({ - adUnit: videoAdUnit, - params: { - iu: '/19968336/prebid_cache_video_adunit', - cust_params: { - section: 'blog', - anotherKey: 'anotherValue' - }, - output: 'vast' - } - }); - invokeVideoPlayer(videoUrl); - } - }); - }); - -</script> - -
- -
- -

Place this code in the page body.

-
- -
-
-<div id="playerContainerJW" style='width:640px; height:480px; border:1px solid black;'></div>
-
-<script>
-    var jwPlayerInstance = jwplayer("playerContainerJW");
-
-    invokeVideoPlayer = function(url) {
-        console.log("starting player with url " + url);
-        jwPlayerInstance.setup({
-
-           "file": "https://vjs.zencdn.net/v/oceans.mp4",
-            "width": 640,
-            "height": 480,
-            "autostart": true,
-            "mute": true,
-            "advertising": {
-                client: "vast",
-            }
-        });
-
-        jwPlayerInstance.on('beforePlay', function() {
-            jwPlayerInstance.playAd(url);
-        })
-    }
-
-    if (tempTag) {
-        invokeVideoPlayer(tempTag);
-        tempTag = false;
-    }
-
-</script>
-
-      
-
-
-
- - - - diff --git a/examples/video/server/jwplayer/pbs-ve-jwplayer-platform.html b/examples/video/server/jwplayer/pbs-ve-jwplayer-platform.html deleted file mode 100644 index 6456730285..0000000000 --- a/examples/video/server/jwplayer/pbs-ve-jwplayer-platform.html +++ /dev/null @@ -1,202 +0,0 @@ ---- -layout: video_sample -title: Prebid Video | Prebid Server Example with JW Player (Platform) -description: An example of a pre-roll ad using Prebid Server and JW Player (Platform). -videoType: pbs-jw01 -isVideo: true -sidebarType: 4 ---- - -
-
-
-

{{ page.title }}

-

{{page.description }}

-
- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-
- -

Place this code in the page header.

-
-
-
-      <script>
-      var pbjs = pbjs || {};
-      pbjs.que = pbjs.que || [];
-
-      /* PRE-DEFINE `invokeVideoPlayer`
-
-      Because we have no way of knowing when all the bids will be
-      returned from Prebid we can't be sure that the browser will
-      reach the point where `invokeVideoPlayer` is defined before
-      `bidsBackHandler` fires and tries to call it.
-
-      To prevent an "`invokeVideoPlayer` not defined" error, we
-      pre-define it before we make the call to Prebid, and redefine
-      it later on with the code to create the player and play the
-      ad.
-
-      In this first version, it simply stores the winning VAST to
-      use later. */
-
-      var tempTag = false;
-      var invokeVideoPlayer = function(url) {
-          tempTag = url;
-      };
-
-      var videoAdUnit = {
-          code: 'video1',
-          mediaTypes: {
-              video: {
-      context: 'instream',
-      playerSize: [640, 480],
-      mimes: ['video/mp4'],
-      protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-      playbackmethod: [2],
-      skip: 1
-              }
-          },
-          bids: [{
-              bidder: 'appnexus',
-              params: {
-                  placementId: 13232361  // Add your own placement id here.
- } - }] - }; - - pbjs.que.push(function() { - - // configure prebid to use prebid cache and prebid server  - // make sure to add your own accountId to your s2sConfig object
- pbjs.setConfig({ - cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' - }, - debug: true, - s2sConfig: { - endpoint: 'https://prebid.adnxs.com/pbs/v1/openrtb2/auction', - enabled: true, - accountId: 'c9d412ee-3cc6-4b66-9326-9f49d528f13e', - bidders: ['appnexus'] - } - }); - - pbjs.addAdUnits(videoAdUnit); // add your ad units to the bid request
- - pbjs.requestBids({ - bidsBackHandler: function(bids) { - - var videoUrl = pbjs.adServers.dfp.buildVideoUrl({ - adUnit: videoAdUnit, - params: { - iu: '/19968336/prebid_cache_video_adunit', - cust_params: { - section: 'blog', - anotherKey: 'anotherValue' - }, - output: 'vast' - } - }); - invokeVideoPlayer(videoUrl); - } - }); - }); - - </script> -
-
- -

Place this code in the page body.

-
- -
-
-<!-- This line loads a player without loading any video content -->
-<!-- Replace this with the correct url for your player -->
-<script src="YOUR_JW_URL"></script>
-<script>
-    // we initialize our player instance, specifying the div to load it into
- var playerInstance = jwplayer('myElement1'); - - function invokeVideoPlayer(url) { - // this calls setup on the player we initialized  - // this will use the settings defined in the player we loaded above unless you override them here
- playerInstance.setup({ - "file": "https://vjs.zencdn.net/v/oceans.mp4", - // or "file" could be replaced with "playlist" and a URL - // from your JW Platform account in either json or rss format. - "width": 640, - "height": 480, - "autostart": true, - "mute": true, - // we enable vast advertising for this player
- "advertising": { - "client": "vast", - // url is the vast tag url that we passed in when we called invokeVideoPlayer in the header
- "tag": url - } - }); - } - - if (tempTag) { - invokeVideoPlayer(tempTag); - tempTag = false; - } - -</script> -
-
-
-
- - - - - - - - diff --git a/examples/video/server/kaltura/pbs-ve-kaltura.html b/examples/video/server/kaltura/pbs-ve-kaltura.html deleted file mode 100644 index a6eecad0c4..0000000000 --- a/examples/video/server/kaltura/pbs-ve-kaltura.html +++ /dev/null @@ -1,299 +0,0 @@ ---- -layout: video_sample -title: Prebid Video | Prebid Server Example with Kaltura -description: An example of a pre-roll ad using Prebid Server and Kaltura. -videoType: pbs-kl -isVideo: true -sidebarType: 4 ---- - - - -
-
-
-

{{ page.title }}

-

{{page.description }}

-
- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-
- -

Place this code in the page header.

-
-
-
-
-<script>
-    var pbjs = pbjs || {};
-    pbjs.que = pbjs.que || [];
-
-    /* PRE-DEFINE `invokeVideoPlayer`
-
-    Because we have no way of knowing when all the bids will be
-    returned from Prebid we can't be sure that the browser will
-    reach the point where `invokeVideoPlayer` is defined before
-    `bidsBackHandler` fires and tries to call it.
-
-    To prevent an "`invokeVideoPlayer` not defined" error, we
-    pre-define it before we make the call to Prebid, and redefine
-    it later on with the code to create the player and play the
-    ad.
-
-    In this first version, it simply stores the winning VAST to
-    use later. */
-
-    var tempTag = false;
-    var invokeVideoPlayer = function(url) {
-        tempTag = url;
-    };
-
-    /* Prebid video ad unit */
-
-    var videoAdUnit = {
-        code: 'video1',
-        mediaTypes: {
-            video: {
-                context: 'instream',
-                playerSize: [640, 480],
-                mimes: ['video/mp4'],
-                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-                playbackmethod: [2],
-                skip: 1
-            }
-        },
-        bids: [{
-            bidder: 'appnexus',
-            params: {
-                placementId: 13232361  // Add your own placement id here.
- } - }] - }; - - pbjs.que.push(function() { - - // configure prebid to use prebid cache and prebid server   - // make sure to add your own accountId to your s2sConfig object
- pbjs.setConfig({ - cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' - }, - debug: true, - s2sConfig: { - endpoint: 'https://prebid.adnxs.com/pbs/v1/openrtb2/auction', - enabled: true, - accountId: 'c9d412ee-3cc6-4b66-9326-9f49d528f13e', - bidders: ['appnexus'] - } - }); - - pbjs.addAdUnits(videoAdUnit); // add your ad units to the bid request
- - pbjs.requestBids({ - bidsBackHandler: function(bids) { - - var videoUrl = pbjs.adServers.dfp.buildVideoUrl({ - adUnit: videoAdUnit, - params: { - iu: '/19968336/prebid_cache_video_adunit', - cust_params: { - section: 'blog', - anotherKey: 'anotherValue' - }, - output: 'vast' - } - }); - invokeVideoPlayer(videoUrl); - } - }); - }); - -</script> -
-
- -

Place this code in the page body.

-
- -
-
-<div id="myPlayer" style="width:640px; height:480px;"></div>
-
-<!-- INCLUDE KALTURA PLAYER SCRIPT
-
- Add the script for your Kaltura player. This will be part of
- the code you will copy-paste from Kaltura. -->
-
-<script src="https://cdnapi.kaltura.com/p/2222001/sp/222200100/embedIframeJs/uiconf_id/37440401/partner_id/2222001"></script>
-
-<script>
-    invokeVideoPlayer = function(url) {
-
-        /* EMBED KALTURA PLAYER
-
-        Call `kWidget.embed()` and pass in a JSON object of your
-        player settings. Most of this JSON object will be part of
-        the code you will copy paste from Kaltura.
-
-        Documentation for kWidget available here:
-        https://player.kaltura.com/docs/kwidget */
-
-        kWidget.embed({
-            "targetId": "myPlayer",
-            "wid": "_2222001",
-            "uiconf_id": 37440401,
-
-            /* ADD VAST SETTINGS TO THE PLAYER SETTINGS
-
-            Inside `flashVars`, add another key called `"vast"` and
-            pass in a JSON object with:
-
-            - the position where you want your ad to play
-
-            - the URL of the ad (which in this case will be the `url`
-            we got back from Prebid) */
-
-            "flashvars": {
-                "streamerType": "auto",
-                "vast": {
-                    "plugin": true,
-                    "prerollUrl": url,
-                }
-            },
-            "entry_id": "1_k4eka7er",
-
-            /* ADD A READY CALLBACK AND GET A REFERENCE TO THE PLAYER
-
-            Add a ready callback to the player settings. This allows
-            us to get a reference to the player (stored in the
-            variable `kdp`) in order to interact with it later. */
-
-            readyCallback: function(playerId) {
-                console.log("Kaltura player " + playerId + " is ready.");
-            }
-        });
-    };
-
-    /* ACCOUNT FOR PAGE SPEED
-
-    If Prebid returned bids before the browser reached the end of
-    the page, the first version of `invokeVideoPlayer` will have
-    been called from `bidsBackHandler` so the winning VAST tag
-    will be stored in the `tempTag` variable.
-
-    If that's the case, we want to call the 'real' version of
-    `invokeVideoPlayer` with the stored URL to create the player
-    and play the ad.
-
-    If `tempTag` is not defined, that means the browser reached
-    the end of the page before the bids came back from Prebid,
-    meaning the 'real' version of `invokeVideoPlayer` was already
-    called. */
-
-    if (tempTag) {
-        invokeVideoPlayer(tempTag);
-        tempTag = false;
-    }
-
-</script>
-      
-
-
-
- - - - - - - - - - - diff --git a/examples/video/server/ooyala/pbs-ve-ooyala.html b/examples/video/server/ooyala/pbs-ve-ooyala.html deleted file mode 100644 index 1f2a8b926d..0000000000 --- a/examples/video/server/ooyala/pbs-ve-ooyala.html +++ /dev/null @@ -1,369 +0,0 @@ ---- -layout: video_sample -title: Prebid Video | Prebid Server Example with Ooyala -description: An example of a pre-roll ad using Prebid Server and Ooyala. -videoType: pbs-oy -isVideo: true -sidebarType: 4 ---- - - - -
-
-
-

{{ page.title }}

-

{{page.description }}

-
- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- - - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-
- -

Place this code in the page header.

-
-
-  
-
-<!-- LOAD OOYALA PLUGINS
-
- Load the Ooyala player scripts you plan to use.
-
- You must load the core player script, the scripts for
- whatever video formats you want to support, and the scripts
- for the ad manager you want to use.
-
- The scripts themselves and a guide for choosing which ones
- you need can be found here:
-
- https://help.ooyala.com/video-platform/documentation/concepts/pbv4_plugins.html
--->
-
-<!-- CORE PLAYER REQUIRED -->
-<script src="//player.ooyala.com/static/v4/production/latest/core.min.js"></script>
-
-<!-- VIDEO PLUGINS -->
-<script src="//player.ooyala.com/static/v4/production/latest/video-plugin/main_html5.min.js"></script>
-<script src="//player.ooyala.com/static/v4/production/latest/video-plugin/bit_wrapper.min.js"></script>
-<script src="//player.ooyala.com/static/v4/production/latest/video-plugin/osmf_flash.min.js"></script>
-
-<!-- HTML5 SKIN -->
-<script src="//player.ooyala.com/static/v4/production/latest/skin-plugin/html5-skin.min.js"></script>
-
-<!-- SKIN ASSET -->
-<link rel="stylesheet" href="//player.ooyala.com/static/v4/production/latest/skin-plugin/html5-skin.min.css" />
-
-<!-- IMA PLUGIN -->
-<script src="//player.ooyala.com/static/v4/production/latest/ad-plugin/google_ima.js"></script>
-<script>
-    var pbjs = pbjs || {};
-    pbjs.que = pbjs.que || [];
-
-    /* PRE-DEFINE `invokeVideoPlayer`
-
-    Because we have no way of knowing when all the bids will be
-    returned from Prebid we can't be sure that the browser will
-    reach the point where `invokeVideoPlayer` is defined before
-    `bidsBackHandler` fires and tries to call it.
-
-    To prevent an "`invokeVideoPlayer` not defined" error, we
-    pre-define it before we make the call to Prebid, and redefine
-    it later on with the code to create the player and play the
-    ad.
-
-    In this first version, it simply stores the winning VAST to
-    use later. */
-
-    var tempTag = false;
-    var invokeVideoPlayer = function(url) {
-        tempTag = url;
-    };
-
-    /* Prebid video ad unit */
-
-    var videoAdUnit = {
-        code: 'video1',
-        mediaTypes: {
-            video: {
-                context: 'instream',
-                playerSize: [640, 480],
-                mimes: ['video/mp4'],
-                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-                playbackmethod: [2],
-                skip: 1
-            }
-        },
-        bids: [{
-            bidder: 'appnexus',
-            params: {
-                placementId: 13232361  // Add your own placement id here.
- } - }] - }; - - pbjs.que.push(function() { - - // configure prebid to use prebid cache and prebid server   - // make sure to add your own accountId to your s2sConfig object
- pbjs.setConfig({ - cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' - }, - debug: true, - s2sConfig: { - endpoint: 'https://prebid.adnxs.com/pbs/v1/openrtb2/auction', - enabled: true, - accountId: 'c9d412ee-3cc6-4b66-9326-9f49d528f13e', // replace this with your account id
- bidders: ['appnexus'] - } - }); - - // add your ad units to the bid request
- pbjs.addAdUnits(videoAdUnit); - - pbjs.requestBids({ - bidsBackHandler: function(bids) { - console.log(bids); - var videoUrl = pbjs.adServers.dfp.buildVideoUrl({ - adUnit: videoAdUnit, - params: { - iu: '/19968336/prebid_cache_video_adunit', - cust_params: { - section: 'blog', - anotherKey: 'anotherValue' - }, - output: 'vast' - } - }); - invokeVideoPlayer(videoUrl); - } - }); - }); - -</script> -
-
- -

Place this code in the page body.

-
- -
-
-<div id='container' style='width:640px;height:480px;'></div>
-
-<script>
-    var invokeVideoPlayer = function(url) {
-        console.log("invoking video player with url " + url);
-
-        /* DEFINE PLAYER SETTINGS
-
-        Define the settings you want for your player in a JSON
-        object. These lines will be part of the embed code you
-        copy-paste from Ooyala Backlot, we just need to add the ad
-        parameters.  */
-
-        var playerParam = {
-            'pcode': 'lsbWkyOjtI6LOjmlqk2o5I-TsWRA',
-            'playerBrandingId': '45b8294c6ad14265b2b47586c911cb07',
-            'debug': true,
-            'autoplay': true,
-            'initialVolume': 0.0,
-            'skin': {
-                'config': '//player.ooyala.com/static/v4/stable/4.6.9/skin-plugin/skin.json',
-                'inline': {
-                    'adScreen': {
-                        'showAdMarquee': true,
-                        'showAdCountDown': true,
-                        'showControlBar': true,
-                        'useGoogleAdUI': true
-                    }
-                }
-            },
-
-            /* ADD THE AD PARAMETERS TO THE PLAYER SETTINGS
-
-            Create a new JSON object in the player parameters. The key
-            should be the ad manager you're using (in our case we're
-            using the Google IMA ads manager, so the key is
-            `"google-ima-ads-manager"`). The IMA ads manager requires
-            an ad set (which we've named `"all_ads"`).
-
-            For more information see the Ooyala docs:
-
-            https://help.ooyala.com/video-platform/concepts/pbv4_ads_dev_google_ima.html:
-
-            Make sure the ad parameters are properly formatted JSON.
-            */
-            "google-ima-ads-manager": {
-                "all_ads": [{
-                    "position": "0",
-                    "position_type": "t",
-                    "tag_url": url
-                }],
-                'showAdControls': true
-            }
-        };
-
-        /* INITIALIZE THE PLAYER
-
-        Use the `OO.ready()` event to make sure that all the
-        necessary Ooyala plugins have loaded before attempting to
-        create the player. Once it has, call `create()` and pass
-        in:
-
-        - the div you're creating the player in
-
-        - the ID of the content video
-
-        - the player settings we created above */
-
-        OO.ready(function() {
-            console.log("OO is ready, invoking");
-            console.dir(playerParam);
-            window.pp = OO.Player.create('container', 'ltcG54NzE6Bxk08Mqs1_KMcQZDN7lH8N', playerParam);
-        });
-    };
-
-    /* ACCOUNT FOR PAGE SPEED
-
-    If Prebid returned bids before the browser reached the end of
-    the page, the first version of `invokeVideoPlayer` will have
-    been called from `bidsBackHandler`, so the winning VAST tag will
-    be stored in `tempTag`.
-
-    If that's the case, we want to call the "real" version of
-    `invokeVideoPlayer` with the stored URL to create the player and
-    play the ad.
-
-    If `tempTag` is not defined, that means the browser reached the
-    end of the page before the bids came back from Prebid, meaning
-    the "real" version of `invokeVideoPlayer` was already called.
-    */
-
-    if (tempTag) {
-        invokeVideoPlayer(tempTag);
-        tempTag = false;
-    }
-
-</script>
-
-      
-
-
-
- - - - - - - - diff --git a/examples/video/server/radiant/pbs-ve-radiant.html b/examples/video/server/radiant/pbs-ve-radiant.html deleted file mode 100644 index 8d89af40b3..0000000000 --- a/examples/video/server/radiant/pbs-ve-radiant.html +++ /dev/null @@ -1,341 +0,0 @@ ---- -layout: video_sample -title: Prebid Video | Prebid Server Example with Radiant Media Player -description: An example of an instream pre-roll ad using Prebid Server and Radiant Media Player . -videoType: pbs-rd -isVideo: true -sidebarType: 4 ---- - -
-
-
-

{{ page.title }}

-

{{page.description }}

-
- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-
- -

Place this code in the page header.

-
-
-
-<!--production version of prebid.js-->
-<script async src="//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script>
-
-<!-- Radiant Media Player core library - debug browser console mode (use rmp.min.js for production) -->
-<script src="https://cdn.radiantmediatechs.com/rmp/5.5.6/js/rmp.debug.js"></script>
-      
-
- - -
-

Place this code in the page body.

- -
-
-/* our app where we run player
-   our app variables */
-var pbApp = {};
-pbApp.playerSetup = false;
-pbApp.prebidTempTag = false;
-pbApp.debug = true;
-/* in case pre-bidding takes too long or fails we provide a playerSetupTimeout and fallbackAdTagUrl
-   to insure player setup happens - this is optional */
-pbApp.playerSetupTimeout = 5000;
-pbApp.fallbackAdTagUrl = 'https://www.radiantmediaplayer.com/vast/tags/inline-linear-1.xml';
-/* no console - no logs */
-if (typeof window.console === 'undefined' || typeof window.console.log === 'undefined' || typeof window.console.dir === 'undefined') {
-  pbApp.debug = false;
-}
-
-/* invokeVideoPlayer may not be defined when bidsBackHandler runs
-   we pre-defined it here so as to capture the returned adTagUrl to be passed to the player */
-pbApp.invokeVideoPlayer = function (adTagUrl) {
-  pbApp.prebidTempTag = adTagUrl;
-};
-
-/* prebid.js variables */
-var pbjs;
-pbjs = pbjs || {};
-pbjs.que = pbjs.que || [];
-
-/* Prebid video ad unit
-   This is a working example but you must use your own settings/bidders for production
-   More docs at https://prebid.org/prebid-video/video-overview.html */
-var videoAdUnit = {
-  code: 'video1',
-  mediaTypes: {
-    video: {
-  context: 'instream',
-  playerSize: [640, 480],
-  mimes: ['video/mp4'],
-  protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-  playbackmethod: [2],
-  skip: 1
-    }
-  },
-  bids: [{
-    bidder: 'appnexus',
-    params: {
-      placementId: 13232361  // Add your own placement id here.
-    }
-  }]
-};
-
-pbjs.que.push(function () {
-  // configure prebid to use prebid cache and prebid server
-  // make sure to add your own accountId to your s2sConfig object
-  pbjs.setConfig({
-    cache: {
-      url: 'https://prebid.adnxs.com/pbc/v1/cache'
-    },
-    debug: true,
-    enableSendAllBids: true,
-    s2sConfig: {
-      endpoint: 'https://prebid.adnxs.com/pbs/v1/openrtb2/auction',
-      enabled: true,
-      accountId: 'c9d412ee-3cc6-4b66-9326-9f49d528f13e',
-      bidders: ['appnexus']
-    }
-  });
-
-  pbjs.addAdUnits(videoAdUnit); // add your ad units to the bid request
-
-  pbjs.requestBids({
-    bidsBackHandler: function (bids) {
-      if (pbApp.debug) {
-        window.console.dir(bids);
-      }
-      var videoUrl = pbjs.adServers.dfp.buildVideoUrl({
-        adUnit: videoAdUnit,
-        params: {
-          iu: '/19968336/prebid_cache_video_adunit',
-          cust_params: {
-            section: 'blog',
-            anotherKey: 'anotherValue'
-          },
-          output: 'vast'
-        }
-      });
-      pbApp.invokeVideoPlayer(videoUrl);
-    }
-  });
-});
-
-/* here we re-define invokeVideoPlayer with Radiant Media Player set-up */
-pbApp.invokeVideoPlayer = function (adTagUrl) {
-  if (pbApp.playerSetup) {
-    return;
-  }
-  pbApp.playerSetup = true;
-  if (pbApp.debug) {
-    window.console.log('invokeVideoPlayer with Prebid VAST url = ' + adTagUrl);
-  }
-  var src = {
-    mp4: [
-      'https://www.rmp-streaming.com/media/bbb-360p.mp4'
-    ]
-  };
-  var settings = {
-    licenseKey: 'Kl8lZ292K3N6MmVvZD9yb201ZGFzaXMzMGRiMEElXyo=',
-    src: src,
-    width: 640,
-    height: 360,
-    //*we enabled ads for our player
-    note that we requested a winning bid for skippable auto_play_sound_off so player starts muted autoplay*/
-    ads: true,
-    autoplay: true,
-    muted: true,
-    // we use Google IMA in this demo, but you can use rmp-vast as well depending on your requirements
- adParser: 'ima', - // since we may request a skippable ads we set adDisableCustomPlaybackForIOS10Plus: true to allow rendering of skippable ads on iOS
- adDisableCustomPlaybackForIOS10Plus: true, - // here is our winner VAST adTagUrl
- adTagUrl: adTagUrl, - poster: 'https://www.radiantmediaplayer.com/images/poster-rmp-showcase.jpg' - }; - var elementID = 'rmpPlayer'; - var rmp = new RadiantMP(elementID); - rmp.init(settings); - -}; - -/* in case we already have a winning bid let's use the returned adTagUrl to run player */ -if (pbApp.prebidTempTag) { - pbApp.invokeVideoPlayer(pbApp.prebidTempTag); - pbApp.prebidTempTag = false; -} - -/* in case something went wrong (latency, network errors, bid issues ...) and we have no winning bid we still need to run the player - this is done after pbApp.playerSetupTimeout ms and we use fallbackAdTagUrl as adTagUrl to pass to the player */ -setTimeout(function () { - if (pbApp.playerSetup) { - return; - } - pbApp.invokeVideoPlayer(pbApp.fallbackAdTagUrl); -}, pbApp.playerSetupTimeout); -
-
-
-
- - - - diff --git a/examples/video/server/videojs/pbs-ve-videojs.html b/examples/video/server/videojs/pbs-ve-videojs.html deleted file mode 100644 index 329ef45b5c..0000000000 --- a/examples/video/server/videojs/pbs-ve-videojs.html +++ /dev/null @@ -1,282 +0,0 @@ ---- -layout: video_sample -title: Prebid Video | Prebid Server Example with VideoJS -description: An example of a pre-roll ad using Prebid Server and VideoJS. -videoType: pbs-vjs -isVideo: true -sidebarType: 4 ---- - - - -
-
-
-

{{ page.title }}

-

{{page.description }}

-
- - -
-

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
- - -
- -
- - - - - -
-

Warning: - Do not forget to exchange the placementId in the code examples with your own placementId!

-
- -

Place this code in the page header.

-
-
-
-<!-- videojs -->
-<!-- use recent version of videojs to ensure proper functioning with the iOS devices -->
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/video.js/6.4.0/video-js.css">
-<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/video.js/6.4.0/video.js"></script>
-<!-- videojs-vast-vpaid -->
-<link href="https://cdnjs.cloudflare.com/ajax/libs/videojs-vast-vpaid/2.0.2/videojs.vast.vpaid.min.css" rel="stylesheet">
-<script src="https://cdnjs.cloudflare.com/ajax/libs/videojs-vast-vpaid/2.0.2/videojs_5.vast.vpaid.min.js"></script>
-
-<script>
-    var pbjs = pbjs || {};
-    pbjs.que = pbjs.que || [];
-
-    /* PRE-DEFINE `invokeVideoPlayer`
-
-    Because we have no way of knowing when all the bids will be
-    returned from Prebid we can't be sure that the browser will
-    reach the point where `invokeVideoPlayer` is defined before
-    `bidsBackHandler` fires and tries to call it.
-
-    To prevent an "`invokeVideoPlayer` not defined" error, we
-    pre-define it before we make the call to Prebid, and redefine
-    it later on with the code to create the player and play the
-    ad.
-
-    In this first version, it simply stores the winning VAST to
-    use later. */
-
-    var tempTag = false;
-    var invokeVideoPlayer = function(url) {
-        tempTag = url;
-    };
-
-    /* Prebid video ad unit */
-
-    var videoAdUnit = {
-        code: 'video1',
-        mediaTypes: {
-            video: {
-                context: 'instream',
-                playerSize: [640, 480],
-                mimes: ['video/mp4'],
-                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-                playbackmethod: [2],
-                skip: 1
-            }
-        },
-        bids: [{
-            bidder: 'appnexus',
-            params: {
-                placementId: 13232361  // Add your own placement id here.
-            }
-        }]
-    };
-
-    pbjs.que.push(function() {
-
-        // configure prebid to use prebid cache and prebid server  
-        // make sure to add your own accountId to your s2sConfig object 
- pbjs.setConfig({ - cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' - }, - debug: true, - s2sConfig: { - endpoint: 'https://prebid.adnxs.com/pbs/v1/openrtb2/auction', - enabled: true, - accountId: 'c9d412ee-3cc6-4b66-9326-9f49d528f13e', // replace this with your account id
- bidders: ['appnexus'] - } - }); - - // add your ad units to the bid request
- pbjs.addAdUnits(videoAdUnit); - - pbjs.requestBids({ - bidsBackHandler: function(bids) { - var videoUrl = pbjs.adServers.dfp.buildVideoUrl({ - adUnit: videoAdUnit, - params: { - iu: '/19968336/prebid_cache_video_adunit', - cust_params: { - section: 'blog', - anotherKey: 'anotherValue' - }, - output: 'vast' - } - }); - invokeVideoPlayer(videoUrl); - } - }); - }); - -</script> -
-
- -

Place this code in the page body.

-
- -
-
-<div class="example-video-container">
-    <video id="vid1" class="video-js vjs-default-skin vjs-big-play-centered" controls data-setup='{}' width='640' height='480'>
-        <source src="https://vjs.zencdn.net/v/oceans.mp4" type='video/mp4'/>
-        <source src="https://vjs.zencdn.net/v/oceans.webm" type='video/webm'/>
-        <source src="https://vjs.zencdn.net/v/oceans.ogv" type='video/ogg'/>
-    </video>
-</div>
-
-<script>
-    var page_load_time;
-
-    page_load_time = new Date().getTime() - performance.timing.navigationStart;
-    console.log(page_load_time + "ms -- Player loading!");
-
-    var vid1 = videojs('vid1');
-
-    page_load_time = new Date().getTime() - performance.timing.navigationStart;
-    console.log(page_load_time + "ms -- Player loaded!");
-
-    function invokeVideoPlayer(url) {
-
-        page_load_time = new Date().getTime() - performance.timing.navigationStart;
-        console.log(page_load_time + "ms -- Prebid VAST url = " + url);
-
-        /* Access the player instance by calling `videojs()` and passing
-         in the player's ID. Add a `ready` listener to make sure the
-         player is ready before interacting with it. */
-
-        videojs("vid1").ready(function() {
-
-            page_load_time = new Date().getTime() - performance.timing.navigationStart;
-            console.log(page_load_time + "ms -- Player is ready!");
-
-            /* PASS SETTINGS TO VAST PLUGIN
-
-            Pass in a JSON object to the player's `vastClient` (defined
-            by the VAST/VPAID plugin we're using). The requires an
-            `adTagUrl`, which will be the URL returned by Prebid. You
-            can view all the options available for the `vastClient`
-            here:
-
-            https://github.com/MailOnline/videojs-vast-vpaid#options */
-
-            var player = this;
-            var vastAd = player.vastClient({
-                adTagUrl: url,
-                prerollTimeout: 500,
-                playAdAlways: true,
-                verbosity: 4,
-                vpaidFlashLoaderPath: "https://github.com/MailOnline/videojs-vast-vpaid/blob/RELEASE/bin/VPAIDFlash.swf?raw=true",
-                autoplay: true
-            });
-
-            page_load_time = new Date().getTime() - performance.timing.navigationStart;
-            console.log(page_load_time + "ms -- Prebid VAST tag inserted!");
-
-            player.muted(true);
-            player.play();
-
-            page_load_time = new Date().getTime() - performance.timing.navigationStart;
-            console.log(page_load_time + "ms -- invokeVideoPlayer complete!");
-
-        });
-    }
-
-</script>
-      
-
-
-
- - - - - - - - diff --git a/prebid-video/video-integrating-solo.md b/prebid-video/video-integrating-solo.md index 53cc498c93..e69271e01d 100644 --- a/prebid-video/video-integrating-solo.md +++ b/prebid-video/video-integrating-solo.md @@ -95,14 +95,8 @@ This section contains working examples of instream and outstream video ads for v ## Using client-side adapters ### Instream -+ [Akamai AMP]({{site.github.url}}/examples/video/instream/akamai/pb-ve-amp.html) -+ [Brid]({{site.github.url}}/examples/video/instream/brid/pb-ve-brid.html) -+ [Brightcove]({{site.github.url}}/examples/video/instream/brightcove/pb-ve-brightcove.html) -+ [Flowplayer]({{site.github.url}}/examples/video/instream/flowplayer/pb-ve-flowplayer.html) + [JWPlayer - Platform]({{site.github.url}}/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html) + [JWPlayer - Hosted]({{site.github.url}}/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html) -+ [Kaltura]({{site.github.url}}/examples/video/instream/kaltura/pb-ve-kaltura.html) -+ [Ooyala]({{site.github.url}}/examples/video/instream/ooyala/pb-ve-ooyala.html) + [VideoJS]({{site.github.url}}/examples/video/instream/videojs/pb-ve-videojs.html) ### Outstream @@ -110,16 +104,6 @@ This section contains working examples of instream and outstream video ads for v + [Outstream with Google Ad Manager]({{site.github.url}}/examples/video/outstream/pb-ve-outstream-dfp.html) + [Outstream without an Ad Server]({{site.github.url}}/examples/video/outstream/pb-ve-outstream-no-server.html) -## Using Prebid Server - -+ [Brid]({{site.baseurl}}/examples/video/server/brid/pbs-ve-brid.html) -+ [JW Player - Platform]({{site.baseurl}}/examples/video/server/jwplayer/pbs-ve-jwplayer-platform.html) -+ [JW Player - Hosted]({{site.baseurl}}/examples/video/server/jwplayer/pbs-ve-jwplayer-hosted.html) -+ [Kaltura]({{site.baseurl}}/examples/video/server/kaltura/pbs-ve-kaltura.html) -+ [Ooyala]({{site.baseurl}}/examples/video/server/ooyala/pbs-ve-ooyala.html) -+ [VideoJS]({{site.baseurl}}/examples/video/server/videojs/pbs-ve-videojs.html) - - # Further Reading - [Prebid.js for Video Overview]({{site.github.url}}/prebid-video/video-overview.html) From 5bb755dc5fd5f95e76b8457fb9ea283111761a9a Mon Sep 17 00:00:00 2001 From: bretg Date: Tue, 28 Feb 2023 12:27:31 -0500 Subject: [PATCH 140/763] PBS auction endpoint update (#4396) added ext.prebid.analytics --- .../endpoints/openrtb2/pbs-endpoint-auction.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md b/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md index e290067c4c..adb9cd3f12 100644 --- a/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md +++ b/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md @@ -1406,6 +1406,20 @@ PBS-core creates this block before sending to bid adapters. They receive additio             } ``` +##### Analytics Extension + +Some analytics adapters may support special flags that can be passed on ext.prebid.analytics. e.g. + +``` +ext.prebid: { + analytics: { + myanalyticsadapter: { + myflag: true + } + } +} +``` + #### OpenRTB Response Extensions ##### Bidder Response Times @@ -1663,6 +1677,7 @@ The Prebid SDK version comes from: | ext.prebid.pbs.endpoint | additional Prebid Server metadata | string | yes | | ext.prebid.floors | PBS floors data | object | no | | ext.prebid.returnallbidstatus | If true, PBS returns [ext.seatnonbid](#seat-non-bid) with details about bidders that didn't bid. | boolean | no | +| ext.prebid.analytics | Arguments that can be passed through to individual analytics adapters | object | no | | imp.ext.ae | If 1, signals bid adapters that Fledge auction config is accepted on the response. (ae stands for auction environment) | integer | yes | | app.ext.prebid.source | The client that created this ORTB. Normally "prebid-mobile" | string | yes | | app.ext.prebid.version | The version of the client that created this ORTB. e.g. "1.1" | string | yes | From e66c535164cbd16e399181af8d27eeda512ea5a8 Mon Sep 17 00:00:00 2001 From: Michele Nasti Date: Wed, 1 Mar 2023 20:38:58 +0100 Subject: [PATCH 141/763] Separate puc docs (#3645) * more details about ortb native * added a section for bid adapters * move paragraph up * wordsmithing * added link to ortb spec Co-authored-by: Muki Seiler * fixed link * Fix ad-unit-define creative link * fix native-implementation link * add clickUrlUnesc; add openrtb spec links * fixes * replace /dist/creative.js with hb_format.js replace native-render.js with native.js * put %%PATTERN:hb_format%% everywhere * fix examples that use renderAd in native * fix examples * mentioning hb_format directly * updated adops docs --------- Co-authored-by: Michele Nasti Co-authored-by: bretg Co-authored-by: Muki Seiler Co-authored-by: Filip Stamenkovic --- adops/adops-general-sbs.md | 3 +- adops/creative-considerations.md | 2 +- adops/gam-creative-banner-sbs.md | 6 ++-- adops/gam-native.md | 26 +++++++++-------- ...g-up-prebid-with-the-appnexus-ad-server.md | 2 +- dev-docs/show-prebid-ads-on-amp-pages.md | 4 +-- overview/prebid-universal-creative.md | 25 +++++++++++----- prebid/native-implementation.md | 29 ++++++++++--------- 8 files changed, 56 insertions(+), 41 deletions(-) diff --git a/adops/adops-general-sbs.md b/adops/adops-general-sbs.md index af21d97c37..80ed48e50b 100644 --- a/adops/adops-general-sbs.md +++ b/adops/adops-general-sbs.md @@ -131,7 +131,7 @@ We recommend using the [Prebid Universal Creative](/overview/prebid-universal-cr If you’re working with banner or outstream creatives, the HTML you’ll enter in the creatives will be similar to the following (utilizing whatever macro format is supported by your ad server): ``` - + + + + ``` @@ -164,7 +164,7 @@ p { The GAM creative is identical whether the template is defined in the AdUnit or the external render JavaScript. There are two key aspects of the native creative in this scenario: -1. Load the Prebid.js native rendering code. You can utilize the jsdelivr version of native-render.js or host your own copy. If you use the version hosted on jsdelivr, make sure to declare jsdelivr as an ad technology provider in GAM. Admin → EU User Consent → Declare ad technology providers +1. Load the Prebid.js native rendering code. You may utilize the jsdelivr version of native.js or host your own copy. If you use the version hosted on jsdelivr, make sure to declare jsdelivr as an ad technology provider in GAM. Admin → EU User Consent → Declare ad technology providers. 2. Invoke the Prebid.js native rendering function with an object containing the following attributes: - adid - Used to identify which Prebid.js creative holds the appropriate native assets. - pubUrl - The URL of the page, which is needed for the HTML postmessage call. @@ -172,19 +172,21 @@ The GAM creative is identical whether the template is defined in the AdUnit or t Example creative HTML: ``` - + ``` {: .alert.alert-warning :} -When using Send All Bids, use `pbNativeTagData.adId = "%%PATTERN:hb_adid_BIDDERCODE%%";` rather than `pbNativeTagData.adId = "%%PATTERN:hb_adid%%";` for each bidder’s creative, replacing `BIDDERCODE` with the actual bidder code, such as `%%PATTERN:hb_adid_BidderA%%`. +When using Send All Bids, use `ucTagData.adId = "%%PATTERN:hb_adid_BIDDERCODE%%";` rather than `ucTagData.adId = "%%PATTERN:hb_adid%%";` for each bidder’s creative, replacing `BIDDERCODE` with the actual bidder code, such as `%%PATTERN:hb_adid_BidderA%%`. The example CSS in the previous section applies here as well. @@ -202,7 +204,7 @@ Now that you've defined your native template you can create your native creative {:start="4"} 4. Under **Settings**, enter a **Name** for your creative. -5. Enter any value into the **Click-through URL** field; this value will be overwritten by the native asset values. Also, if you operate in Europe and are using the jsdelivr-hosted native-render.js, make sure you set jsdelivr as your ad technology provider. (See Step 6 below.) +5. Enter any value into the **Click-through URL** field; this value will be overwritten by the native asset values. Also, if you operate in Europe and are using the jsdelivr-hosted native.js, make sure you set jsdelivr as your ad technology provider. (See Step 6 below.) ![Native Creative](/assets/images/ad-ops/gam-sbs/gam-new-creative-part2.png){: .pb-md-img :} diff --git a/adops/setting-up-prebid-with-the-appnexus-ad-server.md b/adops/setting-up-prebid-with-the-appnexus-ad-server.md index 7f4bbd518b..607b0aac8e 100644 --- a/adops/setting-up-prebid-with-the-appnexus-ad-server.md +++ b/adops/setting-up-prebid-with-the-appnexus-ad-server.md @@ -78,7 +78,7 @@ Follow the creative setup instructions in [Add Creatives](https://docs.xandr.com ![New creative]({{ site.github.url }}/assets/images/ad-ops/appnexus-setup/prebid-creative-appnexus.png) {: .pb-lg-img :} {% highlight html %} - + + + +``` + +This loads the PUC from the Prebid-maintained location. Your managed +service provider may have a different location. + +## Features of the PUC ### What the PUC does for Web iframe Banners/Outstream 1. Simply calls the Prebid.js renderAd function diff --git a/prebid/native-implementation.md b/prebid/native-implementation.md index 8eb4ca89fb..e0f9077e60 100644 --- a/prebid/native-implementation.md +++ b/prebid/native-implementation.md @@ -66,7 +66,7 @@ This table summarizes how the 3 approaches work: | --- | --- |--- | --- | | Prebid.js | mediaTypes. native.sendTargetingKeys: false | sendTargetingKeys:false and mediaTypes.native.adTemplate contains ##macros## | sendTargetingKeys:false and mediaTypes.native.rendererUrl | | Ad Server Key Value Pairs | hb_adid | hb_adid | hb_adid | -| Ad Server | Native template loads native-render.js and calls renderNativeAd(). Uses Prebid ##macro## format. | Native creative loads native-render.js and calls renderNativeAd() with requestAllAssets: true | Native creative loads native-render.js and calls renderNativeAd(), with requestAllAssets:true | +| Ad Server | Native template loads native.js and calls renderNativeAd(). Uses Prebid ##macro## format. | Native creative loads native.js and calls renderNativeAd() with requestAllAssets: true | Native creative loads native.js and calls renderNativeAd(), with requestAllAssets:true | | Prebid Universal Creative | renderNativeAd resolves macros in the creative body and CSS. | renderNativeAd resolves ##macros## in adTemplate and CSS, appending the adTemplate to the creative body | renderNativeAd loads javascript from renderUrl, calls the renderAd function, appending the results to the creative body. | | Javascript rendering function | n/a | n/a | Receives the ortb response into `bid.ortb`, and the renderer is responsible for resolving any macro format and returning an HTML block. | @@ -184,7 +184,7 @@ Bid adapters will declare which custom assets they support in their documentatio {: .alert.alert-success :} -Note: The `native-render.js::renderNativeAd()` function must be called with `requestAllAssets: true`. +Note: The `native.js::renderNativeAd()` function must be called with `requestAllAssets: true`. In the native template, simply access the custom value with the normal Prebid `##macro##` format assuming `hb_native_asset_id_` as the prefix. For example, if your custom asset has `id: 7`: @@ -273,7 +273,7 @@ pbjs.addAdUnits({ There are three key aspects of the native template: 1. Build the creative with special Prebid.js macros, e.g. `##hb_native_asset_id_{id}##.` Note that macros can be placed in the body (HTML) and/or head (CSS) of the native creative. -2. Load the Prebid.js native rendering code. You may utilize the jsdelivr version of native-render.js or host your own copy. If you use the version hosted on jsdelivr, make sure any necessary ad server permissions are established. +2. Load the Prebid.js native rendering code. You may utilize the jsdelivr version of native.js or host your own copy. If you use the version hosted on jsdelivr, make sure any necessary ad server permissions are established. 3. Invoke the Prebid.js native rendering function with an object containing the following attributes: 1. adid - used to identify which Prebid.js creative holds the appropriate native assets 2. pubUrl - the URL of the page, which is needed for the HTML postmessage call @@ -289,7 +289,7 @@ Example creative HTML:
##hb_native_asset_id_3##
- + + + - - - {% endif %} + + + + diff --git a/_includes/video/pb-is-app.html b/_includes/video/pb-is-app.html index f7634cd822..3a48ac18d3 100644 --- a/_includes/video/pb-is-app.html +++ b/_includes/video/pb-is-app.html @@ -8,7 +8,10 @@ ### Downloading and Installing Prebid.js @@ -36,7 +38,9 @@ Optanon.InsertHtml('','vimeo2', null, {deleteSelectorContent: true}, 3); + window.onetrustLoaded.then(() => { + OneTrust.InsertHtml('', 'vimeo2', null, {deleteSelectorContent: true}, 'C0003'); + }) ### Ad Server Setup for Header Bidding @@ -47,7 +51,9 @@ Optanon.InsertHtml('','vimeo3', null, {deleteSelectorContent: true}, 3); + window.onetrustLoaded.then(() => { + OneTrust.InsertHtml('', 'vimeo3', null, {deleteSelectorContent: true}, 'C0003'); + }) ### Setup Google Ad Manager for Header Bidding @@ -58,7 +64,9 @@ Optanon.InsertHtml('','vimeo4', null, {deleteSelectorContent: true}, 3); + window.onetrustLoaded.then(() => { + OneTrust.InsertHtml('', 'vimeo4', null, {deleteSelectorContent: true}, 'C0003'); + }) ### Ad Units Array Setup @@ -69,7 +77,9 @@ Optanon.InsertHtml('','vimeo5', null, {deleteSelectorContent: true}, 3); + window.onetrustLoaded.then(() => { + OneTrust.InsertHtml('', 'vimeo5', null, {deleteSelectorContent: true}, 'C0003'); + }) ## Troubleshooting @@ -82,7 +92,9 @@ Optanon.InsertHtml('','vimeo6', null, {deleteSelectorContent: true}, 3); + window.onetrustLoaded.then(() => { + OneTrust.InsertHtml('', 'vimeo6', null, {deleteSelectorContent: true}, 'C0003'); + }) ### Troubleshooting Ad Server: Size and Inventory @@ -93,7 +105,9 @@ Optanon.InsertHtml('','vimeo7', null, {deleteSelectorContent: true}, 3); + window.onetrustLoaded.then(() => { + OneTrust.InsertHtml('', 'vimeo7', null, {deleteSelectorContent: true}, 'C0003'); + }) ### Troubleshooting Ad Server: Line Item Rate and Priority @@ -104,7 +118,9 @@ Optanon.InsertHtml('','vimeo8', null, {deleteSelectorContent: true}, 3); + window.onetrustLoaded.then(() => { + OneTrust.InsertHtml('', 'vimeo8', null, {deleteSelectorContent: true}, 'C0003'); + }) ### Troubleshooting Header Bidding Calls @@ -115,7 +131,9 @@ Optanon.InsertHtml('','vimeo9', null, {deleteSelectorContent: true}, 3); + window.onetrustLoaded.then(() => { + OneTrust.InsertHtml('', 'vimeo9', null, {deleteSelectorContent: true}, 'C0003'); + }) ## Prebid Video @@ -128,7 +146,9 @@ Optanon.InsertHtml('','vimeo10', null, {deleteSelectorContent: true}, 3); + window.onetrustLoaded.then(() => { + OneTrust.InsertHtml('', 'vimeo10', null, {deleteSelectorContent: true}, 'C0003'); + }) ### Prebid Video: Instream @@ -139,7 +159,9 @@ Optanon.InsertHtml('','vimeo11', null, {deleteSelectorContent: true}, 3); + window.onetrustLoaded.then(() => { + OneTrust.InsertHtml('', 'vimeo11', null, {deleteSelectorContent: true}, 'C0003'); + }) ### Prebid Video: Outstream @@ -150,7 +172,9 @@ Optanon.InsertHtml('','vimeo12', null, {deleteSelectorContent: true}, 3); + window.onetrustLoaded.then(() => { + OneTrust.InsertHtml('', 'vimeo12', null, {deleteSelectorContent: true}, 'C0003'); + }) diff --git a/videos/prebid-video.md b/videos/prebid-video.md index a72a458ebd..f6e1038cad 100644 --- a/videos/prebid-video.md +++ b/videos/prebid-video.md @@ -21,7 +21,9 @@ sidebarType: 4 ## Prebid Video: Instream @@ -32,7 +34,9 @@ Optanon.InsertHtml('','vimeo2', null, {deleteSelectorContent: true}, 3); + window.onetrustLoaded.then(() => { + OneTrust.InsertHtml('', 'vimeo2', null, {deleteSelectorContent: true}, 'C0003'); + }) ## Prebid Video: Outstream @@ -43,6 +47,8 @@ Optanon.InsertHtml('','vimeo3', null, {deleteSelectorContent: true}, 3); + window.onetrustLoaded.then(() => { + OneTrust.InsertHtml('', 'vimeo3', null, {deleteSelectorContent: true}, 'C0003'); + }) diff --git a/videos/setup.md b/videos/setup.md index 45ee54448c..60a3967685 100644 --- a/videos/setup.md +++ b/videos/setup.md @@ -21,7 +21,9 @@ sidebarType: 1

Header Bidding from AppNexus on Vimeo.

@@ -34,7 +36,9 @@ Optanon.InsertHtml('', 'vimeo2', null, {deleteSelectorContent: true}, 3); + window.onetrustLoaded.then(() => { + OneTrust.InsertHtml('', 'vimeo2', null, {deleteSelectorContent: true}, 'C0003'); + })

Downloading and Installing Prebid.js from AppNexus on Vimeo.

@@ -47,7 +51,9 @@ Optanon.InsertHtml('', 'vimeo3', null, {deleteSelectorContent: true}, 3); + window.onetrustLoaded.then(() => { + OneTrust.InsertHtml('', 'vimeo3', null, {deleteSelectorContent: true}, 'C0003'); + }) ## Setup Google Ad Manager for Header Bidding @@ -58,7 +64,9 @@ Optanon.InsertHtml('', 'vimeo4', null, {deleteSelectorContent: true}, 3); + window.onetrustLoaded.then(() => { + OneTrust.InsertHtml('', 'vimeo4', null, {deleteSelectorContent: true}, 'C0003'); + })

Setup Google Ad Manager for Header Bidding from AppNexus on Vimeo.

@@ -71,7 +79,9 @@ Optanon.InsertHtml('', 'vimeo5', null, {deleteSelectorContent: true}, 3); + window.onetrustLoaded.then(() => { + OneTrust.InsertHtml('', 'vimeo5', null, {deleteSelectorContent: true}, 'C0003'); + }) diff --git a/videos/troubleshooting.md b/videos/troubleshooting.md index 495c8d6156..d0c8dc157b 100644 --- a/videos/troubleshooting.md +++ b/videos/troubleshooting.md @@ -21,7 +21,9 @@ sidebarType: 1

Troubleshooting Header Bidding Configuration from AppNexus on Vimeo.

@@ -34,7 +36,9 @@ Optanon.InsertHtml('','vimeo2', null, {deleteSelectorContent: true}, 3); + window.onetrustLoaded.then(() => { + OneTrust.InsertHtml('', 'vimeo2', null, {deleteSelectorContent: true}, 'C0003'); + }) ## Troubleshooting Ad Server: Line Item Rate and Priority @@ -45,7 +49,9 @@ Optanon.InsertHtml('','vimeo3', null, {deleteSelectorContent: true}, 3); + window.onetrustLoaded.then(() => { + OneTrust.InsertHtml('', 'vimeo3', null, {deleteSelectorContent: true}, 'C0003'); + }) ## Troubleshooting Header Bidding Calls @@ -56,7 +62,9 @@ Optanon.InsertHtml('','vimeo4', null, {deleteSelectorContent: true}, 3); + window.onetrustLoaded.then(() => { + OneTrust.InsertHtml('', 'vimeo4', null, {deleteSelectorContent: true}, 'C0003'); + }) From 1191909e85f3f210b6f3d64b921f7d7777fe660f Mon Sep 17 00:00:00 2001 From: Erik Hummel Date: Thu, 30 Mar 2023 13:05:05 -0400 Subject: [PATCH 191/763] Documentation updates for March 2023 (#4444) * Documentation updates for March 2023 * typo fix * Update dev-docs/modules/userid-submodules/lotame.md fix curly quotes to normal quotes. Co-authored-by: Muki Seiler --------- Co-authored-by: Erik Hummel Co-authored-by: Muki Seiler --- dev-docs/modules/userid-submodules/lotame.md | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/dev-docs/modules/userid-submodules/lotame.md b/dev-docs/modules/userid-submodules/lotame.md index d2ecd784c4..858140afd2 100644 --- a/dev-docs/modules/userid-submodules/lotame.md +++ b/dev-docs/modules/userid-submodules/lotame.md @@ -10,23 +10,20 @@ useridmodule: lotamePanoramaIdSystem Lotame’s Panorama ID module sends information from the request to its identity graph in order to successfully generate a Panorama ID. For more information on how the Panorama ID works, please visit [https://www.lotame.com/panorama/id/](https://www.lotame.com/panorama/id/). -**Ease of Implementation**: Deployment of the Lotame Panorama ID module has been optimized for ease by not requiring any registration to utilize. Simply add the generic module to start producing the Panorama ID across your inventory. - Lotame's privacy policy related to the Panorama ID and the collection of data and how data is used is available at [https://www.lotame.com/about-lotame/privacy/lotames-products-services-privacy-policy/](https://www.lotame.com/about-lotame/privacy/lotames-products-services-privacy-policy/). Consult with your legal counsel to determine the appropriate user disclosures with respect to use of the Lotame Panorama ID module. -If you have any questions about Panorama ID, please reach out by emailing [PanoramaID@lotame.com](mailto:PanoramaID@lotame.com). +If you have any questions about Panorama ID, please reach out by emailing [prebid@lotame.com](mailto:prebid@lotame.com). Add it to your Prebid.js package with: {: .alert.alert-info :} gulp build --modules=lotamePanoramaIdSystem -## Lotame Panorama ID Configuration +## Lotame Panorama ID Registration & Implementation -The Lotame Panorama ID module does not require any configuration parameters. It should work as-is provided that bidders use it in their adapters. +To get started, you will need to register with Lotame in order to receive your unique client ID for the userID module. You can [register here](https://www.cognitoforms.com/LotameSolutionsInc/PanoramaIDOfferingEnrollment) or contact [prebid@lotame.com](mailto:prebid@lotame.com) for any questions that you may have. -{: .alert.alert-info :} -NOTE: For optimal performance, the Lotame Panorama Id module should be called at every opportunity. It is best not to use `params.storage` with this module as the module has its own optimal caching mechanism. +Once you sign up, you will receive an email with your client ID and instructions for implementation. ## Lotame Panorama ID Example @@ -34,13 +31,21 @@ NOTE: For optimal performance, the Lotame Panorama Id module should be called at | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of the module | "lotamePanoramaId" | +| params | Required | Object | Configuration options for the Lotame Panorama ID Module | | + | params.clientId | Required | String | The Lotame Client ID provided as part of your registration as noted above | "1001" | {% highlight javascript %} pbjs.setConfig({ userSync: { userIds: [{ name: "lotamePanoramaId", + params: { + clientId: "1001" + } }] } }); {% endhighlight %} + +{: .alert.alert-info :} +NOTE: For optimal performance, the Lotame Panorama Id module should be called at every opportunity. It is best not to use params.storage with this module as the module has its own optimal caching mechanism. From 1a3e54dcdbf9c8e7f7b71c0055047ae1fe8a6877 Mon Sep 17 00:00:00 2001 From: MartianTribe Date: Mon, 3 Apr 2023 11:46:29 -0400 Subject: [PATCH 192/763] Update kargo.md --- dev-docs/bidders/kargo.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-docs/bidders/kargo.md b/dev-docs/bidders/kargo.md index 7b08665204..8c9c500288 100644 --- a/dev-docs/bidders/kargo.md +++ b/dev-docs/bidders/kargo.md @@ -10,8 +10,8 @@ gdpr_supported: true userIds: unifiedId usp_supported: true coppa_supported: false -schain_supported: false -dchain_supported: false +schain_supported: true +dchain_supported: true safeframes_ok: false deals_supported: true floors_supported: true From 9f864e797e3974cad1d3a81b5a8d035394a3b9cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Besse?= Date: Mon, 3 Apr 2023 21:54:26 +0200 Subject: [PATCH 193/763] Adagio: Add documentation for splitKeyword and dataLayer params (#4430) * Add documentation for the splitKeyword and dl params * Update param from `dl` to `dataLayer` - Improve description, fix example.. * Adagio: Update description for dataLayer param --- dev-docs/bidders/adagio.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-docs/bidders/adagio.md b/dev-docs/bidders/adagio.md index 5a56d69fd1..b4ea493b95 100644 --- a/dev-docs/bidders/adagio.md +++ b/dev-docs/bidders/adagio.md @@ -59,7 +59,6 @@ pbjs.bidderSettings = { **Important**: Adagio needs to collect attention data about the ads displayed on a page and must listen to some specifics ad-server events. Please refer to the [Adagio user guide](https://adagioio.notion.site/Adagio-Account-Setup-Guide-fbcd940649224cdfa10393d2f008792e) for details. {: .table .table-bordered .table-striped } - | Name | Scope | Description | Example | Type | | ----------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | -------- | | `organizationId` | required | Id of the Organization. Handed out by Adagio. | `'1010'` | `string` | @@ -70,7 +69,8 @@ pbjs.bidderSettings = { | `category`* | recommended | Category of the content displayed in the page.
- max length: 30
- max distinctives values: 50 | `'sport'` | `string` | | `video` | optional | OpenRTB video options object. All options will override ones defined in mediaTypes video.
Mandatory:
- api (your video player must at least support the value 2 and/or 7)
Highly recommended:
- playbackmethod | `{api: [2, 7], playbackmethod: [6], skip: 1, startdelay: 0}` | | `native` | optional | Partial OpenRTB Native 1.2 request object. Supported fields are:
- context
- plcmttype | `{context: 1, plcmttype: 2}` | `object` | - +| `splitKeyword` | optional | Keyword that can later be used in a split rule targeting to trigger the rule (especially for Direct Seats AB testing) | `'splitrule-one'` | `string` | +| `dataLayer` | optional | A set of arbitrary key-value pairs. This can be used to configure mappings. The keys and values must be strings. | `{placement: 'my-placement', siteid: 'my-siteid'}` | `object` | *These parameters will have its accentuated characters converted to their non-accentuated version: `é` => `e` From 9f75e904e9631626659a0e25300c13d4309cac5e Mon Sep 17 00:00:00 2001 From: Bernhard Pickenbrock Date: Tue, 4 Apr 2023 15:05:27 +0200 Subject: [PATCH 194/763] Smaato: Adapters that accept geolocation data from bid parameters should also accept it from ortb2.(device|user).geo (#9676) (#4455) --- dev-docs/bidders/smaato.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/dev-docs/bidders/smaato.md b/dev-docs/bidders/smaato.md index eb7a66671b..89e5054c65 100644 --- a/dev-docs/bidders/smaato.md +++ b/dev-docs/bidders/smaato.md @@ -211,6 +211,8 @@ Publishers should use the `ortb2` method of setting First Party Data. The follow - ortb2.user.yob - ortb2.user.gender - ortb2.user.ext.eids +- ortb2.device.geo +- ortb2.device.ifa The IAB standard taxonomies are not supported. @@ -230,6 +232,13 @@ pbjs.setConfig({ keywords: "a,b", gender: "M", yob: 1984 + }, + device: { + ifa: "identifier", + geo: { + lat: 53.5488, + lon: 9.9872 + } } } }); From fb9936f421c022e36ed500a60d9435c7bc21596e Mon Sep 17 00:00:00 2001 From: Karim Mourra Date: Wed, 5 Apr 2023 13:16:16 -0300 Subject: [PATCH 195/763] [Video] Add example using Video Module with video.js (#4459) * adds examples for VM * builds * loads script tags * updates sidebar menu * removes jwplayer * updates displayed config to reflect programmatic one * requests bids based on onetrust --- _data/sidebar.yml | 8 + _includes/video/pb-vm-vjs.html | 27 ++ _layouts/video_sample.html | 2 + examples/video/index.md | 6 + .../videojs/video-module-videojs.html | 286 ++++++++++++++++++ 5 files changed, 329 insertions(+) create mode 100644 _includes/video/pb-vm-vjs.html create mode 100644 examples/video/instream/videoModule/videojs/video-module-videojs.html diff --git a/_data/sidebar.yml b/_data/sidebar.yml index b23317f0bc..8129f22992 100644 --- a/_data/sidebar.yml +++ b/_data/sidebar.yml @@ -1275,6 +1275,14 @@ sectionTitle: subgroup: 2 +- sbSecId: 4 + title: 'Prebid Video Module: VideoJS' + link: /examples/video/instream/videoModule/videojs/video-module-videojs.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 2 + - sbSecId: 4 title: 'JW Player (Platform)' link: /examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html diff --git a/_includes/video/pb-vm-vjs.html b/_includes/video/pb-vm-vjs.html new file mode 100644 index 0000000000..d923784910 --- /dev/null +++ b/_includes/video/pb-vm-vjs.html @@ -0,0 +1,27 @@ + + + + + {% include head--common.html %} + + + + + + + + + + + + + + diff --git a/_layouts/video_sample.html b/_layouts/video_sample.html index e46677cc17..c62c9dad25 100644 --- a/_layouts/video_sample.html +++ b/_layouts/video_sample.html @@ -6,6 +6,8 @@ {% include /video/pb-is-sb.html %} {% elsif page.videoType == "pb-is-vjs" %} {% include /video/pb-is-vjs.html %} +{% elsif page.videoType == "pb-vm-vjs" %} + {% include /video/pb-vm-vjs.html %} {% elsif page.videoType == "pbs-br" %} {% include /video/pbs-br.html %} {% elsif page.videoType == "pbs-jw01" %} diff --git a/examples/video/index.md b/examples/video/index.md index 4faadf4926..67442d0e27 100644 --- a/examples/video/index.md +++ b/examples/video/index.md @@ -17,6 +17,12 @@ sidebarType: 4 The following examples are available: +## Prebid Video Module: Instream + +- [VideoJS](/examples/video/instream/videoModule/videojs/video-module-videojs.html) + +## Prebid Video Module: Outstream + ## Instream - [Brightcove](/examples/video/instream/brightcove/pb-ve-brightcove.html) diff --git a/examples/video/instream/videoModule/videojs/video-module-videojs.html b/examples/video/instream/videoModule/videojs/video-module-videojs.html new file mode 100644 index 0000000000..513ae2e53f --- /dev/null +++ b/examples/video/instream/videoModule/videojs/video-module-videojs.html @@ -0,0 +1,286 @@ +--- +layout: video_sample +title: Prebid Video Module | Instream Example with VideoJS Submodule +description: An example of an instream pre-roll ad using the Prebid.js Video Module and the VideoJS submodule. +videoType: pb-vm-vjs +isVideo: true +sidebarType: 4 +--- + + +
+
+
+

{{ page.title }}

+

{{page.description }}

+
+ +
+

(Sorry, video code examples aren't available with your cookie privacy settings.)

+

Cookie Settings


+
+ + +
+
+ +{% if jekyll.environment == "production" %} + +{% else %} + +{% endif %} + + + + From 5e28b9444cd8c0d67670c03f6de77bc54913d6b1 Mon Sep 17 00:00:00 2001 From: rajsidhunovatiq <79534312+rajsidhunovatiq@users.noreply.github.com> Date: Thu, 6 Apr 2023 18:12:54 +0100 Subject: [PATCH 196/763] update docs to make it easier for clients (#4452) --- dev-docs/modules/userid-submodules/novatiq.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/dev-docs/modules/userid-submodules/novatiq.md b/dev-docs/modules/userid-submodules/novatiq.md index 706e73e287..5d2cd2cdcf 100644 --- a/dev-docs/modules/userid-submodules/novatiq.md +++ b/dev-docs/modules/userid-submodules/novatiq.md @@ -23,14 +23,17 @@ pbjs.setConfig({ userSync: { userIds: [{ name: 'novatiq', + bidders: [ + `rubicon` + ], params: { // change to the Partner Number you received from Novatiq sourceid '1a3' } } }], - // 50ms maximum auction delay, applies to all userId modules - auctionDelay: 50 + // 1000ms maximum auction delay, applies to all userId modules + auctionDelay: 1000 } }); {% endhighlight %} @@ -42,7 +45,7 @@ pbjs.setConfig({ | --- | --- | --- | --- | --- | | name | Required | String | Module identification: `"novatiq"` | `"novatiq"` | | params | Required | Object | Configuration specifications for the Novatiq module. | | -| params.sourceid | Required | String | This is the Novatiq Partner Number obtained via Novatiq registration. | `1a3` | +| params.sourceid | Required (if applicable) | String | This is the Novatiq Partner Number obtained via Novatiq registration. | `1a3` | | params.useSharedId | Optional | Boolean | Use the sharedID module if it's activated. | `true` | | params.sharedIdName | Optional | String | Same as the SharedID "name" parameter
Defaults to "_pubcid" | `"demo_pubcid"` | | params.useCallbacks | Optional | Boolean | Use callbacks for custom integrations | `false` | @@ -72,6 +75,9 @@ pbjs.setConfig({ userIds: [ { name: 'novatiq', + bidders: [ + `rubicon` + ], params: { // change to the Partner Number you received from Novatiq sourceid '1a3', @@ -85,8 +91,8 @@ pbjs.setConfig({ } } }], - // 50ms maximum auction delay, applies to all userId modules - auctionDelay: 50 + // 1000ms maximum auction delay, applies to all userId modules + auctionDelay: 1000 } }); {% endhighlight %} From 5d3370bfe25eecf37be921b44d7bd71dfc046d67 Mon Sep 17 00:00:00 2001 From: asurovenko-zeta <80847074+asurovenko-zeta@users.noreply.github.com> Date: Mon, 10 Apr 2023 18:00:50 +0200 Subject: [PATCH 197/763] ZetaGlobalSsp adapter: tagid in doc (#4470) Co-authored-by: Surovenko Alexey --- dev-docs/bidders/zeta_global_ssp.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/zeta_global_ssp.md b/dev-docs/bidders/zeta_global_ssp.md index a56068b4a2..6acb845a27 100644 --- a/dev-docs/bidders/zeta_global_ssp.md +++ b/dev-docs/bidders/zeta_global_ssp.md @@ -29,6 +29,7 @@ The Zeta Global SSP adapter requires setup and approval from the Zeta Global SSP |----------------------|----------|---------------------------------------------------------------------------------------------------------------------|--------------|-----------| | `sid` | required | Seller ID. The identifier associated with the seller or reseller account within the advertising system | `"sid123"` | `string` | | `shortname` | required | Publisher Name. The unique name associated with the seller or reseller account within the advertising system | `"pub_name"` | `string` | +| `tagid` | required | Identifier for specific ad placement or ad tag that was used to initiate the auction | `"123877"` | `string` | | `tags` | optional | The object containing set of Zeta's custom tags witch publisher have to supply | `tags: {}` | `object` | | `site` | optional | The object containing site data (See OpenRTB spec) | `site: {}` | `object` | | `app` | optional | The object containing app data (See OpenRTB spec) | `app: {}` | `object` | From f32dd2b435598447c05452973b13f73e98f330f5 Mon Sep 17 00:00:00 2001 From: Denis Logachov Date: Mon, 10 Apr 2023 20:01:19 +0300 Subject: [PATCH 198/763] Adkernel: documenting adliveconnect alias (#4451) * Adkernel: documenting adliveconnect alias * Update adlive.md * Rename adlive.md to adliveconnect.md --- dev-docs/bidders/adliveconnect.md | 34 +++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 dev-docs/bidders/adliveconnect.md diff --git a/dev-docs/bidders/adliveconnect.md b/dev-docs/bidders/adliveconnect.md new file mode 100644 index 0000000000..fd730d84e8 --- /dev/null +++ b/dev-docs/bidders/adliveconnect.md @@ -0,0 +1,34 @@ +--- +layout: bidder +title: Adliveconnect +description: Adliveconnect Bidder Adaptor +biddercode: adliveconnect +pbjs: true +pbs: false +media_types: banner, native, video +gdpr_supported: true +usp_supported: true +coppa_supported: true +pbs_app_supported: false +schain_supported: true +userIds: all +fpd_supported: true +prebid_member: false +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +floors_supported: true +aliasCode: adkernel +sidebarType: 1 +--- + +### Note: + +The Adlive bidding adapter requires setup and approval before implementation. Please reach out to for more details. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-----------------------|---------------------------|----------| +| `host` | required | RTB host | `'cpm.adlive.io'` | `string` | +| `zoneId` | required | Zone Id | 30164 | `integer` | From 0f087273b90caa5638100990eb27e95835efb442 Mon Sep 17 00:00:00 2001 From: Demetrio Girardi Date: Mon, 10 Apr 2023 10:23:36 -0700 Subject: [PATCH 199/763] PBJS: document new `storageAllowed` options (#4466) --- dev-docs/publisher-api-reference/bidderSettings.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/dev-docs/publisher-api-reference/bidderSettings.md b/dev-docs/publisher-api-reference/bidderSettings.md index d7d9e8c308..2da634a29d 100644 --- a/dev-docs/publisher-api-reference/bidderSettings.md +++ b/dev-docs/publisher-api-reference/bidderSettings.md @@ -46,7 +46,7 @@ Some sample scenarios where publishers may wish to alter the default settings: | sendStandardTargeting | adapter-specific | 0.13.0 | true | If adapter-specific targeting is specified, can be used to suppress the standard targeting for that adapter. | | suppressEmptyKeys | standard or adapter-specific | 0.13.0 | false | If custom adserverTargeting functions are specified that may generate empty keys, this can be used to suppress them. | | allowZeroCpmBids | standard or adapter-specific | 6.2.0 | false | Would allow bids with a 0 CPM to be accepted by Prebid.js and could be passed to the ad server. | -| storageAllowed | standard or adapter-specific | 6.13.0 | true in 6.x, false after 7.0 | Allow use of cookies and local storage. | +| storageAllowed | standard or adapter-specific | 6.13.0 | true in 6.x, false after 7.0 | Allow use of cookies and/or local storage. | | allowAlternateBidderCodes | standard or adapter-specific | 6.23.0 | true in v6.x
false from v7.0| Allow adapters to bid with alternate bidder codes. | | allowedAlternateBidderCodes | standard or adapter-specific | 6.23.0 | n/a | Array of bidder codes for which an adapter can bid.
`undefined` or `['*']` will allow adapter to bid with any bidder code. | @@ -262,7 +262,12 @@ either specific bid adapter(s) or all bid adapters the permission for these bids ##### 2.7. storageAllowed -This flag defines if the bid adapter can access browser cookies and local storage. +This setting defines if the bid adapter can access browser cookies or local storage. Allowed values are: + + - an array containing either `'html5'`, `'cookie'` or both to allow specific storage methods (e.g. `['cookie']` enables cookies but not local storage) + - `true` to allow any storage method; + - `false` to disable all storage. +
Default value is `true` in version 6.x
Default value is `false` in version 7.x From 2d2d1f685569aea674a38d0b1d55ef1b68f8e7f3 Mon Sep 17 00:00:00 2001 From: Nisar Thadathil Date: Tue, 11 Apr 2023 00:02:47 +0530 Subject: [PATCH 200/763] Updated documentation for Vidoomy Schain support (#4465) --- dev-docs/bidders/vidoomy.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/vidoomy.md b/dev-docs/bidders/vidoomy.md index 39599b4779..aba41d2353 100644 --- a/dev-docs/bidders/vidoomy.md +++ b/dev-docs/bidders/vidoomy.md @@ -11,6 +11,7 @@ usp_supported: true coppa_supported: true pbs: true sidebarType: 1 +schain_supported: true --- ### Note: From d4a52676dd53b1b7a215873e56d2565bf377fb35 Mon Sep 17 00:00:00 2001 From: abermanov-zeta <95416296+abermanov-zeta@users.noreply.github.com> Date: Tue, 11 Apr 2023 16:53:03 +0200 Subject: [PATCH 201/763] Documentation: Zeta Global SSP Prebid Server Adapter. (#4464) --- dev-docs/bidders/zeta_global_ssp.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/dev-docs/bidders/zeta_global_ssp.md b/dev-docs/bidders/zeta_global_ssp.md index 6acb845a27..f38f2430f1 100644 --- a/dev-docs/bidders/zeta_global_ssp.md +++ b/dev-docs/bidders/zeta_global_ssp.md @@ -1,11 +1,12 @@ --- layout: bidder -title: Zeta Global Ssp -description: Zeta Global Ssp Prebid Bidder Adapter +title: Zeta Global SSP +description: Zeta Global SSP Prebid Bidder Adapter pbjs: true +pbs: true biddercode: zeta_global_ssp deals_supported: false -media_types: banner +media_types: banner, video gdpr_supported: true usp_supported: true coppa_supported: true @@ -24,6 +25,8 @@ The Zeta Global SSP adapter requires setup and approval from the Zeta Global SSP ### Bid Params +#### Prebid.js Bid Params + {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |----------------------|----------|---------------------------------------------------------------------------------------------------------------------|--------------|-----------| @@ -35,3 +38,9 @@ The Zeta Global SSP adapter requires setup and approval from the Zeta Global SSP | `app` | optional | The object containing app data (See OpenRTB spec) | `app: {}` | `object` | | `bidfloor` | optional | The minimum bid value desired | `0.2` | `float` | | `test` | optional | Flag which will induce a sample bid response when true; only set to true for testing purposes (1 = true, 0 = false) | `1` | `integer` | + + +#### Prebid Server Bid Params + +Prebid Server Adapter does not support any parameters. +You must get `sid` and `shortname` values from Zeta Global and use them instead of placeholders in the URL. From 5c5da95e504df5c38a0164872d5e746c38a6ab1b Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Date: Tue, 11 Apr 2023 18:51:53 +0200 Subject: [PATCH 202/763] add greenbids analytics documentation (#4427) * add greenbids analytics documentation * fix typo and allow download --- dev-docs/analytics/greenbids.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 dev-docs/analytics/greenbids.md diff --git a/dev-docs/analytics/greenbids.md b/dev-docs/analytics/greenbids.md new file mode 100644 index 0000000000..189726a355 --- /dev/null +++ b/dev-docs/analytics/greenbids.md @@ -0,0 +1,33 @@ +--- +layout: analytics +title: Greenbids +description: Greenbids Analytics Adapter +modulecode: greenbids +prebid_member: false +enable_download: true +--- + +#### Registration + +The Greenbids Analytics adapter requires setup and approval from the +Greenbids team. Please reach out to our team for more information [https://greenbids.ai](https://greenbids.ai). + +#### Analytics Options + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------------|---------|--------------------|-----------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|------------------| +| pbuid | required | The Greenbids Publisher ID | greenbids-publisher-1 | string | +| sampling | optional | sampling factor [0-1] (a value of 0.1 will filter 90% of the traffic) | 0.5 | float | + +### Example Configuration + +``` + pbjs.enableAnalytics({ + provider: 'greenbids', + options: { + pbuid: "greenbids-publisher-1" // please contact Greenbids to get a pbuid for yourself + sampling: 1.0 + } + }); +``` From db6a0e70c955e3eaa3ede8309ec681d45728fb2b Mon Sep 17 00:00:00 2001 From: Patrick Loughrey Date: Tue, 11 Apr 2023 12:56:07 -0400 Subject: [PATCH 203/763] Triplelift: Update video parameters requirement (#4478) * TL-34447 Add GPP Support to Prebid.org * TL-27059: Added pDMP documentation * Update triplelift.md * Triplelift: Update video params --------- Co-authored-by: bretg --- dev-docs/bidders/triplelift.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/triplelift.md b/dev-docs/bidders/triplelift.md index a3e0a76272..109444a6e3 100644 --- a/dev-docs/bidders/triplelift.md +++ b/dev-docs/bidders/triplelift.md @@ -70,6 +70,7 @@ See the [Ad Unit Reference](https://docs.prebid.org/dev-docs/adunit-reference.ht | Name | Scope | Description | Example | Type | |-----------------|------------------------------|--------------------------------------------------------------------------------------|---------------------------------------------|----------| | `adUnit.mediaTypes.video.placement` | required | Instream: 1; Outstream: 3, 4, 5. | `3` | `int` | +| `adUnit.mediaTypes.video.playerSize` | required | Video player dimensions or size in pixels | `[640, 480]` | `integer array` | From 59c97c65ddaa3fd753d6d696600a3b3f96ef67ab Mon Sep 17 00:00:00 2001 From: dzhang-criteo <87757739+dzhang-criteo@users.noreply.github.com> Date: Thu, 13 Apr 2023 15:43:52 +0200 Subject: [PATCH 204/763] Criteo: update doc (#4480) Specify support of GPP --- dev-docs/bidders/criteo.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/criteo.md b/dev-docs/bidders/criteo.md index 02509f0379..c26f00e223 100644 --- a/dev-docs/bidders/criteo.md +++ b/dev-docs/bidders/criteo.md @@ -17,6 +17,7 @@ gvl_id: 91 coppa_supported: true multiformat_supported: will-bid-on-any sidebarType: 1 +gpp_supported: true --- ### Notes From a70d08e4287b52c9466a327ab4ffdad75779d1fd Mon Sep 17 00:00:00 2001 From: SmartyAdman <59048845+SmartyAdman@users.noreply.github.com> Date: Fri, 14 Apr 2023 00:27:50 +0300 Subject: [PATCH 205/763] Adman Adapter: text edit only (#4483) * Add adman dev doc * Change params Params required by new adapter setup * Edit docs Fix naming, use quotes around example * adding quotes to string param * Update adman.md * tcf2_supported: true * Update adman.md add usp support * Add api param for prebid servr adapter * updates for prebid 5.0, and support uid2 * add Lotame Panorama ID * add idx (UserID Module) * edit schain_support --------- Co-authored-by: minoru katogi Co-authored-by: ADman Media Co-authored-by: bretg Co-authored-by: Aiholkin --- dev-docs/bidders/adman.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/adman.md b/dev-docs/bidders/adman.md index 4bb430f057..55e07ac664 100644 --- a/dev-docs/bidders/adman.md +++ b/dev-docs/bidders/adman.md @@ -7,6 +7,7 @@ pbs: true biddercode: adman gdpr_supported: true usp_supported: true +schain_supported: true media_types: banner, video, native userIds: uid2, lotamePanoramaId, idx sidebarType: 1 From 16f228cf15c5dbb044de6d723b0c399c7c118090 Mon Sep 17 00:00:00 2001 From: Samuel Adu Date: Fri, 14 Apr 2023 14:13:44 +0100 Subject: [PATCH 206/763] Updated documentation for Yahoo ConnectID UserID module (#4456) Co-authored-by: slimkrazy --- dev-docs/modules/userid-submodules/yahoo.md | 94 +++++++++------------ 1 file changed, 38 insertions(+), 56 deletions(-) diff --git a/dev-docs/modules/userid-submodules/yahoo.md b/dev-docs/modules/userid-submodules/yahoo.md index f6e86cb903..706988b73e 100644 --- a/dev-docs/modules/userid-submodules/yahoo.md +++ b/dev-docs/modules/userid-submodules/yahoo.md @@ -5,41 +5,30 @@ description: Yahoo ConnectID User ID sub-module useridmodule: connectIdSystem --- -Yahoo ConnectID is a person based ID and does not depend on 3rd party cookies. It enables ad tech platforms to recognize and match users consistently across the open web. Built on top of Yahoo’s robust and proprietary ID Graph it delivers a higher find rate of audiences on publishers’ sites user targeting that respects privacy. +Yahoo ConnectID is a person based ID and does not depend on 3rd party cookies. It enables ad tech platforms to recognize and match users consistently across the open web. Built on top of Yahoo's robust and proprietary ID Graph it delivers higher monetization while respecting user privacy via multiple controls. -## Honoring Privacy Choices - -Yahoo ConnectID provides multiple mechanisms for users to manage their privacy choices. Users can manage their choices via [ConnectID Control Portal](http://connectid.yahoo.com), on the [Yahoo Privacy Dashboard](https://legal.yahoo.com/us/en/yahoo/privacy/dashboard/index.html) and [NAI’s Audience Matched Opt Out page](https://optout.networkadvertising.org/optout/email). No further actions are required by Publishers as Yahoo will ensure that privacy choices selected by users via one of these methods are honored. We will automatically stop generating ConnectIDs for users who have opted-out. - -When desired, additional privacy control can be provided to your users. Within your privacy policy or website privacy settings, [Create an Easy Opt-in Opt-out Toggle](https://documentation.help.yahooinc.com/platform/SSP/Sellers/Integrate/Create-an-Easy-OptIn-Optout-Toggle.htm) for ConnectID. - -Finally, ConnectID follows all global privacy laws (such as the CCPA) and industry frameworks (such as NAI, DAA and IAB). Yahoo will auto-detect most privacy signals present on the page (including those set by prebid libraries) and not generate a ConnectID for users that have opted-out. +Add support for Yahoo ConnectID to your Prebid.js package using: +{: .alert.alert-info :} +gulp build --modules=userId,connectIdSystem ## Yahoo ConnectID Registration -A Yahoo supplied publisher specific pixel Id is required. Please reach out to your account manager for assistance with setup. - -Add support for Yahoo ConnectID to your Prebid.js package with: - -{: .alert.alert-info :} -gulp build --modules=userId,connectIdSystem +A Yahoo-supplied publisher-specific pixel ID is required. Reach out to [connectid.support@yahooinc.com](mailto:connectid.support@yahooinc.com) for assistance with setup. ## Yahoo ConnectID Configuration +Note: Parameters are case-sensitive. ConnectID is the proper name of our product, however, when used in code it is spelled as connect**I**d. Follow the example in the table below.
| Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | -| name | Required | String | The name of this module. | `'connectId'` | +| name | Required | String | The name of this module. | `"connectId"` | | params | Required | Object | Container of all module params. || -| params.pixelId | Required | Number | The Yahoo supplied publisher specific pixel Id | `8976` | -| params.he | Optional | String | The SHA-256 hashed user email address. One of either the `he` parameter or the `puid` parameter must be supplied. |`'ed8ddbf5a171981db8ef938596ca297d5e3f84bcc280041c5880dba3baf9c1d4'`| -| params.puid | Optional | String | The publisher-supplied user identifier. One of either the `he` parameter or the `puid` parameter must be supplied. | `"P-975484817"` | -| storage | Required | Object | Defines where and for how long the results of the call to get a user ID will be stored. | | -| storage.type | Required | String | Defines where the resolved user ID will be stored (either `'cookie'` or `'html5'` localstorage).| `'html5'` | -| storage.name | Required | String | The name of the cookie or html5 localstorage where the resolved user ID will be stored. | `'connectId'` | -| storage.expires | Recommended | Integer | How long (in days) the user ID information will be stored. The recommended value is `15` | `15` | +| params.pixelId | Required | Number | +The Yahoo-supplied publisher-specific pixel ID. | `"0000"` | +| params.he | Optional | String | The SHA-256 hashed user email address which has been lowercased prior to hashing. Pass both `he` and `puid` params if present, otherwise pass either of the two that is available. |`"ed8ddbf5a171981db8ef938596ca297d5e3f84bcc280041c5880dba3baf9c1d4"`| +| params.puid | Optional | String | The publisher supplied user identifier such as a first-party cookie. Pass both `he` and `puid` params if present, otherwise pass either of the two that is available. | `"ab9iibf5a231ii1db8ef911596ca297d5e3f84biii00041c5880dba3baf9c1da"` | {: .table .table-bordered .table-striped }
@@ -47,19 +36,15 @@ gulp build --modules=userId,connectIdSystem ## Yahoo ConnectID Examples ``` -// [Sample #1]: Using a hashed email. +// [Sample #1]: Using a hashed email only. + pbjs.setConfig({ userSync: { userIds: [{ name: "connectId", params: { - pixelId: 8976, + pixelId: "0000", he: "ed8ddbf5a171981db8ef938596ca297d5e3f84bcc280041c5880dba3baf9c1d4" - }, - storage: { - type: "html5", - name: "connectId", - expires: 15 } }] } @@ -67,42 +52,39 @@ pbjs.setConfig({ ``` ``` -// [Sample #2]: Using a publisher-supplied user identifier. -pbjs.setConfig({ - userSync: { - userIds: [{ - name: "connectId", - params: { - pixelId: 8976, - puid: "P-975484817" - }, - storage: { - type: "html5", - name: "connectId", - expires: 15 - } - }] - } -}) -``` +// [Sample #2]: Using a hashed email and a publisher-supplied user identifier such as a first-party cookie. -``` -// [Sample #3]: Using a hashed email and a publisher-supplied user identifier. pbjs.setConfig({ userSync: { userIds: [{ name: "connectId", params: { - pixelId: 8976, + pixelId: "0000", he: "ed8ddbf5a171981db8ef938596ca297d5e3f84bcc280041c5880dba3baf9c1d4", - puid: "P-975484817" - }, - storage: { - type: "html5", - name: "connectId", - expires: 15 + puid: "ab9iibf5a231ii1db8ef911596ca297d5e3f84biii00041c580dba3baf9c1da" } }] } }) ``` + +## Honoring Privacy Choices + +Yahoo ConnectID provides multiple mechanisms for users to manage their privacy choices. Users can manage their choices via [ConnectID Control Portal](http://connectid.yahoo.com), on the [Yahoo Privacy Dashboard](https://legal.yahoo.com/us/en/yahoo/privacy/dashboard/index.html) and [NAI’s Audience Matched Opt Out page](https://optout.networkadvertising.org/optout/email). No further actions are required by Publishers as Yahoo will ensure that privacy choices selected by users via one of these methods are honored. We will automatically stop generating ConnectIDs for users who have opted-out. + +When desired, additional privacy control can be provided to your users. Within your privacy policy or website privacy settings, [Create an Easy Opt-in Opt-out Toggle](https://documentation.help.yahooinc.com/platform/SSP/Sellers/Integrate/Create-an-Easy-OptIn-Optout-Toggle.htm) for ConnectID. + +Finally, ConnectID follows all global privacy laws (such as the CCPA) and industry frameworks (such as NAI, DAA and IAB). Yahoo will auto-detect most privacy signals present on the page (including those set by Prebid libraries) and not generate a ConnectID for users that have opted-out. + +## Yahoo ConnectID Optional Parameters +Please note that the storage related parameters are optional. We recommend that you omit them, since ConnectID module is pre-configured with the most optimal storage parameters already. + +
+| Param under userSync.userIds[] | Scope | Type | Description | Example | +| --- | --- | --- | --- | --- | +| storage | Optional | Object | Defines where and for how long the results of the call to get a user ID will be stored. | | +| storage.type | Optional | String | Defines where the resolved user ID will be stored (either `'cookie'` or `'html5'` local storage).| `'cookie'` | +| storage.name | Optional | String | The name of the cookie or html5 local storage where the resolved user ID will be stored. | `'connectId'` | +| storage.expires | Optional | Integer | How long (in days) the user ID information will be stored. | `15` | +{: .table .table-bordered .table-striped } +
From f5cdf0cc7033458839265d26694958a6f6486124 Mon Sep 17 00:00:00 2001 From: Demetrio Girardi Date: Fri, 14 Apr 2023 06:25:05 -0700 Subject: [PATCH 207/763] PBJS: document new option for RTD submodules (#4467) --- dev-docs/add-rtd-submodule.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/dev-docs/add-rtd-submodule.md b/dev-docs/add-rtd-submodule.md index 7ac56b2ad1..b2c118c06b 100644 --- a/dev-docs/add-rtd-submodule.md +++ b/dev-docs/add-rtd-submodule.md @@ -90,13 +90,14 @@ In order to let RTD-core know where to find the functions in your sub-module, cr | param name | type | Scope | Description | Params | | :------------ | :------------ | :------ | :------ | :------ | | name | string | required | must match the name provided by the publisher in the on-page config | n/a | -| init | function | required | defines the function that does any auction-level initialization required | config, userConsent | -| getTargetingData | function | optional | defines a function that provides ad server targeting data to RTD-core | adUnitArray, config, userConsent | -| getBidRequestData | function | optional | defines a function that provides bid request data to RTD-core | reqBidsConfigObj, callback, config, userConsent | -| onAuctionInitEvent | function | optional | listens to the AUCTION_INIT event and calls a sub-module function that lets it inspect and/or update the auction | auctionDetails, config, userConsent | -| onAuctionEndEvent | function |optional | listens to the AUCTION_END event and calls a sub-module function that lets it know when auction is done | auctionDetails, config, userConsent | -| onBidRequestEvent | function |optional | listens to the BID_REQUESTED event and calls a sub-module function that lets it know when a bid is about to be requested | bidRequest, config, userConsent | -| onBidResponseEvent | function |optional | listens to the BID_RESPONSE event and calls a sub-module function that lets it know when a bid response has been collected | bidResponse, config, userConsent | +| gvlid | number | optional | global vendor list ID for your submodule | n/a | +| init | function | required | defines the function that does any auction-level initialization required | config, userConsent | +| getTargetingData | function | optional | defines a function that provides ad server targeting data to RTD-core | adUnitArray, config, userConsent | +| getBidRequestData | function | optional | defines a function that provides bid request data to RTD-core | reqBidsConfigObj, callback, config, userConsent | +| onAuctionInitEvent | function | optional | listens to the AUCTION_INIT event and calls a sub-module function that lets it inspect and/or update the auction | auctionDetails, config, userConsent | +| onAuctionEndEvent | function |optional | listens to the AUCTION_END event and calls a sub-module function that lets it know when auction is done | auctionDetails, config, userConsent | +| onBidRequestEvent | function |optional | listens to the BID_REQUESTED event and calls a sub-module function that lets it know when a bid is about to be requested | bidRequest, config, userConsent | +| onBidResponseEvent | function |optional | listens to the BID_RESPONSE event and calls a sub-module function that lets it know when a bid response has been collected | bidResponse, config, userConsent | For example: {% highlight text %} From 43ddf51c6d8e192d48053ea356c94c5b4327f8bd Mon Sep 17 00:00:00 2001 From: Brett Bloxom <38990705+BrettBlox@users.noreply.github.com> Date: Fri, 14 Apr 2023 07:41:37 -0600 Subject: [PATCH 208/763] Updates documentation for concert gpp support (#2) (#4437) --- dev-docs/bidders/concert.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/concert.md b/dev-docs/bidders/concert.md index d9a45e8787..79a6bdbab2 100644 --- a/dev-docs/bidders/concert.md +++ b/dev-docs/bidders/concert.md @@ -8,6 +8,7 @@ biddercode: concert media_types: banner gdpr_supported: true usp_supported: true +gpp_supported: true sidebarType: 1 --- From 986885a050610b6a188f444cd69a5d21c4a136b7 Mon Sep 17 00:00:00 2001 From: Patrick McCann Date: Fri, 14 Apr 2023 11:21:47 -0400 Subject: [PATCH 209/763] Update firstPartyData.md (#4468) --- features/firstPartyData.md | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/features/firstPartyData.md b/features/firstPartyData.md index bcca76f29c..02b8b2f1f8 100644 --- a/features/firstPartyData.md +++ b/features/firstPartyData.md @@ -75,15 +75,13 @@ pbjs.setConfig({ }] }, ext: { - data: { // fields that aren't part of openrtb 2.5 + data: { // fields that aren't part of openrtb 2.6 pageType: "article", category: "repair" } } }, user: { - yob: 1985, - gender: "m", keywords: "a,b", data: [{ name: "dataprovider.com", @@ -169,6 +167,30 @@ pbjs.addAdUnits({ }); {% endhighlight %} +Another case is [declaring rewarded](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/422eedb76e8730c89dcac75c7427c18cfa10e8c4/2.6.md?plain=1#L993). Here is how one might do that: + + +{% highlight js %} +pbjs.addAdUnits({ + code: "test-div-rewarded", + mediaTypes: { + banner: { + sizes: [[300,250]] + } + }, + ortb2Imp: { + rwdd: 1, + ext: { + data: { + pbadslot: "my-rewarded-rectangle", + adUnitSpecificAttribute: "123" + } + } + }, + ... +}); +{% endhighlight %} + You may also specify adUnit-specific transaction IDs using `ortb2Imp.ext.tid`, and Prebid will use them instead of generating random new ones. This is useful if you are auctioning the same slots through multiple header bidding libraries. Note: you must take care to not re-use the same transaction IDs across different ad units or auctions. Here's a simplified example passing a tid through the [requestBids](/dev-docs/publisher-api-reference/requestBids.html) function: {% highlight js %} From 56a37de05d24be7d64ffacd2e930213d44010f6d Mon Sep 17 00:00:00 2001 From: Gaudeamus Date: Fri, 14 Apr 2023 18:40:11 +0300 Subject: [PATCH 210/763] update mgid adapter adding support of user sync & ortb2 (#4463) Co-authored-by: gaudeamus --- dev-docs/bidders/mgid.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/dev-docs/bidders/mgid.md b/dev-docs/bidders/mgid.md index 8f76587903..d52a4baf94 100644 --- a/dev-docs/bidders/mgid.md +++ b/dev-docs/bidders/mgid.md @@ -7,7 +7,11 @@ pbs: true biddercode: mgid media_types: banner,native gdpr_supported: true +usp_supported: true gvl_id: 358 +floors_supported: true +ortb_blocking_supported: partial +multiformat_supported: will-bid-on-any sidebarType: 1 --- @@ -17,6 +21,7 @@ sidebarType: 1 - [Description](#description) - [Bid params](#bid-params) - [Test Parameters](#test-parameters) +- [User Sync](#user-sync)
@@ -114,3 +119,36 @@ var adUnits = [{ }] }]; ``` + + + +### User Sync + +Mgid recommends UserSync configuration to be enabled. Without it, Mgid adapter will not be able to perform user syncs, which lowers match rate and reduces monetization. + +For Prebid.js v1.15.0 and later: + +```javascript +pbjs.setConfig({ + userSync: { + filterSettings: { + iframe: { + bidders: '*', // '*' represents all bidders + filter: 'include' + } + } + } +}); +``` + +For Prebid.js v1.14.0 and before: + +```javascript +pbjs.setConfig({ + userSync: { + iframeEnabled: true, + enabledBidders: ['mgid'] + }}); +``` + +Note: Combine the above configuration with any other UserSync configuration. Multiple setConfig() calls overwrite each other and only the last call for a given attribute will take effect. From 314a080fedf3aa2b4e691ab152bd06770eb290da Mon Sep 17 00:00:00 2001 From: Jason Quaccia Date: Fri, 14 Apr 2023 12:14:01 -0700 Subject: [PATCH 211/763] documentation for batch video cache requests (#4453) --- dev-docs/publisher-api-reference/setConfig.md | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/dev-docs/publisher-api-reference/setConfig.md b/dev-docs/publisher-api-reference/setConfig.md index 916815fcd4..eadf9a5fad 100644 --- a/dev-docs/publisher-api-reference/setConfig.md +++ b/dev-docs/publisher-api-reference/setConfig.md @@ -1204,6 +1204,8 @@ be retrieved. There are two different flows possible with Prebid.js around VAST | cache.timeout | no | number | Timeout (in milliseconds) for network requests to the cache | | cache.vasttrack | no | boolean | Passes additional data to the url, used for additional event tracking data. Defaults to `false`. | | cache.ignoreBidderCacheKey | no | boolean | If the bidder supplied their own cache key, setting this value to true adds a VAST wrapper around that URL, stores it in the cache defined by the `url` parameter, and replaces the original video cache key with the new one. This can dramatically simplify ad server setup because it means all VAST creatives reside behind a single URL. The tradeoff: this approach requires the video player to unwrap one extra level of VAST. Defaults to `false`. | +| cache.batchSize | no | number | Enables video cache requests to be batched by a specified amount (defaults to 1) instead of making a single request per each video. | +| cache.batchTimeout | no | number | Used in conjunction with `batchSize`, `batchTimeout` specifies how long to wait in milliseconds before sending a batch video cache request based on the value for `batchSize` (if present). A batch request will be made whether the `batchSize` amount was reached or the `batchTimeout` timer runs out. `batchTimeout` defaults to 0. | Here's an example of basic client-side caching. Substitute your Prebid Cache URL as needed: @@ -1250,6 +1252,25 @@ Setting the `vasttrack` parameter to `true` supplies the POST made to the `/vtra Prebid Server endpoint with a couple of additional parameters needed by the analytics system to join the event to the original auction request. +Optionally, `batchSize` and `batchTimeout` can be utlilized as illustrated with the example below: + +{% highlight js %} +pbjs.setConfig({ + cache: { + url: 'https://prebid.adnxs.com/pbc/v1/cache', + batchSize: 4, + batchTimeout: 50 + } +}); +{% endhighlight %} + +The example above states that a timer will be initialized and wait up to 50ms for 4 responses to have been collected and then will fire off one batch video cache request for all 4 responses. Note that the batch request will be made when the specified `batchSize` number is reached or with the number of responses that could be collected within the timeframe specified by the value for `batchTimeout`. + +If a batchSize is set to 2 and 5 video responses arrive (within the timeframe specified by `batchTimeout`), then three batch requests in total will be made: +1. Batch 1 will contain cache requests for 2 videos +2. Batch 2 will contain cache requests for 2 videos +3. Batch 3 will contain cache requests for 1 video + #### Instream tracking From 3d94d938b8c38499426854edb2fd92f94335d177 Mon Sep 17 00:00:00 2001 From: Elad Yosifon Date: Fri, 14 Apr 2023 23:02:43 +0300 Subject: [PATCH 212/763] Update KueezRTB and Kueez docs (#4461) * Update KueezRTB and Kueez docs * Update KueezRTB and Kueez docs --- dev-docs/bidders/kueez.md | 72 +++--------------------------------- dev-docs/bidders/kueezrtb.md | 40 +++++++++++++++++++- 2 files changed, 44 insertions(+), 68 deletions(-) diff --git a/dev-docs/bidders/kueez.md b/dev-docs/bidders/kueez.md index f782abee2b..033c909359 100644 --- a/dev-docs/bidders/kueez.md +++ b/dev-docs/bidders/kueez.md @@ -1,6 +1,6 @@ --- layout: bidder -title: Kueez +title: Kueez (Go To KueezRTB) description: Prebid Kueez Bidder Adapter multiformat_supported: will-bid-on-any pbjs: true @@ -15,69 +15,9 @@ fpd_supported: true sidebarType: 1 --- -### Note +### IMPORTANT NOTICE! +**TL;DR** +The `kueez` adapter is currently "on hold" in favor of `kueezrtb`. +Please contact your Account Manager/Executive for details. -The Kueez adapter requires setup and approval. Please reach out to prebid@kueez.com. - -### Bid Parameters - -#### Banner, Video - -{: .table .table-bordered .table-striped } -| Name | Scope | Type | Description | Example -| ---- | ----- | ---- | ----------- | ------- -| `org` | required | String | the organization Id provided by your Kueez representative | "test-org-id" -| `floorPrice` | optional | Number | Minimum price in USD. Misuse of this parameter can impact revenue | 1.5 -| `placementId` | optional | String | A unique placement identifier | "12345678" -| `testMode` | optional | Boolean | This activates the test mode | false - -## Example - ```javascript -var adUnits = [{ - code: 'banner-div', - mediaTypes: { - banner: { - sizes: [ - [300, 250], - [728, 90] - ] - } - }, - bids: [{ - bidder: 'kueez', - params: { - org: 'test-org-id', // Required - floorPrice: 1.2, // Optional - placementId: '12345678', // Optional - testMode: true // Optional - } - }] - }, - { - code: 'dfp-video-div', - sizes: [ - [640, 480] - ], - mediaTypes: { - video: { - playerSize: [ - [640, 480] - ], - context: 'instream' - } - }, - bids: [{ - bidder: 'kueez', - params: { - org: 'test-org-id', // Required - floorPrice: 1.50, // Optional - placementId: '12345678', // Optional - testMode: true // Optional - } - }] - } -]; -``` - -### Configuration -Kueez recommends setting UserSync by iframe for monetization. +Go To KueezRTB diff --git a/dev-docs/bidders/kueezrtb.md b/dev-docs/bidders/kueezrtb.md index 2ef4bc25ad..36e944d5e5 100644 --- a/dev-docs/bidders/kueezrtb.md +++ b/dev-docs/bidders/kueezrtb.md @@ -31,5 +31,41 @@ sidebarType: 1 |------------|----------|-------------------------------------------------------------------------------------------|------------------------------|----------| | `cId` | required | The connection ID from KueezRTB. | `'562524b21b1c1f08117fc7f9'` | `string` | | `pId` | required | The publisher ID from KueezRTB. | `'59ac17c192832d0011283fe3'` | `string` | -| `bidFloor` | required | The minimum bid value desired. KueezRTB will not respond with bids lower than this value. | `0.90` | `float` | -| `subDomain`| optional | Sets the server subdomain, default: 'exchange'. | `'exchange'` | `string` | +| `bidFloor` | optional | The minimum bid value desired. KueezRTB will not respond with bids lower than this value. | `0.90` | `float` | + + +## Example + ```javascript +var adUnits = [{ + code: 'banner-div', + mediaTypes: { + banner: { + sizes: [ + [300, 250], + [728, 90] + ] + } + }, + bids: [{ + bidder: 'kueezrtb', + params: { + cId: '562524b21b1c1f08117fc7f9', // Required - PROVIDED DURING SETUP... + pId: '59ac17c192832d0011283fe3', // Required - PROVIDED DURING SETUP... + bidFloor: 1.23 // Optional + } + }] + } +]; + +// configure pbjs to enable user syncing +pbjs.setConfig({ + userSync: { + filterSettings: { + iframe: { + bidders: 'kueezrtb', + filter: 'include' + } + } + } +}); +``` \ No newline at end of file From 94bfc23351d74319eccc0cb819ac67bf082042f1 Mon Sep 17 00:00:00 2001 From: brushmate Date: Sat, 15 Apr 2023 19:58:47 +0200 Subject: [PATCH 213/763] Update Yieldab docs (#4484) --- dev-docs/bidders/yieldlab.md | 84 +++++++++++++++++++++++++----------- 1 file changed, 58 insertions(+), 26 deletions(-) diff --git a/dev-docs/bidders/yieldlab.md b/dev-docs/bidders/yieldlab.md index f3335f6168..0532c1b051 100644 --- a/dev-docs/bidders/yieldlab.md +++ b/dev-docs/bidders/yieldlab.md @@ -27,35 +27,67 @@ sidebarType: 1 ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|----------------|----------|---------------------------------------------------------------------------------------|---------------------------------------------|----------| -| `adslotId` | required | Yieldlab Adslot ID | `'12345'` | `string` | -| `supplyId` | required | Yieldlab Supply ID. Please reach out to your account management for more information. | `'12345'` | `string` | -| `targeting` | optional | Key-Value Targeting | `{ 'key1': 'value1', 'key2': 'value2' }` | `object` | -| `extId` | optional | External Id | `'abc'` | `string` | +| Name | Scope | Description | Example | Type | +|----------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------|----------| +| `adslotId` | required | Yieldlab Adslot ID | `'12345'` | `string` | +| `supplyId` | required | Yieldlab Supply ID. Please reach out to your account management for more information. | `'12345'` | `string` | +| `targeting` | optional | Key-Value Targeting | `{ 'key1': 'value1', 'key2': 'value2' }` | `object` | +| `extId` | optional | External Id | `'abc'` | `string` | | `iabContent` | optional | Object of content information, see [IAB Content Object](#iab_content) for details. It will override the content object passed in [First Party Data](https://docs.prebid.org/features/firstPartyData.html) | `{ 'id': 'foo', 'title': 'bar' }` | `object` | -| `customParams` | optional | Custom parameters to append to the query string of the bidding endpoint. | `{ 'param': 'value1', 'param2': 'value2' }` | `object` | +| `customParams` | optional | Custom parameters to append to the query string of the bidding endpoint. | `{ 'param': 'value1', 'param2': 'value2' }` | `object` | - + #### IAB Content Object -Yieldlab supports passing the IAB content object in correspond to the OpenRTB Specifications. -The following attributes are supported, and all of them are optional. +Yieldlab supports passing the IAB content object according to section *3.2.16* +of the [OpenRTB 2.6 specification][openrtb-spec]. The following attributes are +supported, and all of them are optional: -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|----------------|----------|-----------------------------------------------------------------------------------------------|---------------------------------------------|------------------| -| `id` | optional | Id uniquely identifying the content | `'12345'` | `string` | -| `episode` | optional | Episode number | `'42'` | `string` | -| `title` | optional | Content title | `'some title'` | `string` | -| `series` | optional | Content series | `'some series'` | `string` | -| `season` | optional | Content season | `'s1'` | `string` | -| `artist` | optional | Artist credited with the content | `'John Doe'` | `string` | -| `genre` | optional | Genre that best describes the content | `'some genre'` | `string` | -| `isrc` | optional | International Standard Recording Code conforming to ISO3901 | `'CC-XXX-YY-NNNNN'` | `string` | -| `url` | optional | URL of the content, for buy-side contextualization or review | `'https://yieldlab.com'` | `string` | -| `cat` | optional | Array of IAB content categories that describe the content producer | `['IAB1-1', 'IAB1-2']` | `Array` | -| `context` | optional | Type of content - 1: video, 2: game, 3: music, 4: application, 5: text, 6: other, 7: unknown | `'7'` | `string` | -| `keywords` | optional | Array of keywords describing the content | `['k1', 'k2', 'k3']` | `Array` | -| `live` | optional | 0 = not live, 1 = content is live | `'0'` | `string` | +* `id` +* `episode` +* `title` +* `series` +* `season` +* `artist` +* `genre` +* `album` +* `isrc` +* `producer` + * `id` + * `name` + * `cattax` + * `cat` + * `domain` +* `url` +* `cattax` +* `cat` +* `prodq` +* `context` +* `contentrating` +* `userrating` +* `qagmediarating` +* `keywords` +* `livestream` +* `sourcerelationship` +* `len` +* `language` +* `embeddable` +* `data` + * `id` + * `name` + * `segment` + * `id` + * `name` + * `value` + * `ext` +* `network` + * `id` + * `name` + * `domain` +* `channel` + * `id` + * `name` + * `domain` + +[openrtb-spec]: https://iabtechlab.com/wp-content/uploads/2022/04/OpenRTB-2-6_FINAL.pdf \ No newline at end of file From b5ff4e4c5872c5c3f524a86a36987d8f0c2cfb84 Mon Sep 17 00:00:00 2001 From: DridgerVE <33929311+DridgerVE@users.noreply.github.com> Date: Sat, 15 Apr 2023 21:03:04 +0300 Subject: [PATCH 214/763] Yandex adapter: add pbs support (#4479) --- dev-docs/bidders/yandex.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dev-docs/bidders/yandex.md b/dev-docs/bidders/yandex.md index 9dac8bff08..86ad047eeb 100644 --- a/dev-docs/bidders/yandex.md +++ b/dev-docs/bidders/yandex.md @@ -3,8 +3,9 @@ layout: bidder title: Yandex description: Prebid Yandex Bidder Adapter pbjs: true +pbs: true biddercode: yandex -media_types: banner +media_types: banner, native sidebarType: 1 --- From 3c8cf8cf159989fad11a28a39fb3edd12b625672 Mon Sep 17 00:00:00 2001 From: Viktor Dreiling <34981284+3link@users.noreply.github.com> Date: Sat, 15 Apr 2023 21:48:50 +0200 Subject: [PATCH 215/763] Add information about EIDS support for attributes resolved by LI's user id module (#4477) * Add information about EIDS support for attributes resolved by LI's user id module * Better describe the case of returning multiple ids * Improve example * Fix typo * Be more precise * Clean-up * Improve wording resolved vs. requested * Add section * Adjust section's title * Wording * Add an example * Remove duplication * Polish text --------- Co-authored-by: Viktor Dreiling --- .../modules/userid-submodules/liveintent.md | 55 ++++++++++++++++--- 1 file changed, 48 insertions(+), 7 deletions(-) diff --git a/dev-docs/modules/userid-submodules/liveintent.md b/dev-docs/modules/userid-submodules/liveintent.md index e06e309e9c..8f0cc8dbdf 100644 --- a/dev-docs/modules/userid-submodules/liveintent.md +++ b/dev-docs/modules/userid-submodules/liveintent.md @@ -47,15 +47,56 @@ The first-party cookie generation and identity resolution functionality is provi The LiveIntent ID sub-module follows the standard Prebid.js initialization based on the GDPR consumer opt-out choices. With regard to CCPA, the LiveConnect JS receives a us_privacy string from the Prebid US Privacy Consent Management Module and respects opt-outs. -## Resolving uid2 +## Configuring requested attributes -Attributes other than the nonID can be requested using the requestedAttributesOverrides configuration option. +Attributes other than the nonID can be requested using the `requestedAttributesOverrides` configuration option. -One attribute that requires special mention here is 'uid2'. If this attribute is resolved by the id module -it will be exposed in the same format as from the Unified ID 2.0 userid module. If both the LiveIntent module -and the uid2 module manage to resolve an uid2, the one from the uid2 module will be used. -Enabling this option in addition to the uid2 module is an easy way to increase your uid2 resolution rates. -Example configuration to enable uid2 resolution: +For example, with the configuration below, the nonID as well as 'uid2', the 'medianet' id and the 'bidswitch' id will be requested: + +{% highlight javascript %} +pbjs.setConfig({ + userSync: { + userIds: [{ + "name": "liveIntentId", + "params": { + "publisherId": "12432415", + "requestedAttributesOverrides": {'uid2': true, 'medianet': true, 'bidswitch': true}, + }, + }] + } +}); +{% endhighlight %} + +### Multiple user ids + +The attributes 'uid2', 'medianet' or 'bidswitch' are treated specially by LiveIntent's user id sub-module. Each of these three attributes will result in a separate id returned by the sub-module. + +For example, in case 'uid2' is configured to be requested - additionally to the nonID - the `request.userId` object would look like this: + +{% highlight javascript %} +``` +{ + ... + "lipb" : { + "lipbid": "sample-nonid-value", + "segments": ["999"], + "uid2" : "sample-uid2-value" + }, + "uid2" : { + "id" : "sample-uid2-value" + } + ... +} +``` +{% endhighlight %} + +Note that 'uid2' is exposed as part of 'lipb' as well as separately as 'uid2'. 'medianet' and 'bidswitch' behave the same way. + +For the attributes 'lipbid' (nonID), 'uid2', 'medianet' and 'bidswitch' there is also support for their conversion into OpenRTB EIDS format. Please refer to [userId.md](../userId.md) for more information on conversion and [eids.md](https://github.com/prebid/Prebid.js/blob/master/modules/userId/eids.md) for output format examples. + +### Requesting uid2 + +An attribute that requires special mention here is 'uid2'. If this attribute is resolved by the id sub-module, it will be exposed in the same format as from the Unified ID 2.0 user id module. If both the LiveIntent module and the uid2 module manage to resolve an uid2, the one from the uid2 module will be used. Enabling this option in addition to the uid2 module is an easy way to increase your uid2 resolution rates. Example configuration to enable uid2 resolution: {% highlight javascript %} pbjs.setConfig({ From 5adc23ff0f33b6179f5c86ecca3f2481efd60f28 Mon Sep 17 00:00:00 2001 From: Sonali-More-Xandr <87759626+Sonali-More-Xandr@users.noreply.github.com> Date: Sun, 16 Apr 2023 01:27:12 +0530 Subject: [PATCH 216/763] remove oftmedia_server.md file (#4469) --- dev-docs/bidders/oftmedia_server.md | 26 -------------------------- 1 file changed, 26 deletions(-) delete mode 100644 dev-docs/bidders/oftmedia_server.md diff --git a/dev-docs/bidders/oftmedia_server.md b/dev-docs/bidders/oftmedia_server.md deleted file mode 100644 index 34dabd86f6..0000000000 --- a/dev-docs/bidders/oftmedia_server.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -layout: bidder -title: One Fifty Two Media Server -description: Prebid Server One Fifty Two Media Bidder Adaptor -pbjs: false -biddercode: oftmedia -aliasCode : adtelligent -gdpr_supported: true -coppa_supported: true -usp_supported: true -pbs: true -schain_supported: true -media_types: banner, video -prebid_member: true -userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId -safeframes_ok: true -gvl_id: 1111 -sidebarType: 1 ---- - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------|----------|---------------------------------|----------|-----------| -| `aid` | required | The source ID from OftMedia. | `350975` | `integer` | From 43b7b7274bc93485a29be09ca9b1525e4e9c25b0 Mon Sep 17 00:00:00 2001 From: Eyvaz Ahmadzada <62054743+eyvazahmadzada@users.noreply.github.com> Date: Sun, 16 Apr 2023 00:39:46 +0400 Subject: [PATCH 217/763] IntentIQ: add analytics and update id submodule docs (#4450) * added: docs for intentIQ analytics adapter * update intentIQ ID system docs --- dev-docs/analytics/intentiq.md | 21 ++++ .../modules/userid-submodules/intentiq.md | 116 +++++++----------- 2 files changed, 65 insertions(+), 72 deletions(-) create mode 100644 dev-docs/analytics/intentiq.md diff --git a/dev-docs/analytics/intentiq.md b/dev-docs/analytics/intentiq.md new file mode 100644 index 0000000000..a0e7b1cc5c --- /dev/null +++ b/dev-docs/analytics/intentiq.md @@ -0,0 +1,21 @@ +--- +layout: analytics +title: IntentIQ +description: IntentIQ Analytics Adapter +modulecode: intentiq +--- + +### Description + +By using this Intent IQ adapter, you will be able to obtain comprehensive analytics and metrics regarding the performance of the Intent IQ Unified ID module. This includes how the module impacts your revenue, CPMs, and fill rates related to bidders and domains. + +#### Intent IQ Universal ID Registration + +No registration for this module is required. + +#### Intent IQ Universal ID Configuration + +IMPORTANT: requires Intent IQ Universal ID module be installed and configured. [(How-To)](https://docs.prebid.org/dev-docs/modules/userid-submodules/intentiq.html) + +No additional configuration for this module is required. We will use the configuration provided for Intent IQ Universal IQ module. + diff --git a/dev-docs/modules/userid-submodules/intentiq.md b/dev-docs/modules/userid-submodules/intentiq.md index 4a99dc6f03..6c7487b868 100644 --- a/dev-docs/modules/userid-submodules/intentiq.md +++ b/dev-docs/modules/userid-submodules/intentiq.md @@ -5,97 +5,68 @@ description: Intent IQ ID User ID sub-module useridmodule: intentIqIdSystem --- +# Intent IQ Universal ID module -Intent IQ’s universal ID with its unparalleled coverage of over 80% of ad inventory, protects publishers’ ability to rely on advertising as their main revenue source while preserving user privacy in a third party cookieless world. +By leveraging the Intent IQ identity graph, our module helps publishers, SSPs, and DSPs overcome the challenges of monetizing cookie-less inventory and preparing for a future without 3rd-party cookies. Our solution implements 1st-party data clustering and provides Intent IQ person IDs with over 90% coverage and unmatched accuracy in supported countries while remaining privacy-friendly and CCPA compliant. This results in increased CPMs, higher fill rates, and, ultimately, lifting overall revenue -The universal ID is an Intent IQ generated alphanumeric characters ID representing a person. This ID is not matched with personal information and remains anonymous to Intent IQ. +# All you need is a few basic steps to start using our solution. -Intent IQ universal ID enables partners - publishers, SSPs, DSPs, DMPs and advertisers to support, in a privacy-friendly way, and on a person level, core elements of the advertising business model - +## Registration -- Targeting across sites and devices -- Frequency capping -- Attribution measurement across sites and devices +Navigate to [our portal ](https://www.intentiq.com/) and contact our team for partner ID. +check our [documentation](https://pbmodule.documents.intentiq.com/) to get more information about our solution and how utilze it's full potential -Intent IQ's universal ID works across IP addresses and user-agent changes. - -Intent IQ's universal ID truly stands out in the coverage and accuracy it provides. Intent IQ's universal ID covers over 80% of ad inventory with 90% accuracy. By contrast, third-party cookies offer 56% coverage and log-in solutions offer coverage of less than 20%. +## Integration +{: .alert.alert-info :} +gulp build –modules=intentIqIdSystem -Add it to your Prebid.js package with: +We recommend including the Intent IQ Analytics adapter module for improved visibility -{: .alert.alert-info :} -gulp build --modules=intentIqIdSystem +## Configuration -## Intent IQ ID Registration +### Parameters -You can set up Intent IQ ID by contacting our operations team at [Intent IQ Contact Us](https://www.intentiq.com/contact-us) and getting your partner id. +Please find below list of parameters that could be used in configuring Intent IQ Universal ID module -The Intent IQ ID privacy is covered under the [Intent IQ Privacy Policy](https://www.intentiq.com/technology-privacy-policy). -## Intent IQ ID Configuration {: .table .table-bordered .table-striped } -| Param under userSync.userIds[] | Scope | Type | Description | Example | -| --- | --- | --- | --- | --- | -| name | Required | String | `"intentIqId"` | `"intentIqId"` | -| params | Required for IntentIqId | Object | Details for IntentIqId initialization. | | -| params.partner | Required | String | This is the partner ID value obtained from registering with IntentIQ. | `"1177538"` | -| params.pcid | Optional | String | This is the partner cookie ID, it is a dynamic value attached to the request. | `"g3hC52b"` | -| params.pai | Optional | String | This is the partner customer ID / advertiser ID, it is a dynamic value attached to the request. | `"advertiser1"` | - -{: .alert.alert-info :} -**NOTE:** The Intent IQ ID is encrypted with a key that changes every several hours. Demand partners utilize the latest key to decrypt the ID and use it. Therefore, to enable demand partners have an ID they can use, we highly recommend calling Intent IQ every 4 hours by setting storage.refreshInSeconds to 4 hours (4*3600 seconds) -## Intent IQ ID Examples +| Param under userSync.userIds[] | Scope | Type | Description | Example | +| ------------------------------ | -------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------- | +| name | Required | String | The name of this module: "intentIqId" | `"intentIqId"` | +| params | Required | Object | Details for IntentIqId initialization. | | +| params.partner | Required | Number | This is the partner ID value obtained from registering with IntentIQ. | `1177538` | +| params.percentage | Required | Number | This a percentage value for our A/B testing group distribution. The values supposed to be in range of 0 to 100. We suggest to set it to 95 percent for optimal balance ofbetween prefromance and preceision. | `95` | +| params.pcid | Optional | String | This is the partner cookie ID, it is a dynamic value attached to the request. | `"g3hC52b"` | +| params.pai | Optional | String | This is the partner customer ID / advertiser ID, it is a dynamic value attached to the request. | `"advertiser1"` | -1) Publisher has a partner ID from Intent IQ and cookies. +### Configuration example -{: .alert.alert-warning :} {% highlight javascript %} pbjs.setConfig({ - userSync: { - userIds: [{ - name: "intentIqId", - params: { - partner: 123456 // valid partner id - }, - storage: { - type: "cookie", - name: "intentIqId", // create a cookie with this name - expires: 60, // cookie can last for 60 days - refreshInSeconds: 4*3600 // refresh ID every 4 hours to ensure it's fresh -} - }], - syncDelay: 3000 // 3 seconds after the first auction - } + userSync: { + userIds: [ + { + name: "intentIqId", + params: { + partner: 123456, // valid partner id + percentage: 95, + }, + storage: { + type: "html5", + name: "intentIqId", // set localstorage with this name + expires: 60, + refreshInSeconds: 4 * 3600, // refresh ID every 4 hours to ensure it's fresh + }, + }, + ], + syncDelay: 3000, + }, }); {% endhighlight %} -2) Publisher supports Intent IQ and HTML5 local storage. - -{% highlight javascript %} -pbjs.setConfig({ - userSync: { - userIds: [{ - name: "intentIqId", - params: { - partner: 123456 // valid partner id - }, - storage: { - type: "html5", - name: "intentIqId", // set localstorage with this name - expires: 60, - refreshInSeconds: 4*3600 // refresh ID every 4 hours to ensure it's fresh - } - }], - syncDelay: 3000 - } -}); -{% endhighlight %} - - -3) Publisher supports IntentIQ and HTML5 local storage with extra dynamic params such as 'pcid' and 'pai'. - {% highlight javascript %} pbjs.setConfig({ userSync: { @@ -103,8 +74,9 @@ pbjs.setConfig({ name: "intentIqId", params: { partner: 123456 // valid partner id - pcid: PCID_VARIABLE // string value, dynamically loaded into a variable before setting the configuration - pai: PAI_VARIABLE // string value, dynamically loaded into a variable before setting the configuration + pcid: PCID_VARIABLE, // string value, dynamically loaded into a variable before setting the configuration + pai: PAI_VARIABLE , // string value, dynamically loaded into a variable before setting the configuration + percentage: 95 }, storage: { type: "html5", @@ -115,4 +87,4 @@ pbjs.setConfig({ syncDelay: 3000 } }); -{% endhighlight %} +{% endhighlight %} \ No newline at end of file From 43962592228a51b7d9c4f5a94c73e1dc93b8585a Mon Sep 17 00:00:00 2001 From: JulieLorin Date: Sat, 15 Apr 2023 22:45:35 +0200 Subject: [PATCH 218/763] FPD Enrichment: use low entropy method by default to fetch user agent data (#4447) --- dev-docs/modules/enrichmentFpdModule.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dev-docs/modules/enrichmentFpdModule.md b/dev-docs/modules/enrichmentFpdModule.md index 26f84e6657..f86b80b5fd 100644 --- a/dev-docs/modules/enrichmentFpdModule.md +++ b/dev-docs/modules/enrichmentFpdModule.md @@ -55,7 +55,8 @@ At the beginning of each auction, this module merges a number of values into the ### User agent client hints -The module populates `device.sua` with UA client hints retrieved from `navigator.userAgentData`. By default, it asks for [every available high entropy hint](https://developer.mozilla.org/en-US/docs/Web/API/NavigatorUAData#returning_high_entropy_values); you may specify the list of hints with the `uaHints` option: + +The module populates `device.sua` with UA client hints retrieved from `navigator.userAgentData`. By default, it won't ask for any high entropy hint. You can specify the list of hints using the `uaHints` option with [any available high entropy hint](https://developer.mozilla.org/en-US/docs/Web/API/NavigatorUAData#returning_high_entropy_values): ```javascript pbjs.setConfig({ @@ -68,7 +69,7 @@ pbjs.setConfig({ }) ``` -If `uaHints` is set to an empty array, the module will not attempt to retrieve any high entropy hint and use only the available low-entropy values. +If `uaHints` is set to an empty array or is not set, the module will not attempt to retrieve any high entropy hint and use only the available low-entropy values. # Related Reading - [Prebid.js First Party Data feature](/features/firstPartyData.html) From f3bd494df043f3dbee8ff618f6614b4a28d10379 Mon Sep 17 00:00:00 2001 From: v-dridger <123445033+v-dridger@users.noreply.github.com> Date: Sat, 15 Apr 2023 23:49:57 +0300 Subject: [PATCH 219/763] Intertech: creating doc for new server adapter (#4446) * Intertech: creating doc for new server adapter * fix --- dev-docs/bidders/intertech.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 dev-docs/bidders/intertech.md diff --git a/dev-docs/bidders/intertech.md b/dev-docs/bidders/intertech.md new file mode 100644 index 0000000000..29512af65b --- /dev/null +++ b/dev-docs/bidders/intertech.md @@ -0,0 +1,20 @@ +--- +layout: bidder +title: intertech +description: Prebid Intertech Bidder Adapter +pbs: true +biddercode: intertech +media_types: banner, native +--- + +### Registration + +The Intertech Bidding adapter requires setup before beginning. Please contact us at [prebid@intertechsrvcs.com](mailto:prebid@intertechsrvcs.com). + +### Bid params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|-------------------------|-----------|-----------| +| `pageId` | required | Page ID | `123456` | `Integer` | +| `impId` | required | Block ID | `12` | `Integer` | From b43585d4cea3d022bff3587fae4af5d611a08bb2 Mon Sep 17 00:00:00 2001 From: Aaron Price <67345931+AaronColbyPrice@users.noreply.github.com> Date: Sat, 15 Apr 2023 13:52:45 -0700 Subject: [PATCH 220/763] FixUrlLinkInBidderSearch: changing autocomplete list from using bidderCode as the new url to the page url. This matches the implementation on line 47 where the bidder is linked to page.url in the tag. This fixes a problem where a bidder rebrands as a new company and wants to update labelling but needs to keep an old bidder code for backward compatability (#4445) --- dev-docs/bidders.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders.md b/dev-docs/bidders.md index a52a8bee0c..c9e05a5584 100644 --- a/dev-docs/bidders.md +++ b/dev-docs/bidders.md @@ -31,7 +31,7 @@ Publishers are advised to check with legal counsel before doing business with an
From 24a43f5c25524a875352ce1adf00586d69a429d3 Mon Sep 17 00:00:00 2001 From: ivs-mark <128337031+ivs-mark@users.noreply.github.com> Date: Sun, 16 Apr 2023 04:53:44 +0800 Subject: [PATCH 221/763] Add IVS bid adapter documentation (#4443) --- dev-docs/bidders/ivs.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 dev-docs/bidders/ivs.md diff --git a/dev-docs/bidders/ivs.md b/dev-docs/bidders/ivs.md new file mode 100644 index 0000000000..d79aa55232 --- /dev/null +++ b/dev-docs/bidders/ivs.md @@ -0,0 +1,21 @@ +--- +layout: bidder +title: IVS Bidder Adapter +description: Prebid IVS Bidder Adapter +biddercode: ivs +media_types: video +floors_supported: true +pbjs: true +sidebarType: 1 +--- + +### Note: + +The IVS Bidding adapter requires setup before beginning. Please contact us at prebid@ivs.tv + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------------|----------|----------------------------|-------------|-----------| +| `publisherId` | required | Unique id of the publisher | `'3001234'` | `string` | From 9f2ec1b885b65b9336f359e7681094d94ffddc01 Mon Sep 17 00:00:00 2001 From: jsnellbaker <31102355+jsnellbaker@users.noreply.github.com> Date: Sat, 15 Apr 2023 16:55:53 -0400 Subject: [PATCH 222/763] appnexus - change fpd flag (#4440) --- dev-docs/bidders/appnexus.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/appnexus.md b/dev-docs/bidders/appnexus.md index 17d048b837..4eb2b4f7c9 100644 --- a/dev-docs/bidders/appnexus.md +++ b/dev-docs/bidders/appnexus.md @@ -12,7 +12,7 @@ coppa_supported: true usp_supported: true gpp_supported: true floors_supported: true -fpd_supported: true +fpd_supported: false pbjs: true pbjs_version_notes: please avoid using v7.15 and v7.16 pbs: true From 8c100a6c934858d50f576e85574d0a8bc03a71d9 Mon Sep 17 00:00:00 2001 From: Gena Date: Sat, 15 Apr 2023 23:57:59 +0300 Subject: [PATCH 223/763] 9Dots Media (#4436) --- dev-docs/bidders/9dotsmedia.md | 105 +++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 dev-docs/bidders/9dotsmedia.md diff --git a/dev-docs/bidders/9dotsmedia.md b/dev-docs/bidders/9dotsmedia.md new file mode 100644 index 0000000000..292163e91f --- /dev/null +++ b/dev-docs/bidders/9dotsmedia.md @@ -0,0 +1,105 @@ +--- +layout: bidder +title: 9Dots Media +description: 9Dots Media Bidder Adapter +biddercode: 9dotsmedia +aliasCode: adtelligent +media_types: video,banner +gdpr_supported: true +userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId +schain_supported: true +coppa_supported: true +usp_supported: true +safeframes_ok: true +prebid_member: true +pbjs: true +pbs: false +deals_supported: false +sidebarType: 1 +--- + +### Bid params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------|----------|---------------------------------|----------|-----------| +| `aid` | required | The source ID from 9Dots Media. | `12412` | `integer` | + +### Description +9Dots Media header bidding adapter connects with 9Dots Media demand sources in order to fetch bids. +This adapter provides a solution for accessing Video demand and display demand. + + +### Test Parameters +``` + var adUnits = [ + + // Video instream adUnit + { + code: 'test-div', + mediaTypes: { + video: { + context: 'instream', + playerSize: [640, 480] + } + }, + bids: [{ + bidder: '9dotsmedia', + params: { + aid: 472386 + } + }] + }, + + // Video outstream adUnit + { + code: 'test-div', + mediaTypes: { + video: { + context: 'outstream', + playerSize: [640, 480] + } + }, + bids: [{ + bidder: '9dotsmedia', + params: { + aid: 472386 + } + }] + }, + + // Video ADPOD adUnit + { + code: 'test-div', + sizes: [[640, 480]], + mediaTypes: { + video: { + context: 'adpod', + playerSize: [640, 480] + } + }, + bids: [{ + bidder: '9dotsmedia', + params: { + aid: 472386 + } + }] + }, + + // Banner adUnit + { + code: 'test-div', + mediaTypes:{ + banner:{ + sizes: [[300, 250]] + } + } + bids: [{ + bidder: '9dotsmedia', + params: { + aid: 529814 + } + }] + } + ]; +``` From bec269fc8dd3ab59df4008b34e7330e15bfea72c Mon Sep 17 00:00:00 2001 From: Paulius Imbrasas <880130+CremboC@users.noreply.github.com> Date: Sat, 15 Apr 2023 21:58:30 +0100 Subject: [PATCH 224/763] Update Permutive documentation (#4435) --- dev-docs/modules/permutiveRtdProvider.md | 93 ++++++++++++------------ 1 file changed, 47 insertions(+), 46 deletions(-) diff --git a/dev-docs/modules/permutiveRtdProvider.md b/dev-docs/modules/permutiveRtdProvider.md index 5370d05467..27f9dc3e6d 100644 --- a/dev-docs/modules/permutiveRtdProvider.md +++ b/dev-docs/modules/permutiveRtdProvider.md @@ -15,7 +15,7 @@ sidebarType : 1 {:.no_toc} * TOC -{:toc} + {:toc} ## Prebid Config for Permutive RTD Module @@ -31,7 +31,7 @@ gulp build --modules=rtdModule,permutiveRtdProvider > Note that the global RTD module, `rtdModule`, is a prerequisite of the Permutive RTD module. -You then need to enable the Permutive RTD in your Prebid configuration, using the below format: +You then need to enable the Permutive RTD in your Prebid configuration. Below is an example of the format: ```javascript pbjs.setConfig({ @@ -63,20 +63,8 @@ as well as enabling settings for specific use cases mentioned above (e.g. acbidd | name | String | This should always be `permutive` | - | | waitForIt | Boolean | Should be `true` if there's an `auctionDelay` defined (optional) | `false` | | params | Object | | - | -| params.acBidders | String[] | An array of bidders which should receive Audience Connector cohorts. | `[]` | +| params.acBidders | String[] | An array of bidder codes to share cohorts with in certain versions of Prebid, see below | `[]` | | params.maxSegs | Integer | Maximum number of cohorts to be included in either the `permutive` or `p_standard` key-value. | `500` | -| params.transformations | Object[] | An array of configurations for ORTB2 user data transformations | | - -##### The `transformations` parameter - -This array contains configurations for transformations we'll apply to the Permutive object in the ORTB2 `user.data` array. The results of these transformations will be appended to the `user.data` array that's attached to ORTB2 bid requests. - -##### Supported transformations - -{: .table .table-bordered .table-striped } -| Name | ID | Config structure | Description | -| ---------------------- | -------------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------ | -| IAB taxonomies | iab | ```{ segtax: number, iabIds: Object}``` | Transform segment IDs from Permutive to IAB (note: alpha version, subject to change) | #### Context @@ -87,7 +75,7 @@ As Prebid utilizes TCF vendor consent, for the Permutive RTD module to load, Per #### Instructions -1. Publisher enables GDPR rules within Prebid. +1. Publisher enables rules within Prebid GDPR module 2. Label Permutive as an exception, as shown below. ```javascript [ @@ -110,29 +98,58 @@ Before making any updates to this configuration, please ensure that this approac ## Cohort Activation with Permutive RTD Module -### _Enabling Standard Cohorts_ - **Note**: Publishers must be enabled on the above Permutive RTD Submodule to enable Standard Cohorts. -The acbidders config in the Permutive RTD module allows publishers to determine which demand partners (SSPs) will receive standard cohorts via the user.data ortb2 object. Cohorts will be sent in the `p_standard` key-value. +### _Enabling Publisher Cohorts_ + +#### Standard Cohorts + +The Permutive RTD module sets Standard Cohort IDs as bidder-specific ortb2.user.data first-party data, following the Prebid ortb2 convention. Cohorts will be sent in the `p_standard` key-value. + +For Prebid versions below 7.29.0, populate the acbidders config in the Permutive RTD with an array of bidder codes with whom you wish to share Standard Cohorts with. You also need to permission the bidders by communicating the bidder list to the Permutive team at strategicpartnershipops@permutive.com. + +For Prebid versions 7.29.0 and above, do not populate bidder codes in acbidders for the purpose of sharing Standard Cohorts (Note: there may be other business needs that require you to populate acbidders for Prebid versions 7.29.0+, see Advertiser Cohorts below). To share Standard Cohorts with bidders in Prebid versions 7.29.0 and above, communicate the bidder list to the Permutive team at strategicpartnershipops@permutive.com. + +#### _Bidder Specific Requirements for Standard Cohorts_ +For PubMatic or OpenX: Please ensure you are using Prebid.js 7.13 (or later) +For Xandr: Please ensure you are using Prebid.js 7.29 (or later) +For Equativ: Please ensure you are using Prebid.js 7.26 (or later) + +#### Custom Cohorts + +The Permutive RTD module also supports passing any of the **Custom** Cohorts created in the dashboard to some SSP partners for targeting +e.g. setting up publisher deals. For these activations, cohort IDs are set in bidder-specific locations per ad unit (custom parameters). + +Currently, bidders with known support for custom cohort targeting are: + +- Xandr +- Magnite + +When enabling the respective Activation for a cohort in Permutive, this module will automatically attach that cohort ID to the bid request. +There is no need to enable individual bidders in the module configuration, it will automatically reflect which SSP integrations you have enabled in your Permutive dashboard. +Permutive cohorts will be sent in the permutive key-value. + -The Permutive RTD module sets standard cohort IDs as bidder-specific ortb2.user.data first-party data, following the Prebid ortb2 convention. +### _Enabling Advertiser Cohorts_ -There are **two** ways to assign which demand partner bidders (e.g. SSPs) will receive Standard Cohort information via the Audience Connector (acbidders) config: +If you are connecting to an Advertiser seat within Permutive to share Advertiser Cohorts, populate the acbidders config in the Permutive RTD with an array of bidder codes with whom you wish to share Advertiser Cohorts with. + +### _Managing acbidders_ + +If your business needs require you to populate acbidders with bidder codes based on the criteria above, there are **two** ways to manage it. #### Option 1 - Automated -New demand partner bidders may be added to the acbidders config directly within the Permutive Platform. +If you are using Prebid.js v7.13.0+, bidders may be added to or removed from the acbidders config directly within the Permutive Dashboard. **Permutive can do this on your behalf**. Simply contact your Permutive CSM with strategicpartnershipops@permutive.com on cc, indicating which bidders you would like added. -Or, a publisher may do this themselves within the UI using the below instructions. +Or, a publisher may do this themselves within the Permutive Dashboard using the below instructions. ##### Create Integration -In order to update acbidders via the Permutive dashboard, -it is necessary to first enable the prebid integration in the integrations page (settings). +In order to manage acbidders via the Permutive dashboard, it is necessary to first enable the Prebid integration via the integrations page (settings). ![Alt text](/assets/images/dev-docs/modules/permutiveRtdProvider-integration-create.png?raw=true "Permutive Prebid integration - create") @@ -142,33 +159,17 @@ Please see [this document](https://support.permutive.com/hc/en-us/articles/36001 ##### Update acbidders -The input for the “Data Provider config” is currently a multi-input free text. -A valid “bidder code” needs to be entered in order to enable Standard Cohorts to be passed to the desired partner. -The [prebid Bidders page](https://docs.prebid.org/dev-docs/bidders.html) contains instructions and a link to a list of possible bidder codes. +The input for the “Data Provider config” is a multi-input free text. A valid “bidder code” needs to be entered in order to enable Standard or Advertiser Cohorts to be passed to the desired partner. The [prebid Bidders page](https://docs.prebid.org/dev-docs/bidders.html) contains instructions and a link to a list of possible bidder codes. ![Alt text](/assets/images/dev-docs/modules/permutiveRtdProvider-integration-update.png?raw=true "Permutive Prebid integration - update") -Acbidders can be added or removed from the list using this feature, however, this will not impact any acbidders that have been applied using the manual method below. +Bidders can be added or removed from acbidders using this feature, however, this will not impact any bidders that have been applied using the manual method below. #### Option 2 - Manual -As a secondary option, new demand partner bidders may be added manually. +As a secondary option, bidders may be added manually. -To do so, a Publisher may define which bidders should receive Standard Cohorts by +To do so, define which bidders should receive Standard or Advertiser Cohorts by including the _bidder code_ of any bidder in the `acBidders` array. -**Note:** If a Publisher ever needs to remove a manually-added bidder, the bidder will also need to be removed manually. - -### _Enabling Custom Cohort IDs for Targeting_ - -Separately from Standard Cohorts - The Permutive RTD module also supports passing any of the **custom** cohorts created in the dashboard to some SSP partners for targeting -e.g. setting up publisher deals. For these activations, cohort IDs are set in bidder-specific locations per ad unit (custom parameters). - -Currently, bidders with known support for custom cohort targeting are: - -- Xandr -- Magnite - -When enabling the respective Activation for a cohort in Permutive, this module will automatically attach that cohort ID to the bid request. -There is no need to enable individual bidders in the module configuration, it will automatically reflect which SSP integrations you have enabled in your Permutive dashboard. -Permutive cohorts will be sent in the permutive key-value. +**Note:** If you ever need to remove a manually-added bidder, the bidder will also need to be removed manually. From 03e558bd2c259f9bc43e67ec35eac6fb94a4a403 Mon Sep 17 00:00:00 2001 From: Brian Schaaf Date: Sat, 15 Apr 2023 16:58:48 -0400 Subject: [PATCH 225/763] PubWise Support PBS (#4428) --- dev-docs/bidders/pwbid.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/pwbid.md b/dev-docs/bidders/pwbid.md index ec0361fbf4..ef32a00b7e 100644 --- a/dev-docs/bidders/pwbid.md +++ b/dev-docs/bidders/pwbid.md @@ -3,6 +3,7 @@ layout: bidder title: PubWise description: PubWise Bidder Adaptor pbjs: true +pbs: true biddercode: pwbid aliasCode: pubwise media_types: banner, native, video From 76e8da3a7461b4bb01108dc13b7292dd0d77abeb Mon Sep 17 00:00:00 2001 From: Vadim Mazzherin Date: Sun, 16 Apr 2023 03:00:08 +0600 Subject: [PATCH 226/763] ShowHeroes Bid Adapter: update documentation (#4422) * add ShowHeroes Adapter * removing longer-than-12 header happily we don't need that anymore * ShowHeroes Bid Adapter: update params * Delete showheroes.md * ShowHeroes bid adapter: update doc --------- Co-authored-by: bretg --- dev-docs/bidders/showheroes-bs.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dev-docs/bidders/showheroes-bs.md b/dev-docs/bidders/showheroes-bs.md index 357cb5b546..8d84acbf72 100644 --- a/dev-docs/bidders/showheroes-bs.md +++ b/dev-docs/bidders/showheroes-bs.md @@ -6,6 +6,8 @@ pbjs: true biddercode: showheroes-bs media_types: video, banner gdpr_supported: true +usp_supported: true +schain_supported: true sidebarType: 1 --- From 5e5b5197e9d311513eec06100a62db34eb5d59d4 Mon Sep 17 00:00:00 2001 From: Ilia Medvedev Date: Sun, 16 Apr 2023 01:00:38 +0400 Subject: [PATCH 227/763] New Adapter: Evolution Technologies (#4421) * New Adapter: Evolution Technologies * Rename evolutionTechnologies to evtech --- dev-docs/bidders/evtech.md | 30 ++++++++++++++++++++++++++++ dev-docs/bidders/iionads.md | 4 +++- dev-docs/bidders/limelightDigital.md | 4 +++- 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 dev-docs/bidders/evtech.md diff --git a/dev-docs/bidders/evtech.md b/dev-docs/bidders/evtech.md new file mode 100644 index 0000000000..d02b1ba27a --- /dev/null +++ b/dev-docs/bidders/evtech.md @@ -0,0 +1,30 @@ +--- +layout: bidder +title: Evolution Technologies +description: Evolution Technologies Bidder Adaptor +biddercode: evtech +pbjs: false +pbs: true +media_types: banner, video, audio, native +userIds: all +fpd_supported: false +gdpr_supported: true +usp_supported: true +coppa_supported: true +schain_supported: true +prebid_member: false +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +floors_supported: false +aliasCode: limelightDigital +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|:--------------|:---------|:----------------------|:------------------|:----------| +| `host` | required | Ad network's RTB host | `'e-volution.ai'` | `string` | +| `publisherId` | required | Publisher ID | `12345` | `integer` | diff --git a/dev-docs/bidders/iionads.md b/dev-docs/bidders/iionads.md index cf6c28c092..3ca533cc1b 100644 --- a/dev-docs/bidders/iionads.md +++ b/dev-docs/bidders/iionads.md @@ -36,4 +36,6 @@ sidebarType: 1 | `custom4` | optional | Custom targeting field 4 | `'custom4'` | `string` | | `custom5` | optional | Custom targeting field 5 | `'custom5'` | `string` | -iionads server-side Prebid Server adapter supports `banner`, `video`, `audio`, `native` media types. But iionads client-side Prebid.js adapter supports only `banner` and `video` media types, doesn't support `audio` and `native`. +iionads server-side Prebid Server adapter requires only `publisherId` and `host` parameters. But iionads client-side Prebid.js adapter requires only `host`, `adUnitId`, `adUnitType`. + +iionads server-side Prebid Server adapter supports only `banner`, `video`, `audio`, `native` media types. But iionads client-side Prebid.js adapter supports only `banner` and `video` media types, doesn't support `audio` and `native`. diff --git a/dev-docs/bidders/limelightDigital.md b/dev-docs/bidders/limelightDigital.md index 2134f4d448..e3b8e3f06c 100644 --- a/dev-docs/bidders/limelightDigital.md +++ b/dev-docs/bidders/limelightDigital.md @@ -35,4 +35,6 @@ sidebarType: 1 | `custom4` | optional | Custom targeting field 4 | `'custom4'` | `string` | | `custom5` | optional | Custom targeting field 5 | `'custom5'` | `string` | -Limelight Digital server-side Prebid Server adapter supports `banner`, `video`, `audio`, `native` media types. But Limelight Digital client-side Prebid.js adapter supports only `banner` and `video` media types, doesn't support `audio` and `native`. +Limelight Digital server-side Prebid Server adapter requires only `publisherId` and `host` parameters. But Limelight Digital client-side Prebid.js adapter requires only `host`, `adUnitId`, `adUnitType`. + +Limelight Digital server-side Prebid Server adapter supports only `banner`, `video`, `audio`, `native` media types. But Limelight Digital client-side Prebid.js adapter supports only `banner` and `video` media types, doesn't support `audio` and `native`. From 6b61017af76206a886bbbeee6aa79db8ee68f81a Mon Sep 17 00:00:00 2001 From: onlsol <48312668+onlsol@users.noreply.github.com> Date: Sat, 15 Apr 2023 23:01:11 +0200 Subject: [PATCH 228/763] DSPx docs update (#4417) * schain support * userIds support * multiformat support * bid params description --- dev-docs/bidders/dspx.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/dev-docs/bidders/dspx.md b/dev-docs/bidders/dspx.md index 074cd12256..c60589d136 100644 --- a/dev-docs/bidders/dspx.md +++ b/dev-docs/bidders/dspx.md @@ -6,12 +6,15 @@ pbjs: true biddercode: dspx media_types: banner, video gdpr_supported: true -userIds: uid2, netId +schain_supported: true +userIds: uid2, netId, id5Id, sharedId +multiformat_supported: will-bid-on-one +gvl_id: 602 sidebarType: 1 --- ### Note: -The DSPx Bidder Adapter requires setup and approval from DSPx team. Please reach out to your account team or prebid@dspx.tv for more information. +The DSPx bidder adapter requires setup and approval from the DSPx team. Please reach out to prebid@dspx.tv for more information and start using it. ### Bid Params @@ -20,13 +23,13 @@ The DSPx Bidder Adapter requires setup and approval from DSPx team. Please reach | Name | Scope | Description | Example | Type | |---------------|----------|----------------------------------------------------------------------------|------------------------|-----------------| | `placement` | required | Placement ID from dspx. | `'101'` | `string` | -| `pfilter` | optional | Selection filter. E.g. floorprice (min_cpm_micros) | `{"floorprice": 1000000}`| `object` | +| `pfilter` | optional | Custom filter parameters. | `{"customxy": 1000000}`| `object` | | `bcat` | optional | List of Blocked Categories (IAB) - comma separated. | `'IAB2,IAB4'` | `string` | **Notice:** The creative type can be checked by the `type` property of `bidResponse` object. E.g.: ```js bidsBackHandler: function(bids) { - var contentType = bids[0].type // JS InSkin|JS Interscroller Type A|...; + var contentType = bids[0].type } ``` From cf8aeafe56917d3c3db65fbc564e63b24a2e7c6b Mon Sep 17 00:00:00 2001 From: beglobal2022 <120370005+beglobal2022@users.noreply.github.com> Date: Sun, 16 Apr 2023 02:32:35 +0530 Subject: [PATCH 229/763] Added document for bedigitech adaptor (#4394) Co-authored-by: yogesh.ingale1 --- dev-docs/bidders/bedigitech.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 dev-docs/bidders/bedigitech.md diff --git a/dev-docs/bidders/bedigitech.md b/dev-docs/bidders/bedigitech.md new file mode 100644 index 0000000000..383e42c381 --- /dev/null +++ b/dev-docs/bidders/bedigitech.md @@ -0,0 +1,23 @@ +--- +layout: bidder +title: BEdigitech +description: Prebid BEdigitech Bidder Adapter +pbjs: true +pbs: false +biddercode: bedigitech +gdpr_supported: false +usp_supported: false +media_types: banner, native +--- + +### Note: + +The BEdigitech Bidding adapter requires setup before beginning. Please contact us at yogesh@thebeglobal.com +Due to different integration API prebid.js and prebid-server api params are different + +### Prebid.JS Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------|-----------|-----------| +| `placementId` | required | bedigitech placement | `'1234'` | `'string'`| From 786122f545c408317e3c75ffd32ef62eed02aa48 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 08:00:05 -0700 Subject: [PATCH 230/763] Bump ua-parser-js and browser-sync (#4486) Bumps [ua-parser-js](https://github.com/faisalman/ua-parser-js) to 1.0.35 and updates ancestor dependency [browser-sync](https://github.com/BrowserSync/browser-sync). These dependencies need to be updated together. Updates `ua-parser-js` from 1.0.2 to 1.0.35 - [Release notes](https://github.com/faisalman/ua-parser-js/releases) - [Changelog](https://github.com/faisalman/ua-parser-js/blob/master/changelog.md) - [Commits](https://github.com/faisalman/ua-parser-js/compare/1.0.2...1.0.35) Updates `browser-sync` from 2.27.11 to 2.29.1 - [Release notes](https://github.com/BrowserSync/browser-sync/releases) - [Changelog](https://github.com/BrowserSync/browser-sync/blob/master/CHANGELOG.md) - [Commits](https://github.com/BrowserSync/browser-sync/compare/v2.27.11...v2.29.1) --- updated-dependencies: - dependency-name: ua-parser-js dependency-type: indirect - dependency-name: browser-sync dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 590 +++++++++++++++++++++++++++++----------------- package.json | 2 +- 2 files changed, 374 insertions(+), 218 deletions(-) diff --git a/package-lock.json b/package-lock.json index fdd5679ae0..ac50a84219 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "popper.js": "^1.16.1" }, "devDependencies": { - "browser-sync": "^2.27.11", + "browser-sync": "^2.29.1", "browser-sync-webpack-plugin": "^2.0.1", "cross-env": "^7.0.2", "laravel-mix": "^5.0.7", @@ -2131,21 +2131,22 @@ "dev": true }, "node_modules/browser-sync": { - "version": "2.27.11", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.27.11.tgz", - "integrity": "sha512-U5f9u97OYJH66T0MGWWzG9rOQTW6ZmDMj97vsmtqwNS03JAwdLVES8eel2lD3rvAqQCNAFqaJ74NMacBI57vJg==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.29.1.tgz", + "integrity": "sha512-WXy9HMJVQaNUTPjmai330E2fnDA6W84l/vBILGkYu9yHXIpWw1gJYjdQWDfEhLFljYUHNTN9jM3GCej2T55m+g==", "dev": true, "dependencies": { - "browser-sync-client": "^2.27.11", - "browser-sync-ui": "^2.27.11", + "browser-sync-client": "^2.29.1", + "browser-sync-ui": "^2.29.1", "bs-recipes": "1.3.4", "bs-snippet-injector": "^2.0.1", + "chalk": "4.1.2", "chokidar": "^3.5.1", "connect": "3.6.6", "connect-history-api-fallback": "^1", "dev-ip": "^1.0.1", "easy-extender": "^2.3.4", - "eazy-logger": "3.1.0", + "eazy-logger": "^4.0.1", "etag": "^1.8.1", "fresh": "^0.5.2", "fs-extra": "3.0.1", @@ -2164,7 +2165,7 @@ "serve-static": "1.13.2", "server-destroy": "1.0.1", "socket.io": "^4.4.1", - "ua-parser-js": "1.0.2", + "ua-parser-js": "^1.0.33", "yargs": "^17.3.1" }, "bin": { @@ -2175,28 +2176,27 @@ } }, "node_modules/browser-sync-client": { - "version": "2.27.11", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.27.11.tgz", - "integrity": "sha512-okMNfD2NasL/XD1/BclP3onXjhahisk3e/kTQ5HPDT/lLqdBqNDd6QFcjI5I1ak7na2hxKQSLjryql+7fp5gKQ==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.29.1.tgz", + "integrity": "sha512-aESnjt3rU7CZpzjyqzhIC2UJ3MVhzRis7cPKkGbyYWDf/wnbxyRa3fFenF3Qx9061/guY3HHhD67uiTVV26DVg==", "dev": true, "dependencies": { "etag": "1.8.1", "fresh": "0.5.2", - "mitt": "^1.1.3", - "rxjs": "^5.5.6", - "typescript": "^4.6.2" + "mitt": "^1.1.3" }, "engines": { "node": ">=8.0.0" } }, "node_modules/browser-sync-ui": { - "version": "2.27.11", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.27.11.tgz", - "integrity": "sha512-1T/Y8Pp1R68aUL7zVSFq0nxtr258xWd/nTasCAHX2M6EsGaswVOFtXsw3bKqsr35z+J+LfVfOdz1HFLYKxdgrA==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.29.1.tgz", + "integrity": "sha512-MB7SAiUgVUrhipO2xyO1sheC9H0+LKXPQ3L1tQWcZ3AgizBnUNKAqDZPSwe4grNSa8o8ImSAwJp7lMS6XYy1Dw==", "dev": true, "dependencies": { "async-each-series": "0.1.1", + "chalk": "4.1.2", "connect-history-api-fallback": "^1", "immutable": "^3", "server-destroy": "1.0.1", @@ -2204,6 +2204,76 @@ "stream-throttle": "^0.1.3" } }, + "node_modules/browser-sync-ui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/browser-sync-ui/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/browser-sync-ui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/browser-sync-ui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/browser-sync-ui/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-sync-ui/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/browser-sync-webpack-plugin": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/browser-sync-webpack-plugin/-/browser-sync-webpack-plugin-2.0.1.tgz", @@ -2271,6 +2341,22 @@ "node": ">=8" } }, + "node_modules/browser-sync/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/browser-sync/node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -2394,6 +2480,15 @@ "node": ">= 6" } }, + "node_modules/browser-sync/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/browser-sync/node_modules/http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -2586,6 +2681,18 @@ "node": ">=8" } }, + "node_modules/browser-sync/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/browser-sync/node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4292,12 +4399,6 @@ "node": ">=4" } }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, "node_modules/dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", @@ -4417,17 +4518,87 @@ } }, "node_modules/eazy-logger": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.1.0.tgz", - "integrity": "sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.0.1.tgz", + "integrity": "sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==", "dev": true, "dependencies": { - "tfunk": "^4.0.0" + "chalk": "4.1.2" }, "engines": { "node": ">= 0.8.0" } }, + "node_modules/eazy-logger/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eazy-logger/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eazy-logger/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eazy-logger/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eazy-logger/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eazy-logger/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -4516,22 +4687,22 @@ } }, "node_modules/engine.io-client": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.3.tgz", - "integrity": "sha512-aXPtgF1JS3RuuKcpSrBtimSjYvrbhKW9froICH4s0F3XQWLxsKNxqzG39nnvQZQnva4CMvUK63T7shevxRyYHw==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.4.0.tgz", + "integrity": "sha512-GyKPDyoEha+XZ7iEqam49vz6auPnNJ9ZBfy89f+rMMas8AuiMWOZ9PVzu8xb9ZC6rafUqiGHSCfu22ih66E+1g==", "dev": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", "engine.io-parser": "~5.0.3", - "ws": "~8.2.3", + "ws": "~8.11.0", "xmlhttprequest-ssl": "~2.0.0" } }, "node_modules/engine.io-client/node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "dev": true, "engines": { "node": ">=10.0.0" @@ -9843,18 +10014,6 @@ "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", "dev": true }, - "node_modules/rxjs": { - "version": "5.5.12", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", - "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", - "dev": true, - "dependencies": { - "symbol-observable": "1.0.1" - }, - "engines": { - "npm": ">=2.0.0" - } - }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -10464,14 +10623,14 @@ "dev": true }, "node_modules/socket.io-client": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.4.tgz", - "integrity": "sha512-ZpKteoA06RzkD32IbqILZ+Cnst4xewU7ZYK12aS1mzHftFFjpoMz69IuhP/nL25pJfao/amoPI527KnuhFm01g==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.6.1.tgz", + "integrity": "sha512-5UswCV6hpaRsNg5kkEHVcbBIXEYoVbMQaHJBXJCyEQ+CiFPV1NIOY0XOFWG4XR4GZcB8Kn6AsRs/9cy9TbqVMQ==", "dev": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", - "engine.io-client": "~6.2.3", + "engine.io-client": "~6.4.0", "socket.io-parser": "~4.2.1" }, "engines": { @@ -10955,15 +11114,6 @@ "node": ">=4.0.0" } }, - "node_modules/symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -11138,50 +11288,6 @@ "node": ">=0.10.0" } }, - "node_modules/tfunk": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-4.0.0.tgz", - "integrity": "sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ==", - "dev": true, - "dependencies": { - "chalk": "^1.1.3", - "dlv": "^1.1.3" - } - }, - "node_modules/tfunk/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tfunk/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tfunk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -11329,23 +11435,10 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, - "node_modules/typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, "node_modules/ua-parser-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.2.tgz", - "integrity": "sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg==", + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", + "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", "dev": true, "funding": [ { @@ -14706,21 +14799,22 @@ "dev": true }, "browser-sync": { - "version": "2.27.11", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.27.11.tgz", - "integrity": "sha512-U5f9u97OYJH66T0MGWWzG9rOQTW6ZmDMj97vsmtqwNS03JAwdLVES8eel2lD3rvAqQCNAFqaJ74NMacBI57vJg==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.29.1.tgz", + "integrity": "sha512-WXy9HMJVQaNUTPjmai330E2fnDA6W84l/vBILGkYu9yHXIpWw1gJYjdQWDfEhLFljYUHNTN9jM3GCej2T55m+g==", "dev": true, "requires": { - "browser-sync-client": "^2.27.11", - "browser-sync-ui": "^2.27.11", + "browser-sync-client": "^2.29.1", + "browser-sync-ui": "^2.29.1", "bs-recipes": "1.3.4", "bs-snippet-injector": "^2.0.1", + "chalk": "4.1.2", "chokidar": "^3.5.1", "connect": "3.6.6", "connect-history-api-fallback": "^1", "dev-ip": "^1.0.1", "easy-extender": "^2.3.4", - "eazy-logger": "3.1.0", + "eazy-logger": "^4.0.1", "etag": "^1.8.1", "fresh": "^0.5.2", "fs-extra": "3.0.1", @@ -14739,7 +14833,7 @@ "serve-static": "1.13.2", "server-destroy": "1.0.1", "socket.io": "^4.4.1", - "ua-parser-js": "1.0.2", + "ua-parser-js": "^1.0.33", "yargs": "^17.3.1" }, "dependencies": { @@ -14783,6 +14877,16 @@ "fill-range": "^7.0.1" } }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -14876,6 +14980,12 @@ "is-glob": "^4.0.1" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -15029,6 +15139,15 @@ "ansi-regex": "^5.0.1" } }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -15079,30 +15198,80 @@ } }, "browser-sync-client": { - "version": "2.27.11", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.27.11.tgz", - "integrity": "sha512-okMNfD2NasL/XD1/BclP3onXjhahisk3e/kTQ5HPDT/lLqdBqNDd6QFcjI5I1ak7na2hxKQSLjryql+7fp5gKQ==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.29.1.tgz", + "integrity": "sha512-aESnjt3rU7CZpzjyqzhIC2UJ3MVhzRis7cPKkGbyYWDf/wnbxyRa3fFenF3Qx9061/guY3HHhD67uiTVV26DVg==", "dev": true, "requires": { "etag": "1.8.1", "fresh": "0.5.2", - "mitt": "^1.1.3", - "rxjs": "^5.5.6", - "typescript": "^4.6.2" + "mitt": "^1.1.3" } }, "browser-sync-ui": { - "version": "2.27.11", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.27.11.tgz", - "integrity": "sha512-1T/Y8Pp1R68aUL7zVSFq0nxtr258xWd/nTasCAHX2M6EsGaswVOFtXsw3bKqsr35z+J+LfVfOdz1HFLYKxdgrA==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.29.1.tgz", + "integrity": "sha512-MB7SAiUgVUrhipO2xyO1sheC9H0+LKXPQ3L1tQWcZ3AgizBnUNKAqDZPSwe4grNSa8o8ImSAwJp7lMS6XYy1Dw==", "dev": true, "requires": { "async-each-series": "0.1.1", + "chalk": "4.1.2", "connect-history-api-fallback": "^1", "immutable": "^3", "server-destroy": "1.0.1", "socket.io-client": "^4.4.1", "stream-throttle": "^0.1.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "browser-sync-webpack-plugin": { @@ -16486,12 +16655,6 @@ "path-type": "^3.0.0" } }, - "dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, "dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", @@ -16600,12 +16763,63 @@ } }, "eazy-logger": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.1.0.tgz", - "integrity": "sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.0.1.tgz", + "integrity": "sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==", "dev": true, "requires": { - "tfunk": "^4.0.0" + "chalk": "4.1.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "ee-first": { @@ -16704,22 +16918,22 @@ } }, "engine.io-client": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.3.tgz", - "integrity": "sha512-aXPtgF1JS3RuuKcpSrBtimSjYvrbhKW9froICH4s0F3XQWLxsKNxqzG39nnvQZQnva4CMvUK63T7shevxRyYHw==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.4.0.tgz", + "integrity": "sha512-GyKPDyoEha+XZ7iEqam49vz6auPnNJ9ZBfy89f+rMMas8AuiMWOZ9PVzu8xb9ZC6rafUqiGHSCfu22ih66E+1g==", "dev": true, "requires": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", "engine.io-parser": "~5.0.3", - "ws": "~8.2.3", + "ws": "~8.11.0", "xmlhttprequest-ssl": "~2.0.0" }, "dependencies": { "ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "dev": true, "requires": {} } @@ -21090,15 +21304,6 @@ "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", "dev": true }, - "rxjs": { - "version": "5.5.12", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", - "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", - "dev": true, - "requires": { - "symbol-observable": "1.0.1" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -21620,14 +21825,14 @@ "dev": true }, "socket.io-client": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.4.tgz", - "integrity": "sha512-ZpKteoA06RzkD32IbqILZ+Cnst4xewU7ZYK12aS1mzHftFFjpoMz69IuhP/nL25pJfao/amoPI527KnuhFm01g==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.6.1.tgz", + "integrity": "sha512-5UswCV6hpaRsNg5kkEHVcbBIXEYoVbMQaHJBXJCyEQ+CiFPV1NIOY0XOFWG4XR4GZcB8Kn6AsRs/9cy9TbqVMQ==", "dev": true, "requires": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", - "engine.io-client": "~6.2.3", + "engine.io-client": "~6.4.0", "socket.io-parser": "~4.2.1" } }, @@ -22040,12 +22245,6 @@ "util.promisify": "~1.0.0" } }, - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==", - "dev": true - }, "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -22176,43 +22375,6 @@ } } }, - "tfunk": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-4.0.0.tgz", - "integrity": "sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "dlv": "^1.1.3" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -22338,16 +22500,10 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, - "typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", - "dev": true - }, "ua-parser-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.2.tgz", - "integrity": "sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg==", + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", + "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index 71ac66fae4..3eb43407ae 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ }, "homepage": "https://github.com/AtreNet/prebid.github.io#readme", "devDependencies": { - "browser-sync": "^2.27.11", + "browser-sync": "^2.29.1", "browser-sync-webpack-plugin": "^2.0.1", "cross-env": "^7.0.2", "laravel-mix": "^5.0.7", From be0652695b857796fd46048f6ce9e5ac5ff56df6 Mon Sep 17 00:00:00 2001 From: ValeriiBarsuk <121865116+ValeriiBarsuk@users.noreply.github.com> Date: Mon, 17 Apr 2023 20:29:50 +0200 Subject: [PATCH 231/763] Updated PBS-database AMP, stored requests query (#4460) * Updated PBS-database AMP, stored requests query * Resolved remark * wordsmithing * updating to clarify top-level/imp-level --------- Co-authored-by: Valerii Barsuk Co-authored-by: bretg --- prebid-server/features/pbs-storedreqs-java.md | 23 ++++++++++-------- prebid-server/hosting/pbs-database.md | 24 +++++++++++-------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/prebid-server/features/pbs-storedreqs-java.md b/prebid-server/features/pbs-storedreqs-java.md index c34442950f..d9249deb78 100644 --- a/prebid-server/features/pbs-storedreqs-java.md +++ b/prebid-server/features/pbs-storedreqs-java.md @@ -14,8 +14,8 @@ title: Prebid Server | Features | Setting Up Stored Requests for Java ## Overview There are two different kinds of stored requests: -- **impression-level stored requests**: these are scoped to the contents of a single OpenRTB `imp` object -- **top-level stored requests**: these are scoped to the entire OpenRTB package, and is where you can place details in ext.prebid, tmax, site, etc. It is not recommended to place imp objects in this type of stored request. +- **impression-level stored requests**: these are scoped to the contents of a single OpenRTB `imp` object. Prebid Server defines these in imp[].ext.prebid.storedrequest. +- **top-level stored requests**: these are scoped to the entire OpenRTB package, and is where you can place details in ext.prebid, tmax, site, etc. It is not recommended to place imp objects in this type of stored request. Prebid Server defines these in ext.prebid.storedrequest. ## PBS-Java Stored Request Quickstart @@ -141,8 +141,8 @@ HTTP request properties will overwrite the Stored Request ones. ## Top-Level Stored Requests -So far, our examples have only used Stored Imp data. However, Stored Requests -are also allowed on the [BidRequest](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf#page=15). +So far, our examples have only used impression-level data. However, Stored Requests +are also allowed at the top level at ext.prebid.storedrequest. These work exactly the same way, but support storing properties like timeouts and price granularity. For example, assume the following `stored-requests/{id}.json`: @@ -197,11 +197,13 @@ will produce the same auction as if the HTTP request had been: } ``` -Prebid Server does allow Stored BidRequests and Stored Imps in the same HTTP Request. -The Stored BidRequest will be applied first, and then the Stored Imps after. +Prebid Server does allow both top-level and impression-level stored requests in the same HTTP Request. +The top-level stored request will be applied first, and then the impression-level stored request. **Beware**: Stored Request data will not be applied recursively. -If a Stored BidRequest includes Imps with their own Stored Request IDs, then the data for those Stored Imps will not be resolved. +If a Stored BidRequest includes Imps with their own Stored Request IDs, then the data for the contained Stored Imps will not be resolved. + +**Note**: However, stored requests may contain [storedresponses](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#stored-responses). ## Alternate backends @@ -225,8 +227,8 @@ settings: ``` The select query columns of `stored-requests-query` and `amp-stored-requests-query` properties should correspond to the specific format: -- first column: account ID which is searched by. -- second column: ID of stored data item which is searched by. +- first column: account ID, which is used to make sure that storedrequests are unique to the account +- second column: ID of stored data item - third column: value of stored data item. - forth column: type of stored data item. Can be `request` for stored requests or `imp` for stored impressions. @@ -277,7 +279,7 @@ settings: dbname: database-name user: username password: password - stored-requests-query: SELECT accountId, reqid, requestData, 'request' as dataType FROM stored_requests WHERE reqid IN (%REQUEST_ID_LIST%) UNION ALL SELECT accountId, impid, impData, 'imp' as dataType FROM stored_imps WHERE impid IN (%IMP_ID_LIST%) + stored-requests-query: SELECT accountId, reqid, requestData, 'request' as dataType FROM stored_requests WHERE reqid IN (%REQUEST_ID_LIST%) UNION ALL SELECT accountId, impid, impData, 'imp' as dataType FROM stored_requests WHERE impid IN (%IMP_ID_LIST%) amp-stored-requests-query: SELECT accountId, reqid, requestData, 'request' as dataType FROM stored_requests WHERE reqid IN (%REQUEST_ID_LIST%) http: endpoint: http://stored-requests.prebid.com @@ -296,3 +298,4 @@ Refresh rate can be negative or zero - in such case the data will be fetched onc ## Related Reading - [Stored Responses](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#stored-responses) +- [Hosting a PBS database](/prebid-server/hosting/pbs-database.html) diff --git a/prebid-server/hosting/pbs-database.md b/prebid-server/hosting/pbs-database.md index 084e7e6c78..4554dc5684 100644 --- a/prebid-server/hosting/pbs-database.md +++ b/prebid-server/hosting/pbs-database.md @@ -57,20 +57,22 @@ The Stored Request query needs to return fields in this order: There are two parameters that can be passed into the query: -- %REQUEST_ID_LIST% : a comma-separated list of "top-level" stored request IDs -- %IMP_ID_LIST% : a comma-separated list of "impression-level" stored request IDs +- %REQUEST_ID_LIST% : a comma-separated list of "top-level" stored request IDs - these are the IDs in ext.prebid.storedrequest.id. +- %IMP_ID_LIST% : a comma-separated list of "impression-level" stored request IDs - these are the IDs in imp[].ext.prebid.storedrequest.id. This query is defined in settings.database.stored-requests-query. Example: ``` settings: database: type: mysql - stored-requests-query: SELECT uuid, config, 'request' as dataType FROM stored_requests WHERE uuid IN (%REQUEST_ID_LIST%) UNION ALL SELECT uuid, config, 'imp' as dataType FROM stored_requests WHERE uuid IN (%IMP_ID_LIST%) + stored-requests-query: SELECT accountId, reqid, storedData, 'request' as dataType FROM stored_requests WHERE reqid IN (%REQUEST_ID_LIST%) UNION ALL SELECT accountId, reqid, storedData, 'imp' as dataType FROM stored_requests WHERE reqid IN (%IMP_ID_LIST%) ``` This example assumes that the schema includes these fields: -- uuid is a string field that contains the stored request ID -- config is a JSON field that contains the body of the stored request +- accountId: account ID, which is used to make sure that storedrequests are unique to the account +- reqid: ID of stored data item +- storedData: value of stored data item +- 'request' or 'imp': type of stored data item. Again, you can name the fields however you'd like in your database, and the query can be arbitrarily complicated as long as it returns the fields in the order and types shown here. @@ -84,12 +86,14 @@ This query is defined in settings.database.amp-stored-requests-query. Example: settings: database: type: mysql - stored-requests-query: SELECT uuid, config, 'request' as dataType FROM stored_requests WHERE uuid IN (%REQUEST_ID_LIST%) + amp-stored-requests-query: SELECT accountId, reqid, storedData, 'request' as dataType FROM stored_requests WHERE reqid IN (%REQUEST_ID_LIST%) ``` This example assumes that the stored_requests schema includes these fields: -- uuid is a string field that contains the stored request ID -- config is a JSON field that contains the body of the stored request +- accountId: account ID, which is used to make sure that storedrequests are unique to the account +- reqid: ID of stored data item +- storedData: value of stored data item +- 'request': type of stored data item. Can be only be 'request' for AMP. Again, you can name the fields however you'd like in your database, and the query can be arbitrarily complicated as long as it returns the fields in the order and types shown here. @@ -105,8 +109,8 @@ The Stored Response query needs to return fields in this order: One parameter can be passed into the query, though at this point, the parameter differs between Go and Java: -- %RESPONSE_ID_LIST% (PBS-Java): a comma-separated list of stored response IDs -- %ID_LIST% (PBS-Go): a comma-separated list of stored response IDs +- %RESPONSE_ID_LIST% (PBS-Java): a comma-separated list of stored response IDs. These come from imp[].ext.prebid.storedbidresponse or imp[].ext.prebid.storedauctionresponse. +- %ID_LIST% (PBS-Go): a comma-separated list of stored response IDs. These come from imp[].ext.prebid.storedbidresponse or imp[].ext.prebid.storedauctionresponse. This query is defined in settings.database.stored-requests-query. Example: ``` From 763401e5ed5cb38177d832a0c14fa1c3ef27dcbf Mon Sep 17 00:00:00 2001 From: bretg Date: Tue, 18 Apr 2023 09:21:08 -0400 Subject: [PATCH 232/763] Floors enforcePBS default is true on the server side (#4489) --- dev-docs/modules/floors.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-docs/modules/floors.md b/dev-docs/modules/floors.md index 12a7f18299..30f41fdee4 100644 --- a/dev-docs/modules/floors.md +++ b/dev-docs/modules/floors.md @@ -293,7 +293,7 @@ a subset that will be merged under the 'data' object. | enforcement | object | Controls the enforcement behavior within the Price Floors Module.| - | | skipRate | integer | skipRate is a random function whose input value is any integer 0 through 100 to determine when to skip all floor logic, where 0 is always use floor data and 100 is always skip floor data. The use case is for publishers or floor providers to learn bid behavior when floors are applied or skipped. Analytics adapters will have access to model version (if defined) when skipped is true to signal the Price Floors Module is in floors mode. If skipRate is supplied in both the root level of the floors object and within the data object, the skipRate configuration within the data object shall prevail. | 0 | | enforcement.enforceJS | boolean | If set to true, the Price Floors Module will provide floors to bid adapters for bid request matched rules and suppress any bids not exceeding a matching floor. If set to false, the Price Floors Module will still provide floors for bid adapters, there will be no floor enforcement.| true | -| enforcement.enforcePBS | boolean | If set to true, the Price Floors Module will signal to Prebid Server to pass floors to it’s bid adapters and enforce floors. If set to false, the pbjs should still pass matched bid request floor data to PBS, however no enforcement will take place. | false | +| enforcement.enforcePBS | boolean | If set to true, the Price Floors Module will signal to Prebid Server to pass floors to it’s bid adapters and enforce floors. If set to false, the pbjs should still pass matched bid request floor data to PBS, however no enforcement will take place. | true | | enforcement.floorDeals | boolean | Enforce floors for deal bid requests. | false | | enforcement.bidAdjustment | boolean | If true, the Price Floors Module will use the bidAdjustment function to adjust the floor per bidder. If false (or no bidAdjustment function is provided), floors will not be adjusted. Note: Setting this parameter to false may have unexpected results, such as signaling a gross floor when expecting net or vice versa. | true | | endpoint | object | Prebid.js only: controls behavior for dynamically retrieving floors. | - | @@ -354,7 +354,7 @@ a subset that will be merged under the 'data' object. | location | string | Prebid Server only: this is a read-only field set by the Prebid-Server floors feature to let analytics adapters know where the floors data came from. Possible values are: 'request', 'fetch' or 'noData'. | n/a | | enforcement | object | Controls the enforcement behavior within the module.| - | | enforcement.enforceJS | boolean | If set to true, the module will provide floors to bid adapters for bid request matched rules and suppress any bids not exceeding a matching floor. If set to false, the module will still provide floors for bid adapters, but there will be no floor enforcement.| true | -| enforcement.enforcePBS | boolean | If set to true, the module will signal to Prebid Server to pass floors to it’s bid adapters and enforce floors. If set to false, Prebid.js should still pass matched bid request floor data to Prebid Server, however no enforcement will take place. | false | +| enforcement.enforcePBS | boolean | If set to true, the module will signal to Prebid Server to pass floors to it’s bid adapters and enforce floors. If set to false, Prebid.js should still pass matched bid request floor data to Prebid Server, however no enforcement will take place. | true | | enforcement.floorDeals | boolean | Enforce floors for deal bid requests. | false | | enforcement.bidAdjustment | boolean | If true, the module will use the bidAdjustment function to adjust the floor per bidder. If false (or no bidAdjustment function is provided), floors will not be adjusted. Note: Setting this parameter to false may have unexpected results, such as signaling a gross floor when expecting net or vice versa. | true | | enforcement.enforceRate | integer | Prebid Server only: Defines a percentage for how often bid response enforcement activity should take place given that the floors feature is active. If the floors feature is skipped due to skipRate, this has no affect. For every non-skipped auction, this percent of them should be enforced: i.e. bids discarded. This feature lets publishers ease into enforcement in case bidders aren't adhering to floor rules. | 100 | From 42c1c660b5ca5f5565d45a079548d116b2c56288 Mon Sep 17 00:00:00 2001 From: Yuriy Velichko Date: Tue, 18 Apr 2023 19:49:51 +0300 Subject: [PATCH 233/763] Mobile: Restore the description of Prebid SDK utilization with 3rd party ad server (#4363) * ios: restore the description of Prebid SDK utilization with 3rd party ad server * fix typo, update statement * android: restore the description of Prebid SDK utilization with 3rd party ad server * fix broken link --- .../rendering/android-sdk-integration-pb.md | 68 ++++++++++++++++-- .../rendering/ios-sdk-integration-pb.md | 71 ++++++++++++++++--- ...ndroid-sdk-integration-gam-original-api.md | 2 +- 3 files changed, 125 insertions(+), 16 deletions(-) diff --git a/prebid-mobile/modules/rendering/android-sdk-integration-pb.md b/prebid-mobile/modules/rendering/android-sdk-integration-pb.md index 0d6aab3dbf..64f053f525 100644 --- a/prebid-mobile/modules/rendering/android-sdk-integration-pb.md +++ b/prebid-mobile/modules/rendering/android-sdk-integration-pb.md @@ -7,19 +7,73 @@ sidebarType: 2 --- -# Custom Integration +# Custom Bidding Integration {:.no_toc} -## Overview of Rendering API +You can use Prebid SDK to monetize your app with a custom ad server or even without it. Use the `Transport API` to obtain the targeting keywords for following usage with the custom ad server. Use the `Rendering API` to display the winning bid without primary ad server and its SDK. + +* TOC +{:toc} + +## Transport API + +The default ad server for Prebid's Mobile SDK is GAM. The SDK can be expanded to include support for 3rd party ad servers through the fetchDemand function. This function returns the Prebid Server bidder key/values (targeting keys), which can then be passed to the ad server of choice. + +In this mode, the publisher will be responsible for the following actions: + +* Call fetchDemand with extended targetingDict callback +* Retrieve targeting keys from extended fetchDemand function +* Convert targeting keys into the format for your ad server +* Pass converted keys to your ad server +* Render ad with Prebid Universal Creative or custom renderer + +This approach is avaliable for the following ad formats: + +* Display Banner via `BannerAdUnit` +* Video Banner and Instream Video via `VideoAdUnit` +* Display Interstitial via `InterstitialAdUnit` +* Video Interstitial via `VideoInterstitialAdUnit` +* Rewarded Video via `RewardedVideoAdUnit` +* Native Styles via `NativeRequest` + +The basic integration steps for these ad units you can find at the page for integration using [Original API](/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.html). The diference is that you should use the `fetchDemand` function with following signature: + +``` kotlin +public void fetchDemand(@NonNull Object adObj, + @NonNull OnCompleteListener2 listener) { ... } + +public interface OnCompleteListener2 { + /** + * This method will be called when PrebidMobile finishes attaching keywords to unmodifiableMap. + * @param resultCode see {@link ResultCode} class definition for details + * @param unmodifiableMap a map of targeting Key/Value pairs + */ + @MainThread + void onComplete(ResultCode resultCode, + @Nullable Map unmodifiableMap); +} +``` + +Examples: + +``` kotlin +private fun loadRewardedVideo() { + adUnit?.fetchDemand { resultCode, unmodifiableMap -> + val keywords: Map = HashMap(unmodifiableMap) + + adServerObject.loadRewardedVideo(ADUNITID_REWARDED, keywords) + } +} +``` + +## Rendering API The integration and usage of the Rendering API is similar to any other Ad SDK. It sends the bid requests to the Prebid Server and renders the winning bid. ![Rendering with GAM as the Primary Ad Server](/assets/images/prebid-mobile/modules/rendering/Prebid-In-App-Bidding-Overview-Pure-Prebid.png) -* TOC -{:toc} -## Banner API +### Banner API Integration example: @@ -61,7 +115,7 @@ For **Banner Video** you will also need to specify the `bannerView.videoPlacemen bannerView.videoPlacementType = PlacementType.IN_BANNER // or any other available type ``` -## Interstitial API +### Interstitial API Integration example: @@ -115,7 +169,7 @@ override fun onAdLoaded(interstitialAdUnit: InterstitialAdUnit) { } ``` -## Rewarded API +### Rewarded API Integration example: diff --git a/prebid-mobile/modules/rendering/ios-sdk-integration-pb.md b/prebid-mobile/modules/rendering/ios-sdk-integration-pb.md index 18a6e1ad1b..cafc31fe26 100644 --- a/prebid-mobile/modules/rendering/ios-sdk-integration-pb.md +++ b/prebid-mobile/modules/rendering/ios-sdk-integration-pb.md @@ -10,16 +10,71 @@ sidebarType: 2 # Custom Bidding Integration {:.no_toc} -## Mobile API - -The integration and usage of the Rendering API are similar to any other Ad SDK. It sends the bid requests to the Prebid Server and renders the winning bid. - -![In-App Bidding with Prebid](/assets/images/prebid-mobile/modules/rendering/Prebid-In-App-Bidding-Overview-Pure-Prebid.png) +You can use Prebid SDK to monetize your app with a custom ad server or even without it. Use the `Transport API` to obtain the targeting keywords for following usage with the custom ad server. Use the `Rendering API` to display the winning bid without primary ad server and its SDK. * TOC {:toc} -## Banner API +## Transport API + +The default ad server for Prebid's Mobile SDK is GAM. The SDK can be expanded to include support for 3rd party ad servers through the fetchDemand function. This function returns the Prebid Server bidder key/values (targeting keys), which can then be passed to the ad server of choice. + +In this mode, the publisher will be responsible for the following actions: + +* Call fetchDemand with extended targetingDict callback +* Retrieve targeting keys from extended fetchDemand function +* Convert targeting keys into the format for your ad server +* Pass converted keys to your ad server +* Render ad with Prebid Universal Creative or custom renderer + +This approach is avaliable for the following ad formats: + +* Display Banner via `BannerAdUnit` +* Video Banner and Instream Video via `VideoAdUnit` +* Display Interstitial via `InterstitialAdUnit` +* Video Interstitial via `VideoInterstitialAdUnit` +* Rewarded Video via `RewardedVideoAdUnit` +* Native Styles via `NativeRequest` + +The basic integration steps for these ad units you can find at the page for integration using [Original API](/prebid-mobile/pbm-api/ios/ios-sdk-integration-gam-original-api.html). The diference is that you should use the `fetchDemand` function with following signature: + +``` swift +dynamic public func fetchDemand( + completion: @escaping(_ result: ResultCode, + _ kvResultDict: [String : String]?) -> Void) +``` + +Examples: + +```swift +func loadBanner() { + + //adUnit is BannerAdUnit type + adUnit.fetchDemand { [weak self] (resultCode: ResultCode, targetingDict: [String : String]?) in + + self?.adServerRequest.customTargeting = targetingDict + self?.adServerBanner.load(self?.adServerRequest) + } +} + +func loadRewardedVideo() { + let adUnit = RewardedVideoAdUnit(configId: "1001-1") + adUnit.fetchDemand { [weak self] (resultCode: ResultCode, targetingDict: [String : String]?) in + + //Publisher should provide support for converting keys into format of 3rd party ad server and loading ads + let keywords = convertDictToAdServerKeywords(dict: targetingDict) + AdServerLoadAds.loadAd(withAdUnitID: "46d2ebb3ccd340b38580b5d3581c6434", keywords: keywords) + } +} +``` + +## Rendering API + +The Rendering API integration and usage are similar to any other Ad SDK. In this case, Prebid SDK sends the bid requests to the Prebid Server and renders the winning bid. + +![In-App Bidding with Prebid](/assets/images/prebid-mobile/modules/rendering/Prebid-In-App-Bidding-Overview-Pure-Prebid.png) + +### Banner API Integration example: @@ -61,7 +116,7 @@ For **Banner Video** you also need to specify the ad format: banner.adFormat = .video ``` -## Interstitial API +### Interstitial API Integration example: @@ -126,7 +181,7 @@ func interstitialDidReceiveAd(_ interstitial: InterstitialRenderingAdUnit) { } ``` -## Rewarded API +### Rewarded API Integration example: diff --git a/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.md b/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.md index 191cd92268..cead15dc04 100755 --- a/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.md +++ b/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.md @@ -994,7 +994,7 @@ If the `AdManagerAdRequest ` contains targeting keywords, the respective Prebid #### Step 4: Implement OnCustomFormatAdLoadedListener protocol {:.no_toc} -In order to capture the native ad response you will need to implement [OnCustomFormatAdLoadedListener](https://radeon-drivers.com/?_=%2Fandroid%2Freference%2Fcom%2Fgoogle%2Fandroid%2Fgms%2Fads%2Fnativead%2FNativeCustomFormatAd.OnCustomFormatAdLoadedListener%23UUlexhFFzSDzTfOQ54KBpjGsLVY524B1MgR06Ro%3D) protocol. +In order to capture the native ad response you will need to implement [OnCustomFormatAdLoadedListener](https://developers.google.com/android/reference/com/google/android/gms/ads/nativead/NativeCustomFormatAd.OnCustomFormatAdLoadedListener) protocol. You should use following Prebid function to determine whether the Prebid line item should be rendered: From a10d636ea60f41eb4ea02afc96a44954f754cd86 Mon Sep 17 00:00:00 2001 From: Jason Quaccia Date: Tue, 18 Apr 2023 11:36:50 -0700 Subject: [PATCH 234/763] enabling the pm analytics mod to be downloadable (#4494) PubMatic Analytics Adapter will be available on Download page. --- dev-docs/analytics/pubmatic.md | 1 - 1 file changed, 1 deletion(-) diff --git a/dev-docs/analytics/pubmatic.md b/dev-docs/analytics/pubmatic.md index 08a7e34889..40d252b8fa 100644 --- a/dev-docs/analytics/pubmatic.md +++ b/dev-docs/analytics/pubmatic.md @@ -5,7 +5,6 @@ description: PubMatic Analytics Adapter modulecode: pubmatic prebid_member: true gvl_id: 76 -enable_download: false --- #### Registration From 0c74b29a52d49de77a4cf05adbbf049121732abd Mon Sep 17 00:00:00 2001 From: Yuriy Velichko Date: Tue, 18 Apr 2023 23:25:18 +0300 Subject: [PATCH 235/763] mobile: updates for sdk configuration flow (#4423) * mobile: updates for sdk configuration flow * doc: do not use test PBS URL in the public doc --- .../android/code-integration-android.md | 40 +++++++++----- .../pbm-api/ios/code-integration-ios.md | 55 +++++++++++++------ 2 files changed, 64 insertions(+), 31 deletions(-) diff --git a/prebid-mobile/pbm-api/android/code-integration-android.md b/prebid-mobile/pbm-api/android/code-integration-android.md index 63c19f7559..8b4842ce24 100644 --- a/prebid-mobile/pbm-api/android/code-integration-android.md +++ b/prebid-mobile/pbm-api/android/code-integration-android.md @@ -63,7 +63,9 @@ If you see errors while building the Prebid Mobile SDK or Demo Applications, mak {% include /alerts/alert_warning.html content=warning_note %} -## Initialize SDK +## Add SDK + +### Set Prebid Server {% capture warning_note %} All integration examples for Android are written in `Kotlin`. @@ -80,28 +82,40 @@ PrebidMobile.setPrebidServerAccountId(YOUR_ACCOUNT_ID) PrebidMobile.setPrebidServerHost(Host.APPNEXUS) ``` -If you have opted to host your own Prebid Server solution you will need to store the url to the server in your app. +If you have opted to host your own Prebid Server solution you will need to store the url to the server in your app. Make sure that your URL points to the [/openrtb2/auction](https://docs.prebid.org/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html) endpoint. + ``` -PrebidMobile.setPrebidServerHost(Host.createCustomHost("https://prebid-server-test-j.prebid.org/openrtb2/auction")) +PrebidMobile.setPrebidServerHost(Host.createCustomHost(PREBID_SERVER_AUCTION_ENDPOINT)) ``` -Once you set the account ID and the Prebid Server host, you should initialize the Prebid SDK. There are several options for how to do it. +### Initialize SDK -Use the following initialization for Prebid SDK: +Once you set the account ID and the Prebid Server host, you should initialize the Prebid SDK. Use the following initialization for Prebid SDK: ```kotlin -PrebidMobile.initializeSdk(applicationContext, object : SdkInitializationListener { - override fun onSdkInit() { - TODO("Not yet implemented") +PrebidMobile.initializeSdk(applicationContext) { status -> + if (status == InitializationStatus.SUCCEEDED) { + Log.d(TAG, "SDK initialized successfully!") + } else if (status == InitializationStatus.SERVER_STATUS_WARNING) { + Log.e(TAG, "Prebid Server status checking failed: $status\n${status.description}") } - - override fun onSdkFailedToInit(error: InitError?) { - TODO("Not yet implemented") + else { + Log.e(TAG, "SDK initialization error: $status\n${status.description}") } -}) +} ``` +During the initialization, SDK creates internal classes and performs the health check request to the [/status](https://docs.prebid.org/prebid-server/endpoints/pbs-endpoint-status.html) endpoint. If you use a custom PBS host you should provide a custom status endpoint as well: + +``` +PrebidMobile.setCustomStatusEndpoint(PREBID_SERVER_STATUS_ENDPOINT) +``` + +If something goes wrong with the request, the status of the initialization callback will be `SERVER_STATUS_WARNING`. It doesn't affect an SDK flow and just informs you about the health check result. + +### Check compatibility with your GMA SDK + If you integrate Prebid Mobile with GMA SDK, use the following method, which checks the compatibility of Prebid SDK with GMA SDK used in the app: ```kotlin @@ -182,7 +196,7 @@ Apply global settings with the `PrebidMobile` object. String containing the Prebid Server account ID. ```kotlin -PrebidMobile.setPrebidServerAccountId("123321") +PrebidMobile.setPrebidServerAccountId(YOUR_ACCOUNT_ID) var pbsAccountId = PrebidMobile.getPrebidServerAccountId() ``` diff --git a/prebid-mobile/pbm-api/ios/code-integration-ios.md b/prebid-mobile/pbm-api/ios/code-integration-ios.md index a5114a5933..bc62c341e4 100644 --- a/prebid-mobile/pbm-api/ios/code-integration-ios.md +++ b/prebid-mobile/pbm-api/ios/code-integration-ios.md @@ -88,49 +88,68 @@ scripts/buildPrebidMobile.sh This will output the PrebidMobile.framework. -## Initialize SDK +## Add SDK + +### Set Prebid Server Once you have a [Prebid Server](/prebid-mobile/prebid-mobile-getting-started.html), you will add 'account' info to the Prebid Mobile. For example, if you're using the AppNexus Prebid Server: ``` -Prebid.shared.prebidServerAccountId = "YOUR_ACCOUNT_ID" +Prebid.shared.prebidServerAccountId = YOUR_ACCOUNT_ID Prebid.shared.prebidServerHost = .Appnexus ``` -If you have opted to host your own Prebid Server solution, you will need to store the URL to the server in your app. +If you have opted to host your own Prebid Server solution, you will need to store the URL to the server in your app. Make sure that your URL points to the [/openrtb2/auction](https://docs.prebid.org/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html) endpoint. ``` -try! Prebid.shared.setCustomPrebidServer(url: "https://prebid-server-test-j.prebid.org/openrtb2/auction") +try! Prebid.shared.setCustomPrebidServer(url: PREBID_SERVER_AUCTION_ENDPOINT) ``` This method throws an exception if the provided URL is invalid. +### Initialize SDK + Once you set the account ID and the Prebid Server host, you should initialize the Prebid SDK. There are several options for how to do it. -For the No Ad Server scenario, use the following initialization: +If you integrate Prebid Mobile with GMA SDK, use the following initializer, which checks the compatibility of Prebid SDK with GMA SDK used in the app: +``` swift +Prebid.initializeSDK(GADMobileAds.sharedInstance()) { status, error in + switch status { + case .succeeded: + print("Prebid SDK successfully initialized") + case .failed: + if let error = error { + print("An error occurred during Prebid SDK initialization: \(error.localizedDescription)") + } + case .serverStatusWarning: + if let error = error { + print("Prebid Server status checking failed: \(error.localizedDescription)") + } + default: + break + } +} ``` + +Check the log messages of the app. If the provided GMA SDK version is not verified for compatibility, the Prebid SDK informs about it. + +For the No Ad Server scenario, use the following initialization: + +``` swift Prebid.initializeSDK { status, error in - if let error = error { - print("Initialization Error: \(error.localizedDescription)") - return - } + // .... } ``` -If you integrate Prebid Mobile with GMA SDK, use the following initializer, which checks the compatibility of Prebid SDK with GMA SDK used in the app: - +During the initialization, SDK creates internal classes and performs the health check request to the [/status](https://docs.prebid.org/prebid-server/endpoints/pbs-endpoint-status.html) endpoint. If you use a custom PBS host you should provide a custom status endpoint as well: ``` -Prebid.initializeSDK(GADMobileAds.sharedInstance()) { status, error in - if let error = error { - print("Initialization Error: \(error.localizedDescription)") - return - } -} +Prebid.shared.customStatusEndpoint = PREBID_SERVER_STATUS_ENDPOINT ``` -Check the log messages of the app. If the provided GMA SDK version is not verified for compatibility, the Prebid SDK informs about it. +If something goes wrong with the request, the status of the initialization callback will be `.serverStatusWarning`. It doesn't affect an SDK flow and just informs you about the health check result. + ## Set Targeting Parameters From 2774b4e184588d73cbba01248f54161e7e4cf9da Mon Sep 17 00:00:00 2001 From: bretg Date: Wed, 19 Apr 2023 10:58:28 -0400 Subject: [PATCH 236/763] trustx: update PBS support (#4499) removing the PBS flag from the 'standalone' docs file, which was intended for PBJS only --- dev-docs/bidders/trustxstandalone.md | 1 - 1 file changed, 1 deletion(-) diff --git a/dev-docs/bidders/trustxstandalone.md b/dev-docs/bidders/trustxstandalone.md index 951977146f..45c8797b58 100644 --- a/dev-docs/bidders/trustxstandalone.md +++ b/dev-docs/bidders/trustxstandalone.md @@ -3,7 +3,6 @@ layout: bidder title: TrustX (standalone) description: Prebid TrustX Bidder Adaptor pbjs: true -pbs: true biddercode: trustx media_types: banner, video multiformat_supported: will-bid-on-any From 3f535608bce1dde3e3a6ba3ce7b97c86e935580c Mon Sep 17 00:00:00 2001 From: rimaburder-index <55195208+rimaburder-index@users.noreply.github.com> Date: Wed, 19 Apr 2023 11:15:43 -0400 Subject: [PATCH 237/763] Updated Index's PBS docs (#4492) Updated bid request limit note --- dev-docs/bidders/ix-server.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/ix-server.md b/dev-docs/bidders/ix-server.md index ea75fe7120..dbcd1baaa5 100644 --- a/dev-docs/bidders/ix-server.md +++ b/dev-docs/bidders/ix-server.md @@ -51,7 +51,7 @@ Publishers can use Prebid Server in any of the following ways with Index Exchang * In CTV apps and other long-form video environments, you (or the SSAI vendor) can make a call to Prebid Server using OpenRTB, and then Prebid Server uses our server-side adapter to call Index. For set up instructions, see [Call Index from CTV/long-form video environment](#set-up-instructions-to-call-index-through-prebid-server) section on this page. * In any other server-to-server OpenRTB environment, you can send OpenRTB bid requests to the Prebid Server host of your choice. For set up instructions, see [Call Index from any other server-to-server OpenRTB environment](#call-index-from-ortb) section on this page. -**Note about the bid request limit:** You can send up to 20 ad slots in a single bid request to Index. If a single bid request contains more than 20 ad slots, only the first 20 are accepted and the rest are ignored. +**Note about sending multiple ad slots in a single bid request:** Index accepts up to 100 valid ad slots in a single bid request. If a single bid request contains more than 100 ad slots (including invalid ad slots), only the first 100 valid ad slots are accepted and the rest are ignored. For example streaming TV media owners can signal multiple ad pods for long-form programming in a single request. From 7c321526ecd174051795cf5b2324c7924f99853d Mon Sep 17 00:00:00 2001 From: rimaburder-index <55195208+rimaburder-index@users.noreply.github.com> Date: Wed, 19 Apr 2023 11:16:57 -0400 Subject: [PATCH 238/763] updated Index's Prebid.js docs (#4491) Updated bid request limit, added AdUnit-specific data to the FPD module and rearranged the section. --- dev-docs/bidders/ix.md | 61 +++++++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 24 deletions(-) diff --git a/dev-docs/bidders/ix.md b/dev-docs/bidders/ix.md index 72997706e0..77ba5ff169 100644 --- a/dev-docs/bidders/ix.md +++ b/dev-docs/bidders/ix.md @@ -32,8 +32,9 @@ sidebarType: 1 - [Set up Prebid.js to call Index through Prebid Server (server-side adapter)](#set-up-prebidjs-to-call-index-through-prebid-server-server-side-adapter) - [Modules to include in your build process](#modules-to-include-in-your-build-process) - [Set up First Party Data (FPD)](#set-up-first-party-data-fpd) - - [Index bidder-specific FPD module](#index-bidder-specific-fpd-module) - - [Prebid FPD module](#prebid-fpd-module) + - [Global data](#prebid-fpd-module) + - [Index bidder-specific data](#index-bidder-specific-fpd-module) + - [AdUnit-specific data](#adunit-specific-data) - [Index's outstream video player](#indexs-outstream-video-player) - [Prebid Native configuration](#prebid-native-configuration) - [Bid request parameters](#bid-request-parameters) @@ -54,13 +55,13 @@ Publishers can use Prebid.js to call Index Exchange (Index) in any of the follow * **Call through our server-side adapter**: Prebid.js makes a call to Prebid Server and then Prebid Server uses our server-side adapter to call Index. This reduces workload on the browser. For configuration instructions, see the [Set up Prebid.js to call Index through Prebid Server (server-side adapter)](#server-side-adapter) on this page. **Notes:** -* **Bid request limit**: You can send up to 20 ad slots in a single bid request to Index. If a single bid request contains more than 20 ad slots, only the first 20 are accepted and the rest are ignored. +* **Send multiple ad slots in a single bid request**: Index accepts up to 100 valid ad slots in a single bid request. If a single bid request contains more than 100 ad slots (including invalid ad slots), only the first 100 valid ad slots are accepted and the rest are ignored. For example streaming TV media owners can signal multiple ad pods for long-form programming in a single request. * **How to view bid requests sent to Index:** * In your browser, open a new tab. * Open the **Developer tools**. * In **Developer tools**, click the **Network** tab. * In the **Network** tab, search for requests sent to `casalemedia.com/cygnus` (from version 6.28.0 and earlier) or `casalemedia.com/openrtb/pbjs` (from version 6.29.0 and later). These are the bid requests sent to Index. -* **Recommended Global Bidder settings:** For our adapter, Index recommends enabling local storage. As of Prebid.js 7.x, local storage access must be explicitly specified. By leveraging local storage, Index is able to take advantage of the latest features our exchange has to offer. For instructions on enabling local storage, see Prebid’s [pbjs.bidderSettings](https://docs.prebid.org/dev-docs/publisher-api-reference/bidderSettings.html) documentation. +* **Recommended Global Bidder settings:** For our adapter, Index recommends enabling local storage. As of Prebid.js 7.x, local storage access must be explicitly specified. By leveraging local storage, Index is able to take advantage of the latest features our exchange has to offer. For instructions on enabling local storage, see Prebid’s [pbjs.bidderSettings](https://docs.prebid.org/dev-docs/publisher-api-reference/bidderSettings.html) documentation.
Example: ```javascript pbjs.bidderSettings = { @@ -198,18 +199,34 @@ If you are using a JSON file to specify modules, add `ixBidAdapter` and `dfpAdSe ## Set up First Party Data (FPD) -You can set up FPD using the Index bidder-specific module (recommended) or the Prebid FPD module. +You can set up the Prebid.js FPD module using Global data, Index bidder-specific site data, or ad unit-specific data. Index supports deal targeting in all the three FPD types. -**Notes:** +
+ +### Global data -* Index does not support ad unit-specific FPD and `ortb2.imp`. -* To target deals with Index, you must use the Index bidder-specific FPD module. The Prebid FPD module does not support deals targeting. If you have any questions or need help setting up the configuration, contact your Index Representative. +Use this data type to allow all bid adapters to have access to first party data that might be useful in ad targeting. This is available from Prebid.js version 4.30 and above. + +To supply data that is accessible to all bidders, use the `[pbjs.setConfig()]` object as illustrated below. Use the `[setBidderConfig()]` function to supply bidder-specific data. For more information about the standard or more detailed examples, see Prebid's [First Party Data Feature](https://docs.prebid.org/features/firstPartyData.html) documentation. + +```javascript +pbjs.setConfig({ + ortb2: { + site: { + ... + }, + user: { + ... + } + } +}); +``` -### Index bidder-specific FPD module +### Index bidder-specific data -This module allows you to specify key-value pairs that will be included in your query string when targeting deals. For example, if a user visits a news page, you can pass that information by submitting a key-value pair for `category = news`. You can then create a deal in the Index UI and activate the deal only on pages that contain `category = news` as the key-value pair. +Use this data type to specify key-value pairs that will be included in your query string when targeting deals. For example, if a user visits a news page, you can pass that information by submitting a key-value pair for `category = news`. You can then create a deal in the Index UI and activate the deal only on pages that contain `category = news` as the key-value pair. To include the FPD in a bid request, in the `[pbjs.setConfig()]` object at the `ix` bidder level, provide the key-values in the `firstPartyData` parameter. Make sure that you set it before the `pbjs.requestBids` configuration. If you want to change the values, you can update the `pbjs.setConfig` once again. The change will be reflected in all future bid requests. @@ -224,26 +241,22 @@ To include the FPD in a bid request, in the `[pbjs.setConfig()]` object at the ` } }); ``` + +### AdUnit-specific data - - -### Prebid FPD module +Use this data type to specify key-value pairs at the ad unit level when targeting deals and apply it to all bidders. This is available from Prebid.js version 7.45 and above. To include the adUnit-specific data in a bid request, see Prebid's [Supplying AdUnit-Specific Data](https://docs.prebid.org/features/firstPartyData.html#supplying-adunit-specific-data) documentation. -This module allows all bid adapters to have access to first party data that might be useful in ad targeting. This is available from Prebid.js version 4.30 and above. -To supply data that is accessible to all bidders, use the `[pbjs.setConfig()]` object as illustrated below. Use the `[setBidderConfig()]` function to supply bidder-specific data. For more information about the standard or more detailed examples, see Prebid's [First Party Data Feature](https://docs.prebid.org/features/firstPartyData.html) documentation. ```javascript -pbjs.setConfig({ - ortb2: { - site: { - ... - }, - user: { - ... +ortb2Imp: { + ext: { + data: { + pbadslot: "homepage-top-rect", + adUnitSpecificAttribute: "123" } - } -}); + } + } ``` From c3feb1513f70e7957a3d380426a2adfb6cc6ed8a Mon Sep 17 00:00:00 2001 From: bretg Date: Wed, 19 Apr 2023 13:56:01 -0400 Subject: [PATCH 239/763] re-adding cleanmedianet (#4500) * re-adding cleanmedianet Per issue https://github.com/prebid/prebid.github.io/issues/4448 * Update cleanmedianet.md * Update cleanmedianet.md --- dev-docs/bidders/cleanmedianet.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 dev-docs/bidders/cleanmedianet.md diff --git a/dev-docs/bidders/cleanmedianet.md b/dev-docs/bidders/cleanmedianet.md new file mode 100644 index 0000000000..5b1d420dce --- /dev/null +++ b/dev-docs/bidders/cleanmedianet.md @@ -0,0 +1,29 @@ +--- +layout: bidder +title: Clean Media Net +description: Clean Media Bidder Adapter +biddercode: cleanmedianet +pbjs: true +media_types: banner, video +gdpr_supported: false +usp_supported: true +coppa_supported: false +schain_supported: true +floors_supported: true +userIds: +prebid_member: false +safeframes_ok: true +deals_supported: false +pbs_app_supported: false +fpd_supported: false +ortb_blocking_supported: false +gvl_id: +multiformat_supported: will-bid-on-any +--- + +### Bid params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------------------+----------+--------------------------------------------------------+-------------------------+---------| +| `supplyPartnerId` | required | The supply account's ID in your Clean Media dashboard. | `"1253"`, `"1254"`, etc | string | From 8cbf858dd8632327be3b102352a86f074340153f Mon Sep 17 00:00:00 2001 From: Muki Seiler Date: Thu, 20 Apr 2023 10:01:27 +0200 Subject: [PATCH 240/763] Support consent mode for google analytics (#4441) * Support consent mode for google analytics * Use onetrustloaded global promise * Working consent for GA --- _includes/footer.html | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/_includes/footer.html b/_includes/footer.html index c734d23e0a..da9a3fb82a 100644 --- a/_includes/footer.html +++ b/_includes/footer.html @@ -9,21 +9,33 @@
+ From fffa44d5b909313c6fb45ec25c83e19a89492a8b Mon Sep 17 00:00:00 2001 From: Muki Seiler Date: Thu, 20 Apr 2023 10:20:30 +0200 Subject: [PATCH 241/763] Revert "Support consent mode for google analytics (#4441)" (#4502) This reverts commit 8cbf858dd8632327be3b102352a86f074340153f. --- _includes/footer.html | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/_includes/footer.html b/_includes/footer.html index da9a3fb82a..c734d23e0a 100644 --- a/_includes/footer.html +++ b/_includes/footer.html @@ -9,33 +9,21 @@ - From 9b5d29cae0b2e6d28e28ff29f9d69a5d534bf285 Mon Sep 17 00:00:00 2001 From: Muki Seiler Date: Thu, 20 Apr 2023 13:15:58 +0200 Subject: [PATCH 242/763] Respect consent for google analytics (#4503) * Support consent mode for google analytics * Use onetrustloaded global promise * Working consent for GA * Disable TCF2 support for gtag --- _includes/footer.html | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/_includes/footer.html b/_includes/footer.html index c734d23e0a..79da5595f1 100644 --- a/_includes/footer.html +++ b/_includes/footer.html @@ -9,21 +9,34 @@ + From d7910a667af6546319b99065b792f26dab2677f7 Mon Sep 17 00:00:00 2001 From: Scott Kay Date: Fri, 21 Apr 2023 13:12:22 -0400 Subject: [PATCH 243/763] PBS-Go Feature Updates (#4507) --- dev-docs/modules/multibid.md | 2 +- prebid-server/developers/add-new-bidder-go.md | 2 +- prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md | 6 ------ prebid-server/features/pbs-feature-idx.md | 8 ++++---- 4 files changed, 6 insertions(+), 12 deletions(-) diff --git a/dev-docs/modules/multibid.md b/dev-docs/modules/multibid.md index e9ae46f0cc..36b3b9cdfb 100644 --- a/dev-docs/modules/multibid.md +++ b/dev-docs/modules/multibid.md @@ -104,4 +104,4 @@ array returned from the `interpretResponse` function. ## Related Topics -- [MultiBid in the Prebid Server /openrtb2/auction endpoint](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#multibid-pbs-java-only) +- [MultiBid in the Prebid Server /openrtb2/auction endpoint](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#multibid) diff --git a/prebid-server/developers/add-new-bidder-go.md b/prebid-server/developers/add-new-bidder-go.md index b06bb3c8b2..f52a14e8b0 100644 --- a/prebid-server/developers/add-new-bidder-go.md +++ b/prebid-server/developers/add-new-bidder-go.md @@ -494,7 +494,7 @@ import ( "fmt" "net/http" - "github.com/prebid/openrtb/v17/openrtb2" + "github.com/prebid/openrtb/v19/openrtb2" "github.com/prebid/prebid-server/adapters" "github.com/prebid/prebid-server/config" "github.com/prebid/prebid-server/errortypes" diff --git a/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md b/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md index a886e3624f..412e9ebc30 100644 --- a/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md +++ b/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md @@ -1140,9 +1140,6 @@ Each adapter must be coded to read the values from the ortb and pass it to their ##### Custom Targeting -{: .alert.alert-info :} -PBS-Java only - An OpenRTB extension, whether in the the original request or the [stored-request](/prebid-server/features/pbs-storedreqs.html), can customize the ad server targeting generated by PBS. The OpenRTB field is `ext.prebid.adservertargeting`. Here's an example: @@ -1203,9 +1200,6 @@ In order to pull AMP parameters out into targeting, Prebid Server places AMP que ##### MultiBid -{: .alert.alert-info :} -PBS-Java only - Allows a single bidder to bid more than once into an auction and have extra bids passed back to the client. diff --git a/prebid-server/features/pbs-feature-idx.md b/prebid-server/features/pbs-feature-idx.md index a202b3ddd1..e7b35b38a9 100644 --- a/prebid-server/features/pbs-feature-idx.md +++ b/prebid-server/features/pbs-feature-idx.md @@ -18,7 +18,7 @@ title: Prebid Server | Features | [AMP](/prebid-server/use-cases/pbs-amp.html) | Core | Reads and responds to the /openrtb2/amp endpoint | | | | Targeting | Core | Request can specify `includewinners` and `includebidderkeys`. These cause PBS to emit seatbid[].bid[].ext.prebid.targeting values. | | | | Targeting | Format | Request can specify `includeformat`, which causes PBS to emit hb_format along with other targeting values like hb_pb, etc. | | | -| Targeting | [Custom Targeting](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#custom-targeting) | Request can specify `ext.prebid.adservertargeting`, which causes PBS to emit custom targeting values. | | | +| Targeting | [Custom Targeting](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#custom-targeting) | Request can specify `ext.prebid.adservertargeting`, which causes PBS to emit custom targeting values. | | | | Request Params | Global Params | Publishers can specify [adapter-specific cross-impression attributes](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#global-bid-adapter-parameters). | | | | [Price Granularity](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#targeting) | Core | Request can define quantization rules. Bids are quantized before being added to ad server targeting. | | | | Price Granularity | Mediatype pricegranularity | Request can define different quantization rules for different mediatypes. Bids are quantized before being added to ad server targeting. | | | @@ -30,11 +30,11 @@ title: Prebid Server | Features | GDPR | Support for basicEnforcementVendors | Host companies can define bidders that don't require vendor consent but do require Purpose consent. | | | | GDPR | TCF 2 Geo-Fencing | If the incoming request contains device.geo.country, PBS will enforce the EEA if the request is flagged as being in GDPR scope. | | | | GDPR | TCF 2 Geo-Lookup | Can use a geographic lookup service to help determine whether the incoming request is in-scope for GDPR. | | | -| GDPR | TCF 2 channel exception | Can be configured to turn off GDPR checks for a specific account and a specific channel. e.g. Account 123 has a different legal basis for AMP. | | | +| GDPR | TCF 2 channel exception | Can be configured to turn off GDPR checks for a specific account and a specific channel. e.g. Account 123 has a different legal basis for AMP. | | | | [US Privacy](/prebid-server/features/pbs-privacy.html#ccpa--us-privacy) | USP core | Able to: read the US Privacy consent string (CCPA) and [take appropriate enforcement action](https://github.com/prebid/prebid-server/issues/1129). | | | | US Privacy | USP AMP support | Able to: read the US Privacy consent string from AMP requests and [take appropriate enforcement action](https://github.com/prebid/prebid-server/issues/1176). | | | | [GPP](/prebid-server/features/pbs-privacy.html#gpp) | GPP Passthrough | Global Privacy Platform parameters are passed through auction and usersync requests. | | | -| [GPP](/prebid-server/features/pbs-privacy.html#gpp) | GPP TCF2/USP Support | PBS reads the Global Privacy Platform string and pulls out TCF2/USP strings when appropriate. | | | +| [GPP](/prebid-server/features/pbs-privacy.html#gpp) | GPP TCF2/USP Support | PBS reads the Global Privacy Platform string and pulls out TCF2/USP strings when appropriate. | | | | COPPA | Core | Able to read the COPPA flag and [take appropriate enforcement action](https://github.com/prebid/prebid-server/issues/929). | | | | Global Privacy Control | Core | Passes the Sec-GPC header through to bidders. | | | | [Cache](/prebid-server/features/pbs-caching.html) | Bids core | Accepts the ext.prebid.cache.bids parameter, storing bid objects in PBC. | | | @@ -74,7 +74,7 @@ title: Prebid Server | Features | [Events](https://docs.google.com/document/d/1ry0X4C2EV-R0pMrm1IQk9BstxaT395UCl3KKqTGa5c8/edit#heading=h.7w5yevygp2gz) | Events | Ability to process the /event endpoint, place /event URLs in the OpenRTB response, and place /event URLs in VAST XML. | | | | Events | Events vasttrack endpoint | Ability to process the /vasttrack endpoint initated by Prebid.js, placing /event URLs in VAST XML. | | | | Events | Events BidID Generation | Some bidders don't generate unique enough BidIDs to join with auction events. This feature allows the host company to inject a PBS-generated BidID alongside the bidder-generated ID. | | | -| Auction | [MultiBid](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#multibid) | Allow named bidders to supply more than one response. | | | +| Auction | [MultiBid](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#multibid) | Allow named bidders to supply more than one response. | | | | Analytics | Analytics module support | Allows developers to plug in a [custom analytics adapter](/prebid-server/developers/pbs-build-an-analytics-adapter.html). | | | | Bid Response Validation | Validate secure markup | PBS can configurably reject bid responses that don't supply a secure creative when in a secure context. | | | | Bid Response Validation | Validate bid sizes | PBS can configurably reject bid responses with sizes that are bigger than the request dimensions. | | | From fbf381e8a347937161d807afb17a637a47e098f6 Mon Sep 17 00:00:00 2001 From: Scott Kay Date: Fri, 21 Apr 2023 13:13:08 -0400 Subject: [PATCH 244/763] Add PBS OpenRTB 2.6-202303 Fields (#4508) --- prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md b/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md index 412e9ebc30..a6904a8040 100644 --- a/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md +++ b/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md @@ -150,6 +150,8 @@ Prebid Server accepts all OpenRTB 2.x fields and passes them in the request to a | dooh | 2.6-202211 | not yet supported by PBS | | imp.qty | 2.6-202211 | (PBS-Go only so far) Bidders supporting 2.5 only: this field is removed | | imp.dt | 2.6-202211 | (PBS-Go only so far) Bidders supporting 2.5 only: this field is removed | +| imp.refresh | 2.6-202303 | (PBS-Go only so far) Bidders supporting 2.5 only: this field is removed | +| imp.video.plcmt | 2.6-202303 | (PBS-Go only so far) Bidders supporting 2.5 only: this field is removed | #### IDs From ef8919d2c2fca5d6289b183cd5a931f11521fd3d Mon Sep 17 00:00:00 2001 From: rimaburder-index <55195208+rimaburder-index@users.noreply.github.com> Date: Fri, 21 Apr 2023 13:16:18 -0400 Subject: [PATCH 245/763] Updated the version number for ad-unit FPD (#4509) Updated the version number for ad-unit FPD --- dev-docs/bidders/ix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/ix.md b/dev-docs/bidders/ix.md index 77ba5ff169..20679f046a 100644 --- a/dev-docs/bidders/ix.md +++ b/dev-docs/bidders/ix.md @@ -245,7 +245,7 @@ To include the FPD in a bid request, in the `[pbjs.setConfig()]` object at the ` ### AdUnit-specific data -Use this data type to specify key-value pairs at the ad unit level when targeting deals and apply it to all bidders. This is available from Prebid.js version 7.45 and above. To include the adUnit-specific data in a bid request, see Prebid's [Supplying AdUnit-Specific Data](https://docs.prebid.org/features/firstPartyData.html#supplying-adunit-specific-data) documentation. +Use this data type to specify key-value pairs at the ad unit level when targeting deals and apply it to all bidders. This will be available from Prebid.js version 7.46 and above. To include the adUnit-specific data in a bid request, see Prebid's [Supplying AdUnit-Specific Data](https://docs.prebid.org/features/firstPartyData.html#supplying-adunit-specific-data) documentation. ```javascript From 0d500846ef9b9ddf807123b527349624382742c5 Mon Sep 17 00:00:00 2001 From: Demetrio Girardi Date: Fri, 21 Apr 2023 10:18:54 -0700 Subject: [PATCH 246/763] Remove duplicate listing of the `video.placement` option (#4488) --- dev-docs/adunit-reference.md | 1 - 1 file changed, 1 deletion(-) diff --git a/dev-docs/adunit-reference.md b/dev-docs/adunit-reference.md index 0aeba72d89..93751c6562 100644 --- a/dev-docs/adunit-reference.md +++ b/dev-docs/adunit-reference.md @@ -113,7 +113,6 @@ See [Prebid Native Implementation](/prebid/native-implementation.html) for detai | `w` | Recommended | Integer | Width of the video player in device independent pixels (DIPS)., see [OpenRTB 2.5 spec][openRTB]. | | `h` | Recommended | Integer | Height of the video player in device independent pixels (DIPS)., see [OpenRTB 2.5 spec][openRTB]. | | `startdelay` | Recommended | Integer | Indicates the start delay in seconds, see [OpenRTB 2.5 spec][openRTB]. | -| `placement` | Optional | Integer | Placement type for the impression, see [OpenRTB 2.5 spec][openRTB]. | | `linearity` | Optional | Integer | Indicates if the impression must be linear, nonlinear, etc, see [OpenRTB 2.5 spec][openRTB]. | | `skip` | Optional | Integer | Indicates if the player will allow the video to be skipped, where 0 = no, 1 = yes., see [OpenRTB 2.5 spec][openRTB]. | | `skipmin` | Optional | Integer | Videos of total duration greater than this number of seconds can be skippable; only applicable if the ad is skippable., see [OpenRTB 2.5 spec][openRTB]. | From 7d9e458f8206091c515f891eaf23eba4ac6a4c36 Mon Sep 17 00:00:00 2001 From: Valentin Petrovych <72038591+ValentinPostindustria@users.noreply.github.com> Date: Thu, 27 Apr 2023 18:12:16 +0300 Subject: [PATCH 247/763] Mobile SDK multiformat feature (#4476) * Update iOS documentation. * iOS documentation corrections. * Update Android documentation. * Android corrections. * iOS corrections. * Android ad unit formats renaming. * iOS AdFormat case renaming * doc: corrections for iOS * doc: corrections for Android --------- Co-authored-by: Olena Stepaniuk Co-authored-by: Yuriy Velichko --- .../android-sdk-customization-controls.md | 2 +- .../android-sdk-integration-admob.md | 4 +- .../rendering/android-sdk-integration-gam.md | 2 +- .../rendering/android-sdk-integration-max.md | 4 +- .../rendering/android-sdk-integration-pb.md | 2 +- .../rendering/ios-sdk-integration-admob.md | 10 +- .../rendering/ios-sdk-integration-gam.md | 8 +- .../rendering/ios-sdk-integration-max.md | 10 +- .../rendering/ios-sdk-integration-pb.md | 14 +- ...ndroid-sdk-integration-gam-original-api.md | 194 +++++++-- .../ios-sdk-integration-gam-original-api.md | 367 ++++++++++++++---- 11 files changed, 472 insertions(+), 145 deletions(-) diff --git a/prebid-mobile/modules/rendering/android-sdk-customization-controls.md b/prebid-mobile/modules/rendering/android-sdk-customization-controls.md index e058866350..14051a9750 100644 --- a/prebid-mobile/modules/rendering/android-sdk-customization-controls.md +++ b/prebid-mobile/modules/rendering/android-sdk-customization-controls.md @@ -166,7 +166,7 @@ The code sample: adUnit = MediationInterstitialAdUnit( activity, configId, - EnumSet.of(AdUnitFormat.DISPLAY), + EnumSet.of(AdUnitFormat.BANNER), mediationUtils ) diff --git a/prebid-mobile/modules/rendering/android-sdk-integration-admob.md b/prebid-mobile/modules/rendering/android-sdk-integration-admob.md index 80d905459e..9fd9b965b7 100644 --- a/prebid-mobile/modules/rendering/android-sdk-integration-admob.md +++ b/prebid-mobile/modules/rendering/android-sdk-integration-admob.md @@ -138,7 +138,7 @@ val mediationUtils = AdMobInterstitialMediationUtils(extras) adUnit = MediationInterstitialAdUnit( activity, configId, - AdUnitFormat.DISPLAY, + AdUnitFormat.BANNER, mediationUtils ) @@ -183,7 +183,7 @@ The **default** ad format for interstitial is **DISPLAY**. In order to make a `m adUnit = MediationInterstitialAdUnit( activity, configId, - EnumSet.of(AdUnitFormat.DISPLAY, AdUnitFormat.VIDEO), + EnumSet.of(AdUnitFormat.BANNER, AdUnitFormat.VIDEO), mediationUtils ) ``` diff --git a/prebid-mobile/modules/rendering/android-sdk-integration-gam.md b/prebid-mobile/modules/rendering/android-sdk-integration-gam.md index 305f135fed..22ecbebaec 100644 --- a/prebid-mobile/modules/rendering/android-sdk-integration-gam.md +++ b/prebid-mobile/modules/rendering/android-sdk-integration-gam.md @@ -159,7 +159,7 @@ The **default** ad format for an interstitial ad is **DISPLAY**. In order to mak interstitialAdUnit = InterstitialAdUnit( requireContext(), configId, - EnumSet.of(AdUnitFormat.DISPLAY, AdUnitFormat.VIDEO), + EnumSet.of(AdUnitFormat.BANNER, AdUnitFormat.VIDEO), eventHandler) ``` diff --git a/prebid-mobile/modules/rendering/android-sdk-integration-max.md b/prebid-mobile/modules/rendering/android-sdk-integration-max.md index dbda51a507..31b9dc84f6 100644 --- a/prebid-mobile/modules/rendering/android-sdk-integration-max.md +++ b/prebid-mobile/modules/rendering/android-sdk-integration-max.md @@ -121,7 +121,7 @@ val mediationUtils = MaxMediationInterstitialUtils(maxInterstitialAd) adUnit = MediationInterstitialAdUnit( activity, configId, - EnumSet.of(AdUnitFormat.DISPLAY), + EnumSet.of(AdUnitFormat.BANNER), mediationUtils ) @@ -140,7 +140,7 @@ The **default** ad format for interstitial is **DISPLAY**. In order to make a `m adUnit = MediationInterstitialAdUnit( activity, configId, - EnumSet.of(AdUnitFormat.DISPLAY, AdUnitFormat.VIDEO), + EnumSet.of(AdUnitFormat.BANNER, AdUnitFormat.VIDEO), mediationUtils ) ``` diff --git a/prebid-mobile/modules/rendering/android-sdk-integration-pb.md b/prebid-mobile/modules/rendering/android-sdk-integration-pb.md index 64f053f525..f1b26481e5 100644 --- a/prebid-mobile/modules/rendering/android-sdk-integration-pb.md +++ b/prebid-mobile/modules/rendering/android-sdk-integration-pb.md @@ -138,7 +138,7 @@ The **default** ad format for interstitial is **DISPLAY**. In order to make a `m interstitialAdUnit = InterstitialAdUnit( requireContext(), configId, - EnumSet.of(AdUnitFormat.DISPLAY, AdUnitFormat.VIDEO)) + EnumSet.of(AdUnitFormat.BANNER, AdUnitFormat.VIDEO)) ``` #### Step 1: Create an Ad Unit diff --git a/prebid-mobile/modules/rendering/ios-sdk-integration-admob.md b/prebid-mobile/modules/rendering/ios-sdk-integration-admob.md index 489858d325..0a5d57a784 100644 --- a/prebid-mobile/modules/rendering/ios-sdk-integration-admob.md +++ b/prebid-mobile/modules/rendering/ios-sdk-integration-admob.md @@ -137,17 +137,17 @@ GADInterstitialAd.load(withAdUnitID: adUnitID, request: self?.gadRequest) { [wea }) ``` -The **default** ad format for interstitial is **.display**. In order to make a `multiformat bid request`, set the respective values into the `adFormats` property. +The **default** ad format for interstitial is **.banner**. In order to make a `multiformat bid request`, set the respective values into the `adFormats` property. ``` swift // Make bid request for video ad adUnit?.adFormats = [.video] -// Make bid request for both video amd disply ads -adUnit?.adFormats = [.video, .display] +// Make bid request for both video amd banner ads +adUnit?.adFormats = [.video, .banner] -// Make bid request for disply ad (default behaviour) -adUnit?.adFormats = [.display] +// Make bid request for banner ad (default behaviour) +adUnit?.adFormats = [.banner] ``` diff --git a/prebid-mobile/modules/rendering/ios-sdk-integration-gam.md b/prebid-mobile/modules/rendering/ios-sdk-integration-gam.md index 858db8e2fa..cfe92bb361 100644 --- a/prebid-mobile/modules/rendering/ios-sdk-integration-gam.md +++ b/prebid-mobile/modules/rendering/ios-sdk-integration-gam.md @@ -152,17 +152,17 @@ if interstitial.isReady { ``` -The **default** ad format for interstitial is **.display**. In order to make a `multiformat bid request`, set the respective values in the `adFormats` property. +The **default** ad format for interstitial is **.banner**. In order to make a `multiformat bid request`, set the respective values in the `adFormats` property. ``` swift // Make bid request for video ad adUnit?.adFormats = [.video] // Make bid request for both video amd disply ads -adUnit?.adFormats = [.video, .display] +adUnit?.adFormats = [.video, .banner] -// Make bid request for disply ad (default behaviour) -adUnit?.adFormats = [.display] +// Make bid request for banner ad (default behaviour) +adUnit?.adFormats = [.banner] ``` diff --git a/prebid-mobile/modules/rendering/ios-sdk-integration-max.md b/prebid-mobile/modules/rendering/ios-sdk-integration-max.md index 965ed0d59a..fc59a138ca 100644 --- a/prebid-mobile/modules/rendering/ios-sdk-integration-max.md +++ b/prebid-mobile/modules/rendering/ios-sdk-integration-max.md @@ -117,17 +117,17 @@ adUnit?.fetchDemand { [weak self] result in }) ``` -The **default** ad format for interstitial is **.display**. In order to make a `multiformat bid request` set the respective values in the `adFormats` property. +The **default** ad format for interstitial is **.banner**. In order to make a `multiformat bid request` set the respective values in the `adFormats` property. ``` swift // Make bid request for video ad adUnit?.adFormats = [.video] -// Make bid request for both video amd disply ads -adUnit?.adFormats = [.video, .display] +// Make bid request for both video amd banner ads +adUnit?.adFormats = [.video, .banner] -// Make bid request for disply ad (default behaviour) -adUnit?.adFormats = [.display] +// Make bid request for banner ad (default behaviour) +adUnit?.adFormats = [.banner] ``` diff --git a/prebid-mobile/modules/rendering/ios-sdk-integration-pb.md b/prebid-mobile/modules/rendering/ios-sdk-integration-pb.md index cafc31fe26..0bdb2beb4d 100644 --- a/prebid-mobile/modules/rendering/ios-sdk-integration-pb.md +++ b/prebid-mobile/modules/rendering/ios-sdk-integration-pb.md @@ -139,17 +139,17 @@ if interstitial.isReady { ``` -The **default** ad format for interstitial is **.display**. In order to make a `multiformat bid request`, set the respective values into the `adFormats` property. +The **default** ad format for interstitial is **.banner**. In order to make a `multiformat bid request`, set the respective values into the `adFormats` property. ``` swift // Make bid request for video ad adUnit?.adFormats = [.video] -// Make bid request for both video amd disply ads -adUnit?.adFormats = [.video, .display] +// Make bid request for both video and banner ads +adUnit?.adFormats = [.video, .banner] -// Make bid request for disply ad (default behaviour) -adUnit?.adFormats = [.display] +// Make bid request for banner ad (default behaviour) +adUnit?.adFormats = [.banner] ``` @@ -161,7 +161,7 @@ Initialize the Interstitial Ad Unit with properties: - `configID` - an ID of Stored Impression on the Prebid Server - `minSizePercentage` - specifies the minimum width and height percent an ad may occupy of a device’s real estate. -> **NOTE:** minSizePercentage - plays an important role in a bidding process for display ads. If provided space is not enough demand partners won't respond with the bids. +> **NOTE:** minSizePercentage - plays an important role in a bidding process for banner ads. If provided space is not enough demand partners won't respond with the bids. #### Step 2: Load the Ad {:.no_toc} @@ -225,4 +225,4 @@ Wait until the ad will be loaded and present it to the user in any suitable time func rewardedAdDidReceiveAd(_ rewardedAd: RewardedAdUnit) { // Now the ad is ready for display } -``` \ No newline at end of file +``` diff --git a/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.md b/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.md index cead15dc04..8264e1f049 100755 --- a/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.md +++ b/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.md @@ -21,7 +21,11 @@ This is the original Prebid mobile integration approach when SDK plays the trans ![In-App Bidding with Prebid](/assets/images/prebid-mobile/prebid-in-app-bidding-overview-prebid-original-gam.png) -## Display Banner +## Banner API + +Starting with Prebid Mobile `2.1.0` you can use `BannerAdUnit` to bid over the banner and/or video demand. The default ad format is `BANNER`. To customize the bidding format, specify the ad formats in the `BannerAdUnit` constructor. + +### HTML Banner Integration example: @@ -33,8 +37,9 @@ private fun createAd() { adUnit?.setAutoRefreshInterval(refreshTimeSeconds) // 2. Configure banner parameters - val parameters = BannerBaseAdUnit.Parameters() + val parameters = BannerParameters() parameters.api = listOf(Signals.Api.MRAID_3, Signals.Api.OMID_1) + adUnit.bannerParameters = parameters // 3. Create AdManagerAdView val adView = AdManagerAdView(this) @@ -55,7 +60,7 @@ private fun createAd() { } ``` -GAM ad view listner: +GAM ad view listener: ```kotlin private fun createGAMListener(adView: AdManagerAdView): AdListener { @@ -88,7 +93,10 @@ Initialize the `BannerAdUnit` with properties: #### Step 2: Configure banner parameters {:.no_toc} -Using the `BannerBaseAdUnit.Parameters()` you can customize the bid request for BannerAdUnit. +Using the `BannerParameters()` you can customize the bid request for BannerAdUnit. + +{: .alert.alert-warning :} +Starting from PrebidMobile `2.1.0` the `BannerBaseAdUnit.Parameters` class is deprecated. Use `BannerParameters` instead. The `api` property is dedicated to adding values for API Frameworks to a bid response according to the OpenRTB 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) spec. The supported values for GMA SDK integration are: @@ -119,17 +127,17 @@ Be sure that you make the ad request with the same `AdManagerAdRequest` object t Once an app receives a signal that an ad is loaded, you should use the method `AdViewUtils.findPrebidCreativeSize` to verify whether it's Prebid's ad and resize the ad slot respectively to the creative's properties. -## Video Banner +### Video Banner (Outstream Video) Integration example: ```kotlin private fun createAd() { // 1. Create VideoAdUnit - adUnit = VideoAdUnit(CONFIG_ID, WIDTH, HEIGHT) + adUnit = BannerAdUnit(CONFIG_ID, WIDTH, HEIGHT, EnumSet.of(AdUnitFormat.VIDEO)) // 2. Configure video ad unit - adUnit?.parameters = configureVideoParameters() + adUnit?.videoParameters = configureVideoParameters() // 3. Create AdManagerAdView val gamView = AdManagerAdView(this) @@ -147,12 +155,15 @@ private fun createAd() { } ``` +{: .alert.alert-warning :} +Starting from PrebidMobile `2.1.0` the `VideoAdUnit` class is deprecated. Use `BannerAdUnit` class with video ad format instead. + + Configure Video parameters: ```kotlin -private fun configureVideoParameters(): VideoBaseAdUnit.Parameters { - return VideoBaseAdUnit.Parameters().apply { - +private fun configureVideoParameters(): VideoParameters { + return VideoParameters(listOf("video/x-flv", "video/mp4")).apply { api = listOf( Signals.Api.VPAID_1, Signals.Api.VPAID_2 @@ -162,7 +173,6 @@ private fun configureVideoParameters(): VideoBaseAdUnit.Parameters { minBitrate = 300 maxDuration = 30 minDuration = 5 - mimes = listOf("video/x-flv", "video/mp4") playbackMethod = listOf(Signals.PlaybackMethod.AutoPlaySoundOn) protocols = listOf( Signals.Protocols.VAST_2_0 @@ -189,18 +199,22 @@ private fun createListener(gamView: AdManagerAdView): AdListener { } ``` -#### Step 1: Create a VideoAdUnit +#### Step 1: Create a BannerAdUnit with the video ad type {:.no_toc} -Initialize the `VideoAdUnit` with the following properties: +Initialize the `BannerAdUnit` with the following properties: - `configId` - an ID of the Stored Impression on the Prebid Server - `adSize` - the size of the ad unit which will be used in the bid request. +- `adUnitFormats` - `AdUnitFormat.VIDEO` for a video ad #### Step 2: Configure video parameters {:.no_toc} -Using the `VideoParameters` you can customize the bid request for a VideoAdUnit. +Using the `VideoParameters` you can customize the bid request for a `BannerAdUnit`. + +{: .alert.alert-warning :} +Starting from PrebidMobile `2.1.0` the `VideoBaseAdUnit.Parameters` class is deprecated. Use `VideoParameters` instead. #### placement {:.no_toc} @@ -227,7 +241,6 @@ The `api` property is dedicated to adding values for API Frameworks to a bid res * `6` or `Signals.Api.MRAID_3` : MRAID-3 support signal * `7` or `Signals.Api.OMID_1` : signals OMSDK support - #### maxBitrate {:.no_toc} @@ -297,7 +310,61 @@ You should now request the ad from GAM. If the `AdManagerAdRequest` contains tar Be sure that you make the ad request with the same `AdManagerAdRequest` object that you passed to the `fetchDemand` method. Otherwise, the ad request won't contain targeting keywords, and Prebid's ad won't ever be displayed. -## Display Interstitial +### Multiformat Banner (HTML + Video) + +Integration example: + +```kotlin +// 1. Create BannerAdUnit +adUnit = BannerAdUnit(configId, WIDTH, HEIGHT, EnumSet.of(AdUnitFormat.BANNER, AdUnitFormat.VIDEO)) +adUnit?.setAutoRefreshInterval(refreshTimeSeconds) + +// 2. Configure banner and video parameters +val parameters = BannerParameters() +parameters.api = listOf(Signals.Api.MRAID_3, Signals.Api.OMID_1) +adUnit?.bannerParameters = parameters + +adUnit?.videoParameters = VideoParameters(listOf("video/mp4")) + +// 3. Create AdManagerAdView +val adView = AdManagerAdView(this) +adView.adUnitId = AD_UNIT_ID +adView.setAdSizes(AdSize(WIDTH, HEIGHT)) +adView.adListener = createGAMListener(adView) + +// Add GMA SDK banner view to the app UI +adWrapperView.addView(adView) + +// 4. Make a bid request to Prebid Server +val request = AdManagerAdRequest.Builder().build() +adUnit?.fetchDemand(request) { + + // 5. Load GAM Ad + adView.loadAd(request) +} +``` + +#### Step 1: Create a BannerAdUnit +{:.no_toc} + +Initialize the `BannerAdUnit` with properties: + +- `configId` - an ID of the Stored Impression on the Prebid Server +- `width` - the width of the ad unit which will be used in the bid request. +- `height` - the height of the ad unit which will be used in the bid request. +- `adUnitFormats` - ad unit formats for the current ad unit. + +#### Step 2-5 +{:.no_toc} + +Steps 2-5 are the same as for Display Banner. Setting up banner and video parameters can be found in Display Banner and Video Banner respectively. + + +## Interstitial API + +Starting with Prebid Mobile `2.1.0` you can use `InterstitialAdUnit ` to bid over the banner and/or video demand. The default ad format is `BANNER`. To customize the bidding format, specify the ad formats in the `InterstitialAdUnit ` constructor. + +### HTML Interstitial Integration example: @@ -373,18 +440,18 @@ Be sure that you make the ad request with the same `AdManagerAdRequest` object t Follow the [GMA SDK guide](https://developers.google.com/ad-manager/mobile-ads-sdk/android/interstitial#display_the_ad) to display an interstitial ad right after receiving it or later in a natural pauses in the flow of an app. -## Video Interstitial +### Video Interstitial Integration Example: ```kotlin private fun createAd() { - // 1. Create VideoInterstitialAdUnit - adUnit = VideoInterstitialAdUnit(CONFIG_ID) + // 1. Create InterstitialAdUnit + adUnit = InterstitialAdUnit(CONFIG_ID, EnumSet.of(AdUnitFormat.VIDEO)) // 2. Configure video ad unit - adUnit?.parameters = configureVideoParameters() + adUnit?.videoParameters = configureVideoParameters() // 3. Make a bid request to Prebid Server val request = AdManagerAdRequest.Builder().build() @@ -401,11 +468,15 @@ private fun createAd() { } ``` +{: .alert.alert-warning :} +Starting from PrebidMobile `2.1.0` the `VideoInterstitialAdUnit` class is deprecated. Use `InterstitialAdUnit` class with video ad format instead. + + Configuration function: ```kotlin -private fun configureVideoParameters(): VideoBaseAdUnit.Parameters { - return VideoBaseAdUnit.Parameters().apply { +private fun configureVideoParameters(): VideoParameters { + return VideoParameters(listOf("video/x-flv", "video/mp4")).apply { placement = Signals.Placement.Interstitial api = listOf( @@ -417,7 +488,6 @@ private fun configureVideoParameters(): VideoBaseAdUnit.Parameters { minBitrate = 300 maxDuration = 30 minDuration = 5 - mimes = listOf("video/x-flv", "video/mp4") playbackMethod = listOf(Signals.PlaybackMethod.AutoPlaySoundOn) protocols = listOf( Signals.Protocols.VAST_2_0 @@ -449,9 +519,10 @@ private fun createAdListener(): AdManagerInterstitialAdLoadCallback { #### Step 1: Create an Ad Unit {:.no_toc} -Initialize the Interstitial Video Ad Unit with the following properties: +Initialize the `InterstitialAdUnit` with the following properties: - `configId` - an ID of Stored Impression on the Prebid Server +- `adUnitFormats` - AdUnitFormat.VIDEO for a video ad #### Step 2: Configure video parameters {:.no_toc} @@ -475,7 +546,46 @@ Be sure that you make the ad request with the same `AdManagerAdRequest` object t Follow the [GMA SDK guide](https://developers.google.com/ad-manager/mobile-ads-sdk/android/interstitial#display_the_ad) to display an interstitial ad right after receiving it or later in a natural pauses in the flow of an app. -## Rewarded Video +### Multiformat Interstitial (HTML + Video) + +Integration example: + +```kotlin +// 1. Create InterstitialAdUnit +adUnit = InterstitialAdUnit(configId, EnumSet.of(AdUnitFormat.BANNER, AdUnitFormat.VIDEO)) +adUnit?.setMinSizePercentage(80, 60) +adUnit?.videoParameters = VideoParameters(listOf("video/mp4")) + + +// 2. Make a bid request to Prebid Server +val request = AdManagerAdRequest.Builder().build() +adUnit?.fetchDemand(request) { + + // 3. Load a GAM interstitial ad + AdManagerInterstitialAd.load( + this, + AD_UNIT_ID, + request, + createListener() + ) +} +``` + +#### Step 1: Create an Ad Unit +{:.no_toc} + +Initialize the `InterstitialAdUnit` with the following properties: + +- `configId` - an ID of Stored Impression on the Prebid Server +- `adUnitFormats` - ad unit formats for the current ad unit. + +#### Steps 2-3 +{:.no_toc} + +Steps 2-3 are the same as for Display Banner. Setting up banner and video parameters can be found in Display Interstitial and Video Interstitial respectively. + + +## Rewarded Video API Integration example: @@ -485,7 +595,7 @@ private fun createAd() { adUnit = RewardedVideoAdUnit(CONFIG_ID) // 2. Configure Video parameters - adUnit?.parameters = configureVideoParameters() + adUnit?.videoParameters = configureVideoParameters() // 3. Make a bid request to Prebid Server val request = AdManagerAdRequest.Builder().build() @@ -502,12 +612,11 @@ private fun createAd() { } ``` -Configure vide ad unit: +Configure video ad unit: ```kotlin -private fun configureVideoParameters(): VideoBaseAdUnit.Parameters { - return VideoBaseAdUnit.Parameters().apply { - mimes = listOf("video/mp4") +private fun configureVideoParameters(): VideoParameters { + return VideoParameters(listOf("video/mp4")).apply { protocols = listOf(Signals.Protocols.VAST_2_0) playbackMethod = listOf(Signals.PlaybackMethod.AutoPlaySoundOff) } @@ -563,17 +672,17 @@ Be sure that you make the ad request with the same `AdManagerAdRequest` object t Follow the [GMA SDK guide](https://developers.google.com/ad-manager/mobile-ads-sdk/android/rewarded#show_the_ad) to display a rewarded ad right after receiving it or later in a natural pauses in the flow of an app. -## Video Instream +## Instream Video API Integration example: ```kotlin private fun createAd() { // 1. Create VideoAdUnit - adUnit = VideoAdUnit(CONFIG_ID, WIDTH, HEIGHT) + adUnit = InStreamVideoAdUnit(CONFIG_ID, WIDTH, HEIGHT) // 2. Configure video parameters - adUnit?.parameters = configureVideoParameters() + adUnit?.videoParameters = configureVideoParameters() // 3. Init player view playerView = PlayerView(this) @@ -600,11 +709,14 @@ private fun createAd() { } ``` +{: .alert.alert-warning :} +Starting from PrebidMobile `2.1.0` the `VideoAdUnit` class is deprecated. Use `InStreamVideoAdUnit ` instead. + Configure the video ad: ```kotlin -private fun configureVideoParameters(): VideoBaseAdUnit.Parameters { - return VideoBaseAdUnit.Parameters().apply { +private fun configureVideoParameters(): VideoParameters { + return VideoParameters(listOf("video/x-flv", "video/mp4")).apply { placement = Signals.Placement.InStream api = listOf( @@ -616,7 +728,6 @@ private fun configureVideoParameters(): VideoBaseAdUnit.Parameters { minBitrate = 300 maxDuration = 30 minDuration = 5 - mimes = listOf("video/x-flv", "video/mp4") playbackMethod = listOf(Signals.PlaybackMethod.AutoPlaySoundOn) protocols = listOf( Signals.Protocols.VAST_2_0 @@ -689,7 +800,9 @@ Using Prebid util method, generate Google IMA URI for downloading the cached cre Follow the Google Guide for [integrating IMA with ExoPlayer](https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/exoplayer-extension) to run a video and show instream ad from the winning bid. -## Native Style Banner +## Native API + +### Native Banner Integration example: @@ -805,7 +918,7 @@ Now you should request the ad from GAM. If the `AdManagerAdRequest` contains tar Be sure that you make the ad request with the same `AdManagerAdRequest` object that you passed to the `fetchDemand` method. Otherwise, the ad request won't contain targeting keywords, and Prebid's ad won't ever be displayed. -## In-App Native +### In-App Native Integration example: @@ -1013,10 +1126,7 @@ Once the Prebid line item is recognized you should extract the ad from the winni Each ad unit in the Original API is a subclass of the `AdUnit` class, which provides the following properties and methods for additional configuration. -### Properties - -#### pbAdSlot -{:.no_toc} +### Ad Slot PB Ad Slot is an identifier tied to the placement the ad will be delivered in. The use case for PB Ad Slot is to pass to exchange an ID they can use to tie to reporting systems or use for data science driven model building to match with impressions sourced from alternate integrations. A common ID to pass is the ad server slot name. diff --git a/prebid-mobile/pbm-api/ios/ios-sdk-integration-gam-original-api.md b/prebid-mobile/pbm-api/ios/ios-sdk-integration-gam-original-api.md index 0cd9b06dae..6d7b6d9606 100644 --- a/prebid-mobile/pbm-api/ios/ios-sdk-integration-gam-original-api.md +++ b/prebid-mobile/pbm-api/ios/ios-sdk-integration-gam-original-api.md @@ -21,7 +21,11 @@ This is the original Prebid mobile integration approach when SDK plays the trans ![In-App Bidding with Prebid](/assets/images/prebid-mobile/prebid-in-app-bidding-overview-prebid-original-gam.png) -## Display Banner +## Banner API + +Starting with Prebid Mobile `2.1.0` you can use `BannerAdUnit` to bid over the banner and/or video demand. The default ad format is `.banner`. To customize the bidding format you should specify the `adFormats` property of the `BannerAdUnit`. + +### HTML Banner Integration example: @@ -33,7 +37,7 @@ adUnit.setAutoRefreshMillis(time: 30000) // 2. Configure banner parameters let parameters = BannerParameters() parameters.api = [Signals.Api.MRAID_2] -adUnit.parameters = parameters +adUnit.bannerParameters = parameters // 3. Create a GAMBannerView gamBanner = GAMBannerView(adSize: GADAdSizeFromCGSize(adSize)) @@ -89,6 +93,9 @@ The `api` property is dedicated to adding values for API Frameworks to bid respo * `6` or `Signals.Api.MRAID_3` : MRAID-3 support signal * `7` or `Signals.Api.OMID_1` : signals OMSDK support +{: .alert.alert-warning :} +Starting from PrebidMobile `2.1.0` the `parameters` property is deprecated. Use `bannerParameters` instead. + #### Step 3: Create a GAMBannerView {:.no_toc} @@ -111,23 +118,25 @@ Be sure that you make the ad request with the same `GAMRequest` object that you Once an app receives a signal that an ad is loaded, you should use the method `AdViewUtils.findPrebidCreativeSize` to verify whether it is a Prebid ad and resize the ad slot respectively to the creative's properties. -## Video Banner +### Video Banner (Outstream Video) Integration example: ``` swift // 1. Create a BannerAdUnit -adUnit = VideoAdUnit(configId: storedImpVideoBanner, size: adSize) +adUnit = BannerAdUnit(configId: CONFIG_ID, size: adSize) + +// 2. Set ad format +adUnit.adFormats = [.video] -// 2. Configure video parameters -let parameters = VideoParameters() -parameters.mimes = ["video/mp4"] +// 3. Configure video parameters +let parameters = VideoParameters(mimes: ["video/mp4"]) parameters.protocols = [Signals.Protocols.VAST_2_0] parameters.playbackMethod = [Signals.PlaybackMethod.AutoPlaySoundOff] parameters.placement = Signals.Placement.InBanner -adUnit.parameters = parameters +adUnit.videoParameters = parameters -// 3. Create a GAMBannerView +// 4. Create a GAMBannerView gamBanner = GAMBannerView(adSize: GADAdSizeFromCGSize(adSize)) gamBanner.adUnitID = gamAdUnitVideoBannerOriginal gamBanner.rootViewController = self @@ -137,28 +146,36 @@ gamBanner.delegate = self bannerView.addSubview(gamBanner) bannerView.backgroundColor = .clear -// 4. Make a bid request to Prebid Server +// 5. Make a bid request to Prebid Server let gamRequest = GAMRequest() adUnit.fetchDemand(adObject: gamRequest) { [weak self] resultCode in PrebidDemoLogger.shared.info("Prebid demand fetch for GAM \(resultCode.name())") - // 5. Load GAM Ad + // 6. Load GAM Ad self?.gamBanner.load(gamRequest) } ``` -#### Step 1: Create a VideoAdUnit +{: .alert.alert-warning :} +Starting from PrebidMobile `2.1.0` the `VideoAdUnit` class is deprecated. Use `BannerAdUnit` class with video ad format instead. + +#### Step 1: Create a BannerAdUnit {:.no_toc} -Initialize the `VideoAdUnit` with the following properties: +Initialize the `BannerAdUnit` with the following properties: - `configId` - an ID of the Stored Impression on the Prebid Server - `adSize` - the size of the ad unit which will be used in the bid request. -#### Step 2: Configure the video parameters +#### Step 2: Set ad format {:.no_toc} -Using the `VideoParameters` you can customize the bid request for VideoAdUnit. +For video ad unit, you must set video ad format. Default value for `adFormats` property is `[.banner]`. + +#### Step 3: Configure the video parameters +{:.no_toc} + +Using the `VideoParameters` you can customize the bid request for video ads. #### placement {:.no_toc} @@ -172,7 +189,6 @@ In the context of a VideoInterstitialAdUnit, rewarded video ads are typically la * `4` or `InFeed` : In-Feed placement is found in content, social, or product feeds. * `5` or `Slider`, `Floating` or `Interstitial` : Open RTB supports one of three values for option 5 as either Slider, Floating or Interstitial. If an enum value is supplied in placement, bidders will receive value 5 for placement type and assume to be interstitial with the instl flag set to 1. - #### api {:.no_toc} @@ -185,7 +201,6 @@ The `api` property is dedicated to adding values for API Frameworks to bid respo * `6` or `Signals.Api.MRAID_3` : MRAID-3 support signal * `7` or `Signals.Api.OMID_1` : signals OMSDK support - #### maxBitrate {:.no_toc} @@ -210,6 +225,7 @@ Integer representing the OpenRTB 2.5 minimum video ad duration in seconds. {:.no_toc} Array of strings representing the supported OpenRTB 2.5 content MIME types (e.g., “video/x-ms-wmv”, “video/mp4”). +Required property. #### playbackMethod {:.no_toc} @@ -237,31 +253,137 @@ Array of OpenRTB 2.5 playback methods. If none are specified, any method may be - `7` or `Signals.Protocols.VAST_4_0` : VAST 4.0 - `8` or `Signals.Protocols.VAST_4_0_Wrapper` : VAST 4.0 Wrapper - -#### Step 3: Create a GAMBannerView +#### Step 4: Create a GAMBannerView {:.no_toc} Follow the [GMA SDK documentation](https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner) to integrate a banner ad unit. -#### Step 4: Make a bid request +#### Step 5: Make a bid request {:.no_toc} The `fetchDemand` method makes a bid request to the Prebid Server. You should provide a `GAMRequest` object to this method so Prebid SDK sets the targeting keywords of the winning bid for future ad requests. -#### Step 5: Load an Ad +#### Step 6: Load an Ad {:.no_toc} You should now request the ad from GAM. If the `GAMRequest` contains targeting keywords. The respective Prebid line item will be returned from GAM and GMA SDK will render its creative. Be sure that you make the ad request with the same `GAMRequest` object that you passed to the `fetchDemand` method. Otherwise the ad request won't contain targeting keywords and Prebid's ad won't ever be displayed. -## Display Interstitial +### Multiformat Banner (HTML + Video) + +Integration example: + +``` swift +// 1. Create a BannerAdUnit +adUnit = BannerAdUnit(configId: CONFIG_ID, size: adSize) +adUnit.setAutoRefreshMillis(time: 30000) + +// 2. Set adFormats +adUnit.adFormats = [.banner, .video] + +// 3. Configure banner parameters +let bannerParameters = BannerParameters() +bannerParameters.api = [Signals.Api.MRAID_2] +adUnit.bannerParameters = bannerParameters + +// 4. Configure video parameters +let videoParameters = VideoParameters(mimes: ["video/mp4"]) +videoParameters.protocols = [Signals.Protocols.VAST_2_0] +videoParameters.playbackMethod = [Signals.PlaybackMethod.AutoPlaySoundOff] +videoParameters.placement = Signals.Placement.InBanner +adUnit.videoParameters = videoParameters + +// 5. Create a GAMBannerView +gamBanner = GAMBannerView(adSize: GADAdSizeFromCGSize(adSize)) +gamBanner.adUnitID = gamAdUnitMultiformatBannerOriginal +gamBanner.rootViewController = self +gamBanner.delegate = self + +// Add GMA SDK banner view to the app UI +bannerView?.addSubview(gamBanner) + +// 6. Make a bid request to Prebid Server +let gamRequest = GAMRequest() +adUnit.fetchDemand(adObject: gamRequest) { [weak self] resultCode in + PrebidDemoLogger.shared.info("Prebid demand fetch for GAM \(resultCode.name())") + + // 7. Load GAM Ad + self?.gamBanner.load(gamRequest) +} +``` + +Implement GADBannerViewDelegate: + +```swift +func bannerViewDidReceiveAd(_ bannerView: GADBannerView) { + + // 8. Resize ad view if needed + AdViewUtils.findPrebidCreativeSize(bannerView, success: { size in + guard let bannerView = bannerView as? GAMBannerView else { return } + bannerView.resize(GADAdSizeFromCGSize(size)) + }, failure: { (error) in + PrebidDemoLogger.shared.error("Error occuring during searching for Prebid creative size: \(error)") + }) +} +``` + +#### Step 1: Create a BannerAdUnit +{:.no_toc} + +Initialize the `BannerAdUnit` with the following properties: + +- `configId` - an ID of the Stored Impression on the Prebid Server +- `adSize` - the size of the ad unit which will be used in the bid request. + +#### Step 2: Set ad formats +{:.no_toc} + +For multiformat ad unit, you must set both banner and video ad formats. + +#### Step 3: Configure banner parameters +{:.no_toc} + +Provide configuration properties for the banner ad using the [BannerParameters](#step-2-configure-banner-parameters) object. + +#### Step 4: Configure video parameters +{:.no_toc} + +Provide configuration properties for the video ad using the [VideoParameters](#step-3-configure-the-video-parameters) object. + +#### Step 5: Create a GAMBannerView +{:.no_toc} + +Follow the [GMA SDK documentation](https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner) to integrate a banner ad unit. + +#### Step 6: Make a bid request +{:.no_toc} + +The `fetchDemand` method makes a bid request to the Prebid Server. You should provide a `GAMRequest` object to this method so Prebid SDK sets the targeting keywords of the winning bid for future ad requests. + +#### Step 7: Load an Ad +{:.no_toc} + +Now you should request the ad from GAM. If the `GAMRequest` contains targeting keywords, the respective Prebid line item will be returned from GAM and GMA SDK will render its creative. + +Be sure that you make the ad request with the same `GAMRequest` object that you passed to the `fetchDemand` method. Otherwise, the ad request won't contain targeting keywords, and Prebid's ad won't ever be displayed. + +#### Step 8: Adjust the ad view size +{:.no_toc} + +Once an app receives a signal that an ad is loaded, you should use the method `AdViewUtils.findPrebidCreativeSize` to verify whether it is a Prebid ad and resize the ad slot respectively to the creative's properties. + +## Interstitial API + +Starting with Prebid Mobile `2.1.0` you can use `InterstitialAdUnit ` to bid over the banner and/or video demand. The default ad format is `.banner`. To customize the bidding format you should specify the `adFormats` property of the `InterstitialAdUnit `. + +### HTML Interstitial Integration example: ``` swift // 1. Create an Interstitial Ad Unit -adUnit = InterstitialAdUnit(configId: storedImpDisplayInterstitial) +adUnit = InterstitialAdUnit(configId: CONFIG_ID) // 2. Make a bid request to Prebid Server let gamRequest = GAMRequest() @@ -283,7 +405,7 @@ adUnit.fetchDemand(adObject: gamRequest) { [weak self] resultCode in } ``` -#### Step 1: InterstitialAdUnit +#### Step 1: Create an InterstitialAdUnit {:.no_toc} Initialize the InterstitialAdUnit with the following properties: @@ -298,6 +420,9 @@ Initialize the InterstitialAdUnit with the following properties: > Prebid Server will send the eligible size list to each bidder to solicit a bid. For a full description of the Prebid Server logic, please refer to the [Prebid Server PR 797](https://github.com/prebid/prebid-server/pull/797/files). +{: .alert.alert-warning :} +Starting from PrebidMobile `2.1.0` the `parameters` property is deprecated. Use `bannerParameters` instead. + #### Step 2: Make a bid request {:.no_toc} @@ -315,34 +440,36 @@ Be sure that you make the ad request with the same `GAMRequest` object that you Follow the [GMA SDK guide](https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial#display_the_ad) to display an interstitial ad right after receiving it or later in a natural pauses in the flow of an app. -## Video Interstitial +### Video Interstitial Integration Example: ```swift -// 1. Create a VideoInterstitialAdUnit -adUnit = VideoInterstitialAdUnit(configId: storedImpVideoInterstitial) +// 1. Create a InterstitialAdUnit +adUnit = InterstitialAdUnit(configId: CONFIG_ID) -// 2. Configure video parameters -let parameters = VideoParameters() -parameters.mimes = ["video/mp4"] +// 2. Set ad format +adUnit.adFormats = [.video] + +// 3. Configure video parameters +let parameters = VideoParameters(mimes: ["video/mp4"]) parameters.protocols = [Signals.Protocols.VAST_2_0] parameters.playbackMethod = [Signals.PlaybackMethod.AutoPlaySoundOff] -adUnit.parameters = parameters +adUnit.videoParameters = parameters -// 3. Make a bid request to Prebid Server +// 4. Make a bid request to Prebid Server let gamRequest = GAMRequest() adUnit.fetchDemand(adObject: gamRequest) { [weak self] resultCode in PrebidDemoLogger.shared.info("Prebid demand fetch for GAM \(resultCode.name())") -// 4. Load a GAM interstitial ad +// 5. Load a GAM interstitial ad GAMInterstitialAd.load(withAdManagerAdUnitID: gamAdUnitVideoInterstitialOriginal, request: gamRequest) { ad, error in guard let self = self else { return } if let error = error { PrebidDemoLogger.shared.error("Failed to load interstitial ad with error: \(error.localizedDescription)") } else if let ad = ad { - // 5. Present the interstitial ad + // 6. Present the interstitial ad ad.present(fromRootViewController: self) ad.fullScreenContentDelegate = self } @@ -350,6 +477,9 @@ GAMInterstitialAd.load(withAdManagerAdUnitID: gamAdUnitVideoInterstitialOriginal } ``` +{: .alert.alert-warning :} +Starting from PrebidMobile `2.1.0` the `VideoInterstitialAdUnit` class is deprecated. Use `InterstitialAdUnit` class with video ad format instead. + #### Step 1: Create an Ad Unit {:.no_toc} @@ -357,42 +487,127 @@ Initialize the Interstitial Video Ad Unit with properties: - `configId` - an ID of Stored Impression on the Prebid Server -#### Step 2: Configure video parameters + +#### Step 2: Set ad format {:.no_toc} -Provide configuration properties for the video ad using the [VideoParameters](#step-2-configure-video-parameters) object. +For video ad unit, you must set video ad format. Default value for `adFormats` property is `[.banner]`. -#### Step 3: Make a bid request +#### Step 3: Configure video parameters +{:.no_toc} + +Provide configuration properties for the video ad using the [VideoParameters](#step-3-configure-the-video-parameters) object. + +#### Step 4: Make a bid request {:.no_toc} The `fetchDemand` method makes a bid request to the Prebid Server. You should provide a `GAMRequest` object to this method so Prebid SDK sets the targeting keywords of the winning bid for future ad requests. -#### Step 4: Load a GAM interstitial ad +#### Step 5: Load a GAM interstitial ad {:.no_toc} Now you should request the ad from GAM. If the `GAMRequest` contains targeting keywords. The respective Prebid line item will be returned from GAM and GMA SDK will render its creative. Be sure that you make the ad request with the same `GAMRequest` object that you passed to the `fetchDemand` method. Otherwise the ad request won't contain targeting keywords and Prebid's ad won't ever be displayed. -#### Step 5: Present the interstitial ad +#### Step 6: Present the interstitial ad {:.no_toc} Follow the [GMA SDK guide](https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial#display_the_ad) to display an interstitial ad right after receiving it or later in a natural pauses in the flow of an app. -## Rewarded Video +### Multiformat Interstitial (HTML + Video) + +Integration example: + +``` swift +// 1. Create an InterstitialAdUnit +adUnit = InterstitialAdUnit(configId: CONFIG_ID, minWidthPerc: 60, minHeightPerc: 70) + +// 2. Set adFormats +adUnit.adFormats = [.banner, .video] + +// 3. Configure parameters +let parameters = VideoParameters(mimes: ["video/mp4"]) +parameters.protocols = [Signals.Protocols.VAST_2_0] +parameters.playbackMethod = [Signals.PlaybackMethod.AutoPlaySoundOff] +adUnit.videoParameters = parameters + +// 4. Make a bid request to Prebid Server +let gamRequest = GAMRequest() +adUnit.fetchDemand(adObject: gamRequest) { [weak self] resultCode in + PrebidDemoLogger.shared.info("Prebid demand fetch for GAM \(resultCode.name())") + + // 5. Load a GAM interstitial ad + GAMInterstitialAd.load(withAdManagerAdUnitID: gamAdUnitMultiformatInterstitialOriginal, request: gamRequest) { ad, error in + guard let self = self else { return } + + if let error = error { + PrebidDemoLogger.shared.error("Failed to load interstitial ad with error: \(error.localizedDescription)") + } else if let ad = ad { + // 5. Present the interstitial ad + ad.fullScreenContentDelegate = self + ad.present(fromRootViewController: self) + } + } +} +``` + +#### Step 1: Create an InterstitialAdUnit +{:.no_toc} + +Initialize the InterstitialAdUnit with the following properties: + +- `configId` - an ID of Stored Impression on the Prebid Server +- `minWidthPerc`: Optional parameter to specify the minimum width percent an ad may occupy of a device's real estate. Support in SDK version 1.2+ +- `minHeightPrec`: Optional parameter to specify the minimum height percent an ad may occupy of a device's real estate. Support in SDK version 1.2+ + +> **NOTE:** As of version 1.2+, Prebid SDK has extended the functionality of Interstitial ad monetization by using a smart ad size selection process to monetize sizes smaller than full screen ads. App developers can specify a minimum width and minimum height percentage an ad can occupy of a devices real state, with Prebid Server (PBS) deriving a limited set of ad sizes (max 10) as eligible for the auction. + +> PBS will take the AdUnit's size (width and height) as the max size for the interstitial as size, generating a list of ad sizes, selecting the first 10 sizes that fall within the imp's max size and minimum percentage size. All the interstitial parameters will still be passed to the bidders, allowing them to use their own size matching algorithms if they prefer. + +> Prebid Server will send the eligible size list to each bidder to solicit a bid. For a full description of the Prebid Server logic, please refer to the [Prebid Server PR 797](https://github.com/prebid/prebid-server/pull/797/files). + +#### Step 2: Set ad formats +{:.no_toc} + +For multiformat ad unit, you must set both banner and video ad formats. + +#### Step 3: Configure parameters +{:.no_toc} + +Provide configuration properties for the banner ad using the [BannerParameters](#step-2-configure-banner-parameters) object. +Provide configuration properties for the video ad using the [VideoParameters](#step-3-configure-the-video-parameters) object. + +#### Step 4: Make a bid request +{:.no_toc} + +The `fetchDemand` method makes a bid request to the Prebid Server. You should provide a `GAMRequest` object to this method so Prebid SDK sets the targeting keywords of the winning bid for future ad requests. + +#### Step 5: Load a GAM interstitial ad +{:.no_toc} + +You should now request the ad from GAM. If the `GAMRequest` contains targeting keywords. The respective Prebid line item will be returned from GAM and GMA SDK will render its creative. + +Be sure that you make the ad request with the same `GAMRequest` object that you passed to the `fetchDemand` method. Otherwise the ad request won't contain targeting keywords and Prebid's ad won't ever be displayed. + +#### Step 6: Present the interstitial ad +{:.no_toc} + +Follow the [GMA SDK guide](https://developers.google.com/ad-manager/mobile-ads-sdk/ios/interstitial#display_the_ad) to display an interstitial ad right after receiving it or later in a natural pauses in the flow of an app. + +## Rewarded Video API Integration example: ``` swift // 1. Create a RewardedVideoAdUnit -adUnit = RewardedVideoAdUnit(configId: storedImpVideoRewarded) +adUnit = RewardedVideoAdUnit(configId: CONFIG_ID) // 2. Configure video parameters -let parameters = VideoParameters() -parameters.mimes = ["video/mp4"] +let parameters = VideoParameters(mimes: ["video/mp4"]) parameters.protocols = [Signals.Protocols.VAST_2_0] parameters.playbackMethod = [Signals.PlaybackMethod.AutoPlaySoundOff] -adUnit.parameters = parameters +adUnit.videoParameters = parameters // 3. Make a bid request to Prebid Server adUnit.fetchDemand(adObject: gamRequest) { [weak self] resultCode in @@ -414,7 +629,7 @@ adUnit.fetchDemand(adObject: gamRequest) { [weak self] resultCode in } } ``` -#### Step 1: Create an Ad Unit +#### Step 1: Create a RewardedVideoAdUnit {:.no_toc} Initialize the Rewarded Video Ad Unit with properties: @@ -424,7 +639,10 @@ Initialize the Rewarded Video Ad Unit with properties: #### Step 2: Configure video parameters {:.no_toc} -Provide configuration properties for the video ad using the [VideoParameters](#step-2-configure-video-parameters) object. +Provide configuration properties for the video ad using the [VideoParameters](#step-3-configure-the-video-parameters) object. + +{: .alert.alert-warning :} +Please, note that starting from PrebidMobile `2.1.0` the `parameters` property is deprecated. Use `videoParameters` instead. #### Step 3: Make a bid request {:.no_toc} @@ -443,20 +661,19 @@ Be sure that you make the ad request with the same `GAMRequest` object that you Follow the [GMA SDK guide](https://developers.google.com/ad-manager/mobile-ads-sdk/ios/rewarded#show_the_ad) to display a rewarded ad right after receiving it or later in natural pauses in the flow of an app. -## Video Instream +## Instream Video API Integration example: ```swift -// 1. Create VideoAdUnit -adUnit = VideoAdUnit(configId: storedImpVideo, size: CGSize(width: 1,height: 1)) +// 1. Create InstreamVideoAdUnit +adUnit = InstreamVideoAdUnit(configId: CONFIG_ID, size: CGSize(width: 1,height: 1)) // 2. Configure Video Parameters -let parameters = VideoParameters() -parameters.mimes = ["video/mp4"] +let parameters = VideoParameters(mimes: ["video/mp4"]) parameters.protocols = [Signals.Protocols.VAST_2_0] parameters.playbackMethod = [Signals.PlaybackMethod.AutoPlaySoundOn] -adUnit.parameters = parameters +adUnit.videoParameters = parameters // 3. Prepare IMAAdsLoader adsLoader = IMAAdsLoader(settings: nil) @@ -530,10 +747,13 @@ func adsManagerDidRequestContentResume(_ adsManager: IMAAdsManager) { } ``` -#### Step 1: Create an Ad Unit +{: .alert.alert-warning :} +Starting from PrebidMobile `2.1.0` the `VideoAdUnit` class is deprecated. Use `InstreamVideoAdUnit` class instead. + +#### Step 1: Create an InstreamVideoAdUnit {:.no_toc} -Initialize the Video Ad Unit with properties: +Initialize the Instream Video Ad Unit with properties: - `configId` - an ID of Stored Impression on the Prebid Server - `size` - Width and height of the video ad unit. @@ -541,7 +761,7 @@ Initialize the Video Ad Unit with properties: #### Step 2: Configure video parameters {:.no_toc} -Provide configuration properties for the video ad using the [VideoParameters](#step-2-configure-video-parameters) object. +Provide configuration properties for the video ad using the [VideoParameters](#step-3-configure-the-video-parameters) object. #### Step 3: Prepare IMAAdsLoader {:.no_toc} @@ -553,7 +773,6 @@ Prepare the in-stream setup according to the [Google's docs](https://developers. The `fetchDemand` method makes a bid request to the Prebid Server. You should use the version of the `fetchDemand` which returns the targeting keywords in the callback. Later you will construct the IMA ad request using these keywords. - #### Step 5: Generate GAM Instream URI {:.no_toc} @@ -575,7 +794,9 @@ On a successful load event, the `IMAAdsLoader` calls the adsLoadedWithData metho Lastly, to manage events and state changes, the ads manager needs a delegate of its own. The `IMAAdManagerDelegate` has methods to handle ad events and errors, as well as methods to trigger play and pause on your video content. -## Native Style Banner +## Native API + +### Native Banner Integration example: @@ -602,7 +823,7 @@ Then integrate the native style ad using GAM Banner ad unit ```swift // 1. Create NativeRequest -nativeUnit = NativeRequest(configId: nativeStoredImpression, assets: nativeRequestAssets) +nativeUnit = NativeRequest(configId: CONFIG_ID, assets: nativeRequestAssets) nativeUnit.context = ContextType.Social nativeUnit.placementType = PlacementType.FeedContent nativeUnit.contextSubType = ContextSubType.Social @@ -677,7 +898,7 @@ You should now request the ad from GAM. If the `GAMRequest` contains targeting k Be sure that you make the ad request with the same `GAMRequest` object that you passed to the `fetchDemand` method. Otherwise the ad request won't contain targeting keywords and Prebid's ad won't ever be displayed. -## In-App Native +### In-App Native At a high level the in app rendering process works like this: @@ -704,25 +925,25 @@ These instructions will enable you to create a creative template in either Googl 6. Name your new format. 7. Choose `ADD VARIABLE` and add the following variable names and placeholders. - {: .table .table-bordered .table-striped } - | Variable Name | Placeholder | - |---------------------+----------------------------------| - | isPrebid | [%isPrebid%] | - | hb_cache_id_local | [%hb_cache_id_local%] | +{: .table .table-bordered .table-striped } +| Variable Name| Placeholder| +|--------------+------------| +| isPrebid | [%isPrebid%] | +| hb_cache_id_local | [%hb_cache_id_local%] | - Make sure to indicate that the variables are required. +Make sure to indicate that the variables are required. 8. Return to the home screen, click `Delivery > Creatives`, and create a creative with `Native Format`, choosing the template you created. In the user-defined variables you just created, set the following values: {: .table .table-bordered .table-striped } - | Variable Name | Value | - |---------------------+----------------------------------| - | isPrebid | 1 | - | hb_cache_id_local | %%PATTERN:hb_cache_id_local%% | +| Variable Name | Value | +|---------------------+----------------------------------| +| isPrebid | 1 | +| hb_cache_id_local | %%PATTERN:hb_cache_id_local%% | 9. Create Prebid line items with price priority and a display ad type that is targeting `hb_pb key-values`. Associate the creative you added in steps 4 thru 8 (making sure to choose your native format as expected creatives on the line item) to the ad unit you created in the second step. -### Integration Example +#### Integration Example {:.no_toc} Prepare the set of requested assets first. @@ -868,10 +1089,7 @@ Once the Prebid line item is recognized, the `NativeAdDelegate` will be activate Each ad unit in the original API is a subclass of the `AdUnit` class, which provides the following properties and methods for the additional configuration. -### Properties - -#### pbAdSlot -{:.no_toc} +### Ad Slot PB Ad Slot is an identifier tied to the placement the ad will be delivered in. The use case for PB Ad Slot is to pass to exchange an ID they can use to tie to reporting systems or use for data science driven model building to match with impressions sourced from alternate integrations. A common ID to pass is the ad server slot name. @@ -898,7 +1116,6 @@ Allows to resume the stopped autorefresh for the ad unit with predefined autoref ### Context Keyword - #### addContextKeyword {:.no_toc} From c2c8151ea50465cc6279cbee09bd541aea30b194 Mon Sep 17 00:00:00 2001 From: bretg Date: Thu, 27 Apr 2023 16:20:13 -0400 Subject: [PATCH 248/763] deprecating rhythmone (#4523) --- dev-docs/bidders/rhythmone.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dev-docs/bidders/rhythmone.md b/dev-docs/bidders/rhythmone.md index ab4b8b2ed8..770b23ebcc 100644 --- a/dev-docs/bidders/rhythmone.md +++ b/dev-docs/bidders/rhythmone.md @@ -10,9 +10,11 @@ gdpr_supported: true schain_supported: true gvl_id: 36 sidebarType: 1 +enable_download: false --- - +{: .alert.alert-warning :} +The rhythmone bidder is deprecated, and will be removed in a future release of Prebid.js and Prebid Server. ### Bid Params From 0311b8dff0de7025924eff21e5a1f74ab2a8bf06 Mon Sep 17 00:00:00 2001 From: bretg Date: Thu, 27 Apr 2023 16:46:04 -0400 Subject: [PATCH 249/763] mobile home page typos (#4526) * mobile home page typos * table header --- prebid-mobile/prebid-mobile.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/prebid-mobile/prebid-mobile.md b/prebid-mobile/prebid-mobile.md index 03f8e5ff4d..4ee540ef54 100644 --- a/prebid-mobile/prebid-mobile.md +++ b/prebid-mobile/prebid-mobile.md @@ -17,11 +17,11 @@ Prebid Mobile libraries are available for iOS and Android. * TOC {:toc} -## Benefits and Fetures +## Benefits and Features Prebid SDK rendering offers the following benefits: -- **Transparent, open source header bidding solution**. The single integration point with Prebid Server**, enabling direct access to more mobile buyers. +- **Transparent, open source header bidding solution**. The single integration point with Prebid Server, enabling direct access to more mobile buyers. - **Monetization without an Ad Server**: Publishers who do not have a direct sales force or have no need for an ad server can still access Prebid's mobile demand stack. Publishers will be able to render ads directly without relying on any 3rd party SDKs. - **Reduced ad delivery latency**: The rendering module enables Prebid SDK to render ads immediately when demand is returned from Prebid Server or when receiving the render signal from an ad server. The render process should vastly reduce ad delivery speeds. - **Less infrastructure**: The rendering API does not rely on Prebid Server's Cache server, reducing the cost and utility of Prebid Server Cache. @@ -53,20 +53,18 @@ Prebid SDK supports following integration scenarios: In all scenarios, Prebid SDK leverages Prebid Server for demand. -The next chart shows which API is used for which Ad Server +The following chart shows which API is used for which Ad Server {: .table .table-bordered .table-striped } -| |Original API|Rendering API|Mediation API| +|Ad Server|Original API|Rendering API|Mediation API| |------------|------------|-------------|-------------| |No Ad Server| | ✅ | | |GAM | ✅ | ✅ | | |AdMob | | | ✅ | |MAX | | | ✅ | -Nothe that you can integrate Prebid demand into GAM setup using one of the options - Original API, Rendering API. - -Below are the processes for all modes: +The following sections describe each integration method. ### No Ad Server From 077df14ce2498612a9b078d7c1231fb50aad6991 Mon Sep 17 00:00:00 2001 From: Chris Huie Date: Fri, 28 Apr 2023 01:54:14 -0600 Subject: [PATCH 250/763] add pbs gpp suport (#4525) * add pbs gpp suport * move to bottom --- dev-docs/pbs-bidders.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/pbs-bidders.md b/dev-docs/pbs-bidders.md index ca45b46a19..093f62c830 100644 --- a/dev-docs/pbs-bidders.md +++ b/dev-docs/pbs-bidders.md @@ -56,6 +56,7 @@ Publishers are advised to check with legal counsel before doing business with an | **Mobile App Support** | {% if page.pbs_app_supported and page.pbs_app_supported == false %}no{% elsif page.pbs_app_supported and page.pbs_app_supported == true %}yes{% else %}check with bidder{% endif %} | **Prebid Server Adapter** | yes | | **Floors Support** | {% if page.floors_supported == false %}no{% elsif page.floors_supported == true %}yes{% else %}check with bidder{% endif %} | **First Party Data Support** | {% if page.fpd_supported == true %}yes{% elsif page.fpd_supported == false %}no{% else %}check with bidder{% endif %} | | **Multi Format Support** | {% if page.multiformat_supported %}{{page.multiformat_supported}}{% else %}check with bidder{% endif %} | **ORTB Blocking Support** | {% if page.ortb_blocking_supported == true %}yes{% elsif page.ortb_blocking_supported == false %}no{% elsif page.ortb_blocking_supported == 'partial' %}partial{% else %}check with bidder{% endif %} | +| **GPP Support** | {% if page.gpp_supported == true %}yes{% else %}no{% endif %} |

"Send All Bids" Ad Server Keys

From 80a2645882436316fa4c1ac7e60bce97cb1b1e5b Mon Sep 17 00:00:00 2001 From: TM Date: Fri, 28 Apr 2023 09:55:56 +0200 Subject: [PATCH 251/763] banner support added (#4524) Co-authored-by: Tomasz Mielcarz --- dev-docs/bidders/adrino.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/adrino.md b/dev-docs/bidders/adrino.md index ba44df65c1..225727b892 100644 --- a/dev-docs/bidders/adrino.md +++ b/dev-docs/bidders/adrino.md @@ -5,7 +5,7 @@ description: Prebid Adrino Bidder Adapter pbjs: true pbs: true biddercode: adrino -media_types: no-display, native +media_types: banner, native gdpr_supported: true gvl_id: 1072 sidebarType: 1 From 13cb6b2a947e717fe6f0f115199770b037bf72b2 Mon Sep 17 00:00:00 2001 From: TheMediaGrid <44166371+TheMediaGrid@users.noreply.github.com> Date: Fri, 28 Apr 2023 10:59:59 +0200 Subject: [PATCH 252/763] TrustX: update legacy doc (#4518) --- dev-docs/bidders/trustxstandalone.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dev-docs/bidders/trustxstandalone.md b/dev-docs/bidders/trustxstandalone.md index 45c8797b58..f67fa71d6b 100644 --- a/dev-docs/bidders/trustxstandalone.md +++ b/dev-docs/bidders/trustxstandalone.md @@ -13,6 +13,8 @@ pbjs_version_notes: 6.x and before sidebarType: 1 --- +#### Is relevant for versions 6.X and before + ### Table of Contents - [Table of Contents](#table-of-contents) From f0a8a0dc897dc1d70b10a2cc7c3fbc94578e5d54 Mon Sep 17 00:00:00 2001 From: bretg Date: Fri, 28 Apr 2023 05:10:01 -0400 Subject: [PATCH 253/763] GPID: clarifying when gpt-pre-auction can be used (#4512) --- features/pbAdSlot.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/features/pbAdSlot.md b/features/pbAdSlot.md index 8da35d6380..37b125f91d 100644 --- a/features/pbAdSlot.md +++ b/features/pbAdSlot.md @@ -54,11 +54,13 @@ someday we'll deprecate it in favor of the more standard GPID. There are two ways a publisher can inject these values into the header bidding auctions: -1. Supply them manually on the PBJS AdUnits -2. Install the [GPT Pre-Auction module](/dev-docs/modules/gpt-pre-auction.html) +1. Supply them manually on the PBJS AdUnits. This is required for in-stream video and for publishers not using GAM. +2. If you're using GPT, install the [GPT Pre-Auction module](/dev-docs/modules/gpt-pre-auction.html) ### Defining them on the PBJS Ad Unit +This approach what you'll have to use for in-stream video and for publishers not using GAM. + #### Example 1 - unique ad slot names In this example, there's no need for the "UNIQUIFIER" string because every ad slot From 3ac6fc775295bad5206d0dc95edf86f69f952c5c Mon Sep 17 00:00:00 2001 From: Nima Sarayan <36764654+nimasrn@users.noreply.github.com> Date: Fri, 28 Apr 2023 12:46:58 +0330 Subject: [PATCH 254/763] Updated docs for Vidoomy blocking supported (#4493) --- dev-docs/bidders/vidoomy.md | 64 +++++++++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 7 deletions(-) diff --git a/dev-docs/bidders/vidoomy.md b/dev-docs/bidders/vidoomy.md index aba41d2353..18be825a86 100644 --- a/dev-docs/bidders/vidoomy.md +++ b/dev-docs/bidders/vidoomy.md @@ -12,23 +12,73 @@ coppa_supported: true pbs: true sidebarType: 1 schain_supported: true +ortb_blocking_supported: true --- ### Note: + [Vidoomy](https://vidoomy.com/), for more info please contact support@vidoomy.com ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|------------------|----------|------------------|------------------------------|----------| -| `id` | required | id | `123123` | `string` | -| `pid` | required | pid | `'123123'` | `string` | +| Name | Scope | Description | Example | Type | +|-------|----------|-------------|------------|----------| +| `id` | required | id | `123123` | `string` | +| `pid` | required | pid | `'123123'` | `string` | ### Bid Params (Prebid Server) {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|------------------|----------|------------------|------------------------------|----------| -| `zoneId` | required | Zone Id | "123123" | `string` | + +| Name | Scope | Description | Example | Type | +|----------|----------|---------------------------------------------|-------------------|----------------| +| `zoneId` | required | Zone Id | "123123" | `string` | +| `bcat` | optional | List of blocked advertiser categories (IAB) | `['IAB1-1']` | `string array` | +| `badv` | optional | Blocked Advertiser Domains | `['example.com']` | `string array` | +| `bapp` | optional | blocked advertiser mobile app bundles | `['app.com']` | `string array` | +| `btype` | optional | blocked creative types (e.g. XHTML) | `[1, 2, 3]` | `int array` | +| `battr` | optional | blocked creative attributes (e.g. audio) | `[1, 2, 3]` | `int array` | + +Notes: + +- Preferred to provide the `bcat`, `badv`, `bapp`, `btype` and `battr` within the first party data (above). When both + methods are provided, first + party data values will be prioritized. + +### First Party Data + +Publishers can use the `ortb2` configuration parameter to provide First Party Data. + +#### OpenRTB Parameters + +The following table contains currently supported parameters we parse. + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|---------|----------|---------------------------------------------|-------------------|---------| +| `bcat` | optional | List of blocked advertiser categories (IAB) | `['IAB1-1']` | `Array` | +| `badv` | optional | Blocked Advertiser Domains | `['example.com']` | `Array` | +| `bapp` | optional | blocked advertiser mobile app bundles | `['app.com']` | `Array` | +| `btype` | optional | blocked creative types (e.g. XHTML) | `[1, 2, 3]` | `Array` | +| `battr` | optional | blocked creative attributes (e.g. audio) | `[1, 2, 3]` | `Array` | + +Notes: + +- will extract the bcat,badv,bapp,btype,battr if passed within `ortb2` + +Example configuration: + +``` +pbjs.setConfig({ + ortb2: { + bcat: ['IAB1-1'], + badv: ['example.com'], + bapp: ['app.com'], + btype: [1, 2, 3], + battr: [1, 2, 3] + } +}); +``` From 34456b3f724237e748f4e34d84af84db9679f81d Mon Sep 17 00:00:00 2001 From: Nisar Thadathil Date: Fri, 28 Apr 2023 16:24:50 +0530 Subject: [PATCH 255/763] Updated documentation for Vidoomy bidfloor and userId module (#4474) * Updated docs for Vidoomy blocking supported * Updated documentation for Vidoomy bidfloor support --------- Co-authored-by: nima --- dev-docs/bidders/vidoomy.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/dev-docs/bidders/vidoomy.md b/dev-docs/bidders/vidoomy.md index 18be825a86..19476f409c 100644 --- a/dev-docs/bidders/vidoomy.md +++ b/dev-docs/bidders/vidoomy.md @@ -13,28 +13,31 @@ pbs: true sidebarType: 1 schain_supported: true ortb_blocking_supported: true +userIds: all +floors_supported: true --- ### Note: [Vidoomy](https://vidoomy.com/), for more info please contact support@vidoomy.com -### Bid Params +### Client Side Bid Params {: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|------------------|----------|------------------|------------------------------|----------| +| `id` | required | id | `'123123'` | `string` | +| `pid` | required | pid | `'123123'` | `string` | +| `bidfloor` | optional | CPM bidfloor in USD | `0.08` | `float` | -| Name | Scope | Description | Example | Type | -|-------|----------|-------------|------------|----------| -| `id` | required | id | `123123` | `string` | -| `pid` | required | pid | `'123123'` | `string` | -### Bid Params (Prebid Server) +### Server Side Bid Params (Prebid Server) {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |----------|----------|---------------------------------------------|-------------------|----------------| -| `zoneId` | required | Zone Id | "123123" | `string` | +| `zoneId` | required | Zone Id | `'123123'` | `string` | | `bcat` | optional | List of blocked advertiser categories (IAB) | `['IAB1-1']` | `string array` | | `badv` | optional | Blocked Advertiser Domains | `['example.com']` | `string array` | | `bapp` | optional | blocked advertiser mobile app bundles | `['app.com']` | `string array` | @@ -81,4 +84,4 @@ pbjs.setConfig({ battr: [1, 2, 3] } }); -``` +``` \ No newline at end of file From 74e824f1fdfe4890a5a5a6814e08811bf7aecc02 Mon Sep 17 00:00:00 2001 From: Patrick McCann Date: Tue, 2 May 2023 14:27:37 -0400 Subject: [PATCH 256/763] Gdpr warnings (#4529) * Update apstream.md * Update cleanmedianet.md * Update engageya.md * Update gamoshi.md * Update gamoshi.md * Update logan.md * Update logan.md * Update mathildeads.md * Update smilewanted.md * Update triplelift.md * Update videoreach.md * Update videoreach.md * Update beop.md * Update yahoossp.md * Update logan.md * Update triplelift.md * Update yahoossp.md * Update apstream.md * Update beop.md * Update cleanmedianet.md * Update engageya.md * Update logan.md * Update mathildeads.md * Update videoreach.md * Update aol.md * Update triplelift.md --------- Co-authored-by: bretg --- dev-docs/bidders/aol.md | 10 +++++++--- dev-docs/bidders/apstream.md | 6 +++++- dev-docs/bidders/beop.md | 4 ++++ dev-docs/bidders/cleanmedianet.md | 4 ++++ dev-docs/bidders/engageya.md | 6 +++++- dev-docs/bidders/logan.md | 6 +++++- dev-docs/bidders/mathildeads.md | 6 +++++- dev-docs/bidders/smilewanted.md | 6 +++++- dev-docs/bidders/videoreach.md | 5 ++++- dev-docs/bidders/yahoossp.md | 6 +++++- 10 files changed, 49 insertions(+), 10 deletions(-) diff --git a/dev-docs/bidders/aol.md b/dev-docs/bidders/aol.md index 536916ab93..2e0a80f0dc 100644 --- a/dev-docs/bidders/aol.md +++ b/dev-docs/bidders/aol.md @@ -4,17 +4,21 @@ title: AOL description: Prebid AOL Bidder Adaptor pbjs: true biddercode: aol -gdpr_supported: true +gdpr_supported: false usp_supported: true gvl_id: 25 userIds: connectId sidebarType: 1 --- +### Disclosure + +This adapter may not handle user syncs for TCF2 or GPP correctly. The user sync consent querystring parameters are generated at the time of the bid request and might be stale at the time of the user sync. See https://github.com/prebid/Prebid.js/pull/9345#issuecomment-1362887086 + ### IMPORTANT NOTICE! **TL;DR** -1. The `aol` adapter is scheduled to be depreciated. -2. Our New `yahoossp` is available for early adoption. +1. The `aol` adapter is scheduled to be deprecated. +2. Our New `yahoossp` is available for adoption. 3. Please contact your Account Manager/Executive for migration details. Dear Publishers & Partners, diff --git a/dev-docs/bidders/apstream.md b/dev-docs/bidders/apstream.md index f521dc931e..45a2bf8955 100644 --- a/dev-docs/bidders/apstream.md +++ b/dev-docs/bidders/apstream.md @@ -5,11 +5,15 @@ description: AP Stream Bidder Adapter biddercode: apstream pbjs: true media_types: banner -gdpr_supported: true +gdpr_supported: false gvl_id: 394 sidebarType: 1 --- +### Disclosure + +Note: This bidder passes consent strings but not the gdprApplies flag to its backend. This may result in some incorrect TCF2 processing, such as when the consent string is not yet available but the publisher has decided GDPR always applies. See https://github.com/prebid/Prebid.js/issues/7775 + ### Bid Params {: .table .table-bordered .table-striped } diff --git a/dev-docs/bidders/beop.md b/dev-docs/bidders/beop.md index c6ae7b9c7c..bc7acb126e 100644 --- a/dev-docs/bidders/beop.md +++ b/dev-docs/bidders/beop.md @@ -7,6 +7,10 @@ biddercode: beop sidebarType: 1 --- +### Disclosure + +Note: This bidder never sends gdprApplies to its endpoint. This may result in some incorrect GDPR processing, such as when the consent string is not yet available but the publisher has decided GDPR always applies. See https://github.com/prebid/Prebid.js/issues/7775 + ### Bid Params {: .table .table-bordered .table-striped } diff --git a/dev-docs/bidders/cleanmedianet.md b/dev-docs/bidders/cleanmedianet.md index 5b1d420dce..012797c749 100644 --- a/dev-docs/bidders/cleanmedianet.md +++ b/dev-docs/bidders/cleanmedianet.md @@ -21,6 +21,10 @@ gvl_id: multiformat_supported: will-bid-on-any --- +### Disclosure + +Note: This bidder appears to only consider gdprApplies if a consent string is available. This may result in some incorrect GDPR processing, such as when the consent string is not yet available but the publisher has decided GDPR always applies. See https://github.com/prebid/Prebid.js/issues/7775 + ### Bid params {: .table .table-bordered .table-striped } diff --git a/dev-docs/bidders/engageya.md b/dev-docs/bidders/engageya.md index 7b1e0523f2..59acd25cac 100644 --- a/dev-docs/bidders/engageya.md +++ b/dev-docs/bidders/engageya.md @@ -5,10 +5,14 @@ description: Prebid Engageya Bidder Adapter media_type: banner, native biddercode: engageya pbjs: true -gdpr_supported: true +gdpr_supported: false sidebarType: 1 --- +### Disclosure + +Note: This bidder appears to only consider gdprApplies if a consent string is available. This may result in some incorrect TCF2 processing, such as when the consent string is not yet available but the publisher has decided GDPR always applies. See https://github.com/prebid/Prebid.js/issues/7775 + ### Bid params {: .table .table-bordered .table-striped } diff --git a/dev-docs/bidders/logan.md b/dev-docs/bidders/logan.md index dabd33ac4e..8280d42bbd 100644 --- a/dev-docs/bidders/logan.md +++ b/dev-docs/bidders/logan.md @@ -6,12 +6,16 @@ biddercode: logan usp_supported: true schain_supported: true media_types: banner, video, native -gdpr: true +gdpr_supported: false pbjs: true pbs: true sidebarType: 1 --- +### Disclosure + +Note: This bidder appears to only consider gdprApplies if a consent string is available. This may result in some incorrect GDPR processing, such as when the consent string is not yet available but the publisher has decided GDPR always applies. See https://github.com/prebid/Prebid.js/issues/7775 + ### Bid Params {: .table .table-bordered .table-striped } diff --git a/dev-docs/bidders/mathildeads.md b/dev-docs/bidders/mathildeads.md index f5c0043b86..564b53ebab 100644 --- a/dev-docs/bidders/mathildeads.md +++ b/dev-docs/bidders/mathildeads.md @@ -6,13 +6,17 @@ biddercode: mathildeads usp_supported: true schain_supported: true media_types: banner, video, native -gdpr_supported: true +gdpr_supported: false pbjs: true pbs: false pbs_app_supported: false sidebarType: 1 --- +### Disclosure + +Note: This bidder appears to only consider gdprApplies if a consent string is available. This may result in some incorrect TCF2 processing, such as when the consent string is not yet available but the publisher has decided GDPR always applies. See https://github.com/prebid/Prebid.js/issues/7775 + ### Prebid.JS Bid Params {: .table .table-bordered .table-striped } diff --git a/dev-docs/bidders/smilewanted.md b/dev-docs/bidders/smilewanted.md index a56e2e1e16..13dd71aee8 100644 --- a/dev-docs/bidders/smilewanted.md +++ b/dev-docs/bidders/smilewanted.md @@ -6,13 +6,17 @@ media_types: banner, video pbjs: true pbs: true biddercode: smilewanted -gdpr_supported: true +gdpr_supported: false usp_supported: true userIds: all gvl_id: 639 sidebarType: 1 --- +### Disclosure + +Note: This bidder appears to only consider gdprApplies if a consent string is available.. This may result in some incorrect TCF2 processing, such as when the consent string is not yet available but the publisher has decided GDPR always applies. See https://github.com/prebid/Prebid.js/issues/7775 + ### Note To use us as a bidder you must have an account and an active "zoneId" on our Smile Wanted platform. diff --git a/dev-docs/bidders/videoreach.md b/dev-docs/bidders/videoreach.md index 2420efc1bc..e74f82d5c7 100644 --- a/dev-docs/bidders/videoreach.md +++ b/dev-docs/bidders/videoreach.md @@ -5,10 +5,13 @@ description: Video Reach Bidder Adapter for Prebid.js pbjs: true biddercode: videoreach media_types: banner, video -gdpr_supported: true +gdpr_supported: false sidebarType: 1 --- +### Disclosure + +Note: This bidder's user syncs appear to only consider gdprApplies if a consent string is available. This may result in some incorrect TCF2 processing, such as when the consent string is not yet available but the publisher has decided GDPR always applies. See https://github.com/prebid/Prebid.js/issues/7775 ### Bid Params diff --git a/dev-docs/bidders/yahoossp.md b/dev-docs/bidders/yahoossp.md index 5be9c7b356..b5b077a33e 100644 --- a/dev-docs/bidders/yahoossp.md +++ b/dev-docs/bidders/yahoossp.md @@ -7,7 +7,7 @@ pbjs: true media_types: banner, video biddercode: yahoossp prebid_member: true -gdpr_supported: true +gdpr_supported: false usp_supported: true schain_supported: true coppa_supported: true @@ -16,6 +16,10 @@ userIds: All sidebarType: 1 --- +### Disclosure + +This adapter may not handle user syncs for TCF2 or GPP correctly. The user sync consent querystring parameters are generated at the time of the bid request and might be stale at the time of the user sync. See https://github.com/prebid/Prebid.js/pull/9345#issuecomment-1362887086 + ### Important Notice (JS vs PBS) There are differences between our Prebid.js & Prebid-Server Yahoo SSP adapters. The Prebid-server adapter currently does not support: From c9e2e1b6dffd0a69e7fbe52d574ea9bd919c549a Mon Sep 17 00:00:00 2001 From: bretg Date: Tue, 2 May 2023 16:32:26 -0400 Subject: [PATCH 257/763] PBS auction endpoint price granularity (#4532) native is supported per https://github.com/prebid/prebid-server/issues/857 --- .../endpoints/openrtb2/pbs-endpoint-auction.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md b/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md index a6904a8040..ea68c7a9d2 100644 --- a/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md +++ b/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md @@ -375,6 +375,7 @@ to set these params on the response at `response.seatbid[i].bid[j].ext.prebid.ta | mediatypepricegranularity | no | Defines how PBS quantizes bid prices into buckets, allowing for different ranges by media type. | (see below) | object | | mediatypepricegranularity.banner | no | Defines how PBS quantizes bid prices into buckets for banners. | (see below) | object | | mediatypepricegranularity.video | no | Defines how PBS quantizes bid prices into buckets for video. | (see below) | object | +| mediatypepricegranularity.native | no | Defines how PBS quantizes bid prices into buckets for native. | (see below) | object | | mediatypepricegranularity.TYPE.precision | no | How many decimal places are there in price buckets. | Defaults to 2 | integer | | mediatypepricegranularity.TYPE.ranges | no | Same as pricegranularity.ranges | (see below) | array of objects | | includewinners | no | Whether to include targeting for the winning bids in response.seatbid[].bid[]. ext.prebid.targeting. Defaults to false. | true | boolean | @@ -416,19 +417,20 @@ One of "includewinners" or "includebidderkeys" must be true (both default to fal The parameter "includeformat" indicates the type of the bid (banner, video, etc) for multiformat requests. It will add the key `hb_format` and/or `hb_format_{bidderName}` as per "includewinners" and "includebidderkeys" above. -MediaType PriceGranularity (PBS-Java only) - when a single OpenRTB request contains multiple impressions with different mediatypes, or a single impression supports multiple formats, the different mediatypes may need different price granularities. If `mediatypepricegranularity` is present, `pricegranularity` would only be used for any mediatypes not specified. +MediaType PriceGranularity - when a single OpenRTB request contains multiple impressions with different mediatypes, or a single impression supports multiple formats, the different mediatypes may need different price granularities. If `mediatypepricegranularity` is present, `pricegranularity` would only be used for any mediatypes not specified. +For example: ``` { "ext": { "prebid": { "targeting": { - "mediatypepricegranularity": { - "banner": { - "ranges": [ + "pricegranularity": { // use this for banner and native + "ranges": [ {"max": 20, "increment": 0.5} ] - }, + }, + "mediatypepricegranularity": { // video gets a different set of ranges "video": { "ranges": [ {"max": 10, "increment": 1}, @@ -468,7 +470,8 @@ MediaType PriceGranularity (PBS-Java only) - when a single OpenRTB request conta The winning bid for each `request.imp[i]` will also contain `hb_bidder`, `hb_size`, and `hb_pb` (with _no_ {bidderName} suffix). To prevent these keys, set `request.ext.prebid.targeting.includeWinners` to false. -**NOTE**: Targeting keys are limited to 20 characters. If {bidderName} is too long, the returned key +**NOTES**: +- Targeting keys are limited to 20 characters. If {bidderName} is too long, the returned key will be truncated to only include the first 20 characters. ##### Buyer UID From 9bf44d0e478a2bc158deacf9b0b8fa6da04fa01f Mon Sep 17 00:00:00 2001 From: congdu-kun <126609480+congdu-kun@users.noreply.github.com> Date: Wed, 3 May 2023 12:56:07 -0700 Subject: [PATCH 258/763] add documentation for PAIR ID userid submodule (#4462) * add documentation for PAIR ID userid submodule * Add liveramp storageKey parameter to Pair Id doc * Add a short blurb for PAIR * Add link to PAIR technical doc --- dev-docs/modules/userid-submodules/pair.md | 65 ++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 dev-docs/modules/userid-submodules/pair.md diff --git a/dev-docs/modules/userid-submodules/pair.md b/dev-docs/modules/userid-submodules/pair.md new file mode 100644 index 0000000000..0671559854 --- /dev/null +++ b/dev-docs/modules/userid-submodules/pair.md @@ -0,0 +1,65 @@ +--- +layout: userid +title: Google PAIR ID +description: pair PairId User ID sub-module +useridmodule: pairIdSystem +--- + +Developed by and for use with Display and Video 360, PAIR (Publisher Advertiser Identity Reconciliation) is a secure and privacy-forward way for enabling advertisers and publishers to reconcile their +first-party data for marketing use cases via advanced data encryption methods without the +reliance on third-party cookies. PAIR can help advertisers and publishers maintain control of first-party data while ensuring there is no pooling of data, no leakage of data, no leakage of insights, durablility for the future using secure encryption methods, and no user tracking across publishers. See this [document](https://services.google.com/fh/files/misc/pair_visual_final_10242022.pdf) for more information about PAIR. + +Add it to your Prebid.js package with: + +{: .alert.alert-info :} +gulp build --modules=pairIdSystem + +## PAIR ID Configuration + +{: .table .table-bordered .table-striped } +| Param under userSync.userIds[] | Scope | Type | Description | Example | +| --- | --- | --- | --- | --- | +| name | Required | String | The name of PAIR ID user ID module. | `"pairId"` | +| params | Optional | Object | Container of all module params. | | +| params.liveramp | Optional | Object | Container of all liveramp cleanroom specified params. | | +| params.liveramp.storageKey | Optional | String | storage key to fetch liveramp provided PAIR Id, the default key is `"_lr_pairId_"` | `"_lr_pairId_custom"` | + +## PAIR ID Examples + +Publishers manage PAIR Ids themselves can store pairIds as a byte64 encoded array of ids in local storage and/or 1st party cookies entry `pairId`. + +{% highlight javascript %} + +// should have byte64 value ready in 'pairId' local storage/cookie entry + +pbjs.setConfig({ + userSync: { + userIds: [{ + name: 'pairId' + }] + } +}); +{% endhighlight %} + +Or if to use cleanrooms provided implementation, it can be specified by adding the provider and their configs to the config, take liveramp as an example. + +{% highlight javascript %} + +// value in 'pairid' local storage/cookie entry will be combined with ids provided by cleamroom liveramp + +pbjs.setConfig({ + userSync: { + userIds: [{ + name: 'pairId', + params: { + liveramp: { + storageKey: '_lr_pairId_custom' + } + }, + }] + } +}); +{% endhighlight %} + + + From 81b10f9525d1332052e6621494123bdf4872b9ed Mon Sep 17 00:00:00 2001 From: bretg Date: Wed, 3 May 2023 16:10:12 -0400 Subject: [PATCH 259/763] mobile FAQ (#4530) * mobile FAQ * Update faq/prebid-mobile-faq.md Co-authored-by: Muki Seiler * adding new entries from Yurii --------- Co-authored-by: Muki Seiler --- _data/sidebar.yml | 16 ++++ faq/faq.md | 16 ++-- faq/prebid-mobile-faq.md | 174 +++++++++++++++++++++++++++++++++++++++ faq/prebid-server-faq.md | 6 +- 4 files changed, 205 insertions(+), 7 deletions(-) create mode 100644 faq/prebid-mobile-faq.md diff --git a/_data/sidebar.yml b/_data/sidebar.yml index 8129f22992..7b85c62d59 100644 --- a/_data/sidebar.yml +++ b/_data/sidebar.yml @@ -652,6 +652,14 @@ sectionTitle: subgroup: 0 +- sbSecId: 2 + title: Prebid Mobile FAQ + link: /faq/prebid-mobile-faq.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 0 + # - sbSecId: 2 # title: Modules # link: @@ -1442,6 +1450,14 @@ sectionTitle: subgroup: 0 +- sbSecId: 5 + title: Prebid Server FAQ + link: /faq/prebid-server-faq.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 0 + - sbSecId: 5 title: Versions link: diff --git a/faq/faq.md b/faq/faq.md index de57ee611b..6a19bb8629 100644 --- a/faq/faq.md +++ b/faq/faq.md @@ -10,19 +10,25 @@ sidebarType: 7 Everyone has questions. We have answers - at least to some of the most frequently asked questions. -## [Prebid.js](/dev-docs/faq.html) +## Prebid.js Check out the [Prebid.js FAQ](/dev-docs/faq.html). If you don't find what you need there, here are some additional resources: - [Troubleshooting](/troubleshooting/troubleshooting.html) - [About Prebid.js](/prebid/prebidjs.html) -- [Training Videos](/videos/index.html) -- [Resources](/support/index.html) +- [Support Resources](/support/index.html) -## [Prebid Server](/faq/prebid-server-faq.html) +## Prebid Server If you don't find answers to your questions in the [Prebid Server FAQ](/faq/prebid-server-faq.html), you can learn more here: - [Troubleshooting](/troubleshooting/troubleshooting.html) - [Prebid Server Overview](/prebid-server/overview/prebid-server-overview.html) -- [Resources](/support/index.html) +- [Support Resources](/support/index.html) + +## Prebid Mobile SDK + +Please see the [Prebid Mobile FAQ](/faq/prebid-mobile-faq.html). You can learn more at: + +- [Prebid Mobile home page](/prebid-mobile/prebid-mobile.html) +- [Support Resources](/support/index.html) diff --git a/faq/prebid-mobile-faq.md b/faq/prebid-mobile-faq.md new file mode 100644 index 0000000000..d8ee30bb19 --- /dev/null +++ b/faq/prebid-mobile-faq.md @@ -0,0 +1,174 @@ +--- +layout: page_v2 +title: Prebid Mobile FAQ | Prebid +description: Prebid Mobile FAQ +sidebarType: 2 +--- + +# Prebid Mobile FAQ +{:.no_toc} + +This page has answers to some frequently asked questions about Prebid Mobile. If you don't find what you're looking for here, there are other ways to [get help](/support/index.html). + +* TOC +{:toc} + +## General + +### What size is the SDK? + +Compiled sizes: +- Android: 800 KB +- iOS: 3.2 Mb + +Note: these sizes will go down as several assets will be pulled out into a CDN over the coming months. + +### Does the SDK have UI components? If so, are they localized? + +The Prebid SDK has no localized UI components. + +Most probably you will use an integration approach that doesn’t utilize UI component at all, as they are used only with the Rendering API. + +### Is the SDK compressed using any compression tools? + +No. + +### Is the SDK encrypted or obfuscated in any way? + +No. + +## Dependencies + +### Does the SDK use third-party libraries? + +Just the Open Measurement SDK. + +### Does it have external dependencies? + +No. + +### Does it use open-source libraries? If so, which licences are used? + +No. The Prebid SDK is itself a library open sourced under the Apache 2 license. + +### Are there any back-end dependencies to this SDK? + +Yes - the app developer must have a [Prebid Server](/prebid-server/index.html) at their disposal. This is open source software that they may run themselves, or they may contract with a [Managed Service](https://prebid.org/product-suite/managed-services/). + +## Communication + +### Does the SDK make network requests and how often and how heavy? + +Yes. Its main job is to formulate requests to [Prebid Server](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html) to obtain bids for ad units. + +The frequency of HTTPS network calls is up to the app developer. It depends on whether and how frequently ad units are refreshed. The payload size will depend on how many ad units are present in the app and what kind of consent strings are present. For one ad unit, the size should be under 2KB, with each ad unit adding a couple hundred bytes. + +## Maintenance + +### How often is the SDK updated? + +It varies, but on average, it's updated about once per month. + +The open source repos have a list of releases: +https://github.com/prebid/prebid-mobile-ios/releases +https://github.com/prebid/prebid-mobile-android/releases + +### How does one update the Prebid Mobile version? + +The best way is to integrate SDK via dependency managers - CocoaPods (iOS) and Maven (Android). You can specify the particular version or point the dependency manager to the latest SDK version. In the second case, the new version of SDK will be added to the app as soon as released. + +### If a bug is found in the SDK, what is the process for reporting it? + +Please open a github issue: + +https://github.com/prebid/prebid-mobile-ios/issues +https://github.com/prebid/prebid-mobile-android/issues + +### Is there a support forum where we can monitor issues and resolutions? + +Yes, you may monitor github issues and pull requests at the repositories noted above. + +### Are there debug/logging options that can be toggled on/off? +Yes. + +1. You can change app console log verbose level via PrebiMobile.shared.logLevel +2. You can set the OpenRtb 'test' flag for Prebid Server to return additional server-side information. See 'debug' in https://docs.prebid.org/prebid-mobile/pbm-api/android/code-integration-android.html and https://docs.prebid.org/prebid-mobile/pbm-api/ios/code-integration-ios.html + +## Privacy/Security + +### Does the SDK store any data locally on the device? If so, what is it? + +If the developer calls certain functions, the SDK will store the results for future auctions. See the "Local Storage" section of +https://docs.prebid.org/prebid-mobile/pbm-api/android/pbm-targeting-params-android.html + +In all other cases SDK plays a transport role. It collects information from API (if it’s allowed by privacy settings) and sends it in the bid requests to the server. SDK uses the following datasources: +- TCF API - SDK reads data from UserDefaults +- Configuration / Targeting API - publishers provide data to SDK in runtime +- Device API - SDK collects device info using public OS API, like user agent, OS version, location + +### Does the SDK send any Personal Information over the network? + +The Prebid SDK sends information provided by the publisher using the Targeting API. We recommend that publishers avoid targeting to personal information unless reviewed by their own legal teams. + +The SDK will send IP address and device latitude/longitude information. Prebid Server will anonymize requests as required by regulations, including GDPR, COPPA, CCPA. See the [Prebid Server privacy features](/prebid-server/features/pbs-privacy.html) for more details. + +### Is the SDK GDPR compliant? + +Yes - the SDK will forward TCF consent strings to Prebid Server where requests may be anonymized or restricted. It is up to the entity hosting Prebid Server to configure the server properly. + +Also note that Prebid.org is committed to other privacy initiatives such as the IAB's Global Privacy Platform, including US National Privacy and TCF-Canada. + +### How does the SDK allow for deletion of user private data? + +SDK does’t commit any action on managing user data. Only publishers using SDK’s API can provide/store/remove user data. + +## Performance + +### Does the SDK do any work in the background? If so, what is it? + +The SDK will receive responses from Prebid Server in the background and call the application-defined callbacks. + +The developer may set up auto-refresh for ad units. If in the background, Prebid SDK will not perform bid requests. + +### Has power usage related to this SDK been tested? + +No. We'd welcome any community member to help us with requirements, code, and/or results. + +### How long does it take to initialize? +Is not measured, but very fast. Because it makes only initialization of internal classes and optional health check calls to PBS. The result of the health check call does not influence the SDK behavior, so publishers may not wait for its result during the initialization. + +## API Questions + +### What is the difference between Original API and Rendering API? + +The main difference is that with Original API, the Prebid demand is rendered by the Ad Server SDK (Google Mobile Ads SDK) using Prebid Universal Creative. But with Rendering API, Prebid SDK renders the winning bid in its own Web or Video views. + +## iOS Specifics + +### Does the SDK support Swift 3+? + +Yes. Prebid SDK is developed with latest Xcode version. + +### Does it ship as a CocoaPod? + +Yes - https://cocoapods.org/pods/PrebidMobile + +### Is it bit code enabled? + +Starting with 2.1.0: No + +### Does it support 64-bit? +Yes. + +## Android Specifics + +### What are the targeted APIs? + +Android API 32. + +### Does it include Broadcast Receivers in the Manifest? + +No. + +## Further Reading +- [Prebid Mobile home page](/prebid-mobile/prebid-mobile.html) diff --git a/faq/prebid-server-faq.md b/faq/prebid-server-faq.md index 827f51f179..9a58f8d7b6 100644 --- a/faq/prebid-server-faq.md +++ b/faq/prebid-server-faq.md @@ -26,8 +26,10 @@ but it's not necessary for contributing code as a community member. ## How can I debug Prebid Server requests? + When invoking Prebid Server through Prebid.js, this can be done just by adding `?pbjs_debug=true` to the page URL. -+ Through AMP, you can put `test: 1` in the stored request, or add `debug=1` to the query string of Prebid Server's AMP endpoint. -+ If calling directly, add `test: 1` to the JSON. ++ Through AMP, you can put `ext.prebid.debug: true` in the stored request, or add `debug=1` to the query string of Prebid Server's AMP endpoint. ++ If calling directly, add `ext.prebid.debug: true` to the JSON. + +The OpenRTB `test:1` flag will also turn on debugging, and for true test requests, is the most appropriate thing to do, depending on your scenario. SSPs may not respond or log `test` requests. ## Why are there two versions of Prebid Server? Are they kept in sync? From bcf152a64652a36ab0f0382b85cafa49bdbe2417 Mon Sep 17 00:00:00 2001 From: Muki Seiler Date: Thu, 4 May 2023 21:41:30 +0200 Subject: [PATCH 260/763] Fix #4539 by allowing GA if consent is already given (#4540) --- _includes/footer.html | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/_includes/footer.html b/_includes/footer.html index 79da5595f1..c4b6cdae34 100644 --- a/_includes/footer.html +++ b/_includes/footer.html @@ -26,15 +26,21 @@ anonymize_ip: true }); - // new google analytics v4 property - gtag('config', 'G-GM972HCTEB'); - - // use the global variable provided in the head-common to wait for onetrust - window.onetrustLoaded.then(() => { - // grant consent if one trust says so. We use the callback to update gtag consent status + // grant consent if one trust says so. We use the callback to update gtag consent status + function oneTrustGaConsent() { OneTrust.InsertHtml('given', 'prebid-google-analytics-consent', function() { gtag('consent', 'update', {'ad_storage': 'granted','analytics_storage': 'granted'}); }, {}, 'C0002'); + } + + + // use the global variable provided in the head-common to wait for onetrust + window.onetrustLoaded.then(() => { + // if consent has already been given + oneTrustGaConsent(); + + // if a users sees the first layer message and gives consent + OneTrust.OnConsentChanged(() => oneTrustGaConsent()); }); From 344217b52664d8903f2dcd2b067c80b6655b092b Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Date: Fri, 5 May 2023 17:55:38 +0200 Subject: [PATCH 261/763] greenbids RTD provider (#4517) * greenbids RTD provider * update doc * code formatting Co-authored-by: Muki Seiler * Code formatting Co-authored-by: Muki Seiler --------- Co-authored-by: Muki Seiler --- dev-docs/modules/greenbidsRtdProvider.md | 72 ++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 dev-docs/modules/greenbidsRtdProvider.md diff --git a/dev-docs/modules/greenbidsRtdProvider.md b/dev-docs/modules/greenbidsRtdProvider.md new file mode 100644 index 0000000000..a30eb51016 --- /dev/null +++ b/dev-docs/modules/greenbidsRtdProvider.md @@ -0,0 +1,72 @@ +--- +layout: page_v2 +title: Greenbids Realtime Module +display_name: Greenbids Realtime Module +description: The Greenbids RTD adapter allows to dynamically filter calls to SSP to reduce outgoing call to the programmatics chain, reducing ad serving carbon impact +page_type: module +module_type: rtd +module_code : greenbidsRtdProvider +enable_download : true +vendor_specific: true +sidebarType : 1 +--- + +# Greenbids Realtime Module +{:.no_toc} + +* TOC +{:toc} + +## Overview + +The Greenbids RTD adapter allows to dynamically filter calls to SSP to reduce outgoing call to the programmatics chain, reducing ad serving carbon impact + +## Configuration + +This module is configured as part of the `realTimeData.dataProviders` object. + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|------------|----------|----------------------------------------|---------------|----------| +| `name ` | required | Real time data module name | `'greenbidsRtdProvider'` | `string` | +| `waitForIt ` | required (mandatory true value) | Tells prebid auction to wait for the result of this module | `'true'` | `boolean` | +| `params` | required | | | `Object` | +| `params.pbuid` | required | The client site id provided by Greenbids. | `'TEST_FROM_GREENBIDS'` | `string` | +| `params.targetTPR` | optional (default 0.95) | Target True positive rate for the throttling model | `0.99` | `[0-1]` | +| `params.timeout` | optional (default 200) | Maximum amount of milliseconds allowed for module to finish working (has to be <= to the realTimeData.auctionDelay property) | `200` | `number` | + +#### Example + +```javascript +const greenbidsDataProvider = { + name: 'greenbidsRtdProvider', + waitForIt: true, + params: { + pbuid: 'TEST_FROM_GREENBIDS', + timeout: 200 + } +}; +pbjs.setConfig({ + realTimeData: { + auctionDelay: 200, + dataProviders: [greenbidsDataProvider] + } +}); +``` + +## Integration +To install the module, follow these instructions: + +#### Step 1: Contact Greenbids to get a pbuid and account + +#### Step 2: Integrate the Greenbids Analytics Adapter (see prebid Analytics modules) + +#### Step 3: Prepare the base Prebid file + +- Option 1: Use Prebid [Download](/download.html) page to build the prebid package. Ensure that you do check *Greenbids Realtime Module* module + +- Option 2: From the command line, run `gulp build --modules=greenbidsRtdProvider,...` + +#### Step 4: Set configuration + +Enable Greenbids Real Time Module using `pbjs.setConfig`. Example is provided in Configuration section. \ No newline at end of file From 1d546d7418c5a4c1e49d1f07b02aa4e7a4ea3a2a Mon Sep 17 00:00:00 2001 From: bretg Date: Fri, 5 May 2023 17:17:04 -0400 Subject: [PATCH 262/763] first batch of intro videos (#4516) * initial control of intro videos * adding next two videos * missing paren * fixed link * added Prebid Server * padding * updated CSS --- _layouts/home.html | 3 +- overview/all-videos.md | 16 +++++ overview/intro-to-header-bidding-video.md | 70 +++++++++++++++++++ overview/intro-to-header-bidding.md | 10 +++ overview/intro-video.md | 50 +++++++++++++ overview/intro.md | 17 +++++ prebid-mobile/prebid-mobile-video.md | 46 ++++++++++++ prebid-mobile/prebid-mobile.md | 10 +++ .../overview/prebid-server-overview-video.md | 65 +++++++++++++++++ .../overview/prebid-server-overview.md | 9 +++ prebid/prebidjs-video.md | 54 ++++++++++++++ prebid/prebidjs.md | 12 ++++ 12 files changed, 361 insertions(+), 1 deletion(-) create mode 100644 overview/all-videos.md create mode 100644 overview/intro-to-header-bidding-video.md create mode 100644 overview/intro-video.md create mode 100644 prebid-mobile/prebid-mobile-video.md create mode 100644 prebid-server/overview/prebid-server-overview-video.md create mode 100644 prebid/prebidjs-video.md diff --git a/_layouts/home.html b/_layouts/home.html index 4738f798d5..fec6c2de1b 100644 --- a/_layouts/home.html +++ b/_layouts/home.html @@ -9,7 +9,8 @@

Prebid Documentation

-

Welcome to the Prebid.org technical documentation portal. Here you will find the help you need to work with the Prebid.org family of products. Visit Prebid.org for general product overviews, blog updates, and additional information on membership and events. If you're wondering what Header Bidding is all about, check out our Introduction to Header Bidding

+

Welcome to the Prebid.org technical documentation portal. Here you will find the help you need to work with the Prebid.org family of Header Bidding products. You could start with the video introduction to Prebid or visit Prebid.org for general product overviews, blog updates, and additional information on membership and events. If you're wondering what Header Bidding is all about, check out our Introduction to Header Bidding

. +
diff --git a/overview/all-videos.md b/overview/all-videos.md new file mode 100644 index 0000000000..2d299d326f --- /dev/null +++ b/overview/all-videos.md @@ -0,0 +1,16 @@ +--- +layout: page_v2 +title: All Prebid Training Video +description: Directory of Prebid Video Overviews +sidebarType: 0 +--- + +# Video Overviews + +These are the multi-media overviews that Prebid has created covering various aspect of Header Bidding and Prebid. + +1. [Intro to Header Bidding](/overview/intro-to-header-bidding-video.html) - A high-level explanation of what header bidding is, what its benefits are, and how it works. +2. [Intro to Prebid](/overview/intro-video.html) - A high-level introduction to the Prebid community and its products. +3. [Intro to Prebid.js](/prebid/prebidjs-video.html) - A high-level overview of Prebid.js, Prebid’s header bidding product for websites. +4. [Intro to Prebid Mobile](/prebid-mobile/prebid-mobile-video.html) - A high-level overview of Prebid Mobile, Prebid’s header bidding product for iOS and Android applications. +4. [Intro to Prebid Server](/prebid-server/overview/prebid-server-overview-video.html) - A high-level overview of Prebid Server, Prebid’s solution for header bidding in the cloud. diff --git a/overview/intro-to-header-bidding-video.md b/overview/intro-to-header-bidding-video.md new file mode 100644 index 0000000000..9a278ae91f --- /dev/null +++ b/overview/intro-to-header-bidding-video.md @@ -0,0 +1,70 @@ +--- +layout: page_v2 +title: Video Intro to Header Bidding +description: A video overview of Header Bidding +sidebarType: 0 +--- + +# A Video Introduction to Header Bidding + +A high-level explanation of what header bidding is, what its benefits are, and how it works. + +
+ +Further Content: +- [Intro to Header Bidding](/overview/intro-to-header-bidding.html) +- [Header Bidding with Prebid](/overview/intro.html#header-bidding-with-prebid) +- [All videos](/overview/all-videos.html) + +Related Videos: +- [Introduction to Prebid](/overview/intro-video.html) +- [Introduction to Prebid.js](/prebid/prebidjs-video.html) + +## Transcript + +Header bidding is a technology used by website publishers and app developers to sell advertising opportunities through programmatic advertising marketplaces. It uses real-time auctions to maximize the value of ads online. + +### Yield Management Problem +To understand why header bidding is important, let's explore the problem it aims to solve. Publishers and app developers earn money through advertising, and they want to maximize the revenue they earn from a finite amount of traffic. This challenge is similar to a farmer working to maximize the amount of vegetables their land yields, or an airline maximizing the airfare they earn for seats on flights. This problem is called yield management or yield optimization. + +To maximize yield, a seller will need to form relationships with a selection of buyers that are able to buy advertising impressions at good prices. They’ll also set up an advertising technology stack that gives their buyers the opportunity to compete for each and every ad impression. The ad stack is also responsible for rendering the ads and offers the seller controls that influence pricing, ad quality, and user experience. Analytics, A/B testing, and other optimization tools help the seller grow their yield over time. + +In digital media, there are two prominent techniques for managing yield: the waterfall and header bidding. + +### Before Header Bidding: The Waterfall +The waterfall predates header bidding, and header bidding was developed to overcome shortcomings in the waterfall’s ability to maximize yield. + +Let’s break this down: + +In a waterfall, the seller creates a prioritized ranking of their buyer partners. Each time an impression is available for sale, the top partner in the ranking is shown the opportunity and has the option to buy it or refuse it. If they choose to buy, they deliver their ad. If they refuse, the waterfall shows the impression to the next partner in the ranking, and the cycle repeats until a willing buyer is found. + +The waterfall’s design limits publishers’ ability to maximize yield, because it doesn’t expose impression opportunities to all of the potential buyers and can’t find the best price for each impression. Its sequential nature also makes it a slow process, which causes some impressions to go unsold. + +### Header Bidding: A Better Solution to the Yield Management Problem +Header bidding overcomes many of the waterfall’s limitations using a simple, time-tested mechanism: auctions. + +Auctions allow all potential buyers to see the impression simultaneously and compete for it by bidding. This ensures that the impression is sold for a fair price and delivers the ad quickly and efficiently. + +Publishers and app developers find that header bidding allows them to work with more buyers than the waterfall does. Header bidding also allows buyers to find their target audiences more easily and deliver more effective advertising campaigns + +### How Header Bidding Works +Let’s get into how header bidding works: + +For most sellers, header bidding is one component of an advertising technology stack. The header bidding component is known as the “header bidding wrapper”, and it works in close coordination with the seller’s primary ad server. + +When a web page or app loads, the header bidding wrapper also loads. The wrapper initiates an auction for the available ad spaces on the page, and sends bid requests to potential buyers, notifying them that an impression is available for sale. + +In a fraction of a second, the buyers respond with bids containing the ad they want to serve, the price they're willing to pay, and other relevant information. The header bidding wrapper then collects and passes these bids to the primary ad server. + +The ad server considers the header bidding bids alongside other potential buyers and decides which buyer wins. Within the ad server, header bidding bids compete based on price and do not interfere with the delivery of reserved, guaranteed and sponsorship campaigns. When the ad server chooses a header bidding buyer, it works with the wrapper to render the ad to the page. + +### Header Bidding and Prebid +Header bidding began to appear in 2015, and has since replaced the waterfall on most websites. In mobile app environments, header bidding is quickly gaining popularity. Prebid.org formed to help publishers and advertising technology companies coordinate their efforts around header bidding, and Prebid is now the industry standard. Prebid is a non-profit member-based organization that offers open-source solutions for header bidding for all major ad formats, device types, and environments. + +### Learn More +If you want to learn more about header bidding and Prebid, visit docs.prebid.org. + + +## Related Reading +- [Intro to Header Bidding](/overview/intro-to-header-bidding.html) +- [All video overviews](/overview/all-videos.html) diff --git a/overview/intro-to-header-bidding.md b/overview/intro-to-header-bidding.md index fc03f918a7..f1237a9430 100644 --- a/overview/intro-to-header-bidding.md +++ b/overview/intro-to-header-bidding.md @@ -18,6 +18,16 @@ Let’s start by saying that the term “header bidding” is a bit of a misnome * TOC {:toc} +## Overview + +A video overview of header bidding. + +
+ +Further Reading: +- [Transcript of this video overview](/overview/intro-to-header-bidding-video.html) +- [Header Bidding with Prebid](/overview/intro.html#header-bidding-with-prebid) + ## Brief Description Header bidding is a process that enables publishers to capture bids for ad units from demand sources that might otherwise have been missed. By implementing header bidding, a publisher can gather bids from multiple sources that will then compete directly with bids from the ad server. What this means is that header bidding can help you, as a publisher, make more money and improve your ad quality by making the auctions for your ad space more competitive and transparent. diff --git a/overview/intro-video.md b/overview/intro-video.md new file mode 100644 index 0000000000..df04a35489 --- /dev/null +++ b/overview/intro-video.md @@ -0,0 +1,50 @@ +--- +layout: page_v2 +title: Video Intro to Prebid.org +description: A video overview of Prebid org and products +sidebarType: 0 +--- + +# A Video Overview of Prebid.org + +A high-level introduction to the Prebid community and its products. + +
+ +Further Content: +- [Intro to Prebid](/overview/intro.html) +- [Introduction for Developers](/developers.html) +- [Prebid Membership](https://prebid.org/membership) +- [Prebid on Github](https://github.com/prebid) +- [All videos](/overview/all-videos.html) + +Related Videos: +- [Introduction to Header Bidding](/overview/intro-to-header-bidding-video.html) +- [Introduction to Prebid.js](/prebid/prebidjs-video.html) +- [Introduction to Prebid Mobile](/prebid-mobile/prebid-mobile-video.html) +- Introduction to Prebid Server (coming soon) + +## Transcript + +Prebid is a non-profit organization, a JavaScript library, and a suite of products that extend the capabilities of the publisher ad stack. + +Prebid is a member-based organization made up of companies in the digital publishing and advertising technology industries. These companies work together through Prebid.org to build free, open source software that monetizes digital media through advertising. + +### Why Prebid? +Prebid addresses the need for reliable shared technology in programmatic advertising. Serving a single ad is a complex and tightly choreographed routine that requires the cooperation of many entities. This process takes just a few seconds and occurs several billion times per day, accounting for billions of dollars per year in advertising spend. + +With such high stakes, the digital media industry needs standards that are accessible, transparent, and fair. Prebid establishes the foundation for sellers, buyers, and vendors to work together effectively to create high quality digital media supply chains and maximize the value of publishers’ content. + +### A Brief History of Prebid +The birth of Prebid can be traced back to Prebid.js, an open-source JavaScript library that provided a simple and reliable way to implement header bidding on websites. Header bidding is technology that connects websites to programmatic advertising marketplaces. In the early days of header bidding, these integrations were complicated and opaque. This made it difficult for publishers to maximize the value of their content and difficult for advertisers to buy advertising space efficiently and transparently. + +Prebid.js addressed these problems by creating a standardized, transparent platform for header bidding. Following the rapid adoption of Prebid.js, Prebid.org was formed to oversee the development of Prebid technology and create new products. + +### Prebid’s Products +Today, Prebid has three product areas: Prebid.js, Prebid Mobile, and Prebid Server. Prebid.js is a client-side header bidding wrapper for websites, while Prebid Mobile enables header bidding in iOS and Android applications. Prebid Server makes it possible to run header bidding auctions in the cloud for monetizing websites, apps, long form video streams, digital out-of-home, and other forms of media. + +### Prebid.org +Prebid Org has a Board of Directors representing its publisher, buyer, and technology provider members. The Board steers Prebid, upholding its principles and setting its goals. Within Prebid.org, there are also several Project Management Committees, each of which drives the development of a specific Product area. The Committees are made up of people who work for Prebid’s member companies. Prebid also has a small full-time staff that does software development, community development, and administration. The Prebid community also includes companies who offer proprietary products and services that extend Prebid’s capabilities and provide enterprise support. + +### Learn More +To learn more about Prebid, visit prebid.org. To get started using Prebid, visit docs.prebid.org. To learn about becoming a Prebid Member, visit prebid.org/membership. To contribute to the software, visit Prebid's Github repository at github.com/prebid. diff --git a/overview/intro.md b/overview/intro.md index 5b54f572c7..7189697d70 100644 --- a/overview/intro.md +++ b/overview/intro.md @@ -16,6 +16,18 @@ Prebid is the leading header bidding solution. It is free and fully open source, {: .alert.alert-info :} If you’re looking for a marketing-level overview of the Prebid software and organization, including product features, membership, events, and so on, visit [Prebid.org](https://prebid.org/). +## Overview + +A video overview of Prebid. + +
+ +Further Reading: +- [Transcript of this video overview](/overview/intro-video.html) +- [Introduction for Developers](/developers.html) +- [Prebid Membership](https://prebid.org/membership) +- [Prebid on Github](https://github.com/prebid) + ## Header Bidding with Prebid The Prebid.org suite of products leads the industry in providing header bidding to publishers. @@ -174,3 +186,8 @@ Prebid also has an active member community that ensures Prebid will continue to The ad server you’re working with makes their money by taking a cut of the winning bid price, so you might be wondering if Prebid also takes a cut. The answer is NO. Prebid is free to anyone who wants to use it. So how does Prebid continue to evolve as a quality set of products (not to mention provide events and great documentation) without taking in fees? Through dedicated volunteers from member companies, alongside a small handful of employees and an occasional contractor paid through Prebid.org membership dues. All dues go into serving the Prebid community and providing a voice for our members in the world of header bidding. You don’t have to be a Prebid.org member to use Prebid. However, we do highly encourage you to explore the benefits of membership and consider joining. No matter the size of your company, Prebid has membership options available that will provide value to anyone interested in header bidding today and in the future. For more information on Prebid.org membership, see [Prebid.org Membership Overview](https://prebid.org/membership/). + +## Related Reading +- [Introduction to Header Bidding](/overview/intro-to-header-bidding-video.html) +- [Prebid Product Suite](https://prebid.org/product-suite/) +- [What is Prebid.js](/prebid/prebidjs.html) diff --git a/prebid-mobile/prebid-mobile-video.md b/prebid-mobile/prebid-mobile-video.md new file mode 100644 index 0000000000..098d4f84e2 --- /dev/null +++ b/prebid-mobile/prebid-mobile-video.md @@ -0,0 +1,46 @@ +--- +layout: page_v2 +title: Video Intro to Prebid Mobile +description: A video overview of Prebid Mobile SDK +sidebarType: 0 +--- + +# A Video Overview of Prebid Mobile + +A high-level overview of Prebid Mobile, Prebid’s header bidding product for iOS and Android applications. + +
+ +Further Content: +- [Intro to Prebid](/overview/intro.html) +- [Prebid Managed Services](https://prebid.org/product-suite/managed-services/) +- [All videos](/overview/all-videos.html) + +Related Videos: +- [Introduction to Header Bidding](/overview/intro-to-header-bidding-video.html) +- Introduction to Prebid Server (coming soon) + +## Transcript + +Prebid is a non-profit organization, a JavaScript library, and a suite of products that extend the capabilities of the publisher ad stack. + +Prebid is a member-based organization made up of companies in the digital publishing and advertising technology industries. These companies work together through Prebid.org to build free, open source software that monetizes digital media through advertising. + +### Why Prebid? +Prebid addresses the need for reliable shared technology in programmatic advertising. Serving a single ad is a complex and tightly choreographed routine that requires the cooperation of many entities. This process takes just a few seconds and occurs several billion times per day, accounting for billions of dollars per year in advertising spend. + +With such high stakes, the digital media industry needs standards that are accessible, transparent, and fair. Prebid establishes the foundation for sellers, buyers, and vendors to work together effectively to create high quality digital media supply chains and maximize the value of publishers’ content. + +### A Brief History of Prebid +The birth of Prebid can be traced back to Prebid.js, an open-source JavaScript library that provided a simple and reliable way to implement header bidding on websites. Header bidding is technology that connects websites to programmatic advertising marketplaces. In the early days of header bidding, these integrations were complicated and opaque. This made it difficult for publishers to maximize the value of their content and difficult for advertisers to buy advertising space efficiently and transparently. + +Prebid.js addressed these problems by creating a standardized, transparent platform for header bidding. Following the rapid adoption of Prebid.js, Prebid.org was formed to oversee the development of Prebid technology and create new products. + +### Prebid’s Products +Today, Prebid has three product areas: Prebid.js, Prebid Mobile, and Prebid Server. Prebid.js is a client-side header bidding wrapper for websites, while Prebid Mobile enables header bidding in iOS and Android applications. Prebid Server makes it possible to run header bidding auctions in the cloud for monetizing websites, apps, long form video streams, digital out-of-home, and other forms of media. + +### Prebid.org +Prebid Org has a Board of Directors representing its publisher, buyer, and technology provider members. The Board steers Prebid, upholding its principles and setting its goals. Within Prebid.org, there are also several Project Management Committees, each of which drives the development of a specific Product area. The Committees are made up of people who work for Prebid’s member companies. Prebid also has a small full-time staff that does software development, community development, and administration. The Prebid community also includes companies who offer proprietary products and services that extend Prebid’s capabilities and provide enterprise support. + +### Learn More +To learn more about Prebid, visit prebid.org. To get started using Prebid, visit docs.prebid.org. To learn about becoming a Prebid Member, visit prebid.org/membership. To contribute to the software, visit Prebid's Github repository at github.com/prebid. diff --git a/prebid-mobile/prebid-mobile.md b/prebid-mobile/prebid-mobile.md index 4ee540ef54..a8f2833ea2 100644 --- a/prebid-mobile/prebid-mobile.md +++ b/prebid-mobile/prebid-mobile.md @@ -17,6 +17,16 @@ Prebid Mobile libraries are available for iOS and Android. * TOC {:toc} +## Video Overview of Prebid Mobile + +A high-level overview of Prebid Mobile, Prebid’s header bidding product for iOS and Android applications. + +
+ +Further Content: +- [Transcript of this video](/prebid-mobile/prebid-mobile-video.html) +- [Prebid Managed Services](https://prebid.org/product-suite/managed-services/) + ## Benefits and Features Prebid SDK rendering offers the following benefits: diff --git a/prebid-server/overview/prebid-server-overview-video.md b/prebid-server/overview/prebid-server-overview-video.md new file mode 100644 index 0000000000..6af75d1834 --- /dev/null +++ b/prebid-server/overview/prebid-server-overview-video.md @@ -0,0 +1,65 @@ +--- +layout: page_v2 +title: Video Intro to Prebid Server +description: A video overview of Prebid Server +sidebarType: 5 +--- + +# A Video Overview of Server + +A high-level overview of Prebid Server, Prebid’s solution for header bidding in the cloud. + +
+ +Further Content: +- [Intro to Prebid](/overview/intro.html) +- [Prebid Server Overview](/prebid-server/overview/prebid-server.html) +- [Prebid Membership](https://prebid.org/membership) +- [Prebid on Github](https://github.com/prebid) +- [All videos](/overview/all-videos.html) + +Related Videos: +- [Introduction to Header Bidding](/overview/intro-to-header-bidding-video.html) +- [Introduction to Prebid Mobile](/prebid-mobile/prebid-mobile-video.html) + +## Transcript + +### About Prebid Server + +Prebid Server is a solution for running real-time advertising auctions in the cloud. + +It works in conjunction with Prebid.js, Prebid SDK, and other technologies to make header bidding possible for any ad format in any type of digital media. + +Prebid Server has everything necessary to sell advertising opportunities through server-side header bidding, including bidder integrations, privacy controls, creative caching, currency conversion, price floors, and analytics. + +It supports more than 150 demand sources, including many of the world’s largest exchanges, DSPs, ad networks, and agencies. + +### Why Prebid Server? + +Prebid Server brings the revenue-maximizing power of header bidding to environments that don’t support standard JavaScript. + +Header bidding originated as a JavaScript technology for websites, and the leading solution for header bidding in standard browser-based environments is Prebid.js. Prebid.js is very popular, but it only works on normal websites. Mobile apps, AMP websites, long-form video, and digital out-of-home need their own solution for header bidding, and that’s what Prebid Server provides. + +Prebid Server can also be used to augment Prebid.js on websites. Prebid Server can be a powerful tool in yield management strategies that aim to maximize both advertising revenue and user experience. + +### How Prebid Server Works +Prebid Server is open-source code that is free to use. To use it, you’ll need to set up a server to host the solution. You can set up your own servers, or use one of the managed services offered by companies in the Prebid community. + +Let’s walk through an example of Prebid Server in use. + +A digital advertising seller sets Prebid Server up on a server. + +Prebid Server receives ad requests from a personal computer, a mobile device, or another server. + +Prebid Server is able to enrich ad requests it receives, which means that it adds additional contextual information like IP-based location. It’s also able to interpret user consent and take actions such as restricting auction functions or limiting the sharing of personal data. + +Next, Prebid Server runs the auction. It sends bid requests to bidders, who respond with bids. Prebid Server validates each of the bids, checking for things like privacy compliance and adherence to price floors. It then finalizes the auction and transmits the results to the system that sent it the initial ad request. + +The seller who uses and hosts Prebid Server configures it to work how they want it to. Settings like privacy and consent controls, price floors, auction controls, the selection of bidders, and ad request enrichment functions are all determined by configurations that the seller sets. + +### Getting Started +To learn more about Prebid Server, including information about setting up your own hosting server, visit docs.prebid.org. + +To learn more about Prebid community companies that offer hosting services, visit prebid.org. + +If you are a developer who would like to see the source code or contribute to Prebid Server, visit Prebid on Github at github.com/prebid/. diff --git a/prebid-server/overview/prebid-server-overview.md b/prebid-server/overview/prebid-server-overview.md index 9b10da7266..d5f0419baa 100644 --- a/prebid-server/overview/prebid-server-overview.md +++ b/prebid-server/overview/prebid-server-overview.md @@ -30,6 +30,15 @@ The Prebid Cache is an adjunct to Prebid Server that stores VAST and bids as nee Explore [Prebid Server features](/prebid-server/features/pbs-feature-idx.html) in more detail. +## Video Introduction + +A high-level overview of Prebid Server, Prebid’s solution for header bidding in the cloud. + +
+ +Further Reading: +- [Transcript of this video overview](/prebid-server/overview/prebid-server-overview-video.html) + ## Where to Run Prebid Server Unlike Prebid.js, Prebid Server is a server. It needs somewhere to run, and that somewhere ought to be scaleable, distributed, and fast. diff --git a/prebid/prebidjs-video.md b/prebid/prebidjs-video.md new file mode 100644 index 0000000000..f1f72226da --- /dev/null +++ b/prebid/prebidjs-video.md @@ -0,0 +1,54 @@ +--- +layout: page_v2 +title: Video Intro to Prebid.js +description: A video overview of Prebid org and products +sidebarType: 0 +--- + +# A Video Overview of Prebid.js + +A high-level overview of Prebid.js, Prebid’s header bidding product for websites. + +
+ +Further Content: +- [Intro to Header Bidding](/overview/intro-to-header-bidding.html) +- [Header Bidding with Prebid](/overview/intro.html#header-bidding-with-prebid) +- [What is Prebid.js?](/prebid/prebidjs.html) +- [Prebid.js Developer Quick Start](/dev-docs/getting-started.html) +- [All videos](/overview/all-videos.html) + +Related Videos +- [Introduction to Prebid](/overview/intro-video.html) +- [Introduction to Header Bidding](/overview/intro-to-header-bidding-video.html) +- Prebid.js Impression Flow (coming soon) +- Components of Prebid.js (coming soon) +- Identity in Prebid.js (coming soon) + +## Transcript + +### Introduction +Prebid js is a powerful, open-source header bidding wrapper that allows publishers to monetize their websites by running an auction for any ad on any page. + +It’s the industry standard in header bidding. It’s used by tens of thousands of websites and supports more than 200 demand sources. + +### Features and Capabilities +Prebid.js allows a publisher to set up a detailed map of their advertising inventory across one or many websites. It allows them to select which demand partners should compete to bid on each ad slot and provides a robust set of controls over ad slots, auction dynamics, and page performance. There is also a set of optional add-ons for analytics, ad request enrichment, identity and privacy control, price floors, and more. These tools allow publishers to maximize revenue while preserving user experience and privacy. Prebid.js is flexible and modular, allowing it to integrate cleanly into any ad stack. + +### What makes Prebid.js different +What distinguishes Prebid.js from other header bidding solutions is its robust set of features, its extensive adoption among sellers and buyers of digital advertising, and its principles of transparency, fairness, and open-source. Prebid.js is built by the community that uses it. As an open platform, Prebid.js also lays the foundation for an innovative ecosystem in which independent companies offer Prebid-compatible products and services. +### How Prebid.js is Made +Prebid.js is built collaboratively by Prebid member companies and Prebid.org.. This team works together under the oversight of the Prebid.js Product Management Committee, which is the group within Prebid.org that is responsible for developing Prebid.js. The Product Management Committee maintains Prebid.js’ roadmap and coordinates the software’s development. + +### How Prebid.js Works +When a publisher uses Prebid.js, they create a wrapper. The wrapper includes Prebid’s core auction and ad serving functions, as well as add-ons that the publisher uses to customize the wrapper to their needs. The publisher chooses a list of buyers, which Prebid calls bidders. For each bidder, the publisher adds a specific block of code called a bid adapter to their wrapper. Each bidder develops its own bid adapter and contributes it to the Prebid library. + +Let’s run through an example Prebid auction: + +Prebid.js is installed to the website. Each time a new impression opportunity becomes available, Prebid.js notifies the bidders, who respond with bids. Then, Prebid might select an auction winner and render its ad to the page, but more commonly, it will pass the bid information on to the ad server, which makes a final decision about which ad source should be awarded the impression. Within the ad server, header bidding bids compete based on price, and do not compete with the delivery of reserved, guaranteed, and sponsorship campaigns. When the ad server chooses a header bidding buyer, it works with the wrapper to render the ad to the page. + +### Getting Started +Prebid.js is free to use. You can get started with your own installation of the latest version of Prebid by visiting docs.prebid.org. + +There are also several companies that offer Prebid.js managed services, which may include technical support, ad operations and yield optimization services, hosting services, and extra product features like user interfaces or analytics. To learn more about these, visit prebid.org. + diff --git a/prebid/prebidjs.md b/prebid/prebidjs.md index 5433f70a31..b09167430a 100644 --- a/prebid/prebidjs.md +++ b/prebid/prebidjs.md @@ -11,6 +11,18 @@ sidebarType: 1 Prebid.js is a feature-rich header bidding platform for the web, including more than 300 demand sources and 50 analytics adapters. It supports currency conversion, GDPR, common ID systems, and multiple ad servers. +## Video Overview of Prebid.js + +A high-level overview of Prebid.js, Prebid’s header bidding product for websites. + +
+ +Further Reading: +- [Transcript of this video overview](/prebid/prebidjs-video.html) +- [Intro to Header Bidding](/overview/intro-to-header-bidding.html) +- [Header Bidding with Prebid](/overview/intro.html#header-bidding-with-prebid) +- [Prebid.js Developer Quick Start](/dev-docs/getting-started.html) + ## How Does Prebid.js Work? At a high level, header bidding with Prebid.js involves just a few steps: From 169026dffc039daab64f0b67ad2e1ea510c73d1e Mon Sep 17 00:00:00 2001 From: samuel-palmer-relevant-digital <77437973+samuel-palmer-relevant-digital@users.noreply.github.com> Date: Wed, 10 May 2023 13:29:48 +0200 Subject: [PATCH 263/763] New Adapter: Relevant Digital (#4426) * New Adapter: Relevant Digital * Added documentation for new parameters * Added documentation for forgotten 'pbsBufferMs' parameter --- dev-docs/bidders/relevantdigital.md | 133 ++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 dev-docs/bidders/relevantdigital.md diff --git a/dev-docs/bidders/relevantdigital.md b/dev-docs/bidders/relevantdigital.md new file mode 100644 index 0000000000..3015428fef --- /dev/null +++ b/dev-docs/bidders/relevantdigital.md @@ -0,0 +1,133 @@ +--- +layout: bidder +title: Relevant Digital +description: Relevant Digital Bid Adapter +biddercode: relevantdigital +pbjs: true +gdpr_supported: true +usp_supported: true +coppa_supported: false +schain_supported: true +floors_supported: true +media_types: banner, video, native +userIds: all +prebid_member: true +safeframes_ok: true +deals_supported: true +pbs: false +pbs_app_supported: false +fpd_supported: true +ortb_blocking_supported: no +gvl_id: 1100 +multiformat_supported: true +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------------------------------------------|----------------------------|--------------| +| `placementId` | required | The placement id. | `'6204e83a077_620f9e8e4fe'` | `String` | +| `pbsHost` | required if not set in config | Host name of the server. | `'pbs-example.relevant-digital.com'` | `String` | +| `accountId` | required if not set in config | The account id. | `'6204e5fa70e3ad108'` | `String` | +| `useSourceBidderCode` | optional | Set to `true` in order to use the bidder code of the actual server-side bidder in bid responses. You **MUST** also use `allowAlternateBidderCodes: true` in `bidderSettings` if you enabled this - as otherwise the bids will be rejected.| `true` | `Boolean` | + +### Config Parameters + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------------------------------------------|----------------------------|--------------| +| `pbsHost` | required if not set in bid parameters | Host name of the server. | `'pbs-example.relevant-digital.com'` | `String` | +| `accountId` | required if not set in bid parameters | The account id. | `'6204e5fa70e3ad108'` | `String` | +| `pbsBufferMs` | optional | How much less in *milliseconds* the server's internal timeout should be compared to the normal Prebid timeout. Default is *250*. To be increased in cases of frequent timeouts. | `250` | `Integer` | +| `useSourceBidderCode` | optional | Set to `true` in order to use the bidder code of the actual server-side bidder in bid responses. You **MUST** also use `allowAlternateBidderCodes: true` in `bidderSettings` if you enabled this - as otherwise the bids will be rejected.| `true` | `Boolean` | + +### Example setup using pbjs.setConfig() +This is the recommended method to set the global configuration parameters. +```javascript +pbjs.setConfig({ + relevantdigital: { + pbsHost: 'pbs-example.relevant-digital.com', + accountId: '6204e5fa70e3ad10821b84ff', + }, +}); + +var adUnits = [ + { + code: 'test-div', + mediaTypes: { banner: { sizes: [[300, 250], [320, 320]] }}, + bids: [ + { + bidder: 'relevantdigital', + params: { + placementId: '6204e83a077c5825441b8508_620f9e8e4fe67c1f87cd30ed', + } + } + ], + } +]; +``` +# Example setup using only bid params +This method to set the global configuration parameters (like **pbsHost**) in **params** could simplify integration of a provider for some publishers. Setting different global config-parameters on different bids is not supported in general*, as the first settings found will be used and any subsequent global settings will be ignored. + + * _The exception is `useSourceBidderCode` which can be overriden individually per ad unit._ +```javascript +var adUnits = [ + { + code: 'test-div', + mediaTypes: { banner: { sizes: [[300, 250], [320, 320]] }}, + bids: [ + { + bidder: 'relevantdigital', + params: { + placementId: '6204e83a077c5825441b8508_620f9e8e4fe67c1f87cd30ed', + pbsHost: 'pbs-example.relevant-digital.com', + accountId: '6204e5fa70e3ad10821b84ff', + } + } + ], + } +]; +``` + +### Example setup with multiple providers +**Notice:** Placements below are _not_ live test placements +```javascript + +pbjs.aliasBidder('relevantdigital', 'providerA'); +pbjs.aliasBidder('relevantdigital', 'providerB'); + +pbjs.setConfig({ + providerA: { + pbsHost: 'pbs-example-a.relevant-digital.com', + accountId: '620533ae7f5bbe1691bbb815', + }, + providerB: { + pbsHost: 'pbs-example-b.relevant-digital.com', + accountId: '990533ae7f5bbe1691bbb815', + }, +}); + +var adUnits = [ + { + code: 'test-div', + mediaTypes: { banner: { sizes: [[300, 250], [320, 320]] }}, + bids: [ + { + bidder: 'providerA', + params: { + placementId: '610525862d7517bfd4bbb81e_620523b7d1dbed6b0fbbb817', + } + }, + { + bidder: 'providerB', + params: { + placementId: '990525862d7517bfd4bbb81e_770523b7d1dbed6b0fbbb817', + } + }, + ], + } +]; +``` + From 51be78be4741d8f6e768adaebf69efd8ced27f3d Mon Sep 17 00:00:00 2001 From: xwang202 <57196235+xwang202@users.noreply.github.com> Date: Wed, 10 May 2023 20:01:47 +0800 Subject: [PATCH 264/763] FreeWheel SSP Adapter: add gpp_supported (#4538) --- dev-docs/bidders/freewheelssp.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dev-docs/bidders/freewheelssp.md b/dev-docs/bidders/freewheelssp.md index 04429dd8d4..4b48260e46 100644 --- a/dev-docs/bidders/freewheelssp.md +++ b/dev-docs/bidders/freewheelssp.md @@ -1,6 +1,6 @@ --- layout: bidder -title: freeWheelssp +title: FreeWheelssp description: Freewheel Bidder Adaptor pbjs: true pbs: true @@ -9,6 +9,7 @@ aliasCode: freewheel-ssp gvl_id: 285 gdpr_supported: true usp_supported: true +gpp_supported: true coppa_supported: true schain_supported: true media_types: video From 6fe597de6ca927c97e4eacfda7421cd54aa74314 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 May 2023 05:02:25 -0700 Subject: [PATCH 265/763] Bump engine.io and socket.io (#4536) Bumps [engine.io](https://github.com/socketio/engine.io) and [socket.io](https://github.com/socketio/socket.io). These dependencies needed to be updated together. Updates `engine.io` from 6.2.1 to 6.4.2 - [Release notes](https://github.com/socketio/engine.io/releases) - [Changelog](https://github.com/socketio/engine.io/blob/main/CHANGELOG.md) - [Commits](https://github.com/socketio/engine.io/compare/6.2.1...6.4.2) Updates `socket.io` from 4.5.3 to 4.6.1 - [Release notes](https://github.com/socketio/socket.io/releases) - [Changelog](https://github.com/socketio/socket.io/blob/main/CHANGELOG.md) - [Commits](https://github.com/socketio/socket.io/compare/4.5.3...4.6.1) --- updated-dependencies: - dependency-name: engine.io dependency-type: indirect - dependency-name: socket.io dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 126 ++++++++++++++++++++++++++++++---------------- 1 file changed, 84 insertions(+), 42 deletions(-) diff --git a/package-lock.json b/package-lock.json index ac50a84219..fe50e54f28 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1090,10 +1090,13 @@ "dev": true }, "node_modules/@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", - "dev": true + "version": "2.8.13", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", + "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/glob": { "version": "7.1.3", @@ -4666,9 +4669,9 @@ } }, "node_modules/engine.io": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz", - "integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", + "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==", "dev": true, "dependencies": { "@types/cookie": "^0.4.1", @@ -4680,7 +4683,7 @@ "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.0.3", - "ws": "~8.2.3" + "ws": "~8.11.0" }, "engines": { "node": ">=10.0.0" @@ -4739,9 +4742,9 @@ } }, "node_modules/engine.io/node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "dev": true, "engines": { "node": ">=10.0.0" @@ -10600,27 +10603,51 @@ "dev": true }, "node_modules/socket.io": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.3.tgz", - "integrity": "sha512-zdpnnKU+H6mOp7nYRXH4GNv1ux6HL6+lHL8g7Ds7Lj8CkdK1jJK/dlwsKDculbyOHifcJ0Pr/yeXnZQ5GeFrcg==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz", + "integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==", "dev": true, "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "debug": "~4.3.2", - "engine.io": "~6.2.0", - "socket.io-adapter": "~2.4.0", - "socket.io-parser": "~4.2.0" + "engine.io": "~6.4.1", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.1" }, "engines": { "node": ">=10.0.0" } }, "node_modules/socket.io-adapter": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", - "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==", - "dev": true + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dev": true, + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-adapter/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } }, "node_modules/socket.io-client": { "version": "4.6.1", @@ -13882,10 +13909,13 @@ "dev": true }, "@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", - "dev": true + "version": "2.8.13", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", + "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "dev": true, + "requires": { + "@types/node": "*" + } }, "@types/glob": { "version": "7.1.3", @@ -16885,9 +16915,9 @@ } }, "engine.io": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz", - "integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", + "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==", "dev": true, "requires": { "@types/cookie": "^0.4.1", @@ -16899,7 +16929,7 @@ "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.0.3", - "ws": "~8.2.3" + "ws": "~8.11.0" }, "dependencies": { "cookie": { @@ -16909,9 +16939,9 @@ "dev": true }, "ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "dev": true, "requires": {} } @@ -21805,24 +21835,36 @@ } }, "socket.io": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.3.tgz", - "integrity": "sha512-zdpnnKU+H6mOp7nYRXH4GNv1ux6HL6+lHL8g7Ds7Lj8CkdK1jJK/dlwsKDculbyOHifcJ0Pr/yeXnZQ5GeFrcg==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz", + "integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==", "dev": true, "requires": { "accepts": "~1.3.4", "base64id": "~2.0.0", "debug": "~4.3.2", - "engine.io": "~6.2.0", - "socket.io-adapter": "~2.4.0", - "socket.io-parser": "~4.2.0" + "engine.io": "~6.4.1", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.1" } }, "socket.io-adapter": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", - "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==", - "dev": true + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dev": true, + "requires": { + "ws": "~8.11.0" + }, + "dependencies": { + "ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "dev": true, + "requires": {} + } + } }, "socket.io-client": { "version": "4.6.1", From 0cfb5288c4573161e799358e54d1830de561fa21 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 May 2023 05:25:45 -0700 Subject: [PATCH 266/763] Bump lodash from 4.17.20 to 4.17.21 (#4555) Bumps [lodash](https://github.com/lodash/lodash) from 4.17.20 to 4.17.21. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.20...4.17.21) --- updated-dependencies: - dependency-name: lodash dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index fe50e54f28..13368f79bf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7347,9 +7347,9 @@ } }, "node_modules/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "node_modules/lodash.isfinite": { @@ -19066,9 +19066,9 @@ } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash.isfinite": { From 271f69363137f45e78cf7b23007abab966055753 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 May 2023 05:45:42 -0700 Subject: [PATCH 267/763] Bump y18n from 4.0.0 to 4.0.3 (#4553) Bumps [y18n](https://github.com/yargs/y18n) from 4.0.0 to 4.0.3. - [Release notes](https://github.com/yargs/y18n/releases) - [Changelog](https://github.com/yargs/y18n/blob/y18n-v4.0.3/CHANGELOG.md) - [Commits](https://github.com/yargs/y18n/compare/v4.0.0...y18n-v4.0.3) --- updated-dependencies: - dependency-name: y18n dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 13368f79bf..079782b3f0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12654,9 +12654,9 @@ } }, "node_modules/y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "node_modules/yallist": { @@ -23530,9 +23530,9 @@ "dev": true }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yallist": { From 11753deb8348137a7a7ad77f5071557a4408c86b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 May 2023 05:57:47 -0700 Subject: [PATCH 268/763] Bump ini from 1.3.5 to 1.3.8 (#4557) Bumps [ini](https://github.com/npm/ini) from 1.3.5 to 1.3.8. - [Release notes](https://github.com/npm/ini/releases) - [Changelog](https://github.com/npm/ini/blob/main/CHANGELOG.md) - [Commits](https://github.com/npm/ini/compare/v1.3.5...v1.3.8) --- updated-dependencies: - dependency-name: ini dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 079782b3f0..961e530744 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6509,13 +6509,10 @@ "dev": true }, "node_modules/ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true, - "engines": { - "node": "*" - } + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, "node_modules/internal-ip": { "version": "4.3.0", @@ -18408,9 +18405,9 @@ "dev": true }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "internal-ip": { From 94f8a794872b78f8c56e757440812de44f1ca79c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 May 2023 06:02:22 -0700 Subject: [PATCH 269/763] Bump elliptic from 6.5.3 to 6.5.4 (#4554) Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.3 to 6.5.4. - [Commits](https://github.com/indutny/elliptic/compare/v6.5.3...v6.5.4) --- updated-dependencies: - dependency-name: elliptic dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 961e530744..84232c6030 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4615,18 +4615,18 @@ "dev": true }, "node_modules/elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, "dependencies": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", + "bn.js": "^4.11.9", + "brorand": "^1.1.0", "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, "node_modules/elliptic/node_modules/bn.js": { @@ -16862,18 +16862,18 @@ "dev": true }, "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", + "bn.js": "^4.11.9", + "brorand": "^1.1.0", "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" }, "dependencies": { "bn.js": { From 630fcbacb9e2236d96b8c20322449da22b1ae47b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 May 2023 06:17:32 -0700 Subject: [PATCH 270/763] Bump node-notifier and webpack-notifier (#4556) Bumps [node-notifier](https://github.com/mikaelbr/node-notifier) and [webpack-notifier](https://github.com/Turbo87/webpack-notifier). These dependencies needed to be updated together. Updates `node-notifier` from 5.4.3 to 9.0.1 - [Changelog](https://github.com/mikaelbr/node-notifier/blob/master/CHANGELOG.md) - [Commits](https://github.com/mikaelbr/node-notifier/compare/v5.4.3...v9.0.1) Updates `webpack-notifier` from 1.8.0 to 1.15.0 - [Release notes](https://github.com/Turbo87/webpack-notifier/releases) - [Changelog](https://github.com/Turbo87/webpack-notifier/blob/master/CHANGELOG.md) - [Commits](https://github.com/Turbo87/webpack-notifier/compare/v1.8.0...v1.15.0) --- updated-dependencies: - dependency-name: node-notifier dependency-type: indirect - dependency-name: webpack-notifier dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 226 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 200 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 84232c6030..4c7be5d269 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5948,7 +5948,7 @@ "node_modules/growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", "dev": true }, "node_modules/handle-thing": { @@ -6723,6 +6723,21 @@ "node": ">=0.10.0" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", @@ -7889,16 +7904,80 @@ "dev": true }, "node_modules/node-notifier": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", - "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", + "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", "dev": true, "dependencies": { "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", "shellwords": "^0.1.1", - "which": "^1.3.0" + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, + "node_modules/node-notifier/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-notifier/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-notifier/node_modules/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-notifier/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/node-notifier/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, "node_modules/node-releases": { @@ -12397,14 +12476,42 @@ } }, "node_modules/webpack-notifier": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.8.0.tgz", - "integrity": "sha512-I6t76NoPe5DZCCm5geELmDV2wlJ89LbU425uN6T2FG8Ywrrt1ZcUMz6g8yWGNg4pttqTPFQJYUPjWAlzUEQ+cQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.15.0.tgz", + "integrity": "sha512-N2V8UMgRB5komdXQRavBsRpw0hPhJq2/SWNOGuhrXpIgRhcMexzkGQysUyGStHLV5hkUlgpRiF7IUXoBqyMmzQ==", "dev": true, "dependencies": { - "node-notifier": "^5.1.2", - "object-assign": "^4.1.0", - "strip-ansi": "^3.0.1" + "node-notifier": "^9.0.0", + "strip-ansi": "^6.0.0" + }, + "peerDependencies": { + "@types/webpack": ">4.41.31" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + } + } + }, + "node_modules/webpack-notifier/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-notifier/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, "node_modules/webpack-sources": { @@ -17929,7 +18036,7 @@ "growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", "dev": true }, "handle-thing": { @@ -18577,6 +18684,12 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", @@ -19532,16 +19645,61 @@ } }, "node-notifier": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", - "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", + "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", "dev": true, "requires": { "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", "shellwords": "^0.1.1", - "which": "^1.3.0" + "uuid": "^8.3.0", + "which": "^2.0.2" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "node-releases": { @@ -23391,14 +23549,30 @@ } }, "webpack-notifier": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.8.0.tgz", - "integrity": "sha512-I6t76NoPe5DZCCm5geELmDV2wlJ89LbU425uN6T2FG8Ywrrt1ZcUMz6g8yWGNg4pttqTPFQJYUPjWAlzUEQ+cQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.15.0.tgz", + "integrity": "sha512-N2V8UMgRB5komdXQRavBsRpw0hPhJq2/SWNOGuhrXpIgRhcMexzkGQysUyGStHLV5hkUlgpRiF7IUXoBqyMmzQ==", "dev": true, "requires": { - "node-notifier": "^5.1.2", - "object-assign": "^4.1.0", - "strip-ansi": "^3.0.1" + "node-notifier": "^9.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "webpack-sources": { From 6e9cc5b1014904d2c8e051930a63b161a11ca5b8 Mon Sep 17 00:00:00 2001 From: bretg Date: Wed, 10 May 2023 13:21:35 -0400 Subject: [PATCH 271/763] Flagging emx_digital as deprecated (#4564) --- dev-docs/bidders/emx_digital.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dev-docs/bidders/emx_digital.md b/dev-docs/bidders/emx_digital.md index d9dbf61025..8e508c7a00 100644 --- a/dev-docs/bidders/emx_digital.md +++ b/dev-docs/bidders/emx_digital.md @@ -15,6 +15,9 @@ userIds: identityLink, uid2 sidebarType: 1 --- +{: .alert.alert-warning :} +The emx_digital bidder is deprecated, and will be removed in a future release of Prebid.js and Prebid Server. + ### Registration To use this bidder you will need an account and a valid tagid from our exchange. For further information, please contact your Account Manager or adops@emxdigital.com. From 1e2dfbc42f6847827c52e2d7ab64050dda0c0bb3 Mon Sep 17 00:00:00 2001 From: bretg Date: Wed, 10 May 2023 16:52:32 -0400 Subject: [PATCH 272/763] PBS: fix video cache example (#4566) --- prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md b/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md index ea68c7a9d2..d081a6ac53 100644 --- a/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md +++ b/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md @@ -684,7 +684,7 @@ If the `ext.prebid.cache.vastxml` object is present, Prebid Server will make a b "ext": { "prebid": { "cache": { - "bids": { + "vastXml": { "url": "https://example.com:443/cache?uuid=385b283c-22cb-49a0-8c0b-8b88c49d9fe9", "cacheId": "385b283c-22cb-49a0-8c0b-8b88c49d9fe9" } From f607cd59cb157b2106d5a88868341aa57d7c7e59 Mon Sep 17 00:00:00 2001 From: rimaburder-index <55195208+rimaburder-index@users.noreply.github.com> Date: Thu, 11 May 2023 12:42:56 -0400 Subject: [PATCH 273/763] Update ix.md (#4565) * Update ix.md added the version from which we support the Index bidder-specific data * Update ix.md Updated step 6 (about FPD) in the set up steps to make it clearer to understand --- dev-docs/bidders/ix.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dev-docs/bidders/ix.md b/dev-docs/bidders/ix.md index 20679f046a..9f528a1aa1 100644 --- a/dev-docs/bidders/ix.md +++ b/dev-docs/bidders/ix.md @@ -122,7 +122,7 @@ In this configuration Prebid.js calls Index directly from the browser using our } }); ``` -5. (Optional) Set up First Party Data (FPD) using the Index bidder-specific FPD (preferred method) setting or the Prebid FPD module. For more information, see the [Set up First Party Data (FPD)](#set-up-first-party-data-fpd) section below. +5. (Optional) Set up First Party Data (FPD). For more information about the data types we support and the instructions for each option, see the [Set up First Party Data (FPD)](#set-up-first-party-data-fpd) section below. 6. (Optional) If you want to monetize instream video, you need to enable a cache endpoint in the [pbjs.setConfig()](https://docs.prebid.org/dev-docs/publisher-api-reference/setConfig.html) function as follows:
```javascript pbjs.setConfig({ @@ -160,7 +160,7 @@ In this configuration, Prebid.js makes a call to Prebid Server and then Prebid S } }); ``` -6. (Optional) Set up First Party Data (FPD) using the Index bidder-specific FPD (preferred method) setting or the Prebid FPD module. For more information, see the [Set up First Party Data (FPD)](#set-up-first-party-data-fpd) section below. +6. (Optional) Set up First Party Data (FPD). For more information about the data types we support and the instructions for each option, see the [Set up First Party Data (FPD)](#set-up-first-party-data-fpd) section below. 7. (Optional) If you want to monetize instream video, you need to enable a cache endpoint in the `[pbjs.setConfig()]` function as follows: ```javascript pbjs.setConfig({ @@ -226,7 +226,7 @@ pbjs.setConfig({ ### Index bidder-specific data -Use this data type to specify key-value pairs that will be included in your query string when targeting deals. For example, if a user visits a news page, you can pass that information by submitting a key-value pair for `category = news`. You can then create a deal in the Index UI and activate the deal only on pages that contain `category = news` as the key-value pair. +This data type is available from Prebid version 7.49.0 and above. You can use it to specify key-value pairs that will be included in your query string when targeting deals. For example, if a user visits a news page, you can pass that information by submitting a key-value pair for `category = news`. You can then create a deal in the Index UI and activate the deal only on pages that contain `category = news` as the key-value pair. To include the FPD in a bid request, in the `[pbjs.setConfig()]` object at the `ix` bidder level, provide the key-values in the `firstPartyData` parameter. Make sure that you set it before the `pbjs.requestBids` configuration. If you want to change the values, you can update the `pbjs.setConfig` once again. The change will be reflected in all future bid requests. From 75c9e1c5e5ab459dead90cea4bb8bff1d6b48236 Mon Sep 17 00:00:00 2001 From: bretg Date: Thu, 11 May 2023 12:48:38 -0400 Subject: [PATCH 274/763] axonix param table formatting (#4548) * axonix param table formatting * added type column --- dev-docs/bidders/axonix.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/dev-docs/bidders/axonix.md b/dev-docs/bidders/axonix.md index b0d5c66d9c..c4f843b34b 100644 --- a/dev-docs/bidders/axonix.md +++ b/dev-docs/bidders/axonix.md @@ -14,10 +14,10 @@ sidebarType: 1 The Axonix Bidding adapter requires setup before beginning. Please contact us at support.axonix@emodoinc.com. ### Bid Params - -| Name | Scope | Description | Example | -| :------------ | :------- | :---------------------------------------------- | :------------------------------------- | -| `supplyId` | required | Supply UUID | `'2c426f78-bb18-4a16-abf4-62c6cd0ee8de'` | -| `region` | optional | Cloud region | `'us-east-1'` | -| `endpoint` | optional | Supply custom endpoint | `'https://open-rtb.axonix.com/custom'` | -| `instl` | optional | Set to 1 if using interstitial (default: 0) | `1` | +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|------------|-------|----------------------------------------------|-------------------------------------|------| +| `supplyId` | required | Supply UUID | `'2c426f78-bb18-4a16-abf4-62c6cd0ee8de'` | string | +| `region` | optional | Cloud region | `'us-east-1'` | string | +| `endpoint` | optional | Supply custom endpoint | `'https://open-rtb.axonix.com/custom'` | string | +| `instl` | optional | Set to 1 if using interstitial (default: 0) | `1` | integer | From 9d7074693805c73468c19395719eb66b9fdc597b Mon Sep 17 00:00:00 2001 From: Piotr Jaworski <109736938+piotrj-rtbh@users.noreply.github.com> Date: Fri, 12 May 2023 22:02:25 +0200 Subject: [PATCH 275/763] RTB House Bid Adapter: docs update - `bcat` & `badv` ORTB params support (#4522) * RTBHouse Bid Adapter: adds channel as optional param, updates bidder flags * RTBHouse Bid Adapter: fixed table descriptions * RTBHouse Bid Adapter: minor textual changes on bidder docs * ortb_blocking_supported and description section * ortb_blocking_supported and description section (#1) * ortb_blocking_supported and description section * rephrasing * ORTB blocking examples update * Javascript type for examples added * typo fix * code fix * Prebid Server setup by host companies --------- Co-authored-by: Leandro Otani Co-authored-by: rtbh-lotani <83652735+rtbh-lotani@users.noreply.github.com> --- dev-docs/bidders/rtbhouse.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/dev-docs/bidders/rtbhouse.md b/dev-docs/bidders/rtbhouse.md index 3feec1ce33..60b4ca65bf 100644 --- a/dev-docs/bidders/rtbhouse.md +++ b/dev-docs/bidders/rtbhouse.md @@ -13,6 +13,7 @@ media_types: banner, native schain_supported: true userIds: id5Id, identityLink, pubProvidedId pbs_app_supported: true +ortb_blocking_supported: partial sidebarType: 1 --- @@ -27,6 +28,36 @@ sidebarType: 1 | `bidfloor` | optional | Minimal CPM value | `0.01` | `float` | | `channel` | optional | Inventory channel identifier, limited to 50 characters | `Partner 1 - News` | `string` | +#### ORTB Blocking +RTB House supports blocking advertisers in `badv` and categories in `bcat` parameters. +The blocked advertisers/categories list has no length limitation, but response timeout is more likely to occur as the number of entries grow. +Blocked advertisers list (`badv`) is an array of domains as strings. +Blocked categories list (`bcat`) is an array of IAB categories as strings. + +For example: +##### Globally defined ORTB Blocking: +```javascript +pbjs.setConfig({ + ortb2: { + badv: ["domain1.com", "domain2.com"], + bcat: ["IAB23-1", "IAB23-5", "IAB25-3", "IAB25-2"] + } +)}; +``` +##### ORTB Blocking specific only to rtbhouse bidder: +```javascript +pbjs.setBidderConfig({ + bidders: ['rtbhouse'], + config:{ + ortb2: { + badv: ["domain1.com", "domain2.com"], + bcat: ["IAB23-1", "IAB23-5", "IAB25-3", "IAB25-2"] + } + } +}); +``` +### Setting up the Prebid Server Adapter +If you’re a Prebid Server host company looking to enable the RTB House server-side adapter, you'll need to contact prebid@rtbhouse.com. They will guide you through the process. Do not use the default bidder config file as it will require custom partner code to be entered. It will be provided by RTB House. ### Please note: From b13c32f12f23aedbbc72b45760f957b980df3abf Mon Sep 17 00:00:00 2001 From: YakirLavi <73641910+YakirLavi@users.noreply.github.com> Date: Sat, 13 May 2023 17:54:16 +0300 Subject: [PATCH 276/763] Rise Bid Adapter: update documentation - support Coppa param (#4505) * Update Rise readme * fix rise doc * change rise docs * fix rise docs * added is_wrapper parameter to rise doc * changed is_wrapper to boolean * add coppa support documentation (#6) --------- Co-authored-by: noamtzu Co-authored-by: Noam Tzuberi Co-authored-by: innay --- dev-docs/bidders/rise.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/rise.md b/dev-docs/bidders/rise.md index 5a6efbfe1c..0088d620a3 100644 --- a/dev-docs/bidders/rise.md +++ b/dev-docs/bidders/rise.md @@ -7,6 +7,7 @@ pbjs: true biddercode: rise media_types: banner, video schain_supported: true +coppa_supported: true gdpr_supported: true usp_supported: true floors_supported: true From ad36a89cebe6788fa57aead13b7273fc7983ca18 Mon Sep 17 00:00:00 2001 From: YakirLavi <73641910+YakirLavi@users.noreply.github.com> Date: Sat, 13 May 2023 18:23:53 +0300 Subject: [PATCH 277/763] MinuteMedia: Update documentation - Coppa support (#4506) * Update Rise readme * fix rise doc * change rise docs * fix rise docs * added is_wrapper parameter to rise doc * changed is_wrapper to boolean * update documentation - coppa param --------- Co-authored-by: noamtzu Co-authored-by: Noam Tzuberi Co-authored-by: innay Co-authored-by: YakirLavi From 2f275bba776114dc80b36324d307d9b0ad7c0280 Mon Sep 17 00:00:00 2001 From: EngageMediaHB <130045707+EngageMediaHB@users.noreply.github.com> Date: Sat, 13 May 2023 19:41:53 +0300 Subject: [PATCH 278/763] add EMTV adapter doc (#4472) --- dev-docs/bidders/emtv.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 dev-docs/bidders/emtv.md diff --git a/dev-docs/bidders/emtv.md b/dev-docs/bidders/emtv.md new file mode 100644 index 0000000000..8de30ab0ba --- /dev/null +++ b/dev-docs/bidders/emtv.md @@ -0,0 +1,30 @@ +--- +layout: bidder +title: EMTV +description: Prebid EMTV Bidder Adapter +biddercode: emtv +usp_supported: true +gdpr_supported: true +coppa_supported: true +schain_supported: true +floors_supported: true +media_types: banner, video, native +multiformat_supported: will-not-bid +pbjs: true +pbs: true +pbs_app_supported: true +safeframes_ok: true +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------|-----------|-----------| +| `placementId` | optional | Placement Id | `'0'` | `'string'` | +| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` | + +### Note + +For the prebid server and prebid.js you only need to use one parameter: either placementId or endpointId From f46a6582cd9a171e293429ee566232a4a4bc46b1 Mon Sep 17 00:00:00 2001 From: Jason Quaccia Date: Sun, 14 May 2023 11:51:12 -0700 Subject: [PATCH 279/763] added docs for the adjustAlternateBids bidderSettings functionality (#4547) --- .../publisher-api-reference/bidderSettings.md | 37 ++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/dev-docs/publisher-api-reference/bidderSettings.md b/dev-docs/publisher-api-reference/bidderSettings.md index 2da634a29d..34b7810e43 100644 --- a/dev-docs/publisher-api-reference/bidderSettings.md +++ b/dev-docs/publisher-api-reference/bidderSettings.md @@ -48,7 +48,8 @@ Some sample scenarios where publishers may wish to alter the default settings: | allowZeroCpmBids | standard or adapter-specific | 6.2.0 | false | Would allow bids with a 0 CPM to be accepted by Prebid.js and could be passed to the ad server. | | storageAllowed | standard or adapter-specific | 6.13.0 | true in 6.x, false after 7.0 | Allow use of cookies and/or local storage. | | allowAlternateBidderCodes | standard or adapter-specific | 6.23.0 | true in v6.x
false from v7.0| Allow adapters to bid with alternate bidder codes. | -| allowedAlternateBidderCodes | standard or adapter-specific | 6.23.0 | n/a | Array of bidder codes for which an adapter can bid.
`undefined` or `['*']` will allow adapter to bid with any bidder code. | +| allowedAlternateBidderCodes | standard or adapter-specific | 6.23.0 | n/a | Array of bidder codes for which an adapter can bid.
`undefined` or `['*']` will allow adapter to bid with any bidder code. | +| adjustAlternateBids | standard or adapter-specific | 7.48.0 | false | Optionally allow alternate bidder codes to use an adapter's bidCpmAdjustment function by default instead of the standard bidCpmAdjustment function if present (note: if a bidCpmAdjustment function exists for the alternate bidder code within bidderSettings, then this will be used instead of falling back to the adapter's bidCpmAdjustment function). | ##### 2.1. adserverTargeting @@ -317,4 +318,38 @@ pbjs.bidderSettings = { In the above example, `groupm` bid will have a bid adjustment of 80% since the `bidCpmAdjustment` function says so.
If `appnexus` bids with another bidder code, say `appnexus2`. This bidder code will adjust the bid cpm to 95% because it will apply the `bidCpmAdjustment` function from `standard` setting, since the `bidCpmAdjustment` is missing for given bidder code I.e `appnexus2` +##### 2.10. adjustAlternateBids + +Optionally allow alternate bidder codes originating from a specific bid adapter to fallback to that same adapter's bidCpmAdjustment function. When adjustAlternateBids is set to true, the prioity of which bidCpmAdjustment function to utilize will be as follows based on what is present within the bidderSettings object: + +1. Alternate bidder code bidCpmAdjustment function +2. Adapter bidCpmAdjustment function +3. The standard bidCpmAdjustment function + +{% highlight js %} + +pbjs.bidderSettings = { + standard: { + allowAlternateBidderCodes: false, + bidCpmAdjustment: function(bidCpm, bid){ return bidCpm * .95; }, + [...] + }, + pubmatic: { + allowAlternateBidderCodes: true, + allowedAlternateBidderCodes: ["groupm"], + adjustAlternateBids: true, + bidCpmAdjustment: function(bidCpm, bid){ return bidCpm * .85; }, + [...] + }, + appnexus: { + allowAlternateBidderCodes: true, + allowedAlternateBidderCodes: ["*"], + bidCpmAdjustment: function(bidCpm, bid){ return bidCpm * .90; }, + [...] + } +} +{% endhighlight %} + +In the above example, if PubMatic were to return the "groupm" bidder code then the bidCpmAdjustment function under `pubmatic` would be used instead of what is available under `standard`. +
From 84ed532d5b59bc193b3bc9ff9cf94f90ea173fed Mon Sep 17 00:00:00 2001 From: franfrvr <130403896+franfrvr@users.noreply.github.com> Date: Mon, 15 May 2023 05:57:18 +0100 Subject: [PATCH 280/763] New Adapter: FRVR Ad Network (#4515) * New Adapter: FRVR Ad Network * New Adapter: FRVR Ad Network email contact * New Adapter: FRVR Ad Network feedback --- dev-docs/bidders/frvradn.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 dev-docs/bidders/frvradn.md diff --git a/dev-docs/bidders/frvradn.md b/dev-docs/bidders/frvradn.md new file mode 100644 index 0000000000..8bcaf89f71 --- /dev/null +++ b/dev-docs/bidders/frvradn.md @@ -0,0 +1,32 @@ +--- +layout: bidder +title: FRVR Ad Network +description: FRVR Ad Network Prebid Bidder Adapter +biddercode: frvradn +gdpr_supported: true +usp_supported: true +coppa_supported: true +schain_supported: true +floors_supported: true +media_types: banner, video, native +multiformat_supported: will-bid-on-one +safeframes_ok: true +userIds: all +pbjs: false +pbs: true +pbs_app_supported: true +gvl_id: 1107 +sidebarType: 1 +--- + +### Registration + +FRVR Ad Network Bidding adapter requires setup before beginning. Please contact us at info@frvr.com + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|--------------|-----------|----------| +| `publisher_id` | required | Publisher ID | `'11111'` | `string` | +| `ad_unit_id` | required | Ad Unit ID | `'22222'` | `string` | \ No newline at end of file From 8c648e00760e0bec1edffd230a87398aba8d9f10 Mon Sep 17 00:00:00 2001 From: Parth Shah Date: Mon, 15 May 2023 21:08:51 +0530 Subject: [PATCH 281/763] chore(prebid): update dev docs to include tagId in video example (#4537) --- dev-docs/bidders/deepintent.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/deepintent.md b/dev-docs/bidders/deepintent.md index 8c35e4ccbf..37a8f1c200 100644 --- a/dev-docs/bidders/deepintent.md +++ b/dev-docs/bidders/deepintent.md @@ -110,6 +110,7 @@ var videoAdUnits = [ bids: [{ bidder: 'deepintent', params: { + tagId: "1399", // required publisherId: '32572', // required adSlot: '38519891@300x250' // required video: { From b87804eca280a89876694de3c8a45e40d8801aad Mon Sep 17 00:00:00 2001 From: Piotr Jaworski <109736938+piotrj-rtbh@users.noreply.github.com> Date: Mon, 15 May 2023 19:40:32 +0200 Subject: [PATCH 282/763] Add RTB House Bid Adapter as example implementation of FLEDGE (#4568) * RTBHouse Bid Adapter: adds channel as optional param, updates bidder flags * RTBHouse Bid Adapter: fixed table descriptions * RTBHouse Bid Adapter: minor textual changes on bidder docs * ortb_blocking_supported and description section * ortb_blocking_supported and description section (#1) * ortb_blocking_supported and description section * rephrasing * ORTB blocking examples update * Javascript type for examples added * typo fix * code fix * Prebid Server setup by host companies * RTB House Bidder added as an example implementation interpretResponse with FLEDGE --------- Co-authored-by: Leandro Otani Co-authored-by: rtbh-lotani <83652735+rtbh-lotani@users.noreply.github.com> --- dev-docs/modules/fledgeForGpt.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/modules/fledgeForGpt.md b/dev-docs/modules/fledgeForGpt.md index f26d439b15..1fec14e285 100644 --- a/dev-docs/modules/fledgeForGpt.md +++ b/dev-docs/modules/fledgeForGpt.md @@ -147,7 +147,7 @@ for more details. This means that the AuctionConfig objects returned from `inter the request it should be associated with. This may raise the question: why isn't the AuctionConfig object returned as part of the bid? The answer is that it's possible to participate in the FLEDGE auction without returning a contextual bid. -An example of this can be seen in the OpenX OpenRTB bid adapter [here](https://github.com/prebid/Prebid.js/blob/master/modules/openxOrtbBidAdapter.js#L327). +An example of this can be seen in the OpenX OpenRTB bid adapter [here](https://github.com/prebid/Prebid.js/blob/master/modules/openxOrtbBidAdapter.js#L327) or RTB House bid adapter [here](https://github.com/prebid/Prebid.js/blob/8fe7115021fd348d0f3b090da48c40c095078800/modules/rtbhouseBidAdapter.js#LL135C4-L135C4). Other than the addition of the `bidId` field, the `AuctionConfig` object should adhere to the requirements set forth in FLEDGE. The details of creating an `AuctionConfig` object are beyond the scope of this document. From 6411572158ef6513a0975d42871f00a102f3062f Mon Sep 17 00:00:00 2001 From: Jason Quaccia Date: Mon, 15 May 2023 11:14:24 -0700 Subject: [PATCH 283/763] Documentation for Billing Deferral (#4546) * added documention for billing deferral * some more doc updates * updated triggerBilling example * Update triggerBilling.md * Update bidder-adaptor.md * Update InterstitialAds.md --------- Co-authored-by: bretg --- dev-docs/adunit-reference.md | 3 +- dev-docs/bidder-adaptor.md | 28 ++++++++++++++++++- .../publisher-api-reference/triggerBilling.md | 25 +++++++++++++++++ features/InterstitialAds.md | 9 ++++++ 4 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 dev-docs/publisher-api-reference/triggerBilling.md diff --git a/dev-docs/adunit-reference.md b/dev-docs/adunit-reference.md index 93751c6562..b147636805 100644 --- a/dev-docs/adunit-reference.md +++ b/dev-docs/adunit-reference.md @@ -40,6 +40,7 @@ See the table below for the list of properties on the ad unit. For example ad u | `ttlBuffer` | Optional | Number | TTL buffer override for this adUnit. See [setConfig({ttlBuffer})](/dev-docs/publisher-api-reference/setConfig.html#setConfig-ttlBuffer) | | `renderer` | Optional | Object | Custom renderer, typically used for [outstream video](/dev-docs/show-outstream-video-ads.html) | | `video` | Optional | Object | Used to link an Ad Unit to the [Video Module][videoModule]. For allowed params see the [adUnit.video reference](#adUnit-video). | +| `deferBilling` | Optional | Boolean | Used by a publisher to flag adUnits as being separately billable. This allows for a publisher to trigger billing manually for winning bids. See [pbjs.triggerBilling](/dev-docs/publisher-api-reference/triggerBilling.html) and [onBidBillable](/dev-docs/bidder-adaptor.html#registering-on-bid-billable) for more info. | @@ -604,7 +605,7 @@ pbjs.addAdUnits({ }); {% endhighlight %} -For more information on Interstitial ads, reference the [Interstitial feature page](/features/InterstitialAds.html). +For more information on Interstitial ads, reference the [Interstitial feature page](/features/InterstitialAds.html). Additionally, to assist with billing optimization and interstitial ads, the triggerBilling and onBidBillable functionality can be utilized. See [pbjs.triggerBilling](/dev-docs/publisher-api-reference/triggerBilling.html) and [onBidBillable](/dev-docs/bidder-adaptor.html#registering-on-bid-billable) for more info. diff --git a/dev-docs/bidder-adaptor.md b/dev-docs/bidder-adaptor.md index 2600288810..f3ba662263 100644 --- a/dev-docs/bidder-adaptor.md +++ b/dev-docs/bidder-adaptor.md @@ -8,7 +8,6 @@ sidebarType: 1 --- - # How to Add a New Prebid.js Bidder Adapter {:.no_toc} @@ -609,6 +608,33 @@ Sample data received by this function: } {% endhighlight %} +### Registering on Bid Billable + +The `onBidBillable` function will be called when it deems a bid to be billable. When a bid wins, it is by default also billable. That is, by default, onBidWon and onBidBillable will be called one after the other. However, a publisher can flag adUnits as being separately billable: `pbjs.addAdUnits({deferBilling: true, ...})`. Winning bids for adUnits with `deferBilling` set to true, trigger the onBidWon function but not the onBidBillable function. When appropriate (e.g. an interstitial is displayed), the publisher may then call the public API method, `pbjs.triggerBilling(winningAdIdToBill)` passing the winning bid to be billed, which will trigger onBidBillable. + +Sample data received by this function (same as what is recieved for onBidWon): + +{% highlight js %} +{ + "bidder": "example", + "width": 300, + "height": 250, + "adId": "330a22bdea4cac", + "mediaType": "banner", + "cpm": 0.28 + "ad": "...", + "requestId": "418b37f85e772c", + "adUnitCode": "div-gpt-ad-1460505748561-0", + "size": "350x250", + "adserverTargeting": { + "hb_bidder": "example", + "hb_adid": "330a22bdea4cac", + "hb_pb": "0.20", + "hb_size": "350x250" + } +} +{% endhighlight %} + ### Registering on Set Targeting The `onSetTargeting` function will be called when the adserver targeting has been set for a bid from the adapter. diff --git a/dev-docs/publisher-api-reference/triggerBilling.md b/dev-docs/publisher-api-reference/triggerBilling.md new file mode 100644 index 0000000000..ab44945a09 --- /dev/null +++ b/dev-docs/publisher-api-reference/triggerBilling.md @@ -0,0 +1,25 @@ +--- +layout: api_prebidjs +title: pbjs.triggerBilling +description: +sidebarType: 1 +--- + + +Allows a publisher the option to manually trigger billing for a winning bid (The winning bid to be billed is passed through the function below as an argument). + +{% highlight js %} + +pbjs.triggerBilling(winningAdIdToBill); + +{% endhighlight %} + +{: .alert.alert-warning :} +Note: In order to use `pbjs.triggerBilling`, the following is also required. + +- Any bid adapters a publisher integrates with must include the onBidBillable(bid) method which will be invoked by Prebid.js when it deems a bid to be billable (When a bid wins, it is by default also billable. That is, by default, Prebid.js will invoke onBidWon and onBidBillable one after the other). +- A publisher must flag all adUnits as being separately billable via the deferBilling key: `pbjs.addAdUnits({deferBilling: true, ...})` (Setting deferBilling to true will trigger onBidWon but not onBidBillable). +- When appropriate (e.g. an interstitial is displayed), the publisher may call `pbjs.triggerBilling(winningAdIdToBill)`, which would then trigger onBidBillable. + + +
diff --git a/features/InterstitialAds.md b/features/InterstitialAds.md index 67a68304fe..d943385a16 100644 --- a/features/InterstitialAds.md +++ b/features/InterstitialAds.md @@ -76,6 +76,15 @@ utils.deepAccess(bidRequest.ortb2Imp, 'instl') The assumption is that bid adapters will copy the values to the appropriate protocol location for their endpoint. +## Billing Deferral + +Optimizing when billing occurs for an interstitial ad can sometimes be tricky. The following built-in Prebid.js functionality can help assist with this: +- Bid adapters can provide a method called `onBidBillable(bid)` which will be invoked by Prebid.js when it deems a bid to be billable (Note: A bid adapter must have the onBidBillable method configured for this to work). +- When a bid wins, it is by default also billable. That is, by default, Prebid.js will invoke the bid adapter methods onBidWon and onBidBillable one after the other. +- A publisher can flag individual adUnits as being separately billable with the following configuration: `pbjs.addAdUnits({deferBilling: true, ...})` +- Winning bids for adUnits with deferBilling set to true will trigger a bid adapters onBidWon method but not their onBidBillable method. +- Finally, when appropriate (e.g. an interstitial is displayed), the publisher may call `pbjs.triggerBilling(winningAdIdToBill)` with the winning bid to be billed, which would trigger a bid adapters onBidBillable method. + ## Related Topics - The [AdUnit Reference](/dev-docs/adunit-reference.html) From 0087ff0e4bbf73a89982a921e39889a3cc47cba4 Mon Sep 17 00:00:00 2001 From: Volodymyr Pavlov <48243894+grakholsky@users.noreply.github.com> Date: Mon, 15 May 2023 21:21:01 +0300 Subject: [PATCH 284/763] adtrgtme: update adapter params (#4531) * adtrgtme: add bid param site_id * adtrgtme: update bid param example site_id --- dev-docs/bidders/adtrgtme.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dev-docs/bidders/adtrgtme.md b/dev-docs/bidders/adtrgtme.md index c0af0853a9..e6d969d59a 100644 --- a/dev-docs/bidders/adtrgtme.md +++ b/dev-docs/bidders/adtrgtme.md @@ -24,3 +24,11 @@ sidebarType: 1 ### Note: The Adtrgtme bidding adapter requires setup before beginning. Please contact us at info@adtarget.me + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|-----------|----------|-------------|--------------|----------| +| `site_id` | required | Site ID | `1234567890` | `uint64` | \ No newline at end of file From 6371e353b533b091eafc8d1b14486314178b1dc1 Mon Sep 17 00:00:00 2001 From: Jason Quaccia Date: Mon, 15 May 2023 13:45:01 -0700 Subject: [PATCH 285/763] fix for defer billing docs (#4570) --- dev-docs/bidder-adaptor.md | 2 +- dev-docs/publisher-api-reference/triggerBilling.md | 4 ++-- features/InterstitialAds.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dev-docs/bidder-adaptor.md b/dev-docs/bidder-adaptor.md index f3ba662263..1f1ea8a295 100644 --- a/dev-docs/bidder-adaptor.md +++ b/dev-docs/bidder-adaptor.md @@ -610,7 +610,7 @@ Sample data received by this function: ### Registering on Bid Billable -The `onBidBillable` function will be called when it deems a bid to be billable. When a bid wins, it is by default also billable. That is, by default, onBidWon and onBidBillable will be called one after the other. However, a publisher can flag adUnits as being separately billable: `pbjs.addAdUnits({deferBilling: true, ...})`. Winning bids for adUnits with `deferBilling` set to true, trigger the onBidWon function but not the onBidBillable function. When appropriate (e.g. an interstitial is displayed), the publisher may then call the public API method, `pbjs.triggerBilling(winningAdIdToBill)` passing the winning bid to be billed, which will trigger onBidBillable. +The `onBidBillable` function will be called when it deems a bid to be billable. When a bid wins, it is by default also billable. That is, by default, onBidWon and onBidBillable will be called one after the other. However, a publisher can flag adUnits as being separately billable: `pbjs.addAdUnits({deferBilling: true, ...})`. Winning bids for adUnits with `deferBilling` set to true, trigger the onBidWon function but not the onBidBillable function. When appropriate (e.g. an interstitial is displayed), the publisher may then call the public API method, `pbjs.triggerBilling(winningBidObjectToBill)` passing the winning bid to be billed, which will trigger onBidBillable. Sample data received by this function (same as what is recieved for onBidWon): diff --git a/dev-docs/publisher-api-reference/triggerBilling.md b/dev-docs/publisher-api-reference/triggerBilling.md index ab44945a09..f6e96bd0f1 100644 --- a/dev-docs/publisher-api-reference/triggerBilling.md +++ b/dev-docs/publisher-api-reference/triggerBilling.md @@ -10,7 +10,7 @@ Allows a publisher the option to manually trigger billing for a winning bid (The {% highlight js %} -pbjs.triggerBilling(winningAdIdToBill); +pbjs.triggerBilling(winningBidObjectToBill); {% endhighlight %} @@ -19,7 +19,7 @@ Note: In order to use `pbjs.triggerBilling`, the following is also required. - Any bid adapters a publisher integrates with must include the onBidBillable(bid) method which will be invoked by Prebid.js when it deems a bid to be billable (When a bid wins, it is by default also billable. That is, by default, Prebid.js will invoke onBidWon and onBidBillable one after the other). - A publisher must flag all adUnits as being separately billable via the deferBilling key: `pbjs.addAdUnits({deferBilling: true, ...})` (Setting deferBilling to true will trigger onBidWon but not onBidBillable). -- When appropriate (e.g. an interstitial is displayed), the publisher may call `pbjs.triggerBilling(winningAdIdToBill)`, which would then trigger onBidBillable. +- When appropriate (e.g. an interstitial is displayed), the publisher may call `pbjs.triggerBilling(winningBidObjectToBill)`, which would then trigger onBidBillable.
diff --git a/features/InterstitialAds.md b/features/InterstitialAds.md index d943385a16..e8766372f8 100644 --- a/features/InterstitialAds.md +++ b/features/InterstitialAds.md @@ -83,7 +83,7 @@ Optimizing when billing occurs for an interstitial ad can sometimes be tricky. - When a bid wins, it is by default also billable. That is, by default, Prebid.js will invoke the bid adapter methods onBidWon and onBidBillable one after the other. - A publisher can flag individual adUnits as being separately billable with the following configuration: `pbjs.addAdUnits({deferBilling: true, ...})` - Winning bids for adUnits with deferBilling set to true will trigger a bid adapters onBidWon method but not their onBidBillable method. -- Finally, when appropriate (e.g. an interstitial is displayed), the publisher may call `pbjs.triggerBilling(winningAdIdToBill)` with the winning bid to be billed, which would trigger a bid adapters onBidBillable method. +- Finally, when appropriate (e.g. an interstitial is displayed), the publisher may call `pbjs.triggerBilling(winningBidObjectToBill)` with the winning bid to be billed, which would trigger a bid adapters onBidBillable method. ## Related Topics From 97b9e087117c17c23197fe1acc920b94bb809616 Mon Sep 17 00:00:00 2001 From: Patrick Loughrey Date: Mon, 15 May 2023 16:45:37 -0400 Subject: [PATCH 286/763] Triplelift Bidder Docs: Clarifying Native Support (#4569) * TL-34447 Add GPP Support to Prebid.org * TL-27059: Added pDMP documentation * Update triplelift.md * Triplelift: Update video params * Triplelift: Clarifying native documentation * Triplelift: Clarifying native documentation --------- Co-authored-by: bretg --- dev-docs/bidders/triplelift_native.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/dev-docs/bidders/triplelift_native.md b/dev-docs/bidders/triplelift_native.md index cb2e77f118..4085b6e4bd 100644 --- a/dev-docs/bidders/triplelift_native.md +++ b/dev-docs/bidders/triplelift_native.md @@ -14,7 +14,7 @@ userIds: criteo, identityLink, unifiedId prebid_member: true safeframes_ok: true deals_supported: true -pbjs: true +pbjs: false pbs: true pbs_app_supported: true fpd_supported: true @@ -23,9 +23,10 @@ sidebarType: 1 --- {: .alert.alert-info :} -The Triplelift Prebid Server bidding adapter and user sync endpoint require setup before beginning. Please contact us at prebid@triplelift.com. +This is a Prebid Server adapter for running component native only. For the standard Prebid JS Triplelift bid adapter, see the "Triplelift" bidder. If you are interested in running component native via Prebid JS, please contact us at prebid@triplelift.com. -This is a Prebid Server adapter for running component native only. For the standard Prebid JS Triplelift bid adapter, see the "Triplelift" bidder. +{: .alert.alert-info :} +The Triplelift Prebid Server bidding adapter and user sync endpoint require setup before beginning. Please contact us at prebid@triplelift.com. ### Table of Contents From 063deed22b69349aaab79e0497b525b162d75aea Mon Sep 17 00:00:00 2001 From: bretg Date: Mon, 15 May 2023 17:44:05 -0400 Subject: [PATCH 287/763] mobile fixes (#4572) --- _data/sidebar.yml | 6 +++--- _layouts/home.html | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/_data/sidebar.yml b/_data/sidebar.yml index 7b85c62d59..0bba0c027e 100644 --- a/_data/sidebar.yml +++ b/_data/sidebar.yml @@ -761,7 +761,7 @@ subgroup: 2 - sbSecId: 2 - title: Prebid Utilities + title: Prebid Utility Functions link: /prebid-mobile/pbm-api/ios/pbm-util-ios.html isHeader: 0 isSectionHeader: 0 @@ -778,7 +778,7 @@ subgroup: 3 - sbSecId: 2 - title: Code Integration + title: SDK Integration link: /prebid-mobile/pbm-api/android/code-integration-android.html isHeader: 0 isSectionHeader: 0 @@ -786,7 +786,7 @@ subgroup: 3 - sbSecId: 2 - title: GAM Original API + title: GAM Original Integration link: /prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.html isHeader: 0 isSectionHeader: 0 diff --git a/_layouts/home.html b/_layouts/home.html index fec6c2de1b..19af7069e8 100644 --- a/_layouts/home.html +++ b/_layouts/home.html @@ -40,7 +40,7 @@

Prebid Documentation

Prebid Mobile SDK

Lightweight SDK enabling app publishers to move beyond the waterfall

View Docs -

Download Mobile SDK

+

Download Mobile SDK

From 6aa84b8193e8d98c8d804cc8598bbec9096e137a Mon Sep 17 00:00:00 2001 From: bretg Date: Tue, 16 May 2023 12:45:12 -0400 Subject: [PATCH 288/763] disabling openxoutstream from download (#4577) --- dev-docs/bidders/openxoutstream.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dev-docs/bidders/openxoutstream.md b/dev-docs/bidders/openxoutstream.md index e5a304ac6d..7602e7ddfd 100644 --- a/dev-docs/bidders/openxoutstream.md +++ b/dev-docs/bidders/openxoutstream.md @@ -9,8 +9,11 @@ prebid_member: true coppa_supported: true gvl_id: 69 sidebarType: 1 +enable_download : false --- +{: .alert.alert-warning :} +Deprecated adapter ### Bid Params From f1b618d12b1c41e9ca5055136d57cd4857f429c6 Mon Sep 17 00:00:00 2001 From: Andrew Date: Tue, 16 May 2023 18:43:46 -0700 Subject: [PATCH 289/763] document new plcmt field (#4550) * document new plcmt field * Update dev-docs/adunit-reference.md Co-authored-by: Muki Seiler --------- Co-authored-by: Muki Seiler --- dev-docs/adunit-reference.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/adunit-reference.md b/dev-docs/adunit-reference.md index b147636805..88213cc124 100644 --- a/dev-docs/adunit-reference.md +++ b/dev-docs/adunit-reference.md @@ -104,6 +104,7 @@ See [Prebid Native Implementation](/prebid/native-implementation.html) for detai | `context` | Recommended | String | The video context, either `'instream'`, `'outstream'`, or `'adpod'` (for long-form videos). Example: `context: 'outstream'`. Defaults to 'instream'. | | `useCacheKey` | Optional | Boolean | Defaults to `false`. While context `'instream'` always will return an vastUrl in bidResponse, `'outstream'` will not. Setting this `true` will use cache url defined in global options also for outstream responses. | | `placement` | Recommended | Integer | 1=in-stream, 2=in-banner, 3=in-article, 4=in-feed, 5=interstitial/floating. **Highly recommended** because some bidders require more than context=outstream. | +| `plcmt` | Recommended | Integer | 1=in-stream, 2=accompanying content, 3=interstitial, 4=no content/standalone. **Highly recommended** to comply with new IAB video specifications. See [AdCOM v1 spec](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/develop/AdCOM%20v1.0%20FINAL.md#list_plcmtsubtypesvideo) | | `playerSize` | Optional | Array[Integer,Integer] | The size (width, height) of the video player on the page, in pixels. Example: `playerSize: [640, 480]` | | `api` | Recommended | Array[Integer] | List of supported API frameworks for this impression. If an API is not explicitly listed, it is assumed not to be supported. For list, see [OpenRTB 2.5 spec][openRTB]. If your video player or video ads SDK supports [Open Measurement][OpenMeasurement], **recommended** to set `7` for OMID-1| | `mimes` | Recommended | Array[String] | Content MIME types supported, e.g., `"video/x-ms-wmv"`, `"video/mp4"`. **Required by OpenRTB when using [Prebid Server][pbServer]**. | From 11f9477a77429a228a5c20c9c430a4c1a4967319 Mon Sep 17 00:00:00 2001 From: Jason Quaccia Date: Wed, 17 May 2023 06:58:49 -0700 Subject: [PATCH 290/763] Added code example for how to use pbjs.triggerBilling (#4573) * fix for defer billing docs * added defer billing coding example to show usage * copy update * updated docs for pbjs.triggerBilling method --- .../publisher-api-reference/triggerBilling.md | 70 ++++++++++++++++--- 1 file changed, 62 insertions(+), 8 deletions(-) diff --git a/dev-docs/publisher-api-reference/triggerBilling.md b/dev-docs/publisher-api-reference/triggerBilling.md index f6e96bd0f1..bb84d585a9 100644 --- a/dev-docs/publisher-api-reference/triggerBilling.md +++ b/dev-docs/publisher-api-reference/triggerBilling.md @@ -6,20 +6,74 @@ sidebarType: 1 --- -Allows a publisher the option to manually trigger billing for a winning bid (The winning bid to be billed is passed through the function below as an argument). - -{% highlight js %} - -pbjs.triggerBilling(winningBidObjectToBill); - -{% endhighlight %} +Allows a publisher the option to manually trigger billing for a winning bid or bids when ready to do so. {: .alert.alert-warning :} -Note: In order to use `pbjs.triggerBilling`, the following is also required. +Note: In order to use `pbjs.triggerBilling`, see the following bullet points below: - Any bid adapters a publisher integrates with must include the onBidBillable(bid) method which will be invoked by Prebid.js when it deems a bid to be billable (When a bid wins, it is by default also billable. That is, by default, Prebid.js will invoke onBidWon and onBidBillable one after the other). - A publisher must flag all adUnits as being separately billable via the deferBilling key: `pbjs.addAdUnits({deferBilling: true, ...})` (Setting deferBilling to true will trigger onBidWon but not onBidBillable). - When appropriate (e.g. an interstitial is displayed), the publisher may call `pbjs.triggerBilling(winningBidObjectToBill)`, which would then trigger onBidBillable. +See below for an example of how triggerBilling can be used: + +{: .alert.alert-warning :} +Note: The logic to decide when to invoke `pbjs.triggerBilling` is open-ended. One common use case could be to listen for an "on view" event emitted from your ad server.

For instance, the example below listens for GPT's "impressionViewable" event to determine if a deferred ad unit has become visible and is therefore ready for billing. The utilized approach to determine when to invoke `pbjs.triggerBilling` should be customized to your specific needs (For more on GPT's "impressionViewable" event, see: [https://developers.google.com/publisher-tag/reference#googletag.events.impressionviewableevent](https://developers.google.com/publisher-tag/reference#googletag.events.impressionviewableevent)).

Additionally, the example below takes into account the possibility of multiple deferred ad units being present on a page that could potentially invoke the triggerBilling function (see the "deferredAdUnitIds" variable in the snippet below). The amount of deferred ad units needed on a page are dependent on your needs and could vary. + +{% highlight js %} +... + +var adUnits = [ + { + code: "deferred-ad-element-id-1", + deferBilling: true, // decide whether an ad unit should be deferred + ... + }, + { + code: "deferred-ad-element-id-2", + deferBilling: true, // decide whether an ad unit should be deferred + ... + } +]; + +pbjs.que.push(function () { // standard prebid configuration + pbjs.addAdUnits(adUnits); + pbjs.requestBids({ + bidsBackHandler: sendAdserverRequest, + timeout: 1000, + }); +}); + +function sendAdserverRequest(bids, timedOut, auctionId) { + let winningBidsWithDeferredAdUnits = []; // bids associated with deferred ad units that win the Prebid auction will be added to this array (there could be one or many winning bids) + let deferredAdUnitIds = ['deferred-ad-element-id-1', 'deferred-ad-element-id-2']; // enter the ad unit ids you would like to defer billing for (there could be one or many deferred ad unit ids) + + deferredAdUnitIds.forEach(deferredAdUnitId => { + if (bids[deferredAdUnitId]) { + // confirm each deferred ad unit came back with the bid responses + pbjs.onEvent("bidWon", (bid) => { + if (bid.adUnitCode === deferredAdUnitId) { + // confirm bid for deferred ad unit has won + winningBidsWithDeferredAdUnits.push(bid); + } + }); + } + }); + + // next, run some custom logic to detect if a publisher is ready to trigger billing (ex: the ad unit became visible). + // note: the following code block inside of the "impressionViewable" event listener is just one example of how to trigger billing for deferred ad units by utilizing GPT's "impressionViewable" event. + googletag.pubads().addEventListener("impressionViewable", (event) => { + const adSlotId = event.slot.getSlotElementId(); + winningBidsWithDeferredAdUnits.find(bid => { + if (bid.adUnitCode === adSlotId) { // confirm if the ad slot that became viewable was a deferred ad slot + pbjs.triggerBilling(bid); + } + }); + }); +} + +... + +{% endhighlight %}
From b02f6118f567732eab567524f688bb9fd7893e4c Mon Sep 17 00:00:00 2001 From: Gen Whitt <107279666+genwhittTTD@users.noreply.github.com> Date: Wed, 17 May 2023 18:47:15 -0400 Subject: [PATCH 291/763] Edits to the Unified ID 2.0 page. (#4576) --- .../modules/userid-submodules/unified2.md | 94 +++++++++++-------- 1 file changed, 54 insertions(+), 40 deletions(-) diff --git a/dev-docs/modules/userid-submodules/unified2.md b/dev-docs/modules/userid-submodules/unified2.md index cc410d5b56..058e5b1b0e 100644 --- a/dev-docs/modules/userid-submodules/unified2.md +++ b/dev-docs/modules/userid-submodules/unified2.md @@ -5,82 +5,96 @@ description: Unified ID 2.0 User ID sub-module useridmodule: uid2IdSystem --- +Unified ID 2.0 (UID2) is an open-source identity solution built for the open internet. It leverages encrypted email and phone number data to provide a privacy-conscious, secure, and accurate identity standard for the entire digital advertising ecosystem. -Unified ID 2 (often just called 'UID2') is an email based id solution that is owned and operated by the prebid community. Unified ID 2 relies on user consent before an id can be added to the bid stream. Consent can be gathered by SSO providers who have integrated against the UID2 framework, or Publishers own login & consent mechaninism. +UID2 relies on user consent before an ID can be added to the bid stream. Consent can be gathered by SSO providers who have integrated against the UID2 framework, or through a publisher's own login and consent mechanism. -Add it to your Prebid.js package with: +To add UID2 to your Prebid.js package, run the following: {: .alert.alert-info :} gulp build --modules=uid2IdSystem -## Unified ID Registration +## Unified ID 2.0 Registration -You can set up Unified ID 2 in one of these ways: +You can set up Unified ID 2.0 in one of these ways: -- Include the module to your pb.js wrapper. You will need to apply for Publisher access to the UID2 system at [The Trade Desk's UID2 portal](https://www.thetradedesk.com/us/about-us/industry-initiatives/unified-id-solution-2-0#request-access). Using this option, you will need to generate UID2 tokens server-side (there is currently no client-side-only flow without using an SSO provider). You provide these tokens to Prebid.js either using a cookie or directly in configuration. -- Utilize a [managed services](https://prebid.org/product-suite/managed-services/) company who can do this for you. +- Include the module to your pb.js wrapper. You will need to apply for publisher access [on the UID2 website](https://unifiedid.com/request-access). Using this option, you must generate UID2 tokens server-side. There is currently no flow for client-side only, unless you use an SSO provider. You provide these tokens to Prebid.js either by using a cookie or directly in the configuration. +- Use a [managed services](https://prebid.org/product-suite/managed-services/) company that can do this for you. -Each publisher’s privacy policy should take UnifiedId 2 into account. +Each publisher’s privacy policy should take UnifiedID 2.0 into account. -## Unified ID 2 Tokens +## Unified ID 2.0 Tokens -UID2 tokens are generated on the server-side by making an API call to a UID2 operator using details provided when you receive UID2 Publisher access. This API will return a JSON data structure with multiple values, including an advertising token and a refresh token. For full functionality, the entire object should be provided, either JSON-encoded as a server-set cookie or by being included in the configuration object (see examples). +UID2 tokens are generated on the server side by making an API call to a UID2 operator using details provided when you receive UID2 publisher access. This API returns a JSON data structure with multiple values, including an advertising token and a refresh token. For full functionality, provide the entire object in one of these ways: +- JSON-encoded as a cookie. +- Included in the configuration object. -Sample token response object: +For examples, see [Unified ID 2.0 Examples](#unified-id-20-examples). -`{`
  `"advertising_token": "...",`
  `"refresh_token": "...",`
  `"identity_expires": 1633643601000,`
  `"refresh_from": 1633643001000,`
  `"refresh_expires": 1636322000000,`
  `"refresh_response_key": "wR5t6HKMfJ2r4J7fEGX9Gw=="`
`}` +The following sample is fictitious, but shows what the token response object looks like: -When this full data structure is provided, the module will automatically refresh the token periodically, as long as the refresh token hasn't expired. +```javascript +{ + "advertising_token": "...", + "refresh_token": "...", + "identity_expires": 1633643601000, + "refresh_from": 1633643001000, + "refresh_expires": 1636322000000, + "refresh_response_key": "wR5t6HKMfJ2r4J7fEGX9Gw==" +} +``` -## Unified ID 2 Legacy Mode +When this full data structure is provided, the module automatically refreshes the token periodically, as long as the refresh token hasn't expired. -There is a legacy mode where either the value of the advertising token can be provided directly (see the `value` param in the *Configuration* section), or via a legacy cookie. In this mode, no attempt is made to automatically refresh the token. +## Unified ID 2.0 Server-Only Mode -To use the cookie-based legacy mode, set a cookie named `__uid2_advertising_token` to the value of the advertising token only. For example: +There is a server-only mode where the value of the advertising token can be provided either directly (see the `value` parameter in the [Unified ID 2.0 Configuration](#unified-id-20-configuration) section) or via a cookie. In this mode, no attempt is made to automatically refresh the token. + +To use the cookie-based server-only mode, set a cookie named `__uid2_advertising_token` to the value of the advertising token only, as shown in this fictitious example: `__uid2_advertising_token=eb33b0cb-8d35-4722-b9c0-1a31d4064888` -## Unified ID 2 Configuration +## Unified ID 2.0 Configuration -The below parameters apply only to the UID 2.0 User ID Module integration. +The following parameters apply only to the Unified ID 2.0 module integration. {: .table .table-bordered .table-striped } | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | -| name | Required | String | ID value for the UID20 module - `"uid2"` | `"uid2"` | -| params.uid2Token | Optional | Object | The initial UID2 token. This should be `body` element of the decrypted response from a call to the `/token/generate` or `/token/refresh` endpoint. | See the sample token above. | -| params.uid2ServerCookie | Optional | String | The name of a cookie which holds the initial UID2 token, set by the server. The cookie should contain JSON in the same format as the alternative uid2Token param. **If uid2Token is supplied, this param is ignored.** | See the sample token above. | +| name | Required | String | ID value for the Unified ID 2.0 module - `"uid2"` | `"uid2"` | +| params.uid2Token | Optional | Object | The initial UID2 token. This should be the `body` element of the decrypted response from a call to the `/token/generate` or `/token/refresh` endpoint. | See the sample token above. | +| params.uid2ServerCookie | Optional | String | The name of a cookie that holds the initial UID2 token, set by the server. The cookie should contain JSON in the same format as the alternative uid2Token param. **If uid2Token is supplied, this param is ignored.** | See the sample token above. | | params.uid2ApiBase | Optional | String | Overrides the default UID2 API endpoint. | `https://prod.uidapi.com` _(default)_ | -| value | Not recommended | Object | Used only if the page has a separate mechanism for storing the UID 2.O 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. Tokens will **not** be automatically refreshed. | `{"uid2": { "id": "eb33b0cb-8d35-4722-b9c0-1a31d4064888"}}` | +| value | Not recommended | Object | Used only if the page has a separate mechanism for storing the UID 2.0 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, and the tokens are **not** automatically refreshed. | `{"uid2": { "id": "eb33b0cb-8d35-4722-b9c0-1a31d4064888"}}` | -## Unified ID 2 Example +## Unified ID 2.0 Examples -Publisher has set a server-side cookie called `uid2_identity` containing the UID2 token generation response object: +In the following example, the publisher has set a cookie called `uid2_identity` containing the UID2 token generation response object: {% highlight javascript %} pbjs.setConfig({ - userSync: { - userIds: [{ - name: 'uid2', - params: { - uid2ServerCookie: 'uid2_identity' - } - }] - } + userSync: { + userIds: [{ + name: 'uid2', + params: { + uid2ServerCookie: 'uid2_identity' + } + }] + } }); {% endhighlight %} -Publisher has retrieved a server-generated UID2 response and it is currently stored in the JavaScript variable `uid2Identity`: +In the following example, the publisher has retrieved a server-generated UID2 response, and it is currently stored in the JavaScript variable `uid2Identity`: {% highlight javascript %} pbjs.setConfig({ - userSync: { - userIds: [{ - name: 'uid2', - params: { - uid2Token: uid2Identity - } - }] - } + userSync: { + userIds: [{ + name: 'uid2', + params: { + uid2Token: uid2Identity + } + }] + } }); {% endhighlight %} From 7d961c50c26c4bba686c8e50697631fdc6565772 Mon Sep 17 00:00:00 2001 From: Ilia Medvedev Date: Thu, 18 May 2023 05:48:30 +0600 Subject: [PATCH 292/763] New adapter: Adsyield (#4533) --- dev-docs/bidders/adsyield.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/dev-docs/bidders/adsyield.md b/dev-docs/bidders/adsyield.md index d4264a969f..645ea7dc56 100644 --- a/dev-docs/bidders/adsyield.md +++ b/dev-docs/bidders/adsyield.md @@ -3,6 +3,7 @@ layout: bidder title: AdsYield description: Prebid AdsYield Bidder Adaptor pbjs: true +pbs: true biddercode: adsyield aliasCode: admixer media_types: video @@ -14,6 +15,13 @@ sidebarType: 1 ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|------------------------------------------------------------------------------------------------------------------|----------------------------------------|----------| -| `zone` | required | The unique identifier of the ad placement. Could be obtained from the AdsYield UI or from your account manager. | "e5ff8e48-4bd0-4a2c-9236-55530ab8981d" | `string` | + +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------------------------------------------------------------------------------------------------|------------------------------------------|-----------| +| `zone` | required | The unique identifier of the ad placement. Could be obtained from the AdsYield UI or from your account manager. | `'e5ff8e48-4bd0-4a2c-9236-55530ab8981d'` | `string` | +| `host` | required | Ad network's RTB host | `'open-adsyield.com'` | `string` | +| `publisherId` | required | Publisher ID | `12345` | `integer` | + +Adsyield server-side Prebid Server adapter requires only `publisherId` and `host` parameters. But Adsyield client-side Prebid.js adapter requires only `zone`. + +Adsyield server-side Prebid Server adapter supports only `banner`, `video`, `audio`, `native` media types. But Adsyield client-side Prebid.js adapter supports only `video` media types, doesn't support `banner`, `audio` and `native`. From 0b0295116104007c1efbb6bb0a5c5a815d87a881 Mon Sep 17 00:00:00 2001 From: prebid-sp <131664583+prebid-sp@users.noreply.github.com> Date: Thu, 18 May 2023 05:24:18 +0530 Subject: [PATCH 293/763] added silverpush adapter docs (#4510) * added silverpush adapter docs * Remove
from table * added table classes for video params doc --------- Co-authored-by: Amit Jangra Co-authored-by: Muki Seiler --- dev-docs/bidders/silverpush.md | 133 +++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 dev-docs/bidders/silverpush.md diff --git a/dev-docs/bidders/silverpush.md b/dev-docs/bidders/silverpush.md new file mode 100644 index 0000000000..51458be1d1 --- /dev/null +++ b/dev-docs/bidders/silverpush.md @@ -0,0 +1,133 @@ +--- +layout: bidder +title: Silverpush +description: Prebid Silverpush Bidder Adaptor +pbjs: true +pbs: true +biddercode: silverpush +media_types: banner, video +schain_supported: true +gdpr_supported: true +usp_supported: true +coppa_supported: true +gpp_supported: true +floors_supported: true +userIds: +prebid_member: false +fpd_supported: false +multiformat_supported: will-bid-on-one +sidebarType: 1 +--- + +### Registration +The Example Bidding adapter requires setup before beginning. Please contact us at prebid@silverpush.co. + + +### Bid Parameters + +#### Banner + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +| -------------- | ----------- | ------------------------------------------ | ------------- | ------------ | +| `publisherId` | required | Publisher id provided by silverpush | "123456" | String | +| `bidFloor` | optional | Minimum price in USD. bidFloor applies to a specific unit. For example, use the following value to set a $1.50 floor: 1.50.
| 1.50 | Number | + + +#### mediaTypes.banner + +The following banner parameters are supported here so publishers may fully declare their banner inventory: + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +| --------- | ------------| ----------------------------------------------------------------- | --------- | --------- | +| sizes | required | Avalaible sizes supported for banner ad unit | [ [300, 250], [300, 600] ] | [[Integer, Integer], [Integer, Integer]] | + + +### AdUnit Format for Banner +```javascript +const adUnits = [{ + code: 'div-1', + mediaTypes: { + banner: { + sizes: [ [300, 250], [300,600] ] + } + }, + bids: [{ + bidder: 'silverpush', + params: { + publisherId: "123456", + bidFloor: 1.2 + } + }] +}]; +``` + +#### Video + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +| ---- | ----- | ----------- | ------- | ---- | +| `publisherId` | required | Publisher id provided by silverpush | "123456" | String | +| `bidFloor` | optional | Minimum price in USD. bidFloor applies to a specific unit. For example, use the following value to set a $1.50 floor: 1.50. | 1.50 | Number | + +#### mediaTypes.video + + +The following video parameters are supported here so publishers may fully declare their video inventory: + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +| --------- | ------------| ----------------------------------------------------------------- | --------- | --------- | +| context | required | instream or outstream |"outstream" | string | +| playerSize | required | Avalaible sizes supported for video ad unit. | [300, 250] | [Integer, Integer] | +| mimes | required | List of content MIME types supported by the player. | ["video/mp4"]| [String]| +| protocols | required | Supported video bid response protocol values. | [2,3,5,6] | [integers]| +| api | required | Supported API framework values. | [2] | [integers] | +| maxduration | required | Maximum video ad duration in seconds. | 30 | Integer | +| minduration | required | Minimum video ad duration in seconds. | 6 | Integer | +| startdelay | required | Indicates the start delay in seconds for pre-roll, mid-roll, or post-roll ad placements. | 0 | Integer | +| placement | required | Placement type for the impression. | 1 | Integer | +| minbitrate | optional | Minimum bit rate in Kbps. | 300 | Integer | +| maxbitrate | optional | Maximum bit rate in Kbps. | 9600 | Integer | +| playbackmethod | optional | Playback methods that may be in use. Only one method is typically used in practice. | [2]| [Integers] | +| linearity | optional | OpenRTB2 linearity. in-strea,overlay... | 1 | Integer | +| skip | optional | Indicates if the player will allow the video to be skipped, where 0 = no, 1 = yes . | 1 | Integer | +| skipafter | optional | Number of seconds a video must play before skipping is enabled; only applicable if the ad is skippable. | 5 | Integer | +| delivery | optional | OpenRTB2 delivery. Supported delivery methods (e.g., streaming, progressive). If none specified, assume all are supported. | 1 | [Integer] | + + + + +### AdUnit Format for Video +```javascript +var videoAdUnits = [{ + code: 'video-1', + mediaTypes: { + video: { + api: [1, 2, 4, 6], + mimes: ['video/mp4'], + context: 'instream', // or 'outstream' + playerSize: [ 640, 480 ], + protocols: [4,5,6,7], + placement: 1, + minduration: 0, + maxduration: 60, + startdelay: 0 + } + }, + bids: [ + { + bidder: 'silverpush', + params: { + publisherId: "123456", + bidfloor: 2.5 + } + } + ] +}] +``` + + +## Additional Details +For any queries, reach us at prebid@silverpush.co. \ No newline at end of file From a921b0d9d42b407eba61845f4d1dfcb5cc990e49 Mon Sep 17 00:00:00 2001 From: Viktor Dreiling <34981284+3link@users.noreply.github.com> Date: Thu, 18 May 2023 15:26:00 +0200 Subject: [PATCH 294/763] Update liveintent.md (#4580) Co-authored-by: Viktor Dreiling --- dev-docs/modules/userid-submodules/liveintent.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dev-docs/modules/userid-submodules/liveintent.md b/dev-docs/modules/userid-submodules/liveintent.md index 8f0cc8dbdf..16f79fd649 100644 --- a/dev-docs/modules/userid-submodules/liveintent.md +++ b/dev-docs/modules/userid-submodules/liveintent.md @@ -123,6 +123,7 @@ NOTE: For optimal performance, the LiveIntent ID module should be called at ever | name | Required | String | The name of this module. | `'liveIntentId'` | | params | Required | Object | Container of all module params. || | params.publisherId |Optional| String | The unique identifier for each publisher (for existing LiveIntent customers)|`'12432415'`| +| params.distributorId |Optional| String | The unique identifier for each distributor (for existing LiveIntent customers). Will be ignored if `params.liCollectConfig.appId` is provided. |`'did-0123'`| | params.ajaxTimeout |Optional| Number |This configuration parameter defines the maximum duration of a call to the IdentityResolution endpoint. By default, 1000 milliseconds.|`1000`| | params.partner | Optional| String |The name of the partner whose data will be returned in the response.|`'prebid'`| | params.identifiersToResolve |Optional| Array[String] |Used to send additional identifiers in the request for LiveIntent to resolve against the LiveIntent ID.|`['my-id']`| @@ -188,6 +189,7 @@ pbjs.setConfig({ name: "liveIntentId", params: { publisherId: "9896876", + distributorId: "did-0123", identifiersToResolve: ["my-own-cookie"], url: "https://publisher.liveintent.com/idex", partner: "prebid", @@ -208,3 +210,5 @@ pbjs.setConfig({ } }) ``` + +Please note: the distributorId will be ignored when liCollectConfig.appId is present. From bc82c144e0c9c52bfac2338f0884cdf003b136b8 Mon Sep 17 00:00:00 2001 From: bretg Date: Thu, 18 May 2023 10:32:28 -0400 Subject: [PATCH 295/763] Second batch of training videos (#4571) * training videos 2.1-2.3 * fixed link * fix space * add link * making sidebar groupings consistent --------- Co-authored-by: Chris Huie --- _data/sidebar.yml | 24 +++- identity/prebid-identity-video.md | 54 +++++++++ identity/prebid-identity.md | 11 +- overview/all-videos.md | 13 +- overview/intro-video.md | 2 +- prebid-mobile/prebid-mobile-video.md | 2 +- .../overview/prebid-server-overview-video.md | 2 +- prebid/prebidjs-components-video.md | 111 ++++++++++++++++++ prebid/prebidjs-flow-video.md | 102 ++++++++++++++++ prebid/prebidjs-video.md | 8 +- 10 files changed, 312 insertions(+), 17 deletions(-) create mode 100644 identity/prebid-identity-video.md create mode 100644 prebid/prebidjs-components-video.md create mode 100644 prebid/prebidjs-flow-video.md diff --git a/_data/sidebar.yml b/_data/sidebar.yml index 0bba0c027e..ee8cb8b255 100644 --- a/_data/sidebar.yml +++ b/_data/sidebar.yml @@ -136,7 +136,7 @@ sbCollapseId: prebidjs - sbSecId: 1 - title: Developer Quick Start + title: General link: isHeader: 1 headerId: devquickstart @@ -161,6 +161,22 @@ sectionTitle: subgroup: 0 +- sbSecId: 1 + title: Basic Impression Flow + link: /prebid/prebidjs-flow-video.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 0 + +- sbSecId: 1 + title: Prebid.js Components + link: /prebid/prebidjs-components-video.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 0 + - sbSecId: 1 title: Consent Management Best Practices link: /dev-docs/cmp-best-practices.html @@ -862,7 +878,7 @@ sbCollapseId: ad-ops - sbSecId: 3 - title: Overview + title: General link: isHeader: 1 headerId: adopsoverview @@ -1175,7 +1191,7 @@ sbCollapseId: prebid-video - sbSecId: 4 - title: Overview + title: General link: isHeader: 1 headerId: vidoverview @@ -1386,7 +1402,7 @@ sbCollapseId: prebid-server - sbSecId: 5 - title: Overview + title: General link: isHeader: 1 headerId: serveroverview diff --git a/identity/prebid-identity-video.md b/identity/prebid-identity-video.md new file mode 100644 index 0000000000..746e338139 --- /dev/null +++ b/identity/prebid-identity-video.md @@ -0,0 +1,54 @@ +--- +layout: page_v2 +title: Video Intro to Prebid Identity Solutions +description: A video overview of Prebid Identity Solutions +sidebarType: 9 +--- + +# A Video Overview of Prebid Identity Solutions + +An explanation of Prebid’s user identity and consent management tools. + +
+ +Further Content: +- [User Identity Overview](/identity/prebid-identity.html) +- [SharedID](/identity/sharedid.html) +- [Prebid.js Modules](/dev-docs/modules/) +- [All Videos](/overview/all-videos.html) + +Related Videos: +- [Introduction to Prebid.js](/prebid/prebidjs-video.html) +- [Components of Prebid.js](/prebid/prebidjs-components-video.html) + +## Transcript + +### Introduction + +Prebid offers a powerful set of tools that help publishers to integrate with user identity solutions in a way that follows their organization’s privacy strategy. + +Digital media sellers need to have sophisticated practices for handling the data that describes users and audiences. To increase the value of impression opportunities surfaced to buyers, publishers may wish to transmit a pseudonymous user identifier in Prebid.js bid requests. These identifiers are a form of ad request enrichment. They can help increase the value of impression opportunities to buyers by unlocking the buyer’s ability to perform actions like frequency capping and audience targeting. + +At the same time, all members of the digital advertising supply chain have a responsibility to protect the privacy of internet users and to comply with privacy and data laws. Therefore, all sellers must develop an identity and privacy strategy that is rooted in their approach to monetization, user experience, and regulatory compliance. Prebid’s tools can be used to integrate with identity solutions and execute on an identity and privacy strategy. Prebid does not provide legal advice and makes no guarantees about compliance with any law or regulation. + +### Identity Solutions: SharedId and User ID Module + +Sellers using Prebid.js can transmit identity signals using Prebid’s SharedId service or any other major identity solution. SharedId is an open-source identity solution developed and maintained by Prebid. It stores a unique user ID in the publisher’s domain and makes it accessible to Prebid auction bidders. Bidders may then use this identifier for ad targeting, frequency capping, or other purposes. In addition to SharedId, Prebid also supports dozens of other popular identity servies. The benefits and mechanics of each service vary, and it is up to the seller to decide which providers align best with their privacy and identity strategies. + +The Prebid.js User ID Module is used to integrate SharedId and other services into Prebid.js. The providers of identity solutions build submodules that are compatible with the User ID module. The submodules allow the provider’s service to get and set identifiers and expose the identifiers to bidders. + +Publishers have complete control over which user ID submodules are included in their Prebid.js wrappers. Prebid.js also allows publishers to establish controls over user IDs, such as restricting when and how user syncing can occur during the header bidding auction. + +### Privacy Solutions: Consent Modules +Prebid.js also includes tools that allow publishers to execute on their privacy, consent, and regulatory compliance strategies. These tools work in close coordination with the User ID module and Prebid adapters to control whether, when, and how user identifiers are created or shared. + +Collectively, these tools are called Consent Management Modules. They connect to the publisher’s Consent Management Platform, or CMP to make the user’s preferences about data use available to Prebid.js and to Prebid bidders. + +Consent Management modules allow Publishers and bidders to use consent data to decide when to activate user ID modules, whether to allow bidders to perform cookie syncs, and whether or not to serve ads. + +These modules are designed to provide tools related to specific regulations, but do not guarantee compliance with any regulatory requirements. + +### Getting Started + +To learn more about the Prebid User ID Module, SharedID, and Prebid Consent Management Modules, visit docs.prebid.org + diff --git a/identity/prebid-identity.md b/identity/prebid-identity.md index d83d63b126..ade27e9380 100644 --- a/identity/prebid-identity.md +++ b/identity/prebid-identity.md @@ -14,7 +14,16 @@ To do this, Prebid offers a number of identity-related products that encourage a - [Prebid.js User Identity Module](/dev-docs/modules/userId.html). This module supports more than 20 different flavors of global IDs with different features that publishers can work with. - [SharedID](/identity/sharedid.html). This native hosted ID offering from Prebid is simple, free, robust, and privacy-minded. -- **Coming soon:** [Unified ID 2.0](https://prebid.org/blog/prebid-org-to-serve-as-operator-of-unified-id-2-0/) + +## Overview + +An explanation of Prebid’s user identity and consent management tools. + +
+ +Further Reading: +- [Transcript of this video overview](/identity/prebid-identity-video.html) +- [Prebid.js Modules](/dev-docs/modules/) ## Prebid.js and Identity diff --git a/overview/all-videos.md b/overview/all-videos.md index 2d299d326f..2a49c4c476 100644 --- a/overview/all-videos.md +++ b/overview/all-videos.md @@ -7,10 +7,13 @@ sidebarType: 0 # Video Overviews -These are the multi-media overviews that Prebid has created covering various aspect of Header Bidding and Prebid. +Multimedia overviews covering various aspect of Header Bidding and Prebid. 1. [Intro to Header Bidding](/overview/intro-to-header-bidding-video.html) - A high-level explanation of what header bidding is, what its benefits are, and how it works. -2. [Intro to Prebid](/overview/intro-video.html) - A high-level introduction to the Prebid community and its products. -3. [Intro to Prebid.js](/prebid/prebidjs-video.html) - A high-level overview of Prebid.js, Prebid’s header bidding product for websites. -4. [Intro to Prebid Mobile](/prebid-mobile/prebid-mobile-video.html) - A high-level overview of Prebid Mobile, Prebid’s header bidding product for iOS and Android applications. -4. [Intro to Prebid Server](/prebid-server/overview/prebid-server-overview-video.html) - A high-level overview of Prebid Server, Prebid’s solution for header bidding in the cloud. +1. [Intro to Prebid.org](/overview/intro-video.html) - A high-level introduction to the Prebid community and its products. +1. [Intro to Prebid.js](/prebid/prebidjs-video.html) - A high-level overview of Prebid.js, Prebid’s header bidding product for websites. +1. [Intro to Prebid Mobile](/prebid-mobile/prebid-mobile-video.html) - A high-level overview of Prebid Mobile, Prebid’s header bidding product for iOS and Android applications. +1. [Intro to Prebid Server](/prebid-server/overview/prebid-server-overview-video.html) - A high-level overview of Prebid Server, Prebid’s solution for header bidding in the cloud. +1. [Identity in Prebid.js](/identity/prebid-identity-video.html) - An explanation of Prebid’s user identity and consent management tools. +1. [Prebid.js Impression Flow](/prebid/prebidjs-flow-video.html) - A step-by-step walkthrough of a typical Prebid.js auction. +1. [Components of Prebid.js](/prebid/prebidjs-components-video.html) - An explanation of Prebid.js’ components and a guide to using Prebid.js reference documentation. diff --git a/overview/intro-video.md b/overview/intro-video.md index df04a35489..e05aeb2a41 100644 --- a/overview/intro-video.md +++ b/overview/intro-video.md @@ -22,7 +22,7 @@ Related Videos: - [Introduction to Header Bidding](/overview/intro-to-header-bidding-video.html) - [Introduction to Prebid.js](/prebid/prebidjs-video.html) - [Introduction to Prebid Mobile](/prebid-mobile/prebid-mobile-video.html) -- Introduction to Prebid Server (coming soon) +- [Introduction to Prebid Server](/prebid-server/overview/prebid-server-overview-video.html) ## Transcript diff --git a/prebid-mobile/prebid-mobile-video.md b/prebid-mobile/prebid-mobile-video.md index 098d4f84e2..2acd57c45e 100644 --- a/prebid-mobile/prebid-mobile-video.md +++ b/prebid-mobile/prebid-mobile-video.md @@ -18,7 +18,7 @@ Further Content: Related Videos: - [Introduction to Header Bidding](/overview/intro-to-header-bidding-video.html) -- Introduction to Prebid Server (coming soon) +- [Introduction to Prebid Server](/prebid-server/overview/prebid-server-overview-video.html) ## Transcript diff --git a/prebid-server/overview/prebid-server-overview-video.md b/prebid-server/overview/prebid-server-overview-video.md index 6af75d1834..8d9fa005b7 100644 --- a/prebid-server/overview/prebid-server-overview-video.md +++ b/prebid-server/overview/prebid-server-overview-video.md @@ -16,7 +16,7 @@ Further Content: - [Prebid Server Overview](/prebid-server/overview/prebid-server.html) - [Prebid Membership](https://prebid.org/membership) - [Prebid on Github](https://github.com/prebid) -- [All videos](/overview/all-videos.html) +- [All Videos](/overview/all-videos.html) Related Videos: - [Introduction to Header Bidding](/overview/intro-to-header-bidding-video.html) diff --git a/prebid/prebidjs-components-video.md b/prebid/prebidjs-components-video.md new file mode 100644 index 0000000000..1cbf56ecdb --- /dev/null +++ b/prebid/prebidjs-components-video.md @@ -0,0 +1,111 @@ +--- +layout: page_v2 +title: Video Intro to Prebid.js Components +description: A video overview of Prebid.js Components +sidebarType: 1 +--- + +# A Video Overview of Prebid.js Components + +An explanation of Prebid.js’ components and a guide to using Prebid.js reference documentation. + +
+ +Further Content: +- [Ad Unit Reference](/dev-docs/adunit-reference.html) +- [Bidder Params Reference](/dev-docs/bidders.html) +- [Modules Overview](/dev-docs/modules/) +- [Analytics Overview](/overview/analytics.html) +- [Prebid.js Download](/download.html) +- [Prebid.js Configuration Reference](/dev-docs/publisher-api-reference/setConfig.html) +- [All videos](/overview/all-videos.html) + +Related Videos +- [Introduction to Prebid.js](/prebid/prebidjs-video.html) +- [Prebid.js Impression Flow](/prebid/prebidjs-flow-video.html) +- [Identity in Prebid.js](/identity/prebid-identity-video.html) + +## Transcript + +### Introduction + +This video will take a tour of Prebid.js. We’ll show you Prebid.js’ basic components and explain how they work together to serve ads. + +The video assumes that you have a basic understanding of what Prebid.js does. For some background, check out our other videos, including the Introduction to Prebid.js, and the Prebid.js Impression Flow, which walks through a Prebid.js auction step-by-step. + +A typical Prebid.js installation includes four basic components: the Prebid.js core, modules, bid adapters, and Ad Units. + +Prebid.js core components are the functional components of Prebid.js that do things like execute the auction. Prebid.js must include these components in order to work properly. + +Modules are optional components that extend Prebid.js’ capabilities. There are many different kinds of modules for purposes like ad request enrichment, analytics, consent management, and more. + +Bid adapters are functional components that allow bidders to be integrated into Prebid.js. Each bidder has its own bid adapter. + +Finally, Ad Units are where ad slots are defined within Prebid.js. They describe the characteristics of ad slots and are used to determine the set of bidders that are allowed to serve on each slot. + +Now we’ll explore modules, bid adapters, and ad units in more detail. As we go, we’ll refer to the relevant sections of the Prebid.js reference documentation, which lives at docs.prebid.org. Check the notes section below this video for links to all of the documentation referred to in the video. + +### Bid Adapters + +We’ll start with bid adapters. + +Bid adapters are plugins that enable Prebid.js to send bid requests to and receive bid responses from bidders. A company that wants to be able to compete in Prebid auctions builds their own bid adapter and contributes it to the Prebid repository + +When the Prebid auction runs, bid adapters construct a bid request into the bidder’s proprietary format. The request can include information from the Ad Unit and from other sources such as consent modules and real time data modules. + +Bid adapters also allow Prebid.js to translate each bidder’s response into a format that Prebid understands. + +### Ad Units + +An Ad Unit represents a single ad slot on a web page, and contains all the information needed for Prebid.js to request bids for the slot. + +Each ad unit has a unique identifier called an ad unit code, and includes two key blocks of information that are configured by the publisher: Media Types and Bids. + +#### Media Types + +Media Types define the ad formats that the ad placement can display, such as banner, native, or video. Within the mediaType configuration, the publisher describes the characteristics of the ad slot. + +For example, the banner ad mediaType allows the publisher to specify the dimensions of the slot, and the video mediaType lets the publisher specify whether the slot is an instream or outstream placement. + +An ad unit can include multiple mediaTypes, which makes the slot a multi-format slot. + +The Ad Unit Reference at docs.prebid.org contains detailed information about Ad Units and Media Types. + +#### Bids + +Bids is an array of bid objects: one for each bidder who is enabled to compete for the ad slot’s impression opportunities. + +To include a bidder in auctions for a given Ad Unit, the publisher adds a bid object for the bidder to the Ad Unit. + +The contents of the bid object are used to control the data that’s sent to bidders in bid requests. Bidders decide which parameters appear in their own bid objects. Common parameters are bidder-specific identifiers of the publisher, site, and ad slot. Publishers work with their bidder partners to configure these parameters. + +The Bidder Params reference is where to look for documentation on how to configure Prebid bidders parameters. + +### Modules + +Next, we’ll discuss Prebid modules, which are optional components that add extra functionality to Prebid.js. Some modules have been built by the core Prebid team, while others have been contributed by Prebid member companies and third-party developers. Modules are always open-source. In some cases, companies will develop a module to help power a Prebid-related paid service. + +There are many types of modules in Prebid. They serve many purposes and can plug into any phase of the Prebid.js auction. For more information on the auction phases, check out the Prebid.js Impression Flow video. Prebid.js Modules page at docs.prebid.org has a list of all of Prebid.js’ modules, including a short description of each one. + +In this video, we’ll focus on a few key categories of modules: + +One category is modules for ad request enrichment, which is the process of adding extra information to bid requests. Ad request enrichment can help publishers improve monetization by helping bidders evaluate impression opportunities more effectively. Enrichment data is a broad category, and can include user identifiers, seller-defined audiences, contextual targeting data, viewability signals, and more. + +Another important and commonly-used category is consent management modules. These modules allow publishers to execute on their approach to user privacy and data consent. To learn more about consent management, check out our video on Identity in Prebid.js. + +A final key category are modules commonly known as analytics adapters. These are vital for getting the best possible performance out of Prebid. Analytics adapters are used to gather information about Prebid auctions and send it to servers that will aggregate the data into reports. There are dozens of analytics adapters. A complete list of analytics adapters can be found on the Analytics for Prebid page at docs.prebid.org. + +The capabilities of Prebid’s modules go even further beyond these three key categories. For example, some modules help publishers optimize Prebid’s performance by controlling auction settings like bid timeout and price floors dynamically. More information about these can be found on the Prebid.js modules page. + +When you’re ready to build a Prebid.js wrapper with a hand-picked selection of modules, visit the Download page at docs.prebid.org. + +### Prebid.js Configuration + +As we’ve already seen, much of a Prebid.js integration’s parameters are configured inside ad units. However, there are also settings of Prebid.js that apply globally, such as general auction controls and the parameters of modules. These settings are stored in the Prebid.js configuration, which is set using the pbjs.setConfig() method. + +Many of Prebid’s most important settings live here, including bidder timeout, user sync settings, and price granularity. + +Detailed documentation of the Prebid.js configuration can be found in the publisher API reference. https://docs.prebid.org/dev-docs/publisher-api-reference/setConfig.html + +That’s it for this overview of Prebid.js for more information, check the links in the description below or visit docs.prebid.org. + diff --git a/prebid/prebidjs-flow-video.md b/prebid/prebidjs-flow-video.md new file mode 100644 index 0000000000..c8c5e779dd --- /dev/null +++ b/prebid/prebidjs-flow-video.md @@ -0,0 +1,102 @@ +--- +layout: page_v2 +title: Video Intro to the Prebid.js Auction +description: A video overview of a Prebid.js Auction +sidebarType: 1 +--- + +# A Video Walkthrough of a Typical Prebid.js Auction + +A step-by-step walkthrough of a typical Prebid.js auction. + +
+ +Further Content: +- [Intro to Header Bidding](/overview/intro-to-header-bidding.html) +- [Header Bidding with Prebid](/overview/intro.html#header-bidding-with-prebid) +- [What is Prebid.js?](/prebid/prebidjs.html) +- [Prebid.js Quick Start](/dev-docs/getting-started.html) +- [All videos](/overview/all-videos.html) + +Related Videos +- [Introduction to Prebid](/overview/intro-video.html) +- [Introduction to Header Bidding](/overview/intro-to-header-bidding-video.html) +- [Components of Prebid.js](/prebid/prebid-components-video.html)) +- [Identity in Prebid.js](/identity/prebid-identity-video.html) + +## Transcript + +### Introduction + +This video will walk through the steps required to serve a display ad through an ordinary Prebid.js integration. +- This is the simplest and most common type of Prebid auction. Specifically, it is a client-side auction for a display ad running in a single-format ad slot on a website that uses a primary ad server. +- There are many variations on this basic form, which include: + - Auctions for other ad formats, such as video or native + - Auctions that use Prebid Server + - Auctions that use Prebid.js without a primary ad server + - Auctions in other environments such as AMP, mobile apps, and long-form video. +- Let’s start with a high-level overview of the steps: + - When the page loads, Prebid.js loads. The page invokes Prebid.js, which goes through a three-stage process: Pre-Auction, Auction and Post Auction. + - In the Pre-Auction stage, Prebid.js gathers information that it needs to run auctions for the ad slots on the page. + - Next comes the Auction stage: + - Prebid.js makes bid requests to bidders that the publisher has selected + - The bidders respond to Prebid.js with bids + - Finally, the post-auction stage begins + - Prebid.js gathers the bids and reformats them into a format that the primary ad server will understand + - For each ad slot, requests are sent to the ad server. These requests contains information about the bids Prebid.js received. + - The ad server receives the requests and decides which of the publisher’s ad buyers should serve an ad. Prebid bidders are considered alongside other potential buyers. + - When the primary ad server selects a Prebid bidder, it returns Prebid code that renders the ad to the page. + +### Impression Flow + +Now, we’ll go through the process in detail. + +1. **Pre-Auction** + 1. The user requests the page, the publishers’ CMS is called and returns the page source, which includes instructions to load Prebid.js and begin an auction for one or more Ad Units + 1. An Ad Unit represents a unique ad slot on the page. + 1. The Ad Unit contains information about the attributes of the ad slot, such as the ad format, and dimensions. The Ad Unit also includes the list of bidders that are allowed to bid on the ad slot. + 1. In Prebid, the word “auction” refers to the process by which bids are solicited and received for one or more Ad Units. A bidder will usually receive a single HTTP request that contains information about one or more Ad Units, and the bidder is able to bid on any or all of them. + 1. Before the auction begins, Prebid.js is able to retrieve other optional information, depending on how the publisher has configured it. This information can include: + 1. User consent information from the publisher’s consent management platform + 1. Ad request enrichment data that describes the user, site, or page + 1. Price floor information + 1. And more +1. **Auction** - The auction begins. + 1. Prebid.js sends bid requests to bidders. + 1. Bidders will receive an HTTP request that contains one or more ad units. Which ad units each bidder receives depends on how the ad units are set up by the publisher. + 1. Bid requests contain information about the ad units, page, user, and auction, including the page URL, ad slot identifiers, user identifiers, first party data, consent data, supply chain data, price floors and more. + 1. A bidder’s bid adapter is the component that formats the bid requests the bidder receives. Bidders build and maintain their own bid adapters and submit them to the open-source Prebid.js repository. + 1. At this point, Prebid.js will also start a timer that it uses to enforce the publisher’s configured bid timeout. The bid timeout determines the amount of time that Prebid.js will wait to receive bidders’ responses. + 1. Bidders consider the impression opportunity. They will consult their own sources of demand and determine whether they are able to offer an ad for the opportunity. If they do, they’ll also decide upon a price they would be willing to pay. + 1. Bidders return responses. + 1. The bidder’s HTTP response contains their bids for the Ad Units in the auction. The bidder isn’t required to place a bid, and bids only on the ad units they hope to win. + 1. Responses that include a bid will contain a URL that refers to the ad’s creative, a price, and other information such as deal IDs. + 1. Bids that Prebid.js receives before the bid timeout period has elapsed are considered valid bids. The bid timeout is set by the publisher in the Prebid.js configuration. Bids not received before the bid timeout will be logged as timed-out bids. + 1. Prebid.js processes responses + 1. As Prebid.js receives responses from bidders, it processes them + 1. Bidders’ bid adapters are responsible for parsing the bidders’ responses and exposing bid information to Prebid.js. + 1. Bid processing starts with extracting information from the bid, which can include bid prices, deal IDs, and ad format information. + 1. Where necessary, Prebid.js will perform other validations or transformations like price floor enforcement or currency conversion + 1. Prebid’s auction completes when either all of the bidders have responded and Prebid has processed their bids, or when the timeout period set by the publisher has elapsed. + 1. After the auction has completed, Prebid formats the bid information as a set of key-value pairs that the primary ad server will understand. +1. **Post-Auction** + 1. With the Prebid auction complete, the ad server is called + 1. A request is sent to the primary ad server for each of the slots on the page. These requests will contain the bid key-value pairs. + 1. The ad server receives its request and evaluates the demand sources that the publisher has enabled, which includes but is not limited to Prebid bidders. + 1. Other demand sources that the ad server might consider are: + 1. Direct-sold campaigns with reservations, guarantees, or sponsorships + 1. Bids from other header bidding or programmatic sources + 1. Waterfall-style demand sources such as ad networks + 1. Each ad server works a little bit differently. For more information about how Prebid.js works with ad servers, refer to Prebid’s Ad Ops documentation. + 1. When the ad server selects a Prebid bid to serve, it returns a piece of Prebid code called a creative. + 1. **Ad Rendering** + 1. The creative triggers the ad rendering process, in which Prebid.js retrieves the bidder’s ad and renders it to the ad slot on the page. + +### Conclusion + +- So that’s how an ad is served through Prebid.js +- Publishers can measure their monetization performance, troubleshoot issues, and maximize yield by gathering data about their header bidding auctions. Prebid supports a standardized interface for analytics adapters that allows publishers to integrate header bidding analytics tools that give them the insights they need. +- Prebid.js logs events throughout the auction and ad serving process. These events are exposed to analytics adapters, and they include the start of the auction, requests to bidders, bid responses, timeouts, ad server requests, ad renders, and more. +- Tools like the Professor Prebid browser extension also have the ability to monitor Prebid.js events and can be used for troubleshooting, debugging, and optimization. +- To learn more about the Prebid Auction and about Prebid’s analytics, optimization, and troubleshooting tools, visit [docs.prebid.org](docs.prebid.org). + diff --git a/prebid/prebidjs-video.md b/prebid/prebidjs-video.md index f1f72226da..bf52d8393c 100644 --- a/prebid/prebidjs-video.md +++ b/prebid/prebidjs-video.md @@ -2,7 +2,7 @@ layout: page_v2 title: Video Intro to Prebid.js description: A video overview of Prebid org and products -sidebarType: 0 +sidebarType: 1 --- # A Video Overview of Prebid.js @@ -21,9 +21,9 @@ Further Content: Related Videos - [Introduction to Prebid](/overview/intro-video.html) - [Introduction to Header Bidding](/overview/intro-to-header-bidding-video.html) -- Prebid.js Impression Flow (coming soon) -- Components of Prebid.js (coming soon) -- Identity in Prebid.js (coming soon) +- [Prebid.js Impression Flow](/prebid/prebidjs-flow-video.html) +- [Components of Prebid.js](/prebid/prebidjs-components-video.html) +- [Identity in Prebid.js](/identity/prebid-identity-video.html) ## Transcript From 205d291e2bb1282e7e12426ef75d79e02538bea9 Mon Sep 17 00:00:00 2001 From: bretg Date: Thu, 18 May 2023 10:38:51 -0400 Subject: [PATCH 296/763] axonix table formatting (#4584) --- dev-docs/bidders/axonix.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/axonix.md b/dev-docs/bidders/axonix.md index c4f843b34b..2e9f5067cb 100644 --- a/dev-docs/bidders/axonix.md +++ b/dev-docs/bidders/axonix.md @@ -14,6 +14,7 @@ sidebarType: 1 The Axonix Bidding adapter requires setup before beginning. Please contact us at support.axonix@emodoinc.com. ### Bid Params + {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |------------|-------|----------------------------------------------|-------------------------------------|------| From 6da7574e82fb533963271bba9538d5c8dca75efb Mon Sep 17 00:00:00 2001 From: bretg Date: Thu, 18 May 2023 16:34:02 -0400 Subject: [PATCH 297/763] update ipv6 anon (#4585) --- prebid-server/features/pbs-privacy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prebid-server/features/pbs-privacy.md b/prebid-server/features/pbs-privacy.md index aac617e743..be915bd676 100644 --- a/prebid-server/features/pbs-privacy.md +++ b/prebid-server/features/pbs-privacy.md @@ -85,7 +85,7 @@ If `regs.coppa` is set to '1' on the OpenRTB request, the following anonymizatio - Removes all ID fields: device.ifa, device.macsha1, device.macmd5, device.dpidsha1, device.dpidmd5, device.didsha1, device.didmd5 - Truncate ip field - remove lowest 8 bits. -- Truncate ipv6 field - remove lowest 32 bits. +- Truncate ipv6 field - anonymize as noted below. - Remove geo.lat, geo.lon. geo.metro, geo.city, and geo.zip - Remove user.id, user.buyeruid, user.yob, and user.gender From e0a380ed2ebd4881ca797ca7fbd8584f330fa580 Mon Sep 17 00:00:00 2001 From: adxcgcom <31470944+adxcgcom@users.noreply.github.com> Date: Thu, 18 May 2023 21:06:16 +0000 Subject: [PATCH 298/763] Update adxcg.md (#4581) * Update adxcg.md * remove gvlid * add back N/A gvl --------- Co-authored-by: Chris Huie --- dev-docs/analytics/adxcg.md | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/dev-docs/analytics/adxcg.md b/dev-docs/analytics/adxcg.md index 527c436b0c..17784bc03e 100644 --- a/dev-docs/analytics/adxcg.md +++ b/dev-docs/analytics/adxcg.md @@ -3,9 +3,35 @@ layout: analytics title: Adxcg description: Adxcg Analytics Adapter modulecode: adxcg +gdpr_supported: false +usp_supported: false +coppa_supported: false +prebid_member: false +gvl_id: N/A +enable_download: false --- #### Registration -Please visit [https://www.adxcg.com/](https://www.adxcg.com/) for more information. +The Adxcg analytics adapter requires setup and approval from the Adxcg team, even for existing accounts. +Please reach out to your account team or visit [https://www.adxcg.com/](https://www.adxcg.com/) for more information. + +#### Analytics Options + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------------|---------|--------------------|-----------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|------------------| +| publisherId | required | The Adxcg publisher account ID | `'42'` | string | + + +### Example Configuration + +``` + pbjs.enableAnalytics({ + provider: 'adxcg', + options: { + publisherId: 'OBTAIN-FROM-ADXCG' + } + }); +``` From 24e679ae6e0b3f8956649661bdfb1c1b755c19db Mon Sep 17 00:00:00 2001 From: Marios Kosmas <110163065+mariosk5@users.noreply.github.com> Date: Fri, 19 May 2023 00:12:04 +0300 Subject: [PATCH 299/763] New adapter: Project Agora (#4567) --- dev-docs/bidders/projectagora.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 dev-docs/bidders/projectagora.md diff --git a/dev-docs/bidders/projectagora.md b/dev-docs/bidders/projectagora.md new file mode 100644 index 0000000000..908b9ccf11 --- /dev/null +++ b/dev-docs/bidders/projectagora.md @@ -0,0 +1,27 @@ +--- +layout: bidder +title: Project Agora +description: Prebid Project Agora Bidder Adapter +biddercode: projectagora +pbjs: true +pbs: false +aliasCode: appnexus +gdpr_supported: true +media_types: banner, video, native +gvl_id: 1032 +schain_supported: true +userId: all +sidebarType: 1 +--- +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------|-----------|-----------| +| `placementID` | required | Placement id | `'11111'` | `string` | + +Project Agora is an aliased bidder for AppNexus. + +### Note: + +The Project Agora bidder adapter requires setup before beginning. Please contact us at pub_support@projectagora.com. From 66cc3ada429c8d78410ab274d72448971d509339 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Robakowski?= Date: Thu, 18 May 2023 23:46:05 +0200 Subject: [PATCH 300/763] Add Eskimi bidder documentation (#4471) * Add Eskimi bidder documentation * add safeframes_ok and ortb_blocking_supported fields to eskimi bidder docs --- dev-docs/bidders/eskimi.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 dev-docs/bidders/eskimi.md diff --git a/dev-docs/bidders/eskimi.md b/dev-docs/bidders/eskimi.md new file mode 100644 index 0000000000..e1b452dd71 --- /dev/null +++ b/dev-docs/bidders/eskimi.md @@ -0,0 +1,24 @@ +--- +layout: bidder +title: Eskimi +description: Prebid Eskimi Bidder Adapter +pbjs: true +pbs: false +biddercode: eskimi +deals_supported: false +media_types: banner +gvl_id: 814 +sidebarType: 1 +schain_supported: true +floors_supported: true +safeframes_ok: false +ortb_blocking_supported: false +--- + + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------------------|----------|-------------------------------|---------|------------| +| `placementId` | required | The placement ID from Eskimi. | `612` | `integer` | From 7cab5d6ed1ac7914abe795deb83a0e3f5737af26 Mon Sep 17 00:00:00 2001 From: bretg Date: Sun, 21 May 2023 10:48:32 -0400 Subject: [PATCH 301/763] adding mobile FAQ entries (#4586) --- faq/prebid-mobile-faq.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/faq/prebid-mobile-faq.md b/faq/prebid-mobile-faq.md index d8ee30bb19..b5e9e02da7 100644 --- a/faq/prebid-mobile-faq.md +++ b/faq/prebid-mobile-faq.md @@ -37,6 +37,17 @@ No. No. +### Is the SDK synchronous? + +Prebid SDK is always async. The completion handler for the main fetchDemand() method is called asynchronously when the bid response (or timeout, network error, etc.) is received. The app defines the desired timeout. + +### How long do bids remain valid? + +Prebid SDK does not support a [limited bid cache](dev-docs/faq.html#does-prebidjs-cache-bids) like Prebid.js does. Which means it's up to the app to build any kind of pre-fetch or bid-cache feature. Notes: + +1. If Prebid Cache is being utilized, the Time-To-Live for that cache should be understood. By default, the TTL for Prebid Cache is 5 minutes for banners and 15 minutes for video, but this can be changed. +2. No matter what the Cache TTL is set to, it's important that any pre-fetch or bid-cache feature built into the app should respect the OpenRTB `seatbid.bid.exp` field for each bid, which is the expiration of the bid in seconds. + ## Dependencies ### Does the SDK use third-party libraries? From de95c6f7d7293c18b5ae048717287960aed6630a Mon Sep 17 00:00:00 2001 From: Alexander Jones Date: Thu, 25 May 2023 08:04:16 -0500 Subject: [PATCH 302/763] typo (#4588) --- prebid-server/use-cases/pbs-sdk.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prebid-server/use-cases/pbs-sdk.md b/prebid-server/use-cases/pbs-sdk.md index 8232659d84..cfd5bbb3c5 100644 --- a/prebid-server/use-cases/pbs-sdk.md +++ b/prebid-server/use-cases/pbs-sdk.md @@ -265,7 +265,7 @@ Prebid Universal Creative loads in the webiview, which sees the `hb_env=mobile-a ### Load Ad -The Prebid Universal Crative will parse the response, looking for the `adm` object, loading the full markup into the webview. +The Prebid Universal Creative will parse the response, looking for the `adm` object, loading the full markup into the webview. ## Further Reading From ba9bf2990913e44d96bacd3669fd8c1fabd87229 Mon Sep 17 00:00:00 2001 From: Eyvaz Ahmadzada <62054743+eyvazahmadzada@users.noreply.github.com> Date: Fri, 26 May 2023 16:41:03 +0400 Subject: [PATCH 303/763] IntentIQ: added enableCookieStorage optional parameter docs (#4595) * added: enable cookie param docs * added: enableCookieStorage default value info --- dev-docs/modules/userid-submodules/intentiq.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dev-docs/modules/userid-submodules/intentiq.md b/dev-docs/modules/userid-submodules/intentiq.md index 6c7487b868..e64cdeddc3 100644 --- a/dev-docs/modules/userid-submodules/intentiq.md +++ b/dev-docs/modules/userid-submodules/intentiq.md @@ -41,6 +41,7 @@ Please find below list of parameters that could be used in configuring Intent IQ | params.percentage | Required | Number | This a percentage value for our A/B testing group distribution. The values supposed to be in range of 0 to 100. We suggest to set it to 95 percent for optimal balance ofbetween prefromance and preceision. | `95` | | params.pcid | Optional | String | This is the partner cookie ID, it is a dynamic value attached to the request. | `"g3hC52b"` | | params.pai | Optional | String | This is the partner customer ID / advertiser ID, it is a dynamic value attached to the request. | `"advertiser1"` | +| params.enableCookieStorage | Optional | Boolean | This is a parameter allowing to enable or disable cookie storage. Defaults to false. | `"true"` | ### Configuration example @@ -53,6 +54,7 @@ pbjs.setConfig({ params: { partner: 123456, // valid partner id percentage: 95, + enableCookieStorage: true }, storage: { type: "html5", @@ -76,7 +78,8 @@ pbjs.setConfig({ partner: 123456 // valid partner id pcid: PCID_VARIABLE, // string value, dynamically loaded into a variable before setting the configuration pai: PAI_VARIABLE , // string value, dynamically loaded into a variable before setting the configuration - percentage: 95 + percentage: 95, + enableCookieStorage: false }, storage: { type: "html5", From fc9c89b0e873a8f74108e07457e9075cad3d22cc Mon Sep 17 00:00:00 2001 From: Denis Logachov Date: Fri, 26 May 2023 17:47:10 +0300 Subject: [PATCH 304/763] Adkernel: documenting diDNA display alias (#4600) --- dev-docs/bidders/didnadisplay.md | 34 ++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 dev-docs/bidders/didnadisplay.md diff --git a/dev-docs/bidders/didnadisplay.md b/dev-docs/bidders/didnadisplay.md new file mode 100644 index 0000000000..92a3a49706 --- /dev/null +++ b/dev-docs/bidders/didnadisplay.md @@ -0,0 +1,34 @@ +--- +layout: bidder +title: diDNA Display +description: diDNA Display Bidder Adaptor +biddercode: didnadisplay +pbjs: true +pbs: false +media_types: banner, native, video +gdpr_supported: true +usp_supported: true +coppa_supported: true +pbs_app_supported: false +schain_supported: true +userIds: all +fpd_supported: true +prebid_member: false +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +floors_supported: true +aliasCode: adkernel +sidebarType: 1 +--- + +### Note: + +The diDNA Display bidding adapter requires setup and approval before implementation. Please reach out to for more details. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-----------------------|---------------------------|----------| +| `host` | required | RTB host | `'cpm.didna.io'` | `string` | +| `zoneId` | required | Zone Id | 30164 | `integer` | From c6d13c8f8921065f762718d5a60705f2e41cb241 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 May 2023 08:20:05 -0700 Subject: [PATCH 305/763] Bump socket.io-parser from 4.2.1 to 4.2.3 (#4597) Bumps [socket.io-parser](https://github.com/socketio/socket.io-parser) from 4.2.1 to 4.2.3. - [Release notes](https://github.com/socketio/socket.io-parser/releases) - [Changelog](https://github.com/socketio/socket.io-parser/blob/main/CHANGELOG.md) - [Commits](https://github.com/socketio/socket.io-parser/compare/4.2.1...4.2.3) --- updated-dependencies: - dependency-name: socket.io-parser dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4c7be5d269..5447d89a30 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10741,9 +10741,9 @@ } }, "node_modules/socket.io-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz", - "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.3.tgz", + "integrity": "sha512-JMafRntWVO2DCJimKsRTh/wnqVvO4hrfwOqtO7f+uzwsQMuxO6VwImtYxaQ+ieoyshWOTJyV0fA21lccEXRPpQ==", "dev": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", @@ -22034,9 +22034,9 @@ } }, "socket.io-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz", - "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.3.tgz", + "integrity": "sha512-JMafRntWVO2DCJimKsRTh/wnqVvO4hrfwOqtO7f+uzwsQMuxO6VwImtYxaQ+ieoyshWOTJyV0fA21lccEXRPpQ==", "dev": true, "requires": { "@socket.io/component-emitter": "~3.1.0", From b45617b16dfdb9f85047b2e5bd79ec7bfda37f77 Mon Sep 17 00:00:00 2001 From: Patrick McCann Date: Fri, 26 May 2023 12:12:20 -0400 Subject: [PATCH 306/763] Update roxot.md (#4593) --- dev-docs/analytics/roxot.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/dev-docs/analytics/roxot.md b/dev-docs/analytics/roxot.md index b0ab67b2e9..859f3ef3dc 100644 --- a/dev-docs/analytics/roxot.md +++ b/dev-docs/analytics/roxot.md @@ -7,5 +7,20 @@ modulecode: roxot #### Registration -Please visit [https://roxot.com/](https://roxot.com/) for more information. +To start using Prebid Analytics, please, email us at contact@roxot.com to provide us with your billing info and get your personal publisher ID which is used in the prebid config on your site/s. + +Add the following code to your prebid.js config to activate Prebid Analytics: + +#### Example Configuration +``` + +pbjs.que.push(function () { + pbjs.enableAnalytics({ + provider: 'roxot', + options: { + publisherIds: ["YOUR-PUBLISHER-ID"] + } + }); +}); +``` From 3d74491979814c5d417304843c642122cba86059 Mon Sep 17 00:00:00 2001 From: Ioan-Alexandru Stef <126675343+ioan-alexandru-stef-smaato@users.noreply.github.com> Date: Tue, 30 May 2023 20:14:11 +0300 Subject: [PATCH 307/763] Smaato: Add skadn note for AdPods (#4592) * PREB-39 added skadn note for AdPods * PREB-39 change userId to userIds --- dev-docs/bidders/smaato.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dev-docs/bidders/smaato.md b/dev-docs/bidders/smaato.md index 89e5054c65..dfab0ab753 100644 --- a/dev-docs/bidders/smaato.md +++ b/dev-docs/bidders/smaato.md @@ -9,7 +9,7 @@ usp_supported: true coppa_supported: true gpp_supported: true media_types: banner, video, native -userId: criteo, pubCommonId, unifiedId +userIds: all pbjs: true pbs: true pbs_app_supported: true @@ -59,6 +59,10 @@ The Smaato adapter will convert bidfloors to 'USD' currency as needed. | `adbreakId` | required | Your Smaato adbreak id. Required for adpod (long-form video) requests | `'41002234'` | `string` | | `app` | optional | Object containing mobile app parameters. See the [App Object](#smaato-app-object) for details.| `app : { ifa: '56700000-9cf0-22bd-b23e-46b96e40003a'}` | `object` | +##### Note + +In case of AdPods, the Smaato adapter will only read the first `imp[].skadn` entry for each AdPod, such that there should only be one `skadn` occurrence per AdPod. + #### App Object From 1dcea8f14bb2f483310aafd22aa471e9cd2891d1 Mon Sep 17 00:00:00 2001 From: congdu-kun <126609480+congdu-kun@users.noreply.github.com> Date: Wed, 31 May 2023 06:09:52 -0700 Subject: [PATCH 308/763] Fix a typo in pair.md (#4608) --- dev-docs/modules/userid-submodules/pair.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/modules/userid-submodules/pair.md b/dev-docs/modules/userid-submodules/pair.md index 0671559854..1c59c5bd23 100644 --- a/dev-docs/modules/userid-submodules/pair.md +++ b/dev-docs/modules/userid-submodules/pair.md @@ -22,7 +22,7 @@ gulp build --modules=pairIdSystem | name | Required | String | The name of PAIR ID user ID module. | `"pairId"` | | params | Optional | Object | Container of all module params. | | | params.liveramp | Optional | Object | Container of all liveramp cleanroom specified params. | | -| params.liveramp.storageKey | Optional | String | storage key to fetch liveramp provided PAIR Id, the default key is `"_lr_pairId_"` | `"_lr_pairId_custom"` | +| params.liveramp.storageKey | Optional | String | storage key to fetch liveramp provided PAIR Id, the default value is `"_lr_pairId"` | `"_lr_pairId_custom"` | ## PAIR ID Examples From c6d5a84a48b94f33a9064bd9f3e5256d10196cbc Mon Sep 17 00:00:00 2001 From: Andrew Date: Wed, 31 May 2023 11:42:16 -0400 Subject: [PATCH 309/763] Condense prebid video docs into something more manageable. (#4549) * Condense prebid video docs into something more manageable. * Clarify what type of video is supported be prebid and video module. --- _data/sidebar.yml | 141 ---------------- prebid-video/video-module.md | 8 +- .../integration-examples/jwplayer.html | 123 ++++++++++++++ .../integration-examples/videojs.html | 150 ++++++++++++++++++ prebid-video/video-overview.md | 7 +- 5 files changed, 283 insertions(+), 146 deletions(-) create mode 100644 prebid-video/video-module/integration-examples/jwplayer.html create mode 100644 prebid-video/video-module/integration-examples/videojs.html diff --git a/_data/sidebar.yml b/_data/sidebar.yml index ee8cb8b255..ae0f05dc43 100644 --- a/_data/sidebar.yml +++ b/_data/sidebar.yml @@ -1215,39 +1215,6 @@ sectionTitle: subgroup: 0 -- sbSecId: 4 - title: Getting Started with Long Form Video for Prebid.js - link: /prebid-video/video-long-form.html - isHeader: 0 - isSectionHeader: 0 - sectionTitle: - subgroup: 0 - - -- sbSecId: 4 - title: Show Video Ads with Google Ad Manager - link: /dev-docs/show-video-with-a-dfp-video-tag.html - isHeader: 0 - isSectionHeader: 0 - sectionTitle: - subgroup: 0 - -- sbSecId: 4 - title: Show OTT Video Ads with Prebid - link: /dev-docs/show-long-form-video-with-gam.html - isHeader: 0 - isSectionHeader: 0 - sectionTitle: - subgroup: 0 - -- sbSecId: 4 - title: Outstream Video Ads - link: /dev-docs/show-outstream-video-ads.html - isHeader: 0 - isSectionHeader: 0 - sectionTitle: - subgroup: 0 - - sbSecId: 4 title: Training Videos link: /videos/prebid-video.html @@ -1281,114 +1248,6 @@ sectionTitle: subgroup: 1 -- sbSecId: 4 - title: Examples - link: - isHeader: 1 - headerId: videxamples - isSectionHeader: 0 - sectionTitle: - subgroup: 2 - -- sbSecId: 4 - title: "Instream" - link: - isHeader: 0 - isSectionHeader: 0 - isCatHeader: 1 - sectionTitle: - subgroup: 2 - -- sbSecId: 4 - title: 'Prebid Video Module: VideoJS' - link: /examples/video/instream/videoModule/videojs/video-module-videojs.html - isHeader: 0 - isSectionHeader: 0 - sectionTitle: - subgroup: 2 - -- sbSecId: 4 - title: 'JW Player (Platform)' - link: /examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html - isHeader: 0 - isSectionHeader: 0 - sectionTitle: - subgroup: 2 - -- sbSecId: 4 - title: 'JW Player (Self-Hosted)' - link: /examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html - isHeader: 0 - isSectionHeader: 0 - sectionTitle: - subgroup: 2 - -- sbSecId: 4 - title: 'VideoJS' - link: /examples/video/instream/videojs/pb-ve-videojs.html - isHeader: 0 - isSectionHeader: 0 - sectionTitle: - subgroup: 2 - -- sbSecId: 4 - title: "Outstream" - link: - isHeader: 0 - isSectionHeader: 0 - isCatHeader: 1 - sectionTitle: - subgroup: 2 - -- sbSecId: 4 - title: 'Basic IMA' - link: /examples/video/outstream/basic-ima.html - isHeader: 0 - isSectionHeader: 0 - sectionTitle: - subgroup: 2 - -- sbSecId: 4 - title: 'Google Ad Manager' - link: /examples/video/outstream/pb-ve-outstream-dfp.html - isHeader: 0 - isSectionHeader: 0 - sectionTitle: - subgroup: 2 - -- sbSecId: 4 - title: 'No Server' - link: /examples/video/outstream/pb-ve-outstream-no-server.html - isHeader: 0 - isSectionHeader: 0 - sectionTitle: - subgroup: 2 - -- sbSecId: 4 - title: 'No Server (Specify Renderer)' - link: /examples/video/outstream/pb-ve-outstream-no-server-specify-renderer.html - isHeader: 0 - isSectionHeader: 0 - sectionTitle: - subgroup: 2 - -- sbSecId: 4 - title: "Long-Form (Ad Pods)" - link: - isHeader: 0 - isSectionHeader: 0 - isCatHeader: 1 - sectionTitle: - subgroup: 2 - -- sbSecId: 4 - title: 'Freewheel' - link: /examples/video/long-form/pb-ve-lf-freewheel.html - isHeader: 0 - isSectionHeader: 0 - sectionTitle: - subgroup: 2 - #--------------Prebid Server--------------| - sbSecId: 5 diff --git a/prebid-video/video-module.md b/prebid-video/video-module.md index 68114e8d61..d75c2dd00a 100644 --- a/prebid-video/video-module.md +++ b/prebid-video/video-module.md @@ -8,7 +8,7 @@ sidebarType: 4 # The Video Module -The Prebid Video Module allows Prebid to directly integrate with a Video Player. +The Prebid Video Module allows Prebid to directly integrate with a Video Player. Currently the Video Module only supports instream implementations. The Video Module will allow Prebid.js to automatically: - render bids in the desired video player @@ -62,6 +62,12 @@ To register a video player with Prebid, you must use `setConfig` to set a `video In order for Prebid to know which Ad Unit relates to which Video Player, you must include a `video` configuration in your Ad Unit. This allows Prebid to render the ad in the proper Video Player and obtain the Ortb data from the Video Player that will render the ad. For the list of properties in the `video` object of the ad unit please visit the [adUnit.video reference]({{site.baseurl}}/dev-docs/adunit-reference.html#adUnit.video). +#### Implementation Examples + +[Video.js]({{site.baseurl}}/prebid-video/video-module/integration-examples/videojs.html) + +[JW Player]({{site.baseurl}}/prebid-video/video-module/integration-examples/jwplayer.html) + ### Features for Publishers Integrating with the Video Module gives publishers access to the following features diff --git a/prebid-video/video-module/integration-examples/jwplayer.html b/prebid-video/video-module/integration-examples/jwplayer.html new file mode 100644 index 0000000000..b96d150912 --- /dev/null +++ b/prebid-video/video-module/integration-examples/jwplayer.html @@ -0,0 +1,123 @@ + + + + + + + JW Player with Playlist + + + + + + + + +

JW Player with Playlist

+ +
Div-1: Player placeholder div
+
+ + + diff --git a/prebid-video/video-module/integration-examples/videojs.html b/prebid-video/video-module/integration-examples/videojs.html new file mode 100644 index 0000000000..74d180ea82 --- /dev/null +++ b/prebid-video/video-module/integration-examples/videojs.html @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + VideoJS with Playlist + + + + + + + + +

VideoJS with Playlist

+ +
Div-1: Player placeholder div
+ + + + + diff --git a/prebid-video/video-overview.md b/prebid-video/video-overview.md index f9cdedd4a1..5cfc63ebde 100644 --- a/prebid-video/video-overview.md +++ b/prebid-video/video-overview.md @@ -18,11 +18,8 @@ sidebarType: 4 Prebid.js provides tools that allow header bidding video demand to compete with your ad server video demand. Prebid video demand can be incorporated for both instream, outstream, and long-form video slots. -- Instream - Instream video ads serve in-line with existing video content on your page. The ads can serve before, during, or after a piece of video content. As the publisher, you must provide your own video player that can be used to render the ads. +Prebid.js supports all the latest [OpenRTB Video types and subtypes](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/develop/AdCOM%20v1.0%20FINAL.md#list--placement-subtypes---video-). -- Outstream – Outstream video ads serve separately from any existing video content. Often, outstream video ad units are used to create video inventory on pages that do not include any video content. The outstream video ad is displayed through an associated outstream video renderer, which usually ingests configuration options that control the user experience. (For example, the outstream video player can be configured to expand within a text body on-page when in view, and collapse when the video is finished). - -- Long-form - Long-form video content always has a content arc with a beginning, middle and end. Ads display in an ad pod, a grouping of individual ads that appear either in the beginning, end or during the video content. As the publisher you must provide your own video player that can be used to render the ads. ## Implementation @@ -33,6 +30,8 @@ Here’s a high-level overview of the steps required to start using Prebid.js fo For implementation details, see [Getting Started with Video for Prebid.js]({{site.github.url}}/prebid-video/video-getting-started.html). +The [Prebid Video Module]({{site.github.url}}/prebid-video/video-getting-started.html#prebid-video-module) is the recommended way to implement video. + ## How It Works ### Instream Video From 5fbb38730c045ac9e4fd1135a4c40f2491fe7987 Mon Sep 17 00:00:00 2001 From: Piotr Jaworski <109736938+piotrj-rtbh@users.noreply.github.com> Date: Wed, 31 May 2023 19:51:43 +0200 Subject: [PATCH 310/763] RTB House: add fledge docs; reorganization (#4605) --- dev-docs/bidders/rtbhouse.md | 37 ++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/dev-docs/bidders/rtbhouse.md b/dev-docs/bidders/rtbhouse.md index 60b4ca65bf..91cad3e134 100644 --- a/dev-docs/bidders/rtbhouse.md +++ b/dev-docs/bidders/rtbhouse.md @@ -28,14 +28,20 @@ sidebarType: 1 | `bidfloor` | optional | Minimal CPM value | `0.01` | `float` | | `channel` | optional | Inventory channel identifier, limited to 50 characters | `Partner 1 - News` | `string` | -#### ORTB Blocking +#### Please note: + +* Since 4.43 the bidfloor param will be ignored if a value is specified via floor module. + +* The channel param is available starting from Prebid 6.6.0. Please reach your RTBHouse representative for details on how to enable and use the channel param. + +### ORTB Blocking RTB House supports blocking advertisers in `badv` and categories in `bcat` parameters. The blocked advertisers/categories list has no length limitation, but response timeout is more likely to occur as the number of entries grow. Blocked advertisers list (`badv`) is an array of domains as strings. Blocked categories list (`bcat`) is an array of IAB categories as strings. For example: -##### Globally defined ORTB Blocking: +#### Globally defined ORTB Blocking: ```javascript pbjs.setConfig({ ortb2: { @@ -44,7 +50,7 @@ pbjs.setConfig({ } )}; ``` -##### ORTB Blocking specific only to rtbhouse bidder: +#### ORTB Blocking specific only to rtbhouse bidder: ```javascript pbjs.setBidderConfig({ bidders: ['rtbhouse'], @@ -59,8 +65,27 @@ pbjs.setBidderConfig({ ### Setting up the Prebid Server Adapter If you’re a Prebid Server host company looking to enable the RTB House server-side adapter, you'll need to contact prebid@rtbhouse.com. They will guide you through the process. Do not use the default bidder config file as it will require custom partner code to be entered. It will be provided by RTB House. -### Please note: -* Since 4.43 the bidfloor param will be ignored if a value is specified via floor module. +### Protected Audience API (FLEDGE) support +There’s an option to receive demand for Protected Audience API (FLEDGE/PAAPI) +ads using RTB House bid adapter. +Prebid’s [fledgeForGpt](https://docs.prebid.org/dev-docs/modules/fledgeForGpt.html) +module and Google Ad Manager is currently required. -* The channel param is available starting from Prebid 6.6.0. Please reach your RTBHouse representative for details on how to enable and use the channel param. +The following steps should be taken to setup Protected Audience for RTB House: + +1. Reach out to your RTB House representative for setup coordination. + +2. Build and enable FLEDGE module as described in +[fledgeForGpt](https://docs.prebid.org/dev-docs/modules/fledgeForGpt.html) +module documentation. + + a. Make sure to enable RTB House bidder to participate in FLEDGE. If there are any other bidders to be allowed for that, add them to the **bidders** array: +```javascript +pbjs.setBidderConfig({ + bidders: ["rtbhouse"], + config: { + fledgeEnabled: true + } +}); +``` From bad35d70af3571237c275491ecf924c554798cef Mon Sep 17 00:00:00 2001 From: Richard Date: Wed, 31 May 2023 20:17:16 +0200 Subject: [PATCH 311/763] Update adnuntius.md (#4591) Adds documentation for the new `maxDeals` parameter. --- dev-docs/bidders/adnuntius.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/adnuntius.md b/dev-docs/bidders/adnuntius.md index 18464e3366..207e366665 100644 --- a/dev-docs/bidders/adnuntius.md +++ b/dev-docs/bidders/adnuntius.md @@ -25,6 +25,7 @@ sidebarType: 1 | `auId` | required | The ad unit ID `'0000000000072345'` leading zeros can be omitted. | `'0000000000072345'` | `string` | | `network` | optional | Used if you want to make requests to multiple networks in adnuntius. | `'adnuntius'` | `string`| | `targeting` | optional | Targeting to be sent through to adnuntius with the request. | `{ c: ['prebids'] }` | `string`| +| `maxDeals` | optional | The maximum number of deal bids to include. Default 0. | `1` | `Integer` | #### Targeting From e94db6635ba9f6f1238923a7afb1909cbc17c7fd Mon Sep 17 00:00:00 2001 From: khang-vu-ttd <109103626+khang-vu-ttd@users.noreply.github.com> Date: Wed, 31 May 2023 12:30:26 -0700 Subject: [PATCH 312/763] kvu-OPATH-760-update-docs-with-kvp (#4602) --- dev-docs/bidders/ttd.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/dev-docs/bidders/ttd.md b/dev-docs/bidders/ttd.md index e453380962..d50597571e 100644 --- a/dev-docs/bidders/ttd.md +++ b/dev-docs/bidders/ttd.md @@ -182,3 +182,10 @@ Lists of `api`, `playbackmethod`, `protocols`, `pos`, and `expdir` potential val - `3` : Up - `4` : Down - `5` : Full Screen + +### First Party Data (Supported starting prebid v7.49) +Publishers should set [First Party Data](https://docs.prebid.org/features/firstPartyData.html) in the `ortb2` and `ortb2Imp` objects. These fields are supported: + +- `ortb2.site.ext.data` +- `ortb2.user.ext.data` +- `AdUnit.ortb2Imp.ext.data` (for AdUnit data) \ No newline at end of file From b4b8964c7477903ca4b1b351362e8c5979533937 Mon Sep 17 00:00:00 2001 From: Damyan Date: Thu, 1 Jun 2023 13:33:38 +0300 Subject: [PATCH 313/763] AdHash bid adapter changes (#4527) * AdHash documentation * multiformat_supported added * Removing globalScript flag --- dev-docs/bidders/adhash.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/dev-docs/bidders/adhash.md b/dev-docs/bidders/adhash.md index e8a276ff2d..ab7a27d138 100644 --- a/dev-docs/bidders/adhash.md +++ b/dev-docs/bidders/adhash.md @@ -4,8 +4,10 @@ title: AdHash description: Prebid AdHash Bidder Adapter pbjs: true biddercode: adhash +media_types: display, video safeframes_ok: false gdpr_supported: true +multiformat_supported: will-bid-on-any sidebarType: 1 --- @@ -17,15 +19,16 @@ Here is what you need for Prebid integration with AdHash: 3. Use the Publisher ID and Platform URL as parameters in params. Please note that a number of AdHash functionalities are not supported in the Prebid.js integration: -* Cookie-less frequency and recency capping; -* Audience segments; -* Price floors and passback tags, as they are not needed in the Preebid.js setup; -* Reservation for direct deals only, as bids are evaluated based on their price. +* Price floors and passback tags, as they are not needed in the Prebid.js setup; +* Reservation for direct deals only, as bids are evaluated based on their price; +* Fill rate reporting, as unfilled impressions can be filled by any other bidder; +* CPC deals, as bidding happens only on CPM pricing. ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|--------------|------------------------------------------------|----------| -| `publisherId` | required | Publisher ID | `'0x1234567890123456789012345678901234567890'` | `string` | -| `platformURL` | required | Platform URL | `'https://adhash.org/p/example/'` | `string` | +| Name | Scope | Description | Example | Type | +|----------------|----------|----------------|------------------------------------------------|-----------| +| `publisherId` | required | Publisher ID | `'0x1234567890123456789012345678901234567890'` | `string` | +| `platformURL` | required | Platform URL | `'https://adhash.com/p/example/'` | `string` | +| `bidderURL` | optional | Bidder URL | `'https://bidder.adhash.com'` | `string` | From 142848431870e4cb683cc41ee987352ecee57360 Mon Sep 17 00:00:00 2001 From: Dmytro Shyrokov Date: Thu, 1 Jun 2023 13:34:26 +0300 Subject: [PATCH 314/763] Xeworks adapter: pbs support added (#4543) * meazy adapter docs * Xeworks Bid Adapter: update docs --------- Co-authored-by: Dmitry --- dev-docs/bidders/xe.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/dev-docs/bidders/xe.md b/dev-docs/bidders/xe.md index afa8396dbb..39682450ac 100644 --- a/dev-docs/bidders/xe.md +++ b/dev-docs/bidders/xe.md @@ -9,7 +9,7 @@ gdpr_supported: true usp_supported: true prebid_member: false pbjs: true -pbs: false +pbs: true schain_supported: true floors_supported: true multiformat_supported: will-bid-on-any @@ -21,11 +21,19 @@ sidebarType: 1 The Xe.works adapter requires setup before beginning. Please contact us at team@xe.works -### Bid params +### Prebid.js Bid params {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |-------------|----------|-----------------------------|---------------|-----------| | `placement` | required | Placement ID | `test-banner` | `string` | | `env` | required | Environment name | `xe` | `string` | -| `ext` | optional | Specific integration config | `{}` | `object` | \ No newline at end of file +| `ext` | optional | Specific integration config | `{}` | `object` | + +### Prebid Server Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------------|----------|-----------------------------|------------------------------------|-----------| +| `env` | required | Environment name | `xe-stage` | `string` | +| `pid` | required | Uniq placement ID | `dc230510222b516f0eb9a10e5913d3b5` | `string` | From 5276a69a8d0ebe5fda28260a55ba6f5c81b91b30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9onard=20Labat?= Date: Thu, 1 Jun 2023 12:45:18 +0200 Subject: [PATCH 315/763] Criteo Bid Adapter : Update documentation according to latest features added about video & rwdd support (#4596) --- dev-docs/bidders/criteo.md | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/dev-docs/bidders/criteo.md b/dev-docs/bidders/criteo.md index c26f00e223..20bd455d28 100644 --- a/dev-docs/bidders/criteo.md +++ b/dev-docs/bidders/criteo.md @@ -38,11 +38,22 @@ Prebid-Server support is on alpha test and is currently a non-finished product. | `networkId` | required | The network ID from Criteo. Please reach out your Criteo representative for more details. | `456456` | `integer` | | `nativeCallback` | optional | (Prebid.js only) Callback to perform render in native integrations. Please reach out your Criteo representative for more details. | `function(payload) { console.log(payload); }` | `function` | | `integrationMode` | optional | (Prebid.js only) Integration mode to use for ad render (none or 'AMP'). Please reach out your Criteo representative for more details. | `'AMP'` | `string` | -| `publisherSubId` | optional | Custom identifier for reporting. Please reach out your Criteo representative for more details. | `'adunit-1'` | `string` | +| `publisherSubId` | optional | Custom identifier for reporting. Please reach out your Criteo representative for more details. | `'adunit-1'` | `string` | ### First Party Data -Criteo supports both `ortb2` (`site` and `user`) and `ortb2Imp` methods to set [First Party Data](https://docs.prebid.org/features/firstPartyData.html). +Criteo supports both `ortb2` and `ortb2Imp` methods to set [First Party Data](https://docs.prebid.org/features/firstPartyData.html). + +The standard Open RTB properties supported from `ortb2` / `ortb2Imp` are described in the following table. + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|-----------| +| `ortb2.user` | optional | Details via a Open RTB User object about the human user of the device; the advertising audience. | N/A | `object` | +| `ortb2.site` | optional | Details via a Open RTB Site object about the publisher’s website. | N/A | `object` | +| `ortb2Imp.rwdd` | optional | Indicates whether the user receives a reward for viewing the ad, where 0 = no, 1 = yes. | `1` | `integer` | + +Besides these standard properties, `ext` field can be used to send any publisher specific data which may have been discussed with a Criteo representative. ### Video Object @@ -65,7 +76,8 @@ In addition, Criteo adapter relies on parameters specified in the mediaTypes.vid | `playerSize` | required | Width and height of the player | `[640, 480]` | `Array` | | `protocols` | required | Supported video bid response protocols. VAST 1.0: `1`; VAST 2.0: `2`; VAST 3.0: `3`; VAST 1.0 Wrapper: `4`; VAST 2.0 Wrapper: `5`; VAST 3.0 Wrapper: `6`; | `|5, 6]` | `Array` | | `maxduration` | required | Maximum ad duration in seconds | `20` | `integer` | -| `api` | required | API frameworks supported. VPAID 1.0: `1`; VPAID 2.0: `2`; MRAID-1: `3`; ORMMA: `4`; MRAID-2: `5`; | `[1, 2]` | `Array` | +| `api` | required | API frameworks supported. VPAID 1.0: `1`; VPAID 2.0: `2`; MRAID 1.0: `3`; ORMMA: `4`; MRAID 2.0: `5`; MRAID 3.0: `6`; OMID 1.0: `7`; | `[1, 2]` | `Array` | +| `plcmt` | optional | 1=in-stream, 2=accompanying content, 3=interstitial, 4=no content/standalone. Highly recommended to comply with new IAB video specifications. | `1` | `integer` | #### Example of Video Ad-unit ``` From 1640601ede9c119e15ceddd42200f030539c9289 Mon Sep 17 00:00:00 2001 From: Nitin Nimbalkar <96475150+pm-nitin-nimbalkar@users.noreply.github.com> Date: Thu, 1 Jun 2023 16:19:38 +0530 Subject: [PATCH 316/763] Data controller Module Code renamed with actual file name (#4589) --- dev-docs/modules/dataControllerModule.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/modules/dataControllerModule.md b/dev-docs/modules/dataControllerModule.md index 5d425c5e9c..79b6e86b18 100644 --- a/dev-docs/modules/dataControllerModule.md +++ b/dev-docs/modules/dataControllerModule.md @@ -3,7 +3,7 @@ layout: page_v2 page_type: module title: Data Controller Module description: Filters the EIDs/SDA being transmitted to bid stream. -module_code : dataController +module_code : dataControllerModule display_name : Data Controller Module enable_download : true sidebarType : 1 From 12723a30be91ef8e33e2d47590053e0d2490b5dc Mon Sep 17 00:00:00 2001 From: maxime-dupuis <118775839+maxime-dupuis@users.noreply.github.com> Date: Thu, 1 Jun 2023 06:50:14 -0400 Subject: [PATCH 317/763] Sharethrough - Support native (#4583) --- dev-docs/bidders/sharethrough.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/sharethrough.md b/dev-docs/bidders/sharethrough.md index d988965b2a..71e7ea3dca 100644 --- a/dev-docs/bidders/sharethrough.md +++ b/dev-docs/bidders/sharethrough.md @@ -6,7 +6,7 @@ description: Prebid Sharethrough Adaptor gdpr_supported: true coppa_supported: true floors_supported: true -media_types: banner, video +media_types: banner, video, native safeframes_ok: true schain_supported: true userIds: all From 0b86f8790a8ad75ef5b77ab7bd903dd13446311f Mon Sep 17 00:00:00 2001 From: Nepomuk Seiler Date: Thu, 1 Jun 2023 15:19:02 +0200 Subject: [PATCH 318/763] Grant US traffic consent for GA and wait for CMP 500ms --- _includes/footer.html | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/_includes/footer.html b/_includes/footer.html index c4b6cdae34..2abb9cb9da 100644 --- a/_includes/footer.html +++ b/_includes/footer.html @@ -21,7 +21,11 @@ window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); - gtag('consent', 'default', {'ad_storage': 'denied','analytics_storage': 'denied'}); + gtag('consent', 'default', { + 'analytics_storage': 'granted', + 'region': ['US'] + }); + gtag('consent', 'default', {'ad_storage': 'denied','analytics_storage': 'denied', 'wait_for_update': 500}); gtag("config", "G-GM972HCTEB", { anonymize_ip: true }); From b3ed7c6bcde2f8875346370d9a0394c813c963ef Mon Sep 17 00:00:00 2001 From: bretg Date: Thu, 1 Jun 2023 11:58:33 -0400 Subject: [PATCH 319/763] adding create table examples (#4612) --- prebid-server/hosting/pbs-database.md | 70 ++++++++++++++++++--------- 1 file changed, 46 insertions(+), 24 deletions(-) diff --git a/prebid-server/hosting/pbs-database.md b/prebid-server/hosting/pbs-database.md index 4554dc5684..bed4b269fa 100644 --- a/prebid-server/hosting/pbs-database.md +++ b/prebid-server/hosting/pbs-database.md @@ -30,6 +30,8 @@ you to be able to integrate a few tables into that existing database and then re So instead of Prebid defining your schema, we just define the fields that need to come from the query. You can then design the SQL query and put it in PBS configuration. +That said, it's often been requested that Prebid just suggest a minimal schema, so there are examples below. + ## Database Queries Prebid Server queries the database in the following scenarios: @@ -37,8 +39,8 @@ Prebid Server queries the database in the following scenarios: {: .table .table-bordered .table-striped } | Data | SQL Config | Description | |------+---------------+-------------| -| Stored Requests | settings.database.stored-requests-query | Retrieve stored request JSON for incoming OpenRTB | -| AMP Stored Requests | settings.database.amp-stored-requests-query | Retrieve stored request JSON for incoming AMP | +| Auction endpoint Stored Requests | settings.database.stored-requests-query | Retrieve stored request JSON for incoming OpenRTB | +| AMP endpoint Stored Requests | settings.database.amp-stored-requests-query | Retrieve stored request JSON for incoming AMP | | Stored Responses | settings.database.stored-responses-query | Retrieve stored response data | | Account Data | settings.database.account-query (PBS-Java only) | Retrieve host company-specific account information | @@ -51,9 +53,10 @@ The Stored Request query needs to return fields in this order: {: .table .table-bordered .table-striped } | Field Num | Name | Type | Meaning | Default | |-----------+------+------+---------+---------| -| 1 | request ID | string | The Stored Request ID | n/a | -| 2 | request body | JSON | The body of the Stored Request | n/a | -| 3 | label | string | This is always just the static value 'request' | n/a | +| 1 | account ID | string | The Account ID may be used to distinguish between stored request IDs with the same name across accunts. (PBS-Java only) | n/a | +| 2 | request ID | string | The Stored Request ID | n/a | +| 3 | request body | JSON | The body of the Stored Request | n/a | +| 4 | label | string | Defines whether this item is a 'request' (top-level SR) or 'imp' (imp-level SR).| n/a | There are two parameters that can be passed into the query: @@ -68,13 +71,21 @@ settings: stored-requests-query: SELECT accountId, reqid, storedData, 'request' as dataType FROM stored_requests WHERE reqid IN (%REQUEST_ID_LIST%) UNION ALL SELECT accountId, reqid, storedData, 'imp' as dataType FROM stored_requests WHERE reqid IN (%IMP_ID_LIST%) ``` -This example assumes that the schema includes these fields: -- accountId: account ID, which is used to make sure that storedrequests are unique to the account -- reqid: ID of stored data item -- storedData: value of stored data item -- 'request' or 'imp': type of stored data item. +This **example** assumes that one table contains both top-level and imp-level stored requests: -Again, you can name the fields however you'd like in your database, and the query can be arbitrarily complicated as long as it returns the fields in the order and types shown here. +``` +CREATE TABLE `stored_requests` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `accountId` int(11) NOT NULL, + `reqid` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `storedData` json NOT NULL +) +``` + +{: .alert.alert-info :} +This schema is for example only -- it's not a terribly smart schema for use in production. You should consider adding fields like insertDate and updateDate, and of course define indices. And again, you can name the fields however you'd like in your database, and the query can be arbitrarily complicated as long as it returns the fields in the order and types shown in the example query. + +Note: if we had to do it all over again, we'd get rid of the distinction between REQUEST_ID_LIST and IMP_ID_LIST. ### AMP Stored Requests @@ -89,13 +100,8 @@ settings: amp-stored-requests-query: SELECT accountId, reqid, storedData, 'request' as dataType FROM stored_requests WHERE reqid IN (%REQUEST_ID_LIST%) ``` -This example assumes that the stored_requests schema includes these fields: -- accountId: account ID, which is used to make sure that storedrequests are unique to the account -- reqid: ID of stored data item -- storedData: value of stored data item -- 'request': type of stored data item. Can be only be 'request' for AMP. +It's expected that your AMP stored requests are stored in the same schema as yourother stored requests. The query is, however, separably configurable. -Again, you can name the fields however you'd like in your database, and the query can be arbitrarily complicated as long as it returns the fields in the order and types shown here. ### Stored Responses @@ -120,9 +126,19 @@ settings: stored-responses-query: SELECT resid, responseData FROM stored_responses WHERE resid IN (%ID_LIST%) ``` -This example assumes that the stored_responses schema includes these fields: -- resid is a string field that contains the stored response ID -- responseData is a JSON field that contains the body of the stored response +This **example** schema assumes that the stored_responses schema includes these fields: +``` +CREATE TABLE `stored_responses` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `resid` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `responseData` json NOT NULL +) +``` + +{: .alert.alert-info :} +This schema is for example only -- it's not a terribly smart schema for use in production. You should consider adding fields like insertDate and updateDate, and of course define indices. And again, you can name the fields however you'd like in your database, and the query can be arbitrarily complicated as long as it returns the fields in the order and types shown in the example query. + +Note: there's no reason you couldn't put stored responses in the same table as stored requests as long as there's a field differentiating them for use in the query. ### Account Data @@ -152,11 +168,17 @@ settings: account-query: JSON_MERGE_PATCH(JSON_OBJECT( 'id', accountId ), COALESCE(config, '{}')) as consolidated_config FROM accounts WHERE accountId = %ACCOUNT_ID% LIMIT 1 ``` -This example assumes that the accounts schema includes these fields: -- accountId is a string field that contains the account ID -- config is a JSON field that contains all the rest of the account-level fields +This **example** schema assumes that the accounts schema includes these fields: +``` +CREATE TABLE `accounts` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `accountId` int(11) NOT NULL, + `config` json NOT NULL +) +``` -Again, you can name the fields however you'd like in your database, and the query can be arbitrarily complicated as long as it returns the fields in the order and types shown here. +{: .alert.alert-info :} +This schema is for example only -- it's not a terribly smart schema for use in production. You should consider adding fields like insertDate and updateDate, and of course define indices. And again, you can name the fields however you'd like in your database, and the query can be arbitrarily complicated as long as it returns the fields in the order and types shown in the example query. See the [PBS-Java configuration docs](https://github.com/prebid/prebid-server-java/blob/master/docs/application-settings.md#configuration-document-json) for detail on the JSON structure expected as the result of the query. There are many account-level settings detailed there. From 3f35abafa904d94332f5e626ec3d7f86f5717bfc Mon Sep 17 00:00:00 2001 From: UOL - TechOps <116287445+uoladtech@users.noreply.github.com> Date: Thu, 1 Jun 2023 16:09:52 -0300 Subject: [PATCH 320/763] New adapter: Uol as an AppNexus alias (#4601) * New adapter: Uol as an AppNexus alias * Update uol.md Just changing the way the adapter name will appear --- dev-docs/bidders/uol.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 dev-docs/bidders/uol.md diff --git a/dev-docs/bidders/uol.md b/dev-docs/bidders/uol.md new file mode 100644 index 0000000000..1dd7494124 --- /dev/null +++ b/dev-docs/bidders/uol.md @@ -0,0 +1,27 @@ +--- +layout: bidder +title: UOL +description: UOL Bidder Adapter +biddercode: uol +pbjs: true +pbs: false +aliasCode: appnexus +gdpr_supported: true +media_types: banner, video, native +gvl_id: 32 +schain_supported: true +userId: all +sidebarType: 1 +--- +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------|-----------|-----------| +| `placementID` | required | Placement id | `'11111'` | `string` | + +Uol is an aliased bidder for AppNexus. + +### Note: + +The UOL bidder adapter requires setup before beginning. Please contact us at l-dev-techops@uolinc.com. From b59cff61a784a14b784875cb72b681ad5d6eb271 Mon Sep 17 00:00:00 2001 From: bretg Date: Thu, 1 Jun 2023 15:10:52 -0400 Subject: [PATCH 321/763] PBS activity controls (#4552) * initial control of PBS activities doc * checkpoint * wordsmithing * more links, module details * fixed ipv6 masking comment --- prebid-server/developers/add-a-module.md | 19 +- .../features/pbs-activitycontrols.md | 246 ++++++++++++++++++ prebid-server/features/pbs-feature-idx.md | 1 + prebid-server/features/pbs-privacy.md | 7 + 4 files changed, 269 insertions(+), 4 deletions(-) create mode 100644 prebid-server/features/pbs-activitycontrols.md diff --git a/prebid-server/developers/add-a-module.md b/prebid-server/developers/add-a-module.md index ab608c1521..6953e240e6 100644 --- a/prebid-server/developers/add-a-module.md +++ b/prebid-server/developers/add-a-module.md @@ -137,7 +137,17 @@ to the PBS host company. Examples: - modules may require a local SQL DB populated with application data - some modules may require access to local disk to read a security certificate -### 7. Think about Analytics Tags +### 7. Identify Sensitive Data Usage + +If your module either utilizes or supplies user-level data like User First Party Data or precise geographic information, it must adhere to the framework supplied by the [Activity Controls](/prebid-server/features/pbs-activitycontrols.html). + +For instance: +- if your module is going to supply user-level data (e.g. "job title") to bid adapters, it must check permissions for the `enrichUfpd` activity. +- if your module is going to forward the entire ORTB request to an endpoint, it must check the `transmitUfpd` and `transmitPreciseGeo` activity permissions. + +The details about how exactly to code this differs by platform. See the developer docs for Go and Java linked below. + +### 8. Think about Analytics Tags Analytics Tags (aka 'ATags') are a log mechanism provided by PBS-core to inform downstream modules about what's happened in the request so far. Use of the Analytics Tag structure @@ -153,7 +163,7 @@ that a given bidder is losing bid opportunities by not adhering to the auction p See the [Module Analytics Tag Conventions](/prebid-server/developers/module-atags.html) for more specific details about how to format ATags. -### 8. Write the Code, Config, and Unit Tests +### 9. Write the Code, Config, and Unit Tests The details of the implementation depend on the platform. @@ -165,7 +175,7 @@ Other rules for open source PBS pull request: - Unit test coverage must exceed 90%. - A maintainer email address must be provided and be a group, not an individual. e.g. "support@example.com rather than jsmith@example.com -### 9. Write the Module Documentation +### 10. Write the Module Documentation Fork the [documentation repo](https://github.com/prebid/prebid.github.io) and create a file in /prebid-server/pbs-modules. You can start by copying one of the existing files. It should contain: @@ -176,7 +186,7 @@ create a file in /prebid-server/pbs-modules. You can start by copying one of the - Analytics Tag support - Privacy Support: disclose whether the module has user privacy implications and support for GDPR, CCPA, etc. -### 10. Submit the Pull Requests +### 11. Submit the Pull Requests When everthing checks out on your dev environment, submit the PRs for review. @@ -184,3 +194,4 @@ When everthing checks out on your dev environment, submit the PRs for review. - [Prebid Server Module List](/prebid-server/pbs-modules/index.html) - [PBS Module Analytics Tags Conventions](/prebid-server/developers/module-atags.html) +- [PBS Activity Controls](/prebid-server/features/pbs-activitycontrols.html) diff --git a/prebid-server/features/pbs-activitycontrols.md b/prebid-server/features/pbs-activitycontrols.md new file mode 100644 index 0000000000..51eeef68da --- /dev/null +++ b/prebid-server/features/pbs-activitycontrols.md @@ -0,0 +1,246 @@ +--- +layout: page_v2 +sidebarType: 5 +title: Prebid Server | Features | Actvity Controls + +--- + +# Prebid Server Activity Controls +{: .no_toc } + +{: .alert.alert-warning :} +This feature is currently only available in PBS-Java. + +Prebid supports a centralized control mechanism for privacy-sensitive activities. +These controls are intended to serve as building blocks for privacy protection mechanisms, allowing publishers to directly specify what should be permitted or avoided in any given regulatory environment. + +* TOC +{: toc } + +## Overview + +There are many privacy regulations that Prebid publishers need to accomodate. Prebid Server supplies [several features](/prebid-server/features/pbs-privacy.html) to help Publishers implement their legal policies, but there are scenarios where extra control is needed: + +- a Publisher's lawyers want to make a particular exception +- support hasn't been built for a regulation the Publisher needs to comply with + +### Prebid Server Is a Toolkit + +{: .alert.alert-danger :} +Important: This resource should not be construed as legal advice and Prebid.org makes no guarantees about compliance with any law or regulation. Please note that because every company and its collection, use, and storage of personal data is different, you should seek independent legal advice relating to obligations under European and /or US regulations, including the GDPR, the ePrivacy Directive and CCPA. Only a lawyer can provide you with legal advice specifically tailored to your situation. Nothing in this guide is intended to provide you with, or should be used as a substitute for, legal advice tailored to your business. + +1. Get a privacy lawyer. +2. Consider all the privacy regulations your content business is subject to. +3. Come up with a plan. +4. Use Prebid Server server features and these Activity Controls as ways to help implement your privacy plan with respect to header bidding. +5. Let us know if there are tools missing from the Prebid toolkit. + +### What is an Activity? + +We did an analysis of the things Prebid does that might be of concern to privacy regulations. We call these things "potentially restricted activities", or just "activities" for short. Some examples: + +- Syncing ID cookies +- Transmitting user first party data +- Transmitting the user's geographic location +- etc. + +The [full list of activities](#activities) is below. + +An activity control is a gatekeeper that makes a decision about whether the activity should be allowed in a specific context: + +- Should I allow this usersync for bidderB? +- Is it ok for this data to be passed to bidderC and analyticsD? +- Should I anonymize the geographic information for this request? +- etc. + +Prebid Server core checks with the Activity Controls to see whether a given activity is allowed for a given situation. The configuration for the activity comes from one of two places: either account-specific configuration or if not specified there, there's a host-level default. + +### Example Activity Control + +Here's an example account config that prevents bidderA, bidderB, and analytics adapters from receiving `user.eids[]` and `user.ext.data`: +``` +{ + privacy: { + allowactivities: { + transmitUfpd: { + default: true, + rules: [{ + condition: { + componentName: ["bidderA", "bidderB"] + }, + allow: false + },{ + condition: { + componentType: ["analytics"] + }, + allow: false + }] + } + } + } +``` + +
+ +## Configuration + +The `privacy.allowActivities` is a new account configuration option that contains a list of activity names -- see the [full list of activities below](#activities). + +``` +{ + privacy: { + allowactivities: { + ACTIVITY: { + default: true, + rules: [{ + condition: { ... }, + allow: false + },{ + ... more rules ... + }] + } + } + } +``` + +Each activity is an object that can contain these attributes: + +{: .table .table-bordered .table-striped } +| Name | Type | Description | +|------|------|-------------| +| `default` | boolean | Whether the activity should be allowed if no other rule applies. Defaults to true. | +| `rules` | array of objects | Rules for this activity | +| `rules[].condition` | object | Conditions to use for this rule. See the [rules](#rules) section below for details. If omitted, the rule always applies. | +| `rules[].allow` | boolean | Whether the activity should be allowed when this rule applies. Defaults to true. | + +`Rules` is an array of objects that a publisher can contruct to provide fine-grained control over a given activity. + +There's more about [rules](#rules) below. + + + +### Activities + +Here's the list of the 'potentially restricted activities' that Prebid Server core can restrict for Publishers: + +{: .table .table-bordered .table-striped } +| Name | Description | Effect when denied | +|----------------|-------------|---------------------------| +| `syncUser` | The [/cookie_sync](/prebid-server/endpoints/pbs-endpoint-cookieSync.html) or [/setuid](/prebid-server/endpoints/pbs-endpoint-setuid.html) endpoint has been asked to perform a sync or set-cookie. | Sync or setuid is skipped for one or more bidders. | +| `fetchBids` | A bid adapter wants to participate in an auction | Bidder is removed from the auction | +| `enrichUfpd` | A module wants to add user first party data to outgoing requests (`user.data` and `user.ext.data` in ORTB) | Module is not allowed to run. | +| `reportAnalytics` | The [/auction](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html), [/amp](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html), or [/event](/prebid-server/endpoints/pbs-endpoint-event.html) endpoint is about to call an analytics adapter. | Adapter is not called. | +| `transmitUfpd` | A bid adapter, analytics adapter, or module wants to access and/or transmit user FPD or EIDs to their endpoint | User FPD and EIDs are hidden from the adapter or module: `user.data`, `user.ext.data`, `user.{id, buyeruid, yob, gender}`, `user.eids`, `device.{device.ifa, macsha1, macmd5, dpidsha1, dpidmd5, didsha1, didmd5}` | +| `transmitPreciseGeo` | A bid adapter, analytics adapter, or module wants to access and/or transmit precise geolocation data to their endpoint | Latitude, longitude, and IP address are rounded off. Specifically, lat and long are truncated to two decimal places, IPv4 masks rightmost 8 bits, IPv6 masks the rightmost bits based on a configured value. | + + + +### Rules + +There are three parts to an Activity Control's rule: + +1. The priority - position within the array +2. The `condition` - logic for matching the rule +3. The `allow` status - what happens if the condition matches + +For example, this rule would allow bidderX to perform the activity if no higher priority rules take precedence. + ``` + ... + rules: [{ + condition: { + componentName: ["bidderX"] + }, + allow: true + }] + ... +``` + +Note: The Prebid.js version of this feature supports _explicit_ priority signals. That's not the case for the Prebid Server feature. Instead, for PBS, priority is implicit in the ordering of the array. + +#### Rule Conditions + +If a `condition` in a rule evaluates to true, the `allow` attribute of the rule will be utilized. If there's no condition specified, the rule's `allow` attribute will always be utilized. + +These are the conditional attributes available: + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Type | Example | +|------|------|-------------|-------|-------| +| componentType | optional | Can be "bidder", "analytics", or "module". | array of strings | ["bidder"] | +| componentName | optional | Name of a specific bid adapter, analytics adapter, or module. | array of strings | ["bidderX"] | + +{: .alert.alert-info :} +Note on names: if two components share a name (e.g. "ssp1") for both a bid adapter and an analytics adapter, the rule may need to distinguish between them by providing both `componentName` and `componentType`. + +#### Allow + +If the rule's condition matches, the `allow` attribute defines whether the rule 'votes' to allow (true) or disallow (false) the activity in question. + +If `allow` is not defined, the rule is assumed to assert **true** (i.e. allow the activity to happen). + +### Interaction with other privacy features + +Currently, the Activity Control feature is separate from other privacy features: + +1. Activity Controls are run before other privacy features. So, for instance, if a bidder is removed from a request by the `fetchBids` activity, the GDPR processing for that bidder will not take place. +1. GDPR-suppression activities must still be managed through that feature's configuration. (See details for [PBS-Go](https://github.com/prebid/prebid-server/blob/master/config/config.go) or [PBS-Java](https://github.com/prebid/prebid-server-java/blob/master/docs/config-app.md)) +1. Likewise, Activity Control rules do not override USPrivacy or COPPA. + +{: .alert.alert-info :} +While Activity Controls are currently not well integrated with other privacy features, that will change over the coming months. + + +### Examples + +#### Anonymize auctions and disable usersyncs for bidderA + +``` +{ + privacy: { + allowactivities: { + transmitUfpd: { + rules: [{ + condition: { + componentName: ["bidderA"] + }, + allow: false + }] + }, + syncUser: { + rules: [{ + condition: { + componentName: ["bidderA"] + }, + allow: false + }] + } + } + } +} +``` + +#### Prevent User First Party Data and EIDs from going to analytics adapters + +``` +{ + privacy: { + allowactivities: { + transmitUfpd: { + rules: [{ + condition: { + componentType: ["analytics"] + }, + allow: false + }] + } + } + } +} +``` + +## Modules + +Modules that perform any 'potentially restricted activity' are responsible for confirming they are allowed to perform that activity. See [Adding a PBS Module](/prebid-server/developers/add-a-module.html) for more information. + +## Further Reading +- [Prebid Server privacy regulation support](/prebid-server/features/pbs-privacy.html) diff --git a/prebid-server/features/pbs-feature-idx.md b/prebid-server/features/pbs-feature-idx.md index e7b35b38a9..5a8d04ccfd 100644 --- a/prebid-server/features/pbs-feature-idx.md +++ b/prebid-server/features/pbs-feature-idx.md @@ -37,6 +37,7 @@ title: Prebid Server | Features | [GPP](/prebid-server/features/pbs-privacy.html#gpp) | GPP TCF2/USP Support | PBS reads the Global Privacy Platform string and pulls out TCF2/USP strings when appropriate. | | | | COPPA | Core | Able to read the COPPA flag and [take appropriate enforcement action](https://github.com/prebid/prebid-server/issues/929). | | | | Global Privacy Control | Core | Passes the Sec-GPC header through to bidders. | | | +| Activity Controls | Core | [Account-level controls](/prebid-server/features/pbs-activitycontrols.html) over privacy sensitive activities. | | | | [Cache](/prebid-server/features/pbs-caching.html) | Bids core | Accepts the ext.prebid.cache.bids parameter, storing bid objects in PBC. | | | | Cache | VAST core | Accepts the ext.prebid.cache.vastxml parameter, storing VAST responses in PBC. | | | | Cache | Winning-only flag | Accepts a 'ext.prebid.cache.winningonly' parameter on the request. If true, instead of caching all bids and VAST, only the winning bid or VAST is stored. | | | diff --git a/prebid-server/features/pbs-privacy.md b/prebid-server/features/pbs-privacy.md index be915bd676..a99e20acfb 100644 --- a/prebid-server/features/pbs-privacy.md +++ b/prebid-server/features/pbs-privacy.md @@ -10,6 +10,13 @@ title: Prebid Server | Features | Privacy * TOC {:toc} +## Prebid Server Activity Control Infrastructure + +Prebid Server supports a mechanism for Publisher control for overriding privacy-sensitive activities. See the [Activity Controls](/prebid-server/features/pbs-activitycontrols.html) for more information. + +Note that Activity Controls are currently not well integrated with other privacy features, but that will change as these features mature. + + ## Mobile 'Limit Ad Tracking' flag If PBS receives 'device.lmt' flag in the OpenRTB request, it does the following anonymization: From 2bed132e83de17c5cc95bcebd9149bdceaee4697 Mon Sep 17 00:00:00 2001 From: radubarbos Date: Thu, 1 Jun 2023 22:12:43 +0300 Subject: [PATCH 322/763] ConnectId auto generated puid and storage updates. (#4582) Co-authored-by: dumitrubarbos --- dev-docs/modules/userid-submodules/yahoo.md | 38 +++++++++++++++++---- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/dev-docs/modules/userid-submodules/yahoo.md b/dev-docs/modules/userid-submodules/yahoo.md index 706988b73e..2b034cdaba 100644 --- a/dev-docs/modules/userid-submodules/yahoo.md +++ b/dev-docs/modules/userid-submodules/yahoo.md @@ -27,8 +27,8 @@ Note: Parameters are case-sensitive. ConnectID is the proper name of our product | params | Required | Object | Container of all module params. || | params.pixelId | Required | Number | The Yahoo-supplied publisher-specific pixel ID. | `"0000"` | -| params.he | Optional | String | The SHA-256 hashed user email address which has been lowercased prior to hashing. Pass both `he` and `puid` params if present, otherwise pass either of the two that is available. |`"ed8ddbf5a171981db8ef938596ca297d5e3f84bcc280041c5880dba3baf9c1d4"`| -| params.puid | Optional | String | The publisher supplied user identifier such as a first-party cookie. Pass both `he` and `puid` params if present, otherwise pass either of the two that is available. | `"ab9iibf5a231ii1db8ef911596ca297d5e3f84biii00041c5880dba3baf9c1da"` | +| params.he | Optional | String | The SHA-256 hashed user email address which has been lowercased prior to hashing. |`"ed8ddbf5a171981db8ef938596ca297d5e3f84bcc280041c5880dba3baf9c1d4"`| +| params.puid | Optional | String | A domain-specific user identifier such as a first-party cookie. If not passed, a puid value will be auto-generated and stored in local and / or cookie storage. | `"ab9iibf5a231ii1db8ef911596ca297d5e3f84biii00041c5880dba3baf9c1da"` | {: .table .table-bordered .table-striped }
@@ -52,7 +52,7 @@ pbjs.setConfig({ ``` ``` -// [Sample #2]: Using a hashed email and a publisher-supplied user identifier such as a first-party cookie. +// [Sample #2]: Neither a hashed email nor a publisher user identifier is passed. pbjs.setConfig({ userSync: { @@ -60,14 +60,40 @@ pbjs.setConfig({ name: "connectId", params: { pixelId: "0000", - he: "ed8ddbf5a171981db8ef938596ca297d5e3f84bcc280041c5880dba3baf9c1d4", - puid: "ab9iibf5a231ii1db8ef911596ca297d5e3f84biii00041c580dba3baf9c1da" } }] } }) ``` +``` +// [Sample #3]: Using a hashed email and a publisher user identifier such as a first-party cookie. + +pbjs.setConfig({ + userSync: { + userIds: [{ + name: "connectId", + params: { + pixelId: "0000", + he: "ed8ddbf5a171981db8ef938596ca297d5e3f84bcc280041c5880dba3baf9c1d4" + puid: "ab9iibf5a231ii1db8ef911596ca297d5e3f84biii00041c580dba3baf9c1da" + } + }] + } +}) +``` + +## Implementation Verification +Follow the steps below to check that ConnectIDs are being successfully retrieved and included on ad requests. +1) Open a Prebid-enabled page on the website. +2) Open the browser console and enter pbjs.getUserIds(). +3) Verify connectId is in the list. + - If connectId is not in the list, the correct pixelId parameter is likely not being passed. Verify you are using the correct value provided by Yahoo. Reach out to [connectid.support@yahooinc.com](mailto:connectid.support@yahooinc.com) for assistance. +4) Verify that ConnectID is successfully included in the ad requests. + - Go to the Network tab and search for an ad call event to any of the SSPs that you are using (e.g., “prebid-client”). + - Navigate to the Payload tab. Check that yahoo.com is listed as a source in the user.ext.eids array. +5) Repeat steps 1-4 after an email is provided via login or some other mechanism used to collect user registration on the website. + ## Honoring Privacy Choices Yahoo ConnectID provides multiple mechanisms for users to manage their privacy choices. Users can manage their choices via [ConnectID Control Portal](http://connectid.yahoo.com), on the [Yahoo Privacy Dashboard](https://legal.yahoo.com/us/en/yahoo/privacy/dashboard/index.html) and [NAI’s Audience Matched Opt Out page](https://optout.networkadvertising.org/optout/email). No further actions are required by Publishers as Yahoo will ensure that privacy choices selected by users via one of these methods are honored. We will automatically stop generating ConnectIDs for users who have opted-out. @@ -83,7 +109,7 @@ Please note that the storage related parameters are optional. We recommend that | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | storage | Optional | Object | Defines where and for how long the results of the call to get a user ID will be stored. | | -| storage.type | Optional | String | Defines where the resolved user ID will be stored (either `'cookie'` or `'html5'` local storage).| `'cookie'` | +| storage.type | Optional | String | Defines where the resolved user ID will be stored (either 'cookie' or 'html5' local storage). | `'cookie'` | | storage.name | Optional | String | The name of the cookie or html5 local storage where the resolved user ID will be stored. | `'connectId'` | | storage.expires | Optional | Integer | How long (in days) the user ID information will be stored. | `15` | {: .table .table-bordered .table-striped } From 289bd141d0c28d8a39174448ef5c7e5926f2fadf Mon Sep 17 00:00:00 2001 From: Aaron Friedman Date: Thu, 1 Jun 2023 16:09:54 -0400 Subject: [PATCH 323/763] FreeWheel SSP Adapter: add bidder params (#4609) Co-authored-by: Aaron Friedman --- dev-docs/bidders/freewheelssp.md | 46 ++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/dev-docs/bidders/freewheelssp.md b/dev-docs/bidders/freewheelssp.md index 4b48260e46..fa6bffc5b7 100644 --- a/dev-docs/bidders/freewheelssp.md +++ b/dev-docs/bidders/freewheelssp.md @@ -21,5 +21,47 @@ sidebarType: 1 {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | -|----------|----------|-------------|---------|----------| -| `zoneId` | required | | | `string` | +|----------|----------|-------------------------|--------|----------| +| `zoneId` | required | The zone ID for the ad. | "2003" | `string` | +| `format` | optional | The format to use for displaying the ad. Can be one of the following:
* screen-roll
* intext-roll
* sliderad
* floorad
* expand-banner
* instream
* inbanner
Note: The screen-roll, intext-roll, sliderad and floorad formats are all FreeWheel outstream formats.
Default value: "instream" | "screen-roll" | `string` | +| `bidfloor` | optional | Bid floor price. | 13.2118 | `float` | +| `bidfloorcur` | optional | Bid floor currency. | "USD" | `string` | +| `vastUrlParams` | optional | Add query parameters to the vast request. Should be a single item level JSON.
Works with formats: instream, inbanner | { protocolVersion:'3.0' } | `object` | + +When the following params are used with instream or inbanner formats, they should be included in the `vastUrlParams` object. For other formats, they should be included directly in the `params` object: + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-------------------------|--------|----------| +| `soundButton` | optional | If enabled, the sound will be off by default and the user will be able to turn it on/off by clicking on a button. (disabled on iOS devices)
Default value: false | true | `boolean` | +| `defaultMute` | optional | If "soundButton=true" is set, controls if the video will start with the sound muted.
Default value: true | false | `boolean` | +| `timeline` | optional | Display a progress bar to the bottom of the ad unit.
Default value: false | true | `boolean` | +| `protocolVersion` | optional | Specify the VAST version that will be used for the vastVersion parameter value on AdsSetup request.
Default Value: 4.2 | 3 .0 | `float` | +| `onOver` | optional | Allows to enable the sound only when the mouse is over the ad container.
Works with formats: screen-roll, intext-roll, sliderad, floorad, expand-banner
Default value: false | true | `boolean` | +| `closeTimeout` | optional | The duration in milliseconds before displaying the close button.
Works with formats: screen-roll, intext-roll, sliderad, floorad
Default value: 5000 | 2000 | `integer` | +| `animated` | optional | Enable an animation on opening and on closing of the video.
Works with formats: intext-roll, sliderad
Default value: true | false | `boolean` | +| `animationSpeed` | optional | If the animated parameter is set to true, allows to choose the animation speed in milliseconds.
Works with formats: intext-roll, sliderad
Default value: 700 | 500 | `integer` | +| `contentId` | optional | Displays the ad inside the content-id dom element (dom id). Requires an 'auto', 'p' or 'article' param.
Works with format: intext-roll | "element-id" | `string` | +| `auto` | optional | If value is set to "v2", position the intext-roll automatically. If contentId is set, the auto positioning will find a position inside the 'contentId' dom element.
If contentId is not set, the auto positionaing will search the best position to display the ad based on the page semantic. It will select several possible position and show the intext-roll at the time one of them is made visible.
Works with format: intext-roll
Default value: null | "v2" | `string` | +| `article` | optional | Set the location of the ad just after the given article tag in the page (0 is for the first article tag). If content-id is set, the article index is relative to articles inside the 'content-id' dom element | "element-id"
Works with format: intext-roll | `string` | +| `p` | optional | Set the location of the ad just after the given paragraph tag in the page (0 is for the first p tag). If content-id is set, the p index is relative to paragraphs inside the 'content-id' dom element.
Works with format: intext-roll | "element-id" | `string` | +| `iframeMode` | optional | Indicate to intext-roll that it is served in a friendly hidden iframe. Can be one of the following:
* normal - place ad in friendly iframe
* dfp - place ad in iframe on dfp platform
Works with format: intext-roll | "normal" | `string` | +| `inRead` | optional | When true, will keep the ad slot window on the page when the ad is done.
Works with format: intext-roll
Default value: false | true | `boolean` | +| `lang` | optional | Text language. Can be one of: [fr,en,es,it,de,nl,pt]
Works with format: intext-roll
Default value: "fr" | "en" | `string` | +| `openingTime` | optional | The time in milliseconds to display the opening animation.
Works with format: intext-roll
Default value: 0 | 100 | `integer` | +| `pauseRatio` | optional | Specify the viewabilityratio where the ad is paused. This can be a float between 0 and 1, or "never" which means never paused. The default value will pause when the ad has less than 50% viewability.
Works with formats: intext-roll, expand-banner
Default value: 0.5 | 0.9 | `float` \| `string` | +| `closeAction` | optional | Define what to do for the banner after all ads complete. Can be one of:
* collapse - will set the target css display property to "none".
* hide - will leave the target element in place, empty.
Works with formats: intext-roll, expand-banner
Default value: “collapse” | "hide" | `string` | +| `domId` | optional | id of the dom element containing the text. If this targeted div is empty, be sure it has the needed width or a width of 0px will be used. Note that the script tag should be added in the page AFTER the targeted dom element so the target will be ready when the script runs.
Works with formats: intext-roll, expand-banner | "element-id" | `string` | +| `errorAction` | optional | Define what to do for the banner after an ad error. Can be one of:
* collapse - will set the target css display property to "none".
* hide - will leave the target element in place, empty.
Works with formats: intext-roll, expand-banner
Default value: “collapse” | "hide" | `string` | +| `stickToTop` | optional | Controls if the ad will stick to the top of the browser window. Can be one of the following:
* true - The ad will stick to the top of the browser window upon scroll.
* "bottom" - The ad will stick to the top and will be hidden again when reaching the bottom of the page.
* number - The ad will stick to the top for the given distance in pixels.
Works with formats: intext-roll, expand-banner | 300 | `boolean \| string \| number` | +| `blurDisplay` | optional | Allow to choose between too blur effects for the sides of the banner. Can be one of:
* big - will show the blured video only once in the background.
* duplicate - will show the blured video twice: once for each side.
Works with format: expand-banner
Default value: "big" | "duplicate" | `string` | +| `expandDirection` | optional | Allows to force the expansion direction. Can be one of the following:
* before - Expand to the left if the banner is vertical and to the top if the banner is horizontal.
* after - Expand to the right if the banner is vertical and to the bottom if the banner is horizontal.
* center - Expand to left and right if the banner is vertical. Expand to the top and bottom if the banner is horizontal.
* auto - Expand based on the space available on the page. Expand to the left and/or right if the banner is vertical. and expand to the top and bottom if the banner is horizontal, depending on the space available.
* none - Banner will not expand
Works with format: expand-banner
Default value: "auto" | "before" | `string` | +| `zIndex` | optional | Force the z-index value on the ad container. The default value is around 4100 (see IAB guidelines). Use this parameter if it doesn't fit your needs.
Works with format: expand-banner
Default value: ~4100 | 1000 | `integer` | +| `hAlign` | optional | Horizontal side where to display the video. Can be one of:
* left - horizontal align to the left of the page.
* middle - horizontal align to the middle of the page.
* right - horizontal align to the right of the page.
Works with format: sliderad
Default value: "right" | "left" | `string` | +| `hSpacing` | optional | Set a horizontal spacing between the hAlign side and the video.
Works with format: sliderad
Default value: 10 | 20 | `integer` | +| `vAlign` | optional | Vertical side where to display the video. Can be one of:
* top - vertical align to the top of the page.
* middle - vertical align to the middle of the page.
* bottom - vertical align to the bottom of the page.
Works with format: sliderad
Default value: "bottom" | "top" | `string` | +| `vSpacing` | optional | Set a vertical spacing between the vAlign side and the video.
Works with format: sliderad
Default value: 10 | 20 | `integer` | +| `mod` | optional | Ad trigger mode. Can be one of:
* asap - play the ad asap
* click - play the ad when the user clicks a link
* scroll - play the ad when the user scrolls
Works with format: screen-roll
Default value: "asap" | "click" | `string` | +| `opacity` | optional | Define the opacity of the background. This is a number between 0 (completely transparent) and 1 (totally black).
Works with format: screen-roll
Default value: 0.4 | .5 | `float` | +| `smartPlay` | optional | Enable to use autoPlay on mobile devices.
Works with format: screen-roll
Default value: false | true | `boolean` | +| `bannerHeight` | optional | The height in pixel of the bottom banner. The video ad takes this height when its not expanded.
Works with format: floorad
Default value: 250 | 500 | `integer` | From 4336639ef47d99d263d77951d93414bc8b81b625 Mon Sep 17 00:00:00 2001 From: Gena Date: Thu, 1 Jun 2023 23:34:15 +0300 Subject: [PATCH 324/763] SSP Copper6 doc (#4587) * SSP Copper6 doc * add pbs * Update copper6.md neither copper6 nor adtelligent are listed as Prebid.org members. Flipping that flag to false. --------- Co-authored-by: bretg --- dev-docs/bidders/copper6.md | 105 ++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 dev-docs/bidders/copper6.md diff --git a/dev-docs/bidders/copper6.md b/dev-docs/bidders/copper6.md new file mode 100644 index 0000000000..1b03e50189 --- /dev/null +++ b/dev-docs/bidders/copper6.md @@ -0,0 +1,105 @@ +--- +layout: bidder +title: SSP Copper6 +description: SSP Copper6 Bidder Adapter +biddercode: copper6 +aliasCode: adtelligent +media_types: video,banner +gdpr_supported: true +userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId +schain_supported: true +coppa_supported: true +usp_supported: true +safeframes_ok: true +prebid_member: false +pbjs: true +pbs: true +deals_supported: false +sidebarType: 1 +--- + +### Bid params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------|----------|---------------------------------|----------|-----------| +| `aid` | required | The source ID from Copper6 Media. | `12412` | `integer` | + +### Description +Copper6 Media header bidding adapter connects with Copper6 Media demand sources in order to fetch bids. +This adapter provides a solution for accessing Video demand and display demand. + + +### Test Parameters +``` + var adUnits = [ + + // Video instream adUnit + { + code: 'test-div', + mediaTypes: { + video: { + context: 'instream', + playerSize: [640, 480] + } + }, + bids: [{ + bidder: 'copper6', + params: { + aid: 472386 + } + }] + }, + + // Video outstream adUnit + { + code: 'test-div', + mediaTypes: { + video: { + context: 'outstream', + playerSize: [640, 480] + } + }, + bids: [{ + bidder: 'copper6', + params: { + aid: 472386 + } + }] + }, + + // Video ADPOD adUnit + { + code: 'test-div', + sizes: [[640, 480]], + mediaTypes: { + video: { + context: 'adpod', + playerSize: [640, 480] + } + }, + bids: [{ + bidder: 'copper6', + params: { + aid: 472386 + } + }] + }, + + // Banner adUnit + { + code: 'test-div', + mediaTypes:{ + banner:{ + sizes: [[300, 250]] + } + } + bids: [{ + bidder: 'copper6', + params: { + aid: 529814 + } + }] + } + ]; +``` From 26ad317791742ad8245c19e40e677117306737e9 Mon Sep 17 00:00:00 2001 From: Sir-Will Date: Fri, 2 Jun 2023 11:56:33 +0200 Subject: [PATCH 325/763] Auto select modules with URL param (#4542) * Auto select modules with URL param * Update download URL on modules change * Fix prepicks being set to early * setting ID to biddercode * Use element id as module code * Fix module code of "ID Import Library" --------- Co-authored-by: bretg --- dev-docs/modules/idLibrary.md | 2 +- download.md | 79 ++++++++++++++++++++++++++++++++--- 2 files changed, 74 insertions(+), 7 deletions(-) diff --git a/dev-docs/modules/idLibrary.md b/dev-docs/modules/idLibrary.md index 5874353f8e..1abb7d4548 100644 --- a/dev-docs/modules/idLibrary.md +++ b/dev-docs/modules/idLibrary.md @@ -3,7 +3,7 @@ layout: page_v2 page_type: module title: ID Import Library description: Retrieve user ids deployed on your site, and return them to a configurable endpoint for ID Graphing. -module_code : currency +module_code : idImportLibrary display_name : ID Import Library enable_download : true sidebarType : 1 diff --git a/download.md b/download.md index 2728e6f03d..084b55b3fd 100644 --- a/download.md +++ b/download.md @@ -35,6 +35,8 @@ a.tip:hover span { diff --git a/adops/adops-general-sbs.md b/adops/adops-general-sbs.md index 80ed48e50b..47003d7f2c 100644 --- a/adops/adops-general-sbs.md +++ b/adops/adops-general-sbs.md @@ -17,10 +17,10 @@ sidebarType: 3 Prebid.org provides step-by-step instructions for manually configuring Prebid in the following ad servers: -- [Google Ad Manager](/adops/step-by-step.html) -- [Xandr Monetize Ad Server](/adops/setting-up-prebid-with-the-appnexus-ad-server.html) -- [Freewheel](/adops/setting-up-prebid-video-in-freewheel.html) -- [Smart Ad Server](/adops/setting-up-prebidjs-with-Smart-Ad-Server.html) +* [Google Ad Manager](/adops/step-by-step.html) +* [Xandr Monetize Ad Server](/adops/setting-up-prebid-with-the-appnexus-ad-server.html) +* [Freewheel](/adops/setting-up-prebid-video-in-freewheel.html) +* [Smart Ad Server](/adops/setting-up-prebidjs-with-Smart-Ad-Server.html) If you’re using a different ad server, you can use the general instructions provided here and adapt them to your ad server. @@ -40,8 +40,8 @@ For the purposes of this discussion, we’re going to refer to the elements in y Ad servers typically work in a hierarchical structure, with advertisers containing orders, which in turn contain line items. You need to have your advertisers and orders set up before you can start creating line items and creatives. The advertisers you create for Prebid will typically depend on whether you’re sending all bids or only the top price bid to the ad server. -- Send Top Bid: Create one general Prebid advertiser -- Send All Bids: Create one Prebid advertiser per bidder where orders are organized by bidder, with one or more orders containing line items targeted towards a single bidder. +* Send Top Bid: Create one general Prebid advertiser +* Send All Bids: Create one Prebid advertiser per bidder where orders are organized by bidder, with one or more orders containing line items targeted towards a single bidder. ### Create Native Template @@ -58,12 +58,12 @@ See [Key Values](/adops/key-values.html) for information on the keys you’ll ne The exact order of the following steps will differ depending on your ad server. ### General Settings - + 1. Enter a name for your line item. Suggested format: Prebid – format - bidder – price bucket. For example, `Prebid – banner - BidderA – 1.50`. 2. Set the priority of your line item to whatever you think is appropriate. Typically Prebid line items are prioritized below direct-sold but above house/remnant. 3. Enter the sizes of your creatives: -- Banner/Outstream/AMP/Video: Select the sizes of all ad slots included in the Prebid process. -- Native: Select a native template. + * Banner/Outstream/AMP/Video: Select the sizes of all ad slots included in the Prebid process. + * Native: Select a native template. 4. Long-Form (OTT) Video only: If you’re using competitive exclusions, fill in the associated field with the appropriate value. You’ll need to include this value when you set your targeting for the `hb_pb_cat_dur` key. See [Targeting](#targeting) below for more information. 5. Set your line item to start immediately, with no end date. @@ -72,16 +72,16 @@ If you’re using competitive exclusions, fill in the associated field with the ### Targeting -You’ll need to apply custom targeting specific to the Prebid values that are passed in with the ad request. - +You’ll need to apply custom targeting specific to the Prebid values that are passed in with the ad request. + {: .alert.alert-info :} These instructions assume you’re sending all bids to the ad server (the default). If you’re sending only the top price bid, your targeting keys will not include the bidder code. For example, rather than targeting price buckets with `hb_pb_BidderA`, you’ll target `hb_pb`. See [Send All Bids vs Top Price](/adops/send-all-vs-top-price.html) for more information. Target the price bucket key: `hb_pb_BIDDERCODE` (where BIDDERCODE is the actual code for your bidder, such as BidderA) with the value of the price bucket you entered as the price for this line item. The following additional keys must be added for the corresponding formats: - -**Banner/Outstream/Native:** + +**Banner/Outstream/Native:** You can use the same line item for banner, outstream, and/or native creatives. If your ad slot could be filled by two or more of these formats, you should include the hb_format_BIDDERCODE key with values specifying all expected formats. @@ -90,16 +90,16 @@ If you combine native with another format in a single line item, you’ll need t **In-Player and Outstream Video:** -Both in-player (instream) and outstream video ads receive the `hb_format_BIDDERCODE=video` key-value pair, so targeting on that key alone is not enough to choose the correct line items. If you're running both in-player and outstream video ads, they will most likely be separate line items, so you will need to target outstream line items to a “display” inventory type, or perhaps separate them by adunits. +Both in-player (instream) and outstream video ads receive the `hb_format_BIDDERCODE=video` key-value pair, so targeting on that key alone is not enough to choose the correct line items. If you're running both in-player and outstream video ads, they will most likely be separate line items, so you will need to target outstream line items to a “display” inventory type, or perhaps separate them by adunits. **Long-Form (OTT) Video:** - + For long-form video the custom key `hb_pb_cat_dur_BIDDERCODE` is required. The value of this key breaks down like this: -- _pb represents the price bucket. This is the currency amount entered as the line item price. -- _cat indicates the competitive exclusion industry code. (For engineering information, refer to the [Category Translation module](/dev-docs/modules/categoryTranslation.html)). This is the value entered as the competitive exclusion. If you are not using competitive exclusion, you can omit this portion of the value. -- _dur is the length of the video in seconds. This is the value you’ll enter as the maximum duration of the video. - +* _pb represents the price bucket. This is the currency amount entered as the line item price. +* _cat indicates the competitive exclusion industry code. (For engineering information, refer to the [Category Translation module](/dev-docs/modules/categoryTranslation.html)). This is the value entered as the competitive exclusion. If you are not using competitive exclusion, you can omit this portion of the value. +* _dur is the length of the video in seconds. This is the value you’ll enter as the maximum duration of the video. + For example, for a line item with a $10.00 CPM as the price, a competitive exclusion of “news”, and 30s entered for the video duration, you would enter the following in the custom key-value field: `hb_pb_cat_dur_BIDDERCODE = 10.00_news_30s`. If you’re not using competitive exclusion, you can have a value such as this: `hb_pb_cat_dur_BIDDERCODE = 10.00_30s`. {: .alert.alert-info :} @@ -118,19 +118,19 @@ You’ve now added all fields required for targeting Prebid line items. You can ## Create Your Creatives -The process of creating your creatives will differ based on the type of creative. +The process of creating your creatives will differ based on the type of creative. In general, you can interpret the instructions for setting up creatives in Google Ad Manager with some modifications; specifically, to the MACROs used in the ad tag. (See below for details.) Refer to the following for GAM documentation: -- [GAM Creative Setup: Banner/Outstream/AMP](/adops/gam-creative-banner-sbs.html) -- [GAM Creative Setup: Native](/adops/gam-native.html) -- [GAM Creative Setup: Video](/adops/setting-up-prebid-video-in-dfp.html) +* [GAM Creative Setup: Banner/Outstream/AMP](/adops/gam-creative-banner-sbs.html) +* [GAM Creative Setup: Native](/adops/gam-native.html) +* [GAM Creative Setup: Video](/adops/setting-up-prebid-video-in-dfp.html) We recommend using the [Prebid Universal Creative](/overview/prebid-universal-creative.html) and targeting an ad unit size of 1x1. If you’re working with banner or outstream creatives, the HTML you’ll enter in the creatives will be similar to the following (utilizing whatever macro format is supported by your ad server): -``` +```html ``` {: .alert.alert-warning :} -- Replace `%%MACRO%%` with the appropriate macro for your ad server. (Refer to your ad server’s documentation or consult with a representative for specific details regarding the proper macros and how to use them.) -- Replace BIDDERCODE with the appropriate code for the bidder your line item is targeting. For example, if you’re targeting BidderA, the macro variable for adId might look like `ucTagData.adId = "%%PATTERN:hb_adid_BidderA%%";`. -- If you're hosting your own Prebid Universal Creative, make sure it's version 1.15 or later, or replace `%%PATTERN:hb_format%%.js` with `creative.js`. + +* Replace `%%MACRO%%` with the appropriate macro for your ad server. (Refer to your ad server’s documentation or consult with a representative for specific details regarding the proper macros and how to use them.) +* Replace BIDDERCODE with the appropriate code for the bidder your line item is targeting. For example, if you’re targeting BidderA, the macro variable for adId might look like `ucTagData.adId = "%%PATTERN:hb_adid_BidderA%%";`. +* If you're hosting your own Prebid Universal Creative, make sure it's version 1.15 or later, or replace `%%PATTERN:hb_format%%.js` with `creative.js`. The example above uses the jsdelvr CDN as the domain from which the creative will serve. However, you may obtain the creative from a managed service or host it yourself. You might need to edit the creative and make adjustments to your creative settings depending on the CDN you're using. @@ -169,6 +170,6 @@ The final steps in configuring Prebid on your ad server are to do the following: ## Further Reading -- [Ad Ops Planning Guide](/adops/adops-planning-guide.html) -- [Ad Ops and Prebid Overview](/adops/before-you-start.html) - +* [Ad Ops Planning Guide](/adops/adops-planning-guide.html) +* [Ad Ops and Prebid Overview](/adops/before-you-start.html) + \ No newline at end of file diff --git a/adops/gam-creative-banner-sbs.md b/adops/gam-creative-banner-sbs.md index 796234ee8a..a2ee3cef86 100644 --- a/adops/gam-creative-banner-sbs.md +++ b/adops/gam-creative-banner-sbs.md @@ -15,7 +15,6 @@ This page walks you through the steps required to create banner and outstream cr {: .alert.alert-success :} For complete instructions on setting up Prebid line items in Google Ad Manager, see [Google Ad Manager with Prebid Step by Step](/adops/step-by-step.html). - 1. In GAM, select **Delivery** > **Creatives**. 2. Under the **Display creatives** tab, click **New Creative**. 3. Select your advertiser, then click **Third party**. @@ -42,28 +41,28 @@ These instructions assume you're using the Prebid Universal Creative (PUC) after {: .alert.alert-warning :} Be sure to replace BIDDERCODE with the appropriate bidder. For example, if the bidder code is `PBbidder`, the `adid` would be `%%PATTERN:hb_adid_PBbidder%%`. -``` - - +```html + + ``` {: .alert.alert-danger :} @@ -73,7 +72,7 @@ Warning: Be sure none of the attribute names are longer than 20 characters. See In top-price mode, you can make use of the GAM `TARGETINGMAP` feature instead of listing out each attribute. -``` +```html -{% endhighlight %} +``` {: .alert.alert-warning :} **Creative Expiration** @@ -107,7 +106,6 @@ Note that creatives are automatically marked as inactive by the Xandr systems af **SafeFrame** If you want your creative to serve into a SafeFrame, this will need to be enabled on the site-side of the Prebid.js implementation rather than as a setting in the ad server. A developer can learn how to enable this setting for the publisher by referencing [Using Prebid.js with Xandr Publisher Ad Server]({{site.github.url}}/dev-docs/examples/use-prebid-with-appnexus-ad-server.html). Additionally if the Xandr ad server tags are configured to use SafeFrames, you **will** need to use the above creative template to properly render the creative. Earlier versions of the Prebid.js creative template may not be fully SafeFrame compliant (if they are still in-use from older setups), so it is recommended to switch to the above template in this scenario. - ## Step 3. Set up Line Items You'll need to create one line item for every price bucket you intend to serve. @@ -116,17 +114,17 @@ For example, if you want to have $0.10 price granularity, you'll need 201 line i For each line item, follow the line item setup instructions in [Create a Line Item](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/create-a-standard-line-item.html), with the following settings: -- Set the **Revenue Type** to *CPM*. +* Set the **Revenue Type** to *CPM*. -- Set the **Revenue Value** to one of the price bucket key-values from Step 1, e.g., \$0.2. +* Set the **Revenue Value** to one of the price bucket key-values from Step 1, e.g., \$0.2. -- Under **Associated Creatives**, choose to manage creatives at the line item level. +* Under **Associated Creatives**, choose to manage creatives at the line item level. -- Associate as many creative sizes with the line item as you need. Set the **Creative Rotation** to *Even*. +* Associate as many creative sizes with the line item as you need. Set the **Creative Rotation** to *Even*. -- In your line item's targeting settings, use the key-value that matches the line item's price bucket, e.g. (you set these up in Step 1). +* In your line item's targeting settings, use the key-value that matches the line item's price bucket, e.g. (you set these up in Step 1). -- Still in the targeting settings, target the custom category `prebid_enabled`. This will allow you to turn targeting on and off for a placement (or an entire placement group) by adding it to the custom category, which you'll do in one of the later steps. This is useful for troubleshooting. +* Still in the targeting settings, target the custom category `prebid_enabled`. This will allow you to turn targeting on and off for a placement (or an entire placement group) by adding it to the custom category, which you'll do in one of the later steps. This is useful for troubleshooting. For more information about targeting custom content categories, see [Content Category Targeting](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/content-category-targeting.html). @@ -148,7 +146,7 @@ It will also make it easy to turn the targeting on and off for a given placement ## Related Topics -- [Ad Ops and Prebid](/adops/before-you-start.html) -- [Ad Ops Planning Guide](/adops/adops-planning-guide.html) -- [Getting Started with Prebid.js for Developers](/dev-docs/getting-started.html) -- [Using Prebid.js with Xandr Publisher Ad Server](/dev-docs/examples/use-prebid-with-appnexus-ad-server.html) (Developer example) +* [Ad Ops and Prebid](/adops/before-you-start.html) +* [Ad Ops Planning Guide](/adops/adops-planning-guide.html) +* [Getting Started with Prebid.js for Developers](/dev-docs/getting-started.html) +* [Using Prebid.js with Xandr Publisher Ad Server](/dev-docs/examples/use-prebid-with-appnexus-ad-server.html) (Developer example) diff --git a/assets/css/prism.css b/assets/css/prism.css index 7375d36283..010c4405ba 100644 --- a/assets/css/prism.css +++ b/assets/css/prism.css @@ -8,79 +8,79 @@ https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javasc code[class*="language-"], pre[class*="language-"] { - color: black; - background: none; - text-shadow: 0 1px white; - font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; - font-size: 1em; - text-align: left; - white-space: pre; - word-spacing: normal; - word-break: normal; - word-wrap: normal; - line-height: 1.5; - - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; } pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { - text-shadow: none; - background: #b3d4fc; + text-shadow: none; + background: #b3d4fc; } pre[class*="language-"]::selection, pre[class*="language-"] ::selection, code[class*="language-"]::selection, code[class*="language-"] ::selection { - text-shadow: none; - background: #b3d4fc; + text-shadow: none; + background: #b3d4fc; } @media print { - code[class*="language-"], - pre[class*="language-"] { - text-shadow: none; - } + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } } /* Code blocks */ pre[class*="language-"] { - padding: 1em; - margin: .5em 0; - overflow: auto; + padding: 1em; + margin: .5em 0; + overflow: auto; } :not(pre) > code[class*="language-"], pre[class*="language-"] { - background: #f5f2f0; + background: #f5f2f0; } /* Inline code */ :not(pre) > code[class*="language-"] { - padding: .1em; - border-radius: .3em; - white-space: normal; + padding: .1em; + border-radius: .3em; + white-space: normal; } .token.comment, .token.prolog, .token.doctype, .token.cdata { - color: slategray; + color: slategray; } .token.punctuation { - color: #999; + color: #999; } .namespace { - opacity: .7; + opacity: .7; } .token.property, @@ -90,7 +90,7 @@ pre[class*="language-"] { .token.constant, .token.symbol, .token.deleted { - color: #905; + color: #905; } .token.selector, @@ -99,7 +99,7 @@ pre[class*="language-"] { .token.char, .token.builtin, .token.inserted { - color: #690; + color: #690; } .token.operator, @@ -107,36 +107,36 @@ pre[class*="language-"] { .token.url, .language-css .token.string, .style .token.string { - color: #9a6e3a; - background: hsla(0, 0%, 100%, .5); + color: #9a6e3a; + background: hsla(0, 0%, 100%, .5); } .token.atrule, .token.attr-value, .token.keyword { - color: #07a; + color: #07a; } .token.function, .token.class-name { - color: #DD4A68; + color: #DD4A68; } .token.regex, .token.important, .token.variable { - color: #e90; + color: #e90; } .token.important, .token.bold { - font-weight: bold; + font-weight: bold; } .token.italic { - font-style: italic; + font-style: italic; } .token.entity { - cursor: help; + cursor: help; } diff --git a/assets/css/style.css b/assets/css/style.css index 0af6a31a4c..7f63345730 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -37,12 +37,12 @@ h4 { /* Paragraph & Typographic */ p { - line-height: 28px; - margin-bottom: 25px; - font-family: 'Lato', sans-serif; - color: #222222; - font-size: 18px; - font-weight: 400;} + line-height: 28px; + margin-bottom: 25px; + font-family: 'Lato', sans-serif; + color: #222222; + font-size: 18px; + font-weight: 400;} .centered { text-align: center; @@ -130,228 +130,228 @@ hr { } .wrapper { - display: flex; - width: 100%; - align-items: stretch; + display: flex; + width: 100%; + align-items: stretch; } /* alerts */ .pb-alert { - padding:10px; - width:65wv; - margin: 10px 0; + padding:10px; + width:65wv; + margin: 10px 0; } .pb-alert-note { - background-color: #deecf7; - color: #4b6f8d; - border: 1px solid #4b6f8d; + background-color: #deecf7; + color: #4b6f8d; + border: 1px solid #4b6f8d; } .pb-alert-warning { - background-color: #f3ddde; - color: #a94443; - border: 1px solid #a94443; + background-color: #f3ddde; + color: #a94443; + border: 1px solid #a94443; } .pb-alert-important { - background-color: #ede5ba; - color: #85720f; - border: 1px solid #85720f; + background-color: #ede5ba; + color: #85720f; + border: 1px solid #85720f; } .pb-alert-tip { - background-color: #e3efd8; - color: #527542; - border: 1px solid #527542; + background-color: #e3efd8; + color: #527542; + border: 1px solid #527542; } /********************** - API + API *********************/ .pb-api-on { - display: block; + display: block; } .pb-api-off { - display: none; + display: none; } .pb-api-list ul { - list-style-type: none; - margin: 0; - padding: 0; - overflow: hidden; + list-style-type: none; + margin: 0; + padding: 0; + overflow: hidden; } .pb-api-list-item li { - border-bottom: 1px solid #cccccc; - border-bottom-width: 75%; - background-color:transparent; - margin-bottom: 10px; + border-bottom: 1px solid #cccccc; + border-bottom-width: 75%; + background-color:transparent; + margin-bottom: 10px; } .pb-api-list-item-sans-border li { - background-color:transparent; - margin-bottom: 10px; + background-color:transparent; + margin-bottom: 10px; } .pb-api-categories { - margin-top:15px; + margin-top:15px; } .pb-api-categories li { - float: left; - margin-right: 15px; - background-color: #eeeeee; + float: left; + margin-right: 15px; + background-color: #eeeeee; } .pb-api-categories a { - color: #333333; - font-family: 'Verdana', sans-serif; - font-size: 17px; - font-weight: 400; - padding: 4px 10px; + color: #333333; + font-family: 'Verdana', sans-serif; + font-size: 17px; + font-weight: 400; + padding: 4px 10px; } .pb-api-categories a:hover { - color: #3498db; + color: #3498db; } .pb-api-search { - float:right; - margin-right: 30px; + float:right; + margin-right: 30px; } .pb-api-title { - color: #EA9622; - font-family: 'Verdana', sans-serif; - font-size: 22px; - font-weight: 400; - margin-bottom: 10px; - margin-top: 15px; + color: #EA9622; + font-family: 'Verdana', sans-serif; + font-size: 22px; + font-weight: 400; + margin-bottom: 10px; + margin-top: 15px; } .pb-api-code { - margin: 20px 0 20px 20px; + margin: 20px 0 20px 20px; } .pb-api-code-wrapper { - margin-left: 20px; + margin-left: 20px; } .pb-api-code-display { - margin: 20px 0 0 20px; - width: 70%; + margin: 20px 0 0 20px; + width: 70%; } .pb-api-code-block { - width: 70%; - backgeound-color: #333333; + width: 70%; + backgeound-color: #333333; } .pb-api-block { - margin: 20px 0 20px 20px; + margin: 20px 0 20px 20px; } .pb-api-doc-title { - color: #EA9622; - font-family: 'Verdana', sans-serif; - font-size: 20px; - font-weight: 400; - margin-bottom: 10px; + color: #EA9622; + font-family: 'Verdana', sans-serif; + font-size: 20px; + font-weight: 400; + margin-bottom: 10px; } .pb-api-doc-description { - color: #222222; - font-size: 16px; - font-family: 'Roboto', sans-serif; - font-weight: 300; - margin-bottom:10px; + color: #222222; + font-size: 16px; + font-family: 'Roboto', sans-serif; + font-weight: 300; + margin-bottom:10px; } .pb-api-doc-description ul, ol { - font-size: 15px; + font-size: 15px; } .pb-api-code-title-bar { - background-color: #E4E8ED; - text-align: left; - border-top-left-radius: 5px; - border-top-right-radius: 5px; - padding-left: 5px; - margin-left: 20px; - margin-top: 10px; + background-color: #E4E8ED; + text-align: left; + border-top-left-radius: 5px; + border-top-right-radius: 5px; + padding-left: 5px; + margin-left: 20px; + margin-top: 10px; } .pb-api-doc-sub-title { - color: #EA9622; - font-family: 'Verdana', sans-serif; - font-size: 17px; - font-weight: 400; - margin: 15px 0; + color: #EA9622; + font-family: 'Verdana', sans-serif; + font-size: 17px; + font-weight: 400; + margin: 15px 0; } .pb-api-doc-section-title { - font-size: 17px; - font-weight: 400; - color: #333333; - margin:15px 0; + font-size: 17px; + font-weight: 400; + color: #333333; + margin:15px 0; } .pb-api-list-item-description { - margin-top 5px; - font-size:17px; + margin-top 5px; + font-size:17px; } .pb-api-table { - margin-top: 20px; - width:70%; + margin-top: 20px; + width:70%; } .pb-api-table-title { - color: #333333; - font-family: 'Verdana', sans-serif; - font-size: 17px; - font-weight: 400; - text-align: center; - background-color: #aaaaaa; - border-top-left-radius: 5px; - border-top-right-radius: 5px; + color: #333333; + font-family: 'Verdana', sans-serif; + font-size: 17px; + font-weight: 400; + text-align: center; + background-color: #aaaaaa; + border-top-left-radius: 5px; + border-top-right-radius: 5px; } .pb-api-table-text { - color: #222222; - font-size: 16px; - font-family: 'Roboto', sans-serif; - font-weight: 300; + color: #222222; + font-size: 16px; + font-family: 'Roboto', sans-serif; + font-weight: 300; } .pb-api-spacing { - margin-top: 25px; + margin-top: 25px; } .pb-api-alert { - font-size:15px; + font-size:15px; } .pb-api-button { - width: 120px; - height: 30px; - background-color: #cccccc; - border: 1px solid #333333; - color: #33333; - font-size: 15px; - font-family: 'Roboto', sans-serif; - font-weight: 400; + width: 120px; + height: 30px; + background-color: #cccccc; + border: 1px solid #333333; + color: #33333; + font-size: 15px; + font-family: 'Roboto', sans-serif; + font-weight: 400; } @@ -393,17 +393,17 @@ hr { /* API */ .categoryBox { - background-color: #f3ddde; - color: #a94443; - border: 1px solid #a94443; + background-color: #f3ddde; + color: #a94443; + border: 1px solid #a94443; } /* NavBar */ .navbar { - z-index:100 - font-family: 'Roboto', sans-serif; + z-index:100 + font-family: 'Roboto', sans-serif; } .navbar-default { @@ -428,63 +428,63 @@ hr { } .navbar-brand img { - max-width: 200px; - max-height: 35px; + max-width: 200px; + max-height: 35px; } .navbar-brand{ - float:left; - height:50px; - padding:10px 15px; - font-size:18px; - line-height:20px + float:left; + height:50px; + padding:10px 15px; + font-size:18px; + line-height:20px } .pb-mobile-nav { - display: none; + display: none; } .pb-mobile-dropdown-header { - font-size: 13px; - font-weight: 500; - color: #3498db; + font-size: 13px; + font-weight: 500; + color: #3498db; } .pb-mobile-dropdown-item { - font-size: 13px; - font-weight: 400; + font-size: 13px; + font-weight: 400; } .navbar-default .navbar-nav > li > a.pb-mobile-dropdown { - font-size:13px; - margin:0; - padding-left:5px; - padding-top:2px; - padding-bottom:2px; + font-size:13px; + margin:0; + padding-left:5px; + padding-top:2px; + padding-bottom:2px; } .pb_menu_btn { - display: none; - float:left; - margin-right: 5px; - margin-top: 10px; + display: none; + float:left; + margin-right: 5px; + margin-top: 10px; } .pb-video-list-title { - margin-top: 15px; - font-weight: 700; + margin-top: 15px; + font-weight: 700; } .pb-video-list { - margin-top: 5px; - padding-top: 0; - list-style-type:none; - font-weight:400; + margin-top: 5px; + padding-top: 0; + list-style-type:none; + font-weight:400; } .pb-video-link { - font-weight: 400; + font-weight: 400; } /* DropDown*/ @@ -495,11 +495,11 @@ hr { } .dropdown-toggle { - font-weight: 400; + font-weight: 400; } .dropdown-menu>li>a { - font-weight: 400; + font-weight: 400; } .dropdown-submenu { @@ -534,23 +534,23 @@ hr { /* 404 error */ .error404 { - width:100%; - height: 100%; - text-align: center; - margin-top: 100px; + width:100%; + height: 100%; + text-align: center; + margin-top: 100px; } .error404 h1 { - color: #FF0000; - font-size: 60px; - font-weight: bold; + color: #FF0000; + font-size: 60px; + font-weight: bold; } /************** - Sidebar + Sidebar **************/ /* side bar */ @@ -570,62 +570,62 @@ hr { .sidebar { - min-width: 300px; - background-color: #f6f8fa; - padding-left: 50px; - padding-top: 20px; - padding-bottom: 10px; - padding-right:30px; - margin-left: 0px; - font-family: 'Verdana', sans-serif; + min-width: 300px; + background-color: #f6f8fa; + padding-left: 50px; + padding-top: 20px; + padding-bottom: 10px; + padding-right:30px; + margin-left: 0px; + font-family: 'Verdana', sans-serif; } .sidebar ul { - color: #333333; + color: #333333; } .pb-section-title { - display: inline-block; - font-size:17px; - padding-bottom: 10px; - margin-top:5px; - margin-bottom: 5px; - color: #3498db; + display: inline-block; + font-size:17px; + padding-bottom: 10px; + margin-top:5px; + margin-bottom: 5px; + color: #3498db; } .pb-section-subtitle { - font-size:16px; - padding-bottom: 10px; - margin-top:5px; - margin-bottom: 5px; + font-size:16px; + padding-bottom: 10px; + margin-top:5px; + margin-bottom: 5px; } .pb-nav-item { - display:inline-block; - font-size:14px; - padding-left: 5px; + display:inline-block; + font-size:14px; + padding-left: 5px; } .pb-first-item { - padding-top: 10px; + padding-top: 10px; } .pb-last-item { - padding-bottom: 10px; + padding-bottom: 10px; } .list-group-item-header { - font-weight: 400; - font-size: 20px; + font-weight: 400; + font-size: 20px; } .list-group-item { - font-weight: 400; - margin:0; - padding: 3px 0 3px 5px; - border-width:0; - font-size: 16px; - background-color: transparent; + font-weight: 400; + margin:0; + padding: 3px 0 3px 5px; + border-width:0; + font-size: 16px; + background-color: transparent; } @@ -650,65 +650,65 @@ pre { /************* Home Page ************/ .pb-homepage { - position: relative; - margin-top:70px; - width:100%; - height: 90%; + position: relative; + margin-top:70px; + width:100%; + height: 90%; } .pb-homepage-container { - text-align: center; + text-align: center; } .pb-message-box { - display: inline-block; - width: 70%; - border: 1px solid gray; - border-radius: 50px; - font-family: 'Roboto', sans-serif; - font-size: 16px; - padding: 4px; + display: inline-block; + width: 70%; + border: 1px solid gray; + border-radius: 50px; + font-family: 'Roboto', sans-serif; + font-size: 16px; + padding: 4px; } .pb-message-box a:link { - color: #dd9e21; + color: #dd9e21; } .pb-message-box a:hover { - color: #855a09; + color: #855a09; } .pb-message-box a:visited { - color: #1689db; + color: #1689db; } .pb-align-left { - text-align: start; + text-align: start; } .pb-align-right { - text-align: right; + text-align: right; } .pb-margin-top { - margin-top:20px; + margin-top:20px; } .pb-outline { - border: 1px dashed purple; + border: 1px dashed purple; } .pb-rule { - padding-top: 10px; + padding-top: 10px; } .pb-link-title { - font-family: 'Roboto', sans-serif; - font-weight: 700; - padding-top: 5px; - padding-bottom: 10px; - border-bottom-left-radius: 20px; - border-bottom-right-radius: 20px; + font-family: 'Roboto', sans-serif; + font-weight: 700; + padding-top: 5px; + padding-bottom: 10px; + border-bottom-left-radius: 20px; + border-bottom-right-radius: 20px; } @@ -717,295 +717,295 @@ pre { /**********Container****************/ .pb-container { - width:75%; - margin-left:auto; - margin-right:auto; + width:75%; + margin-left:auto; + margin-right:auto; } .pb-outer { - width:100%; - padding-top:25%; - position:relative + width:100%; + padding-top:25%; + position:relative } .pb-inner { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; } /*************Hover Effect***************/ .pb-home-links { - width: 75%; - font-family: 'Verdana', sans-serif; - margin-left:auto; - margin-right:auto; + width: 75%; + font-family: 'Verdana', sans-serif; + margin-left:auto; + margin-right:auto; } .pb-home-links-panel { - float:left; - margin-left:auto; - margin-right: auto; - width: 33%; - height: 100%; - text-align: center; + float:left; + margin-left:auto; + margin-right: auto; + width: 33%; + height: 100%; + text-align: center; } .pb-home-links-panel img { - display: inline-block; - width: 60%; - height: 60%; + display: inline-block; + width: 60%; + height: 60%; } .pb-home-links-outer-panel { - float:left; - margin-top:40px; - margin-left:auto; - margin-right: auto; - width: 33%; - height: 100%; - text-align: center; + float:left; + margin-top:40px; + margin-left:auto; + margin-right: auto; + width: 33%; + height: 100%; + text-align: center; } .pb-home-links-outer-panel img { - display: inline-block; - width: 50%; - height: 50%; + display: inline-block; + width: 50%; + height: 50%; } .pb-home-links-panel p { - margin-top:0px; + margin-top:0px; } .pb-panel-title { - display: block; - font-size:35px; - color: #ffffff; - margin-top: 30px; + display: block; + font-size:35px; + color: #ffffff; + margin-top: 30px; } .pb-center-title { - font-size:35px; - color: #ffffff; - margin-top: 20px; + font-size:35px; + color: #ffffff; + margin-top: 20px; } .pb-home-link-container:hover .pb-home-link-visible { - display: none; + display: none; } .pb-home-link-container:hover .pb-home-link-hidden { - display: block; + display: block; } .pb-home-link-hidden { - display:none; + display:none; } .pb-lg-homelink { - width: 40%; - height: 40%; + width: 40%; + height: 40%; } .pb-md-honelink { - width:30%; - height:3 0%; + width:30%; + height:3 0%; } /**********Message****************/ .pb-message-container { - margin-top: 140px; - width:75%; - margin-left:auto; - margin-right:auto; - text-align: center; + margin-top: 140px; + width:75%; + margin-left:auto; + margin-right:auto; + text-align: center; } .pb-message { - display: inline-block; - margin-left: auto; - margin-right: auto; - width: 100%; - background-color: white; - opacity: .8; - text-align: center; - padding: 5px; + display: inline-block; + margin-left: auto; + margin-right: auto; + width: 100%; + background-color: white; + opacity: .8; + text-align: center; + padding: 5px; } .pb--empty-message { - display: inline-block; - margin-left: auto; - margin-right: auto; - width: 100%; - opacity: .8; - text-align: center; - padding: 5px; + display: inline-block; + margin-left: auto; + margin-right: auto; + width: 100%; + opacity: .8; + text-align: center; + padding: 5px; } .pb-message > h3 { - color: #333333; - font-size:1.7vw; - font-family: 'Roboto', sans-serif; - margin-right: auto; - margin-left: auto; + color: #333333; + font-size:1.7vw; + font-family: 'Roboto', sans-serif; + margin-right: auto; + margin-left: auto; } /*===========Benefits===================*/ .pb_benefits { - background-color: #ffffff; - width: 80%; - padding-bottom: 40px; - margin-top:260px; - margin-left: auto; - margin-right: auto; - opacity:.80; - overflow:hidden; + background-color: #ffffff; + width: 80%; + padding-bottom: 40px; + margin-top:260px; + margin-left: auto; + margin-right: auto; + opacity:.80; + overflow:hidden; } .pb-benefits-title { - text-align: center; - padding-top:5px; - padding-bottom:5px; + text-align: center; + padding-top:5px; + padding-bottom:5px; } .pb-benefits-title > h2 { - font-family: 'Roboto', sans-serif; - color: #47547c; - font-size:3.5vw; - font-weight: 400; + font-family: 'Roboto', sans-serif; + color: #47547c; + font-size:3.5vw; + font-weight: 400; } .pb-benefits-container { - width: 100%; - height: 100%; + width: 100%; + height: 100%; } .pb-benefits-row { - display: inline-block; - width:100%; - height: 42%; + display: inline-block; + width:100%; + height: 42%; } .pb-benefits-panel { - width:100%; - height:100%; - margin-top:100px; + width:100%; + height:100%; + margin-top:100px; } .pb-benefits-panel-left { - float:left; - width:50%; + float:left; + width:50%; } .pb-benefits-panel-right { - float:right; - width:50%; - padding-right: 5%; + float:right; + width:50%; + padding-right: 5%; } .pb-benefits-panel-img { - float: left; - height: 100%; - width:30%; - text-align:right; - padding-right:10px; + float: left; + height: 100%; + width:30%; + text-align:right; + padding-right:10px; } .pb-benefits-panel-img > img { - max-width:60%; - max-height:60%; + max-width:60%; + max-height:60%; } .pb-benefits-panel-content { - float:right; - height: 100%; - width:70%; + float:right; + height: 100%; + width:70%; } .pb-benefits-panel-content-title { - font-family: 'Roboto', sans-serif; - color: #47547c; - font-size:2.5vw; - font-weight: 400; + font-family: 'Roboto', sans-serif; + color: #47547c; + font-size:2.5vw; + font-weight: 400; } .pb-benefits-panel-content-text { - font-family: 'Lato', sans-serif; - color: #47547c; - font-size:1.7vw; - font-weight: 400; + font-family: 'Lato', sans-serif; + color: #47547c; + font-size:1.7vw; + font-weight: 400; } /************ Carousel ****************/ .pb_home_belowfold_carousel { - border-top-left-radius: 12px; - border-top-right-radius: 12px; - padding-top: 20px; - text-align:center; + border-top-left-radius: 12px; + border-top-right-radius: 12px; + padding-top: 20px; + text-align:center; } .pb_carousel_title { - margin-top:100px; - margin-bottom:50px; - margin-left:auto; - margin-right:auto; - padding-bottom: 10px; - color: #ffffff; - font-family: 'Roboto', sans-serif; - font-size: 4vw; - font-weight: 700; + margin-top:100px; + margin-bottom:50px; + margin-left:auto; + margin-right:auto; + padding-bottom: 10px; + color: #ffffff; + font-family: 'Roboto', sans-serif; + font-size: 4vw; + font-weight: 700; } .carousel-item > h3 { - font-family: 'Roboto', sans-serif; - font-size: 2.4vw; - padding-top: 5px; - padding-bottom:3px; - border-top-left-radius: 12px; - border-top-right-radius: 12px; - background-color: #47547c; - color: #ffffff; - margin:0; + font-family: 'Roboto', sans-serif; + font-size: 2.4vw; + padding-top: 5px; + padding-bottom:3px; + border-top-left-radius: 12px; + border-top-right-radius: 12px; + background-color: #47547c; + color: #ffffff; + margin:0; } .carousel-item > h4 { - font-family: 'Lato', sans-serif; - font-size: 1.7vw; - color: #47547c; - padding-left: 10px; - padding-right: 10px; + font-family: 'Lato', sans-serif; + font-size: 1.7vw; + color: #47547c; + padding-left: 10px; + padding-right: 10px; } .slide { - background-color: #ffffff; - width: 70%; - height:250px; - margin-left: auto; - margin-right: auto; - border-top-left-radius: 12px; - border-top-right-radius: 12px; + background-color: #ffffff; + width: 70%; + height:250px; + margin-left: auto; + margin-right: auto; + border-top-left-radius: 12px; + border-top-right-radius: 12px; } .item { - text-align: center; + text-align: center; } .pb_carousel_indicators { - margin-top: 150px; + margin-top: 150px; } @@ -1106,58 +1106,58 @@ pre { /************ Partners ****************/ .partners { - text-align: center; + text-align: center; } .partners div.title { - width:100%; - padding-top: 30px; + width:100%; + padding-top: 30px; } .partners div.tableTitle { - width:100%; - padding-top: 30px; - padding-bottom: 30px; + width:100%; + padding-top: 30px; + padding-bottom: 30px; } .partners h3 { - margin:0; - padding: 0; - font-size:large; + margin:0; + padding: 0; + font-size:large; } .partners img.founders { - width: 100px; + width: 100px; } .partners img.standard { - width: 125px; + width: 125px; } .pb_tbl_title h3 { - padding-bottom: 20px; + padding-bottom: 20px; } .pb_standard_tbl td { - padding-left: 10px; - padding-right: 10px; + padding-left: 10px; + padding-right: 10px; } .partners ul { - list-style-type: none; + list-style-type: none; display: table; - width: 100%; + width: 100%; } .partners li { - display: table-cell; - text-align: center; + display: table-cell; + text-align: center; } .partners a[href^="http://"]:after, @@ -1166,7 +1166,7 @@ pre { } .pb-sm-img { - width: 50%; + width: 50%; height: 50%; } @@ -1177,7 +1177,7 @@ pre { } .pb-lg-img { - width: 70%; + width: 70%; height: 70%; } @@ -1186,105 +1186,105 @@ pre { } /**************************** - Blog + Blog ***************************/ .pb-blog { - margin-left:50px; - font-family: 'Verdana', sans-serif; - font-size: 34px; - font-weight: 400; + margin-left:50px; + font-family: 'Verdana', sans-serif; + font-size: 34px; + font-weight: 400; } .pb-blog h1 { - display: table; - padding: 3px 8px; - font-family: 'Verdana', sans-serif; - color: #ffffff; - font-size: 34px; - font-weight: 400; + display: table; + padding: 3px 8px; + font-family: 'Verdana', sans-serif; + color: #ffffff; + font-size: 34px; + font-weight: 400; } /******************************** - Content Pages + Content Pages *********************************/ .bs-docs-container { - margin-top: 70px; - margin-left:0; + margin-top: 70px; + margin-left:0; } .col-sm-9 { - padding-top: 20px; - margin:0; + padding-top: 20px; + margin:0; } .pb-content { - padding: 20px; - margin-left: 20px; + padding: 20px; + margin-left: 20px; } .pb-blog p { - font-family: 'Lato', sans-serif; - color: #222222; - font-size: 16px; - font-weight: 400; + font-family: 'Lato', sans-serif; + color: #222222; + font-size: 16px; + font-weight: 400; } .pb-content h1 { - /*background-color: #EA9622;*/ - display: table; - padding: 3px 0px; - font-family: 'Verdana', sans-serif; - color: #EA9622; - font-size: 34px; - font-weight: 400; - width:75wv; + /*background-color: #EA9622;*/ + display: table; + padding: 3px 0px; + font-family: 'Verdana', sans-serif; + color: #EA9622; + font-size: 34px; + font-weight: 400; + width:75wv; } .pb-content, .pb-blog h2 { - font-family: 'Verdana', sans-serif; - color: #000000; - font-size: 27px; - font-weight: 400; + font-family: 'Verdana', sans-serif; + color: #000000; + font-size: 27px; + font-weight: 400; } .pb-content, .pb-blog h3 { - font-family: 'Verdana', sans-serif; - color: #333333; - font-size: 24px; - font-weight: 400; + font-family: 'Verdana', sans-serif; + color: #333333; + font-size: 24px; + font-weight: 400; } .pb-content, .pb-blog h4 { - font-family: 'Verdana', sans-serif; - color: #333333; - font-size: 20px; - font-weight: 400; + font-family: 'Verdana', sans-serif; + color: #333333; + font-size: 20px; + font-weight: 400; } .pb-content, .pb-blog h5 { - font-family: 'Verdana', sans-serif; - color: #333333; - font-size: 18px; - font-weight: 400; + font-family: 'Verdana', sans-serif; + color: #333333; + font-size: 18px; + font-weight: 400; } .pb-content, .pb-blog ul, ol, li { - font-family: 'Lato', sans-serif; - font-size: 18px; + font-family: 'Lato', sans-serif; + font-size: 18px; } .pb-img, ,pb-blog { @@ -1297,633 +1297,633 @@ pre { /************* - Footer + Footer ******************/ .pb_footer { - display: block; - width: 75%; - font-family: 'Dosis', sans-serif; - font-weight: 400; - font-size:21px; - padding-top: 30px 0; - margin-left: auto; - margin-right: auto; - text-align: center; + display: block; + width: 75%; + font-family: 'Dosis', sans-serif; + font-weight: 400; + font-size:21px; + padding-top: 30px 0; + margin-left: auto; + margin-right: auto; + text-align: center; } /************ Was This Helpful Form ****************/ .wthHeader { - background-color: #EA9622; - border-top-left-radius: 5px; - border-top-right-radius: 5px; - height: 10px; - width: 100%; - margin-bottom: 15px; + background-color: #EA9622; + border-top-left-radius: 5px; + border-top-right-radius: 5px; + height: 10px; + width: 100%; + margin-bottom: 15px; } .wthBordered { - border: 1px solid #cccccc; - border-top-left-radius: 5px; - border-top-right-radius: 5px; - margin-top: 10px; - padding-left: 7px; + border: 1px solid #cccccc; + border-top-left-radius: 5px; + border-top-right-radius: 5px; + margin-top: 10px; + padding-left: 7px; } .wthForm { - padding-left: 15px; + padding-left: 15px; } .wthForm.input { - margin-top: 5px; - margin-bottom: 5px; + margin-top: 5px; + margin-bottom: 5px; } .wthSubmit { - margin-top: 5px; - margin-bottom: 5px; + margin-top: 5px; + margin-bottom: 5px; } .wthLabel { - font-family: 'Lato', sans-serif; - font-weight: 400; - font-size:18px; - color: #EA9622; - margin-top: 5px; - margin-bottom: 5px; + font-family: 'Lato', sans-serif; + font-weight: 400; + font-size:18px; + color: #EA9622; + margin-top: 5px; + margin-bottom: 5px; } .wthTitle { - font-family: 'Lato', sans-serif; - font-weight: 700; - font-size:24px; - color: #3498db; + font-family: 'Lato', sans-serif; + font-weight: 700; + font-size:24px; + color: #3498db; } /* - Responsive - There are 3 trigger levels, 1024, 768 and 480 + Responsive + There are 3 trigger levels, 1024, 768 and 480 */ /*small browsers*/ @media screen and (max-width: 1300px) { - .pb-top-text h1 { - font-size:60px; - } + .pb-top-text h1 { + font-size:60px; + } - .pb-top-text h2 { - font-size:30px; - } + .pb-top-text h2 { + font-size:30px; + } - .pb-panel-title { - font-size:33px; - } + .pb-panel-title { + font-size:33px; + } - .slide { - height: 140px; - } + .slide { + height: 140px; + } - } + } - /*iPad Pro*/ - @media screen and (max-width: 1024px) { + /*iPad Pro*/ + @media screen and (max-width: 1024px) { - .pb-message-container { - margin-top: 100px; - } + .pb-message-container { + margin-top: 100px; + } - .pb_benefits { - margin-top: 50px; - } + .pb_benefits { + margin-top: 50px; + } - .pb-benefits-panel { - margin-top:0px; + .pb-benefits-panel { + margin-top:0px; - .carousel-inner h3 { - font-size: 30px; - } + .carousel-inner h3 { + font-size: 30px; + } - .carousel-inner h4 { - padding-top: 20px; - font-size: 24px; - } + .carousel-inner h4 { + padding-top: 20px; + font-size: 24px; + } - .pb_carousel_indicators { - margin-top: 100px; - } + .pb_carousel_indicators { + margin-top: 100px; + } - .bs-docs-section { - line-height: 1.6; - font-size: large; - margin-right: 10em; - } + .bs-docs-section { + line-height: 1.6; + font-size: large; + margin-right: 10em; + } - .slide { - height: 160px; - } + .slide { + height: 160px; + } - .container { - width: 88%; - } + .container { + width: 88%; + } - } + } - /*iPad */ - @media screen and (max-width: 768px) { + /*iPad */ + @media screen and (max-width: 768px) { - .pb-top-text h1 { - font-size:40px; - } + .pb-top-text h1 { + font-size:40px; + } - .pb-top-text h2 { - font-size:20px; - } + .pb-top-text h2 { + font-size:20px; + } - .pb-panel-title { - font-size:30px; - } + .pb-panel-title { + font-size:30px; + } - .pb_benefits { - margin-top: 50px; - } + .pb_benefits { + margin-top: 50px; + } - .pb_carousel_title { - margin-top:50px; - margin-bottom:10px; - } + .pb_carousel_title { + margin-top:50px; + margin-bottom:10px; + } - .slide { - height: 110px; - } + .slide { + height: 110px; + } - .pb_carousel_indicators { - margin-top: 150px; - } + .pb_carousel_indicators { + margin-top: 150px; + } - } + } - /*iPhone Plus */ - @media screen and (max-width: 414px) { + /*iPhone Plus */ + @media screen and (max-width: 414px) { - /* hide side nav on phone devices*/ - #sidebar { - display: none; - } + /* hide side nav on phone devices*/ + #sidebar { + display: none; + } - .pb-top-text h1 { - font-size:20px; - } + .pb-top-text h1 { + font-size:20px; + } - .pb-top-text h2 { - font-size:12px; - } + .pb-top-text h2 { + font-size:12px; + } - .pb-home-links-panel { - margin-top: -10px; - } + .pb-home-links-panel { + margin-top: -10px; + } - .pb-outer-title { - margin-top: 5px; - } + .pb-outer-title { + margin-top: 5px; + } - .pb-home-links { - margin-top:-10px; - } + .pb-home-links { + margin-top:-10px; + } - .pb-home-links-outer-panel { - margin-top:20px; - } + .pb-home-links-outer-panel { + margin-top:20px; + } - .pb-panel-title { - font-size:14px; - } + .pb-panel-title { + font-size:14px; + } - .pb-message-container { - margin-top: 50px; - } + .pb-message-container { + margin-top: 50px; + } - .pb_benefits { - margin-top: 20px; - } + .pb_benefits { + margin-top: 20px; + } - .pb_carousel_title { - margin-top:-10px; - margin-bottom:20px; - } + .pb_carousel_title { + margin-top:-10px; + margin-bottom:20px; + } - .slide { - height: 70px; - } + .slide { + height: 70px; + } - .pb-main-nav { - display:none; - } + .pb-main-nav { + display:none; + } - .pb-mobile-nav { - display: block; - } + .pb-mobile-nav { + display: block; + } - .pb_carousel_indicators { - margin-top: 10px; - height: 10px; - } + .pb_carousel_indicators { + margin-top: 10px; + height: 10px; + } - .pb-content { - width: 85%; - margin-left: -20px; - } + .pb-content { + width: 85%; + margin-left: -20px; + } - .pb-content p { - font-size: 15px; - font-weight: 400; - line-height: inherit; - width: 85%; - } + .pb-content p { + font-size: 15px; + font-weight: 400; + line-height: inherit; + width: 85%; + } - } + } - /* iPhone X*/ - @media screen and (max-width: 375px) { + /* iPhone X*/ + @media screen and (max-width: 375px) { - .pb-top-text h1 { - font-size:22px; - } + .pb-top-text h1 { + font-size:22px; + } - .pb-top-text h2 { - font-size:11px; - margin-top: 0px; - } + .pb-top-text h2 { + font-size:11px; + margin-top: 0px; + } - .pb-panel-title { - font-size:12px; - } + .pb-panel-title { + font-size:12px; + } - .pb-home-links-panel { - margin-top: -15px; - } + .pb-home-links-panel { + margin-top: -15px; + } - .pb_benefits { - margin-top: 40px; - } + .pb_benefits { + margin-top: 40px; + } - .pb_home_belowfold_carousel { - padding-top: 60px; - } + .pb_home_belowfold_carousel { + padding-top: 60px; + } - .pb_carousel_title { - margin-top:-20px; - margin-bottom:0px; - } + .pb_carousel_title { + margin-top:-20px; + margin-bottom:0px; + } - .slide { - height: 80px; - } + .slide { + height: 80px; + } - .pb_carousel_indicators { - margin-top: 0px; - height: 22px; - } + .pb_carousel_indicators { + margin-top: 0px; + height: 22px; + } - .carousel-indicators { - padding-top: 140px; - } + .carousel-indicators { + padding-top: 140px; + } - } + } - /* iPhone 6, 7, 8 Galaxy S5 (different width) */ - @media screen and (max-width: 360px) { + /* iPhone 6, 7, 8 Galaxy S5 (different width) */ + @media screen and (max-width: 360px) { - .pb-top-text h1 { - font-size:18px; - } + .pb-top-text h1 { + font-size:18px; + } - .pb-top-text > h2 { - font-size:9px; - margin-top: 0px; - } + .pb-top-text > h2 { + font-size:9px; + margin-top: 0px; + } - .pb-home-links-outer-panel { - margin-top:10px; - } + .pb-home-links-outer-panel { + margin-top:10px; + } - .pb_benefits { - margin-top: 70px; - } + .pb_benefits { + margin-top: 70px; + } - } + } - /*iPhone 5*/ - @media screen and (max-width: 320px) { + /*iPhone 5*/ + @media screen and (max-width: 320px) { - .pb-home-links-outer-panel { - margin-top:3px; - } + .pb-home-links-outer-panel { + margin-top:3px; + } - .pb_benefits { - margin-top: 50px; - } + .pb_benefits { + margin-top: 50px; + } - } + } @media screen and (max-width: 768px) { - .col-sm-9 { - padding-top: 10px; - } + .col-sm-9 { + padding-top: 10px; + } - .pb-content { + .pb-content { - font-size: 15px; - font-weight: 400; - width: 85%; - margin-left: 0px; - - } - - .pb-content p { - font-size: 15px; - font-weight: 400; - line-height: inherit; - width: 85%; - } - - .pb-content li { - font-size: 15px; - font-weight: 400; - } - - .pb-content h1 { - font-size: 24px; - } - - .pb-content h2 { - font-size: 20px; - } - - .pb-content h3 { - font-size: 18px; - } - - .pb_footer { - display: block; - font-size:15px; - } - - /*Previous @media*/ - - #pb-home-demo { - margin-top: 30px; - } - - #pb-home-demo .col-sm-7 .lead { - margin-left: 0; - padding-left: 0; - } - - .pb-sm-left { - text-align: left; - } - - .pb-sm-center { - text-align: center; - } - - .pb-sm-right { - text-align: right; - } - - .pb-img { - -webkit-box-shadow: 2px 2px 8px -2px rgba(0,0,0,0.35); - -moz-box-shadow: 2px 2px 8px -2px rgba(0,0,0,0.35); - box-shadow: 2px 2px 8px -2px rgba(0,0,0,0.35); - margin-top: 10px; - margin-bottom: 10px; - } - - - .blog-related-posts { - color: #aaa; - margin-top: 40px; - } - - .bs-callout code { - background-color: transparent; - } - - .bs-docs-footer { - margin-top: 60px; - } - - - .nav.nav-tabs { - margin-bottom: 15px; - font-weight: bold; - } - - .bs-callout { - padding-top: 0px; - padding-bottom: 10px; - } - - #chart_div { - height: 400px; - } - - .docs-sidebar { - margin-top: 20px; - padding: 20px; - padding-top: 10px; - padding-bottom: 10px; - border-radius: 2px; - } - - .docs-sidebar .nav>li>a{ - padding: 0px; - padding-bottom: 10px; - color: #555; - } - - .docs-sidebar .nav>li>a:hover{ - color: #337ab7; - background: transparent; - } - - .docs-sidebar .nav>li>a.selected { - color: #337ab7; - } - - .docs-sidebar h5 { - font-weight: 700; - font-size: 13px; - margin-top: 15px; - } - - .bs-docs-nav { - border-bottom: solid 1px #AAA; - } - - .bg-info { - padding: 10px; - border-radius: 5px; - } - - .bg-warning { - padding: 10px; - border-radius: 5px; - margin-bottom: 5px; - } - - .bg-danger { - padding: 10px; - border-radius: 5px; - } - - table.jsfiddle-line-number { - width: 100%; - border: 0; - } - - table.jsfiddle-line-number .line-number { - padding-top: 61px; - vertical-align: text-top; - line-height: 21px; - width: 17px; - color: #aaa; - font-size: 13px; - text-align: right; - } - - .blog-date { - margin-top: 45px; - text-align: right; - width: 80%; - font-size: 20px; - color: #aaa; - } - - #example-tab { - padding-left:10px; - } - - #example-tab li { - margin-bottom: 6px; - } - - table:not(.jsfiddle-line-number) { - table-layout: fixed; - word-wrap: break-word; - } - - div.pl-doc-entry{ - position: absolute; - } - - .prebid-mobile-notice { - margin-top: 2em; - } - - .pb-lg-img { - width: 85%; - height: 85%; - } - - .pb-xlg-img { + font-size: 15px; + font-weight: 400; + width: 85%; + margin-left: 0px; + + } + + .pb-content p { + font-size: 15px; + font-weight: 400; + line-height: inherit; + width: 85%; + } + + .pb-content li { + font-size: 15px; + font-weight: 400; + } + + .pb-content h1 { + font-size: 24px; + } + + .pb-content h2 { + font-size: 20px; + } + + .pb-content h3 { + font-size: 18px; + } + + .pb_footer { + display: block; + font-size:15px; + } + + /*Previous @media*/ + + #pb-home-demo { + margin-top: 30px; + } + + #pb-home-demo .col-sm-7 .lead { + margin-left: 0; + padding-left: 0; + } + + .pb-sm-left { + text-align: left; + } + + .pb-sm-center { + text-align: center; + } + + .pb-sm-right { + text-align: right; + } + + .pb-img { + -webkit-box-shadow: 2px 2px 8px -2px rgba(0,0,0,0.35); + -moz-box-shadow: 2px 2px 8px -2px rgba(0,0,0,0.35); + box-shadow: 2px 2px 8px -2px rgba(0,0,0,0.35); + margin-top: 10px; + margin-bottom: 10px; + } + + + .blog-related-posts { + color: #aaa; + margin-top: 40px; + } + + .bs-callout code { + background-color: transparent; + } + + .bs-docs-footer { + margin-top: 60px; + } + + + .nav.nav-tabs { + margin-bottom: 15px; + font-weight: bold; + } + + .bs-callout { + padding-top: 0px; + padding-bottom: 10px; + } + + #chart_div { + height: 400px; + } + + .docs-sidebar { + margin-top: 20px; + padding: 20px; + padding-top: 10px; + padding-bottom: 10px; + border-radius: 2px; + } + + .docs-sidebar .nav>li>a{ + padding: 0px; + padding-bottom: 10px; + color: #555; + } + + .docs-sidebar .nav>li>a:hover{ + color: #337ab7; + background: transparent; + } + + .docs-sidebar .nav>li>a.selected { + color: #337ab7; + } + + .docs-sidebar h5 { + font-weight: 700; + font-size: 13px; + margin-top: 15px; + } + + .bs-docs-nav { + border-bottom: solid 1px #AAA; + } + + .bg-info { + padding: 10px; + border-radius: 5px; + } + + .bg-warning { + padding: 10px; + border-radius: 5px; + margin-bottom: 5px; + } + + .bg-danger { + padding: 10px; + border-radius: 5px; + } + + table.jsfiddle-line-number { + width: 100%; + border: 0; + } + + table.jsfiddle-line-number .line-number { + padding-top: 61px; + vertical-align: text-top; + line-height: 21px; + width: 17px; + color: #aaa; + font-size: 13px; + text-align: right; + } + + .blog-date { + margin-top: 45px; + text-align: right; + width: 80%; + font-size: 20px; + color: #aaa; + } + + #example-tab { + padding-left:10px; + } + + #example-tab li { + margin-bottom: 6px; + } + + table:not(.jsfiddle-line-number) { + table-layout: fixed; + word-wrap: break-word; + } + + div.pl-doc-entry{ + position: absolute; + } + + .prebid-mobile-notice { + margin-top: 2em; + } + + .pb-lg-img { + width: 85%; + height: 85%; + } + + .pb-xlg-img { width: 100%; } - .pb-md-img { - width: 60%; - height: 60%; - } + .pb-md-img { + width: 60%; + height: 60%; + } - #pb-home-demo { - margin-top: 30px; - } + #pb-home-demo { + margin-top: 30px; + } - #pb-home-demo .col-sm-7 .lead { - margin-left: 0; - padding-left: 0; - } + #pb-home-demo .col-sm-7 .lead { + margin-left: 0; + padding-left: 0; + } - .pb-sm-left { - text-align: left; - } + .pb-sm-left { + text-align: left; + } - .pb-sm-center { - text-align: center; - } + .pb-sm-center { + text-align: center; + } - .pb-sm-right { - text-align: right; - } + .pb-sm-right { + text-align: right; + } } @media screen and (max-width: 414px) { - #wrapper { - padding-left: 0; - -webkit-transition: all 0.5s ease; - -moz-transition: all 0.5s ease; - -o-transition: all 0.5s ease; - transition: all 0.5s ease; - } - - #wrapper.toggled { - padding-left: 250px; - } - - #sidebar-wrapper { - z-index: 1000; - position: fixed; - left: 250px; - width: 0; - height: 100%; - margin-left: -250px; - overflow-y: auto; - background: #f6f8fa; - -webkit-transition: all 0.5s ease; - -moz-transition: all 0.5s ease; - -o-transition: all 0.5s ease; - transition: all 0.5s ease; - } - - #wrapper.toggled #sidebar-wrapper { - width: 250px; - } - - .pb-lg-img { - width: 65%; - height: 65%; - } - - .pb-xlg-img { + #wrapper { + padding-left: 0; + -webkit-transition: all 0.5s ease; + -moz-transition: all 0.5s ease; + -o-transition: all 0.5s ease; + transition: all 0.5s ease; + } + + #wrapper.toggled { + padding-left: 250px; + } + + #sidebar-wrapper { + z-index: 1000; + position: fixed; + left: 250px; + width: 0; + height: 100%; + margin-left: -250px; + overflow-y: auto; + background: #f6f8fa; + -webkit-transition: all 0.5s ease; + -moz-transition: all 0.5s ease; + -o-transition: all 0.5s ease; + transition: all 0.5s ease; + } + + #wrapper.toggled #sidebar-wrapper { + width: 250px; + } + + .pb-lg-img { + width: 65%; + height: 65%; + } + + .pb-xlg-img { width: 100%; } - .pb-md-img { - width: 45%; - height: 45%; - } + .pb-md-img { + width: 45%; + height: 45%; + } - .pb_footer { - display: block; - font-size:10px; - } + .pb_footer { + display: block; + font-size:10px; + } } @@ -2113,21 +2113,21 @@ div.pl-doc-entry{ } /******************* - API + API .categoryBox { - display:block; - float: left; - margin-right:10px; - line-height:40px; - height: 40px; - padding-left: 15px; - padding-right: 15px; - background-color:#f6f8fa; - text-align:center; + display:block; + float: left; + margin-right:10px; + line-height:40px; + height: 40px; + padding-left: 15px; + padding-right: 15px; + background-color:#f6f8fa; + text-align:center; } diff --git a/dev-docs/activity-controls.md b/dev-docs/activity-controls.md index c4642272f5..2b01c46523 100644 --- a/dev-docs/activity-controls.md +++ b/dev-docs/activity-controls.md @@ -19,8 +19,8 @@ These controls are intended to serve as building blocks for privacy protection m There are many privacy regulations that Prebid publishers need to accomodate. Prebid supplies [modules](/dev-docs/faq.html#how-does-prebid-support-privacy-regulations) to help Publishers implement their legal policies, but there are scenarios where extra control is needed: -- a Publisher's lawyers want to make a particular exception -- a module hasn't been built for a regulation the Publisher needs to support +* a Publisher's lawyers want to make a particular exception +* a module hasn't been built for a regulation the Publisher needs to support ### Prebid Is a Toolkit @@ -37,19 +37,19 @@ Important: This resource should not be construed as legal advice and Prebid.org We did an analysis of the things Prebid.js does and identified those related to privacy regulations. We call these things "potentially restricted activities", or just "activities" for short. Here are some: -- Setting a cookie -- Syncing ID cookies -- Transmitting user first party data -- etc. +* Setting a cookie +* Syncing ID cookies +* Transmitting user first party data +* etc. The [full list of activities Prebid.js supports](#activities) is below. Think of an activity control as a 'gatekeeper' that makes the decision about whether the activity should be allowed in this specific context: -- Should I allow this cookie to be set for bidderA? -- Should I allow this usersync for bidderB? -- Is it ok for this data to be passed to bidderC and analyticsD? -- etc. +* Should I allow this cookie to be set for bidderA? +* Should I allow this usersync for bidderB? +* Is it ok for this data to be passed to bidderC and analyticsD? +* etc. Prebid.js core checks with the Activity Controls to see whether an activity is allowed. The configuration for the activity can come from modules, custom functions in the page, or a rule-based JSON config. @@ -60,7 +60,7 @@ In this example, bidderX wants to set a cookie through StorageManager, which que Here's an example JSON config that disables accessing local storage (including cookies) for everything except the bid adapter `bidderX`: -``` +```javascript pbjs.setConfig({ allowActivities: { accessDevice: { @@ -76,14 +76,14 @@ pbjs.setConfig({ }) ``` -
+ ## Configuration `allowActivities` is a new option to [setConfig](/dev-docs/publisher-api-reference/setConfig.html). It contains a list of activity names -- see the [full list of activities below](#activities). Each activity is an object that can contain these attributes: {: .table .table-bordered .table-striped } -| Name | Type | Description | +| Name | Type | Description | |------|------|-------------| | `default` | Boolean | Whether the activity should be allowed if no other rule applies. Defaults to true. | | `rules` | Array of objects | Rules for this activity | @@ -93,14 +93,14 @@ pbjs.setConfig({ `Rules` is an array of objects that a publisher can contruct to provide fine-grained control over a given activity. For instance, you could set up a series of rules that says: -- Amongst the bid adapters, BidderA is always allowed to receive user first party data -- Always let analytics adapters receive user first party data -- otherwise, let the active privacy modules decide -- if they refuse to decide, then the overall default is to allow the transmitting of user first party data +* Amongst the bid adapters, BidderA is always allowed to receive user first party data +* Always let analytics adapters receive user first party data +* otherwise, let the active privacy modules decide +* if they refuse to decide, then the overall default is to allow the transmitting of user first party data There's more about [rules](#parameters) below. - + ### Activities @@ -112,7 +112,7 @@ Here's the list of the 'potentially restricted activities' that Prebid.js core c | `accessDevice` | A component wants to use device storage | Storage is disabled | [`storageType`](#params-accessDevice) | | `enrichEids` | A user ID or RTD submodule wants to add user IDs to outgoing requests | User IDs are discarded | None | | `enrichUfpd` | A Real Time Data (RTD) submodule wants to add user first party data to outgoing requests (`user.data` in ORTB) | User FPD is discarded | None | -| `fetchBids` | A bid adapter wants to participate in an auction | Bidder is removed from the auction | [`configName`](#params-fetchBids) | +| `fetchBids` | A bid adapter wants to participate in an auction | Bidder is removed from the auction | [`configName`](#params-fetchBids) | | `reportAnalytics` | An analytics adapter is being enabled through `pbjs.enableAnalytics` | Adapter remains disabled | None | | `syncUser` | A bid adapter wants to fetch a [user sync](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-User-Syncing) | User sync is skipped | [`syncType`, `syncUrl`](#params-syncUser) | | `transmitEids` | A bid adapter or RTD submodule wants to access and/or transmit user IDs to their endpoint | User IDs are hidden from the component | [`configName`](#params-fetchBids) | @@ -121,37 +121,38 @@ Here's the list of the 'potentially restricted activities' that Prebid.js core c | `transmitUfpd` | A bid adapter or RTD submodule wants to access and/or transmit user FPD to their endpoint | User FPD is hidden from the component | [`configName`](#params-fetchBids) | - + ### Rules - - There are three parts to an Activity Control's rule: - + +There are three parts to an Activity Control's rule: + 1. The priority 2. The condition 3. The allow flag - For example, this rule would allow bidderX to perform the activity if no higher priority rules take precedence. - ``` - ... - rules: [{ - priority: 10, // average priority - condition(params) { - return params.componentName === 'bidderX' - }, - allow: true - }] - ... +For example, this rule would allow bidderX to perform the activity if no higher priority rules take precedence. + +```javascript +... + rules: [{ + priority: 10, // average priority + condition(params) { + return params.componentName === 'bidderX' + }, + allow: true + }] +... ``` - + #### Rule Priority Activity control rules in Prebid.js can be created by two main sources: -- Publisher `setConfig({allowActivities})` as in the examples shown here. When set this way, rules are consider the highest priority value of 1. -- Modules can set activity control rules, e.g. [usersync](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-User-Syncing), [bidderSettings](/dev-docs/publisher-api-reference/bidderSettings.html), the [GPP](/dev-docs/modules/consentManagementGpp.html) or [GDPR](/dev-docs/modules/gdprEnforcement.html) modules. Rules set by modules have a less urgent priority of 10. +* Publisher `setConfig({allowActivities})` as in the examples shown here. When set this way, rules are consider the highest priority value of 1. +* Modules can set activity control rules, e.g. [usersync](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-User-Syncing), [bidderSettings](/dev-docs/publisher-api-reference/bidderSettings.html), the [GPP](/dev-docs/modules/consentManagementGpp.html) or [GDPR](/dev-docs/modules/gdprEnforcement.html) modules. Rules set by modules have a less urgent priority of 10. When rules are processed, they are sorted by priority, and all rules of the same priority are considered to happen at the same time. The details: @@ -204,7 +205,7 @@ pbjs.setConfig({ ``` #### Rule Conditions - + A `condition` is a javascript function that receives information about the activity that is about to be performed. If a condition evaluates to true, the `allow` attribute of the rule will be utilized. If there's no condition specified, the rule's `allow` attribute will always be utilized. These are the parameters available to the condition function: @@ -212,13 +213,13 @@ These are the parameters available to the condition function: {: .table .table-bordered .table-striped } | Name | Type | Available for | Description | |------|------|-------------|---------------| -| `componentType` | String | All activities | One of: `'bidder'`, `'userId'`, `'rtd'`, `'analytics'`, or `'prebid'`; identifies the type of component (usually a module) that wishes to perform the activity. `'prebid'` is reserved for Prebid core itself and a few "privileged" modules such as the [PBS adapter](/dev-docs/modules/prebidServer.html). | +| `componentType` | String | All activities | One of: `'bidder'`, `'userId'`, `'rtd'`, `'analytics'`, or `'prebid'`; identifies the type of component (usually a module) that wishes to perform the activity. `'prebid'` is reserved for Prebid core itself and a few "privileged" modules such as the [PBS adapter](/dev-docs/modules/prebidServer.html). | | `componentName` | String | All activities | Name of the component; this is (depending on the type) either a bidder code, user ID or RTD submodule name, analytics provider code, or module name. | | `component` | String | All activities | This is always a dot-separated concatenation of `componentType` and `componentName`; for example, with `{componentType: 'bidder', componentName: 'bidderX'}`, `component` is `'bidder.bidderX'`. | | `adapterCode` | String | All activities | If `componentType` is `'bidder'`, and `componentName` is an [alias](/dev-docs/publisher-api-reference/aliasBidder.html), then `adapterCode` is the bidder code that was aliased; or identical to `componentName` if the bidder is not an alias. This is undefined when the component is not a bidder.| -| `configName` | String | `fetchBids` | When the Prebid Server adapter is part of an auction, this is the name given to its [s2s configuration](/dev-docs/modules/prebidServer.md), if any. | -| `storageType` | String | `accessDevice` | Either `'html5'` or `'cookie'` - the device storage mechanism being accessed. | -| `syncType` | String | `syncUser` | Either `'iframe'` or `'image'` - the type of user sync. | +| `configName` | String | `fetchBids` | When the Prebid Server adapter is part of an auction, this is the name given to its [s2s configuration](/dev-docs/modules/prebidServer.md), if any. | +| `storageType` | String | `accessDevice` | Either `'html5'` or `'cookie'` - the device storage mechanism being accessed. | +| `syncType` | String | `syncUser` | Either `'iframe'` or `'image'` - the type of user sync. | | `syncUrl` | String | `syncUser` | URL of the user sync. | #### Allow Flag @@ -286,5 +287,6 @@ pbjs.setConfig({ }) ``` -## Further Reading -- [FAQ: How does Prebid.js support privacy regulations](/dev-docs/faq.html#how-does-prebid-support-privacy-regulations) +## Further Reading + +* [FAQ: How does Prebid.js support privacy regulations](/dev-docs/faq.html#how-does-prebid-support-privacy-regulations) diff --git a/dev-docs/add-rtd-submodule.md b/dev-docs/add-rtd-submodule.md index b2c118c06b..fbf85669cf 100644 --- a/dev-docs/add-rtd-submodule.md +++ b/dev-docs/add-rtd-submodule.md @@ -6,16 +6,17 @@ sidebarType: 1 --- # How to Add a Real Time Data Submodule + {:.no_toc} Sub-modules interact with the Real-Time Data (RTD) core module to add data to bid requests or add targeting values for the primary ad server. - * TOC {:toc } ## Overview + The point of the Real Time Data (RTD) infrastructure is to make configuration consistent for publishers. Rather than having dozens of different modules with disparate config approaches, being a Real-Time Data sub-module means plugging into a framework for publishers to control how sub-modules behave. For example, publishers can define how long the auction can be delayed and give some sub-modules priority over others. @@ -40,13 +41,13 @@ Here is the flow for how the RTD-core module interacts with its sub-modules: The activities performed by the RTD-core module are on the left-hand side, while the functions that can be provided by your RTD sub-module are on the right-hand side. Note that you don't need to implement all of the functions - you'll want to plan out your functionality and develop the appropriate functions. - ## Creating a Sub-Module When you create a Real-Time Data sub-module, you will be operating under the umbrella of the Real-Time Data core module. Here are the services core provides: -- your sub-module will be initialized as soon as pbjs.setConfig({realTimeData}) is called. If you can initialize at the time of code load, that can be done at the bottom of your javascript file. -- whenever any of your functions is called, it will be passed the config params provided by the publisher. As a result, you should not call getConfig(). -- your functions will also be passed all available privacy information. As a result, you do not need to query to get GDPR, US Privacy, or any other consent parameters. + +* your sub-module will be initialized as soon as pbjs.setConfig({realTimeData}) is called. If you can initialize at the time of code load, that can be done at the bottom of your javascript file. +* whenever any of your functions is called, it will be passed the config params provided by the publisher. As a result, you should not call getConfig(). +* your functions will also be passed all available privacy information. As a result, you do not need to query to get GDPR, US Privacy, or any other consent parameters. Working with any Prebid project requires using Github. In general, we recommend the same basic workflow for any project: @@ -65,7 +66,8 @@ with the [module rules](/dev-docs/module-rules.html) that apply globally and to Create a markdown file under `modules` with the name of the module suffixed with 'RtdProvider', e.g., `exRtdProvider.md` Example markdown file: -{% highlight text %} + +```md # Overview Module Name: Ex Rtd Provider @@ -76,7 +78,7 @@ Maintainer: prebid@example.com RTD provider for Example.com. Contact prebid@example.com for information. -{% endhighlight %} +``` ### Step 2: Build the Module @@ -90,7 +92,7 @@ In order to let RTD-core know where to find the functions in your sub-module, cr | param name | type | Scope | Description | Params | | :------------ | :------------ | :------ | :------ | :------ | | name | string | required | must match the name provided by the publisher in the on-page config | n/a | -| gvlid | number | optional | global vendor list ID for your submodule | n/a | +| gvlid | number | optional | global vendor list ID for your submodule | n/a | | init | function | required | defines the function that does any auction-level initialization required | config, userConsent | | getTargetingData | function | optional | defines a function that provides ad server targeting data to RTD-core | adUnitArray, config, userConsent | | getBidRequestData | function | optional | defines a function that provides bid request data to RTD-core | reqBidsConfigObj, callback, config, userConsent | @@ -100,32 +102,35 @@ In order to let RTD-core know where to find the functions in your sub-module, cr | onBidResponseEvent | function |optional | listens to the BID_RESPONSE event and calls a sub-module function that lets it know when a bid response has been collected | bidResponse, config, userConsent | For example: -{% highlight text %} + +```javascript export const subModuleObj = { name: 'ExampleRTDModule', init: init, getTargetingData: sendDataToModule }; -{% endhighlight %} +``` #### Register the submodule Register submodule to RTD-core: -{% highlight text %} +```javascript submodule('realTimeData', subModuleObject); -{% endhighlight %} +``` #### User Consent Several of the interfaces get a `userConsent` object. It's an object that carries these attributes: -- [gdpr](/dev-docs/modules/consentManagement.html#bidder-adapter-gdpr-integration) - GDPR -- [usp](/dev-docs/modules/consentManagementUsp.html#bidder-adapter-us-privacy-integration) - US Privacy (aka CCPA) -- [coppa](/dev-docs/publisher-api-reference/setConfig.html#setConfig-coppa) - the Child Online Privacy Protection Act + +* [gdpr](/dev-docs/modules/consentManagement.html#bidder-adapter-gdpr-integration) - GDPR +* [usp](/dev-docs/modules/consentManagementUsp.html#bidder-adapter-us-privacy-integration) - US Privacy (aka CCPA) +* [coppa](/dev-docs/publisher-api-reference/setConfig.html#setConfig-coppa) - the Child Online Privacy Protection Act These are provided so you can do the right thing with respect to regulations. The only privacy requirement imposed by the RTD-core is that sub-modules make make use of the StorageManager instead of attempting to access cookies or localstorage directly. #### The init() function + 1. This function receives module configuration and userConsent parameters 2. If the function returns `false`, the submodule will be ignored. @@ -137,7 +142,8 @@ This is the function that will allow RTD sub-modules to merge ad server targetin 1. RTD-core will call this function with an array of adUnits, config, and userConsent as parameters 2. Your sub-module should respond with per-adslot data that should be set as key values on the ad server targeting in this format: -{% highlight text %} + +```json { "slotA":{ "p":0.56, // ad server targeting variable (e.g. p) for slotA is 0.56 @@ -146,11 +152,11 @@ This is the function that will allow RTD sub-modules to merge ad server targetin "p":0.824, // ad server targeting variable (e.g. p) for slotB is 0.824 } } -{% endhighlight %} +``` **Code Example** -{% highlight text %} +```javascript /** @type {RtdSubmodule} */ export const subModuleObj = { name: 'ExampleRTDModule', @@ -170,34 +176,34 @@ function returnTargetingData(adUnits, config, userConsent) { } submodule('realTimeData', subModuleObj); -{% endhighlight %} +``` #### getBidRequestData This is the function that will allow RTD sub-modules to modify the AdUnit object for each auction. It's called as part of the requestBids hook. 1. RTD-core will call this function with: - - reqBidsConfigObj: a slightly modified version of the object that's passed to `pbjs.requestBids` (see [below](#reqBidsConfigObj)). Note that several auctions can happen concurrently, so the sub-module must be ready to support this. - - callback: lets RTD-core know which auction the sub-module is done with. - - config: the sub-module's config params provided by the publisher - - userConsent object (see above) + 1. reqBidsConfigObj: a slightly modified version of the object that's passed to `pbjs.requestBids` (see [below](#reqBidsConfigObj)). Note that several auctions can happen concurrently, so the sub-module must be ready to support this. + 2. callback: lets RTD-core know which auction the sub-module is done with. + 3. config: the sub-module's config params provided by the publisher + 4. userConsent object (see above) 2. Your sub-module may update the reqBidsConfigObj and hit the callback. To inject data into the bid requests, you should follow one of these conventions: - - Recommended: use one of these [First Party Data](/features/firstPartyData.html) conventions: - - For AdUnit-specific first party data, set AdUnit.ortb2Imp.ext.data.ATTRIBUTES - - For global first party data, including bidder-specific data, modify the `reqBidsConfigObj` as shown [below](#reqBidsConfigObj) - - Not recommended: Place your data in bidRequest.rtd.RTDPROVIDERCODE.ATTRIBUTES and then get individual adapters to specifically read that location. Note that this method won't pass data to Prebid Server adapters. + 1. Recommended: use one of these [First Party Data](/features/firstPartyData.html) conventions: + 1. For AdUnit-specific first party data, set AdUnit.ortb2Imp.ext.data.ATTRIBUTES + 2. For global first party data, including bidder-specific data, modify the `reqBidsConfigObj` as shown [below](#reqBidsConfigObj) + 2. Not recommended: Place your data in bidRequest.rtd.RTDPROVIDERCODE.ATTRIBUTES and then get individual adapters to specifically read that location. Note that this method won't pass data to Prebid Server adapters. - + The `reqBidsConfigObj` parameter is a copy of the object passed to [`requestBids`](/dev-docs/publisher-api-reference/requestBids.html), except for: -- `adUnits` and `timeout` are always defined (if the publisher didn't provide them, the default values are filled in - `pbjs.adUnits` and `getConfig('bidderTimeout')` respectively) -- `ortb2` is replaced with an `ortb2Fragments` object, intended to be inspected and / or modified by your module. +* `adUnits` and `timeout` are always defined (if the publisher didn't provide them, the default values are filled in - `pbjs.adUnits` and `getConfig('bidderTimeout')` respectively) +* `ortb2` is replaced with an `ortb2Fragments` object, intended to be inspected and / or modified by your module. The `ortb2Fragments` parameter is an object containing two properties: -- `global`, an object containing global (not bidder-specific) first party data in the same OpenRTB format used by `setConfig({ortb2})` -- `bidder`, a map from bidder code to bidder-specific, OpenRTB-formatted first party data. +* `global`, an object containing global (not bidder-specific) first party data in the same OpenRTB format used by `setConfig({ortb2})` +* `bidder`, a map from bidder code to bidder-specific, OpenRTB-formatted first party data. Your module may modify either or both with additional data. If adding bidder-specific data in `ortb2Fragments.bidder`, it should also support a parameter to allow the publisher to define which bidders are to receive the data. @@ -207,7 +213,7 @@ at the time `requestBids` is called, and RTD submodules that wish to modify it a **Code Example** -{% highlight text %} +```javascript /** @type {RtdSubmodule} */ export const subModuleObj = { name: 'ExampleRTDModule2', @@ -233,13 +239,15 @@ function alterBidRequests(reqBidsConfigObj, callback, config, userConsent) { } submodule('realTimeData', subModuleObj); -{% endhighlight %} +``` #### beforeInit + 1. Use this function to take action to make sure data will be served as soon as possible (AJAX calls, pixels, etc..) 2. This function is **not** invoked by the RTD module, and should be invoked at the bottom of the submodule. #### Using event listeners + 1. The RTD-core module listens for 3 events - `AUCTION_INIT`, `AUCTION_END`, and `BID_RESPONSE`. 2. Each time one of the events fires, RTD-core will invoke the corresponding function on each sub-module, allowing the sub-module to make changes to the event object. 3. To use this on your sub-module, define the required functions as noted in the table above and the examples below. @@ -247,7 +255,8 @@ submodule('realTimeData', subModuleObj); **Code Example** Here is a code example with both mandatory and optional functions: -{% highlight text %} + +```javascript /** @type {RtdSubmodule} */ export const subModuleObj = { name: 'ExampleRTDModule3', @@ -286,8 +295,7 @@ function beforeInit(){ } beforeInit(); -{% endhighlight %} - +``` ### Step 3: Add unit tests @@ -305,7 +313,7 @@ Once everything looks good, submit the code, tests, and markdown as a pull reque 2. Create a new file for your RTD sub-module in dev-docs/modules/ExampleRtdProvider.md. Take a look at the other *RtdProvider.md files in that directory for the important header values. Specifically it requires the following: - ``` + ```markdown --- layout: page_v2 title: Example Module @@ -322,6 +330,7 @@ Once everything looks good, submit the code, tests, and markdown as a pull reque [Useful publisher-facing documentation] ``` + 3. Submit the pull request to the prebid.github.io repo. ### Step 6: Wait for Prebid volunteers to review diff --git a/dev-docs/add-video-submodule.md b/dev-docs/add-video-submodule.md index 811494d780..bb44cdebc0 100644 --- a/dev-docs/add-video-submodule.md +++ b/dev-docs/add-video-submodule.md @@ -9,10 +9,10 @@ sidebarType: 1 {:.no_toc} Video submodules interact with the Video Module to integrate Prebid with Video Players, allowing Prebid to automatically: -- render bids in the desired video player. -- mark used bids as won. -- trigger player and media events. -- populate the oRTB Video Impression and Content params in the bid request. +* render bids in the desired video player. +* mark used bids as won. +* trigger player and media events. +* populate the oRTB Video Impression and Content params in the bid request. * TOC {:toc } @@ -28,11 +28,12 @@ Publishers who use players from different vendors on the same page can use multi ## Requirements The Video Module only supports integration with Video Players that meet the following requirements: -- Must support parsing and reproduction of VAST ads. - - Input can be an ad tag URL or the actual Vast XML. -- Must expose an API that allows the procurement of [Open RTB params](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) for Video (section 3.2.7) and Content (section 3.2.16). -- Must emit javascript events for Ads and Media. - - see [Event Registration](#event-registration). + +* Must support parsing and reproduction of VAST ads. + * Input can be an ad tag URL or the actual Vast XML. +* Must expose an API that allows the procurement of [Open RTB params](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) for Video (section 3.2.7) and Content (section 3.2.16). +* Must emit javascript events for Ads and Media. + * see [Event Registration](#event-registration). ## Creating a Submodule @@ -49,7 +50,8 @@ Working with any Prebid project requires using Github. In general, we recommend Create a markdown file under `modules` with the name of the module suffixed with 'VideoProvider', i.e. `exampleVideoProvider.md`. Example markdown file: -{% highlight text %} + +```md # Overview Module Name: Example Video Provider @@ -66,16 +68,16 @@ Video provider for Example Player. Contact someone@example.com for information. Your page must link the Example Player build from our CDN. Alternatively you can use npm to load the build. -{% endhighlight %} +``` ### Step 2: Add a Vendor Code Vendor codes are required to indicate which submodule type to instantiate. Add your vendor code constant to an export const in `vendorCodes.js` in Prebid.js under `libraries/video/constants/vendorCodes.js`. i.e. in `vendorCodes.js`: -{% highlight text %} +```javascript export const EXAMPLE_PLAYER_VENDOR = 3; -{% endhighlight %} +``` ### Step 3: Build the Module @@ -89,7 +91,7 @@ Your submodule should also import the `submodule` function from `src/hook.js` an **Code Example** -{% highlight text %} +```javascript import { submodule } from '../src/hook.js'; function exampleSubmoduleFactory(videoProviderConfig) { @@ -102,7 +104,7 @@ function exampleSubmoduleFactory(videoProviderConfig) { exampleSubmoduleFactory.vendorCode = EXAMPLE_VENDOR; submodule('video', exampleSubmoduleFactory); -{% endhighlight %} +``` #### The Submodule object @@ -121,7 +123,8 @@ The submodule object must adhere to the following interface: | destroy | function | required | Deallocates the submodule and destroys the associated video player. n/a | void | void | For example: -{% highlight text %} + +```javascript const exampleSubmodule = { init: init, getId: getId, @@ -132,9 +135,9 @@ const exampleSubmodule = { offEvent: offEvent, destroy: destroy }; -{% endhighlight %} +``` - + #### Event Registration @@ -158,7 +161,8 @@ Submodules must support attaching and detaching event listeners on the video pla #### Update .submodules.json In prebid.js, add your new submodule to `.submodules.json` under the `videoModule` as such: -{% highlight text %} + +```json { "parentModules": { "videoModule": [ @@ -166,7 +170,7 @@ In prebid.js, add your new submodule to `.submodules.json` under the `videoModul ] } } -{% endhighlight %} +``` ## Shared Resources for Developers diff --git a/dev-docs/adunit-reference.md b/dev-docs/adunit-reference.md index 88213cc124..471d79c0e4 100644 --- a/dev-docs/adunit-reference.md +++ b/dev-docs/adunit-reference.md @@ -6,18 +6,19 @@ sidebarType: 1 --- # Ad Unit Reference + {:.no_toc} The ad unit object is where you configure what kinds of ads you will show in a given ad slot on your page, including: -+ Allowed media types (e.g., banner, native, and/or video) -+ Allowed sizes -+ AdUnit-specific first party data +* Allowed media types (e.g., banner, native, and/or video) +* Allowed sizes +* AdUnit-specific first party data It's also where you will configure bidders, e.g.: -+ Which bidders are allowed to bid for that ad slot -+ What information is passed to those bidders via their [parameters]({{site.baseurl}}/dev-docs/bidders.html) +* Which bidders are allowed to bid for that ad slot +* What information is passed to those bidders via their [parameters]({{site.baseurl}}/dev-docs/bidders.html) This page describes the properties of the `adUnit` object. @@ -42,7 +43,7 @@ See the table below for the list of properties on the ad unit. For example ad u | `video` | Optional | Object | Used to link an Ad Unit to the [Video Module][videoModule]. For allowed params see the [adUnit.video reference](#adUnit-video). | | `deferBilling` | Optional | Boolean | Used by a publisher to flag adUnits as being separately billable. This allows for a publisher to trigger billing manually for winning bids. See [pbjs.triggerBilling](/dev-docs/publisher-api-reference/triggerBilling.html) and [onBidBillable](/dev-docs/bidder-adaptor.html#registering-on-bid-billable) for more info. | - + ### adUnit.bids @@ -61,7 +62,7 @@ Note that `bids` is optional only for [Prebid Server stored impressions](#stored | `ortb2Imp` | Optional | Object | OpenRTB first-party data specific to this bidder. This is merged with, and takes precedence over, `adUnit.ortb2Imp`.| | `renderer` | Optional | Object | Custom renderer. Takes precedence over `adUnit.renderer`, but applies only to this bidder. | - + ### adUnit.mediaTypes @@ -74,7 +75,7 @@ See the table below for the list of properties in the `mediaTypes` object of the | [`native`](#adUnit.mediaTypes.native) | At least one of the `banner`, `native`, or `video` objects are required. | Object | Defines properties of a native ad. For properties, see [`adUnit.mediaTypes.native`](#adUnit.mediaTypes.native). | | [`video`](#adUnit.mediaTypes.video) | At least one of the `banner`, `native`, or `video` objects are required. | Object | Defines properties of a video ad. For examples, see [`adUnit.mediaTypes.video`](#adUnit.mediaTypes.video). | - + #### adUnit.mediaTypes.banner @@ -85,7 +86,7 @@ See the table below for the list of properties in the `mediaTypes` object of the | `pos` | Optional | Integer | OpenRTB page position value: 0=unknown, 1=above-the-fold, 3=below-the-fold, 4=header, 5=footer, 6=sidebar, 7=full-screen | | `name` | Optional | String | Name for this banner ad unit. Can be used for testing and debugging. | - + #### adUnit.mediaTypes.native @@ -93,7 +94,7 @@ The `native` object contains properties that correspond to the assets of the nat See [Prebid Native Implementation](/prebid/native-implementation.html) for details. - + #### adUnit.mediaTypes.video @@ -140,10 +141,9 @@ If `'video.context'` is set to `'adpod'` then the following parameters are also | `contentLengthSec` | Optional | Number | A number representing the length of the video in seconds. Example: `contentLengthSec = 1` | | `contentMode` | Optional | String | A string indicating the type of content being displayed in the video player. There are two options, `live` and `on-demand`. Example: `contentMode = 'on-demand'` | + - - - + ### adUnit.video @@ -163,18 +163,18 @@ When using the Video Module, the mediaTypes.video properties get filled out auto ## Examples -+ [Banner](#adUnit-banner-example) -+ [Video](#adUnit-video-example) - - [With the Video Module](#adUnit-video-module-example) - - [Instream](#adUnit-video-example-instream) - - [Outstream](#adUnit-video-example-outstream) - - [Adpod (Long-Form)](#adUnit-video-example-adpod) -+ [Native](#adUnit-native-example) -+ [Multi-Format](#adUnit-multi-format-example) -+ [Twin Codes](#adUnit-twin-codes-example) -+ [First Party Data](#adUnit-fpd-example) +* [Banner](#adUnit-banner-example) +* [Video](#adUnit-video-example) + * [With the Video Module](#adUnit-video-module-example) + * [Instream](#adUnit-video-example-instream) + * [Outstream](#adUnit-video-example-outstream) + * [Adpod (Long-Form)](#adUnit-video-example-adpod) +* [Native](#adUnit-native-example) +* [Multi-Format](#adUnit-multi-format-example) +* [Twin Codes](#adUnit-twin-codes-example) +* [First Party Data](#adUnit-fpd-example) - + ### Banner @@ -208,6 +208,7 @@ pbjs.addAdUnits({ #### With the Video Module For an example of a video ad unit linked to the Video Module, see below. For more detailed instructions see the [Video Module docs][videoModule]. + ```javascript pbjs.addAdUnits({ code: slot.code, @@ -230,7 +231,7 @@ pbjs.addAdUnits({ }); ``` - + #### Instream @@ -258,7 +259,7 @@ pbjs.addAdUnits({ }); ``` - + #### Outstream @@ -312,7 +313,8 @@ pbjs.addAdUnits({ ... }); ``` - + + #### Adpod (Long-Form) @@ -346,7 +348,7 @@ var longFormatAdUnit = { } ``` - + ### Native @@ -362,27 +364,27 @@ pbjs.addAdUnits({ assets: [{ required: 1, img: { - type: 1, + type: 1, hmin: 50 }, - },{ + },{ required: 1, title: { len: 80 }, - },{ + },{ required: 1, data: { type: 1, len: 30 }, - },{ + },{ required: 1, data: { type: 2, len: 100 }, - },{ + },{ required: 1, img: { type: 3, @@ -390,8 +392,8 @@ pbjs.addAdUnits({ wmin: 267 } }] - } - } + } + } }, bids: [ { @@ -404,13 +406,13 @@ pbjs.addAdUnits({ }); ``` - + ### Multi-Format For an example of a multi-format ad unit, see below. For more detailed instructions, see [Show Multi-Format Ads]({{site.baseurl}}/dev-docs/show-multi-format-ads.html). -{% highlight js %} +```javascript pbjs.addAdUnits([{ code: 'div-banner-native', @@ -421,16 +423,16 @@ pbjs.addAdUnits([{ ] }, native: { - ortb: { - ver: "1.2", - assets: [{ - required: 1, - img: { - type: 1, - hmin: 50 - } - }] - } + ortb: { + ver: "1.2", + assets: [{ + required: 1, + img: { + type: 1, + hmin: 50 + } + }] + } }, }, bids: [{ @@ -471,16 +473,16 @@ pbjs.addAdUnits([{ ] }, native: { - ortb: { - ver: "1.2", - assets: [{ - required: 1, - img: { - type: 1, - hmin: 50 - } - }] - } + ortb: { + ver: "1.2", + assets: [{ + required: 1, + img: { + type: 1, + hmin: 50 + } + }] + } }, video: { context: 'outstream', @@ -496,20 +498,21 @@ pbjs.addAdUnits([{ } ]); -{% endhighlight %} +``` - + ### Twin AdUnit Codes It's ok to have multiple AdUnits with the same `code`. This can be useful in scenarios where bidders have different capabilities for the same spot on the page. e.g. -- BidderA should receive both media types, while BidderB gets only one -- BidderA gets one size while BidderB gets another +* BidderA should receive both media types, while BidderB gets only one +* BidderA gets one size while BidderB gets another In this example, bidderA gets both banner and outstream, while bidderB gets only banner. -{% highlight js %} + +```javascript var adUnits = [ { code: 'test-div', @@ -550,18 +553,18 @@ In this example, bidderA gets both banner and outstream, while bidderB gets only ] } ]; -{% endhighlight %} +``` In this example, bidderA receives 2 bidRequest objects while bidderB receives one. If a bidder provides more than one bid for the same AdUnit.code, Prebid.js will use the highest bid when it's time to set targeting. - + ### First Party Data Example of an adunit-specific block of first party data: -{% highlight js %} +```javascript pbjs.addAdUnits({ code: "test-div", mediaTypes: { @@ -571,27 +574,28 @@ pbjs.addAdUnits({ }, ortb2Imp: { ext: { - data: { + data: { pbadslot: "homepage-top-rect", adUnitSpecificContextAttribute: "123" - } + } } }, ... }); -{% endhighlight %} +``` Notes: -- Only contextual data should be added on the AdUnit; user-related data goes in the [global first party data](/dev-docs/publisher-api-reference/setConfig.html#setConfig-fpd) config. -- For additional help with analytics and reporting you can use the [Prebid Ad Slot](/features/pbAdSlot.html), a special type of first party data. - +* Only contextual data should be added on the AdUnit; user-related data goes in the [global first party data](/dev-docs/publisher-api-reference/setConfig.html#setConfig-fpd) config. +* For additional help with analytics and reporting you can use the [Prebid Ad Slot](/features/pbAdSlot.html), a special type of first party data. + + ### Interstitial Ads Example of an adunit-specific interstitial signal: -{% highlight js %} +```javascript pbjs.addAdUnits({ code: "test-div", mediaTypes: { @@ -600,15 +604,15 @@ pbjs.addAdUnits({ } }, ortb2Imp: { - instl:1 + instl:1 }, ... }); -{% endhighlight %} +``` For more information on Interstitial ads, reference the [Interstitial feature page](/features/InterstitialAds.html). Additionally, to assist with billing optimization and interstitial ads, the triggerBilling and onBidBillable functionality can be utilized. See [pbjs.triggerBilling](/dev-docs/publisher-api-reference/triggerBilling.html) and [onBidBillable](/dev-docs/bidder-adaptor.html#registering-on-bid-billable) for more info. - + ### Prebid Server stored impressions @@ -675,16 +679,14 @@ pbjs.addAdUnits({ ## Related Topics -+ [Publisher API Reference](/dev-docs/publisher-api-reference) -+ [Conditional Ad Units][conditionalAds] -+ [Show Native Ads](/prebid/native-implementation.html) -+ [Show Video Ads](/dev-docs/show-video-with-a-dfp-video-tag.html) -+ [Show Outstream Video Ads](/dev-docs/show-outstream-video-ads.html) -+ [Show Long-Form Video Ads](/prebid-video/video-long-form.html) -+ [Prebid.org Video Examples](/examples/video/) -+ [Prebid.org Native Examples](/dev-docs//examples/native-ad-example.html) - - +* [Publisher API Reference](/dev-docs/publisher-api-reference) +* [Conditional Ad Units][conditionalAds] +* [Show Native Ads](/prebid/native-implementation.html) +* [Show Video Ads](/dev-docs/show-video-with-a-dfp-video-tag.html) +* [Show Outstream Video Ads](/dev-docs/show-outstream-video-ads.html) +* [Show Long-Form Video Ads](/prebid-video/video-long-form.html) +* [Prebid.org Video Examples](/examples/video/) +* [Prebid.org Native Examples](/dev-docs//examples/native-ad-example.html) diff --git a/dev-docs/analytics-ga.md b/dev-docs/analytics-ga.md index 6e9ebaa939..b147025d48 100644 --- a/dev-docs/analytics-ga.md +++ b/dev-docs/analytics-ga.md @@ -19,7 +19,7 @@ nav_section: reference ### Code Example -{% highlight js %} +```javascript // If you're using GA, this should already be in your page: (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ @@ -38,7 +38,7 @@ pbjs.que.push(function() { }); }); -{% endhighlight %} +``` ##### A Few Requirements @@ -56,7 +56,7 @@ See [this link](https://developers.google.com/analytics/devguides/collection/pro To track a lower volume of traffic in Google Analytics, you may specify a sample rate in the options. For example, to set up a 5% sample rate: -{% highlight js %} +```javascript pbjs.que.push(function() { pbjs.enableAnalytics({ provider: 'ga', @@ -67,7 +67,7 @@ pbjs.que.push(function() { } }); }); -{% endhighlight %} +``` At the start of each page, Prebid chooses a random number between 0 and 1 and logs the analytics only if the number is less than the supplied sample rate, which defaults to 1 (100%). @@ -82,11 +82,11 @@ Prebid.js sends out GA-compatible [Events](https://support.google.com/analytics/ In this example, the page has 1 ad unit with 3 bidders. The timeout is set to 400ms. Let's go through what Prebid Analytics sends out to GA: {: .table .table-bordered .table-striped } -| Time | What Happened | GA Events Sent | +| Time | What Happened | GA Events Sent | | :---- |:--------| :-------| -| 15ms | Prebid.js sends out bid requests to bidders AppNexus, OpenX, and Pubmatic. | Event 1: Category=`Prebid.js Bids`, Action=`Requests`, Label=`appnexus`, Value=1.
Event 2: Category=`Prebid.js Bids`, Action=`Requests`, Label=`openx`, Value=1.
Event 3: Category=`Prebid.js Bids`, Action=`Requests`, Label=`pubmatic`, Value=1 | -| 203ms | AppNexus' bid came back with a CPM of $2.314 and a latency of 188ms. | Event 1: Category=`Prebid.js Bids`, Action=`Bids`, Label=`appnexus`, Value=231.
Event 2: Category=`Prebid.js Bids`, Action=`Bid Load Time`, Label=`appnexus`, Value=188 | -| 274ms | Pubmatic's bid came back with a CPM of $0 and a latency of 259ms. | No bid event sent out because it is a no bid.
Event 1: Category=`Prebid.js Bids`, Action=`Bid Load Time`, Label=`appnexus`, Value=259 | +| 15ms | Prebid.js sends out bid requests to bidders AppNexus, OpenX, and Pubmatic. | Event 1: Category=`Prebid.js Bids`, Action=`Requests`, Label=`appnexus`, Value=1.
Event 2: Category=`Prebid.js Bids`, Action=`Requests`, Label=`openx`, Value=1.
Event 3: Category=`Prebid.js Bids`, Action=`Requests`, Label=`pubmatic`, Value=1 | +| 203ms | AppNexus' bid came back with a CPM of $2.314 and a latency of 188ms. | Event 1: Category=`Prebid.js Bids`, Action=`Bids`, Label=`appnexus`, Value=231.
Event 2: Category=`Prebid.js Bids`, Action=`Bid Load Time`, Label=`appnexus`, Value=188 | +| 274ms | Pubmatic's bid came back with a CPM of $0 and a latency of 259ms. | No bid event sent out because it is a no bid.
Event 1: Category=`Prebid.js Bids`, Action=`Bid Load Time`, Label=`appnexus`, Value=259 | | 415ms | Timeout is up because 400ms has passed since bid requests were sent. OpenX has timed out. | Event 1: Category=`Prebid.js Bids`, Action=`Timeouts`, Label=`openx`, Value=1 | | 476ms | OpenX's bid came back with a CPM of $2.831 and a latency of 461ms (a bid may still come back after a timeout). | Event 1: Category=`Prebid.js Bids`, Action=`Bids`, Label=`openx`, Value=283.
Event 2: Category=`Prebid.js Bids`, Action=`Bid Load Time`, Label=`openx`, Value=461 | | 572ms | Google Ad Manager completed its auction and the AppNexus $2.314 bid won. | Event 3: Category=`Prebid.js Bids`, Action=`Wins`, Label=`appnexus`, Value=231 | diff --git a/dev-docs/bidder-adaptor.md b/dev-docs/bidder-adaptor.md index 1f1ea8a295..cb671cfda5 100644 --- a/dev-docs/bidder-adaptor.md +++ b/dev-docs/bidder-adaptor.md @@ -9,6 +9,7 @@ sidebarType: 1 # How to Add a New Prebid.js Bidder Adapter + {:.no_toc} At a high level, a bidder adapter is responsible for: @@ -23,12 +24,12 @@ This page has instructions for writing your own bidder adapter. The instruction ## Planning your Adapter -+ [Required Adapter Rules](#bidder-adaptor-Required-Adapter-Conventions) -+ [Required Files](#bidder-adaptor-Required-Files) -+ [Designing your Bid Params](#bidder-adaptor-Designing-your-Bid-Params) -+ [HTTP Simple Requests](#bidder-adaptor-HTTP-simple-requests) +* [Required Adapter Rules](#bidder-adaptor-Required-Adapter-Conventions) +* [Required Files](#bidder-adaptor-Required-Files) +* [Designing your Bid Params](#bidder-adaptor-Designing-your-Bid-Params) +* [HTTP Simple Requests](#bidder-adaptor-HTTP-simple-requests) - + ### Required Adapter Rules @@ -43,7 +44,7 @@ In order to provide a fast and safe header bidding environment for publishers, t {: .alert.alert-danger :} The above list is **not** the full list of requirements. Failure to follow any of the required conventions defined in the [Module Rules](/dev-docs/module-rules.html) could lead to delays in approving your adapter for inclusion in Prebid.js. If you'd like to apply for an exception to one of the rules, make your request in a new [Prebid.js issue](https://github.com/prebid/Prebid.js/issues). - + ### Required Files @@ -51,16 +52,16 @@ With each adapter submission, there are two files required to be in the pull req * `modules/exampleBidAdapter.js`: the file containing the code for the adapter * `modules/exampleBidAdapter.md`: a markdown file containing key information about the adapter: - * The contact email of the adapter's maintainer. - * A test ad unit that will consistently return test creatives. This helps us to ensure future Prebid.js updates do not break your adapter. Note that if your adapter supports video (instream and/or outstream context) or native, you must also provide example parameters for each type. + * The contact email of the adapter's maintainer. + * A test ad unit that will consistently return test creatives. This helps us to ensure future Prebid.js updates do not break your adapter. Note that if your adapter supports video (instream and/or outstream context) or native, you must also provide example parameters for each type. Example markdown file: -{% highlight text %} +```md # Overview -``` +```markdown Module Name: Example Bidder Adapter Module Type: Bidder Adapter Maintainer: prebid@example.com @@ -71,7 +72,8 @@ Maintainer: prebid@example.com Module that connects to Example's demand sources # Test Parameters -``` + +```javascript var adUnits = [ { code: 'test-div', @@ -107,9 +109,9 @@ Module that connects to Example's demand sources ]; ``` -{% endhighlight %} +```html - + ### Designing your Bid Params @@ -117,7 +119,7 @@ The parameters of your ad request will be stored in the ad unit's `bid.params` o For more information about the kinds of information that can be passed using these parameters, see the example below, as well as [the existing bidder parameters]({{site.baseurl}}/dev-docs/bidders.html). -{% highlight js %} +```javascript { var adUnits = [{ @@ -144,9 +146,9 @@ For more information about the kinds of information that can be passed using the }] }]; -{% endhighlight %} +``` - + ### HTTP Simple Requests @@ -188,19 +190,20 @@ If you're the type that likes to skip to the answer instead of going through a t {: .alert.alert-warning :} If your adapter interfaces with an ORTB backend, you may take advantage of Prebid's [ORTB conversion library](https://github.com/prebid/Prebid.js/blob/master/libraries/ortbConverter/README.md), which provides most of the implementation for `buildRequests` and `interpretResponse`. -+ [Overview](#bidder-adaptor-Overview) -+ [Building the Request](#bidder-adaptor-Building-the-Request) -+ [Interpreting the Response](#bidder-adaptor-Interpreting-the-Response) -+ [Registering User Syncs](#bidder-adaptor-Registering-User-Syncs) -+ [Registering on Timeout](#bidder-adaptor-Registering-on-Timout) +* [Overview](#bidder-adaptor-Overview) +* [Building the Request](#bidder-adaptor-Building-the-Request) +* [Interpreting the Response](#bidder-adaptor-Interpreting-the-Response) +* [Registering User Syncs](#bidder-adaptor-Registering-User-Syncs) +* [Registering on Timeout](#bidder-adaptor-Registering-on-Timout) - + ### Overview The new code will reside under the `modules` directory with the name of the bidder suffixed by 'BidAdapter', e.g., `exampleBidAdapter.js`. Here are some guidelines for choosing a bidder code: + - The bidder code must be lower case alphanumeric. The only special character allowed is underscore. - The bidder code must be unique - make sure none of the other bid adapters is using the same code. - The bidder code should be unique for the first 6 characters - this consideration helps with generating unique targeting keys for use by some ad exchanges, such as Google Ad Manager. @@ -216,7 +219,7 @@ Compared to previous versions of Prebid, the new `BaseAdapter` model saves the a A high level example of the structure: -{% highlight js %} +```javascript import * as utils from 'src/utils'; import { registerBidder } from 'src/adapters/bidderFactory'; @@ -241,15 +244,15 @@ export const spec = { } registerBidder(spec); -{% endhighlight %} +``` - + ### Note on ORTB adapters If your adapter interfaces with an ORTB backend, you may take advantage of Prebid's [ORTB conversion library](https://github.com/prebid/Prebid.js/blob/master/libraries/ortbConverter/README.md), which provides most of the implementation for `buildRequests` and `interpretResponse`. - + ### Building the Request @@ -258,12 +261,12 @@ When the page asks Prebid.js for bids, your module's `buildRequests` function wi - `validBidRequests[]` - An array of bidRequest objects, one for each AdUnit that your module is involved in. This array has been processed for special features like sizeConfig, so it's the list that you should be looping through. - `bidderRequest` - The master bidRequest object. This object is useful because it carries a couple of bid parameters that are global to all the bids. -{% highlight js %} +```javascript buildRequests: function(validBidRequests, bidderRequest) { ... return ServerRequestObjects; } -{% endhighlight %} +``` Building the request will use data from several places: @@ -276,7 +279,7 @@ Building the request will use data from several places: Here is a sample array entry for `validBidRequests[]`: -{% highlight js %} +```javascript [{ adUnitCode: "test-div", auctionId: "b06c5141-fe8f-4cdf-9d7d-54415490a917", @@ -294,7 +297,7 @@ Here is a sample array entry for `validBidRequests[]`: src: "client", transactionId: "54a58774-7a41-494e-9aaf-fa7b79164f0c" }] -{% endhighlight %} +``` Retrieve your bid parameters from the `params` object. @@ -312,7 +315,7 @@ Other notes: Here is a sample bidderRequest object: -{% highlight js %} +```javascript { auctionId: "b06c5141-fe8f-4cdf-9d7d-54415490a917", auctionStart: 1579746300522, @@ -332,7 +335,7 @@ Here is a sample bidderRequest object: stack: ["http://mypage.org?pbjs_debug=true"] } } -{% endhighlight %} +``` Notes on parameters in the bidderRequest object: - **auctionID** is unique per call to `requestBids()`, but is the same across ad units. @@ -403,7 +406,7 @@ ServerRequest objects. These objects have this structure: Here's a sample block of code returning a ServerRequest object: -{% highlight js %} +```javascript return { method: 'POST', @@ -411,15 +414,15 @@ return { data: payloadObject }; -{% endhighlight %} +``` - + ### Interpreting the Response The `interpretResponse` function will be called when the browser has received the response from your server. The function will parse the response and create a bidResponse object containing one or more bids. The adapter should indicate no valid bids by returning an empty array. An example showing a single bid: -{% highlight js %} +```javascript // if the bid response was empty or an error, return [] // otherwise parse the response and return a bidResponses array @@ -450,7 +453,7 @@ The `interpretResponse` function will be called when the browser has received th brandId: BRAND_ID, brandName: BRAND_NAME, dchain: DEMAND_CHAIN_OBJECT, - demandSource: DEMAND_SOURCE + demandSource: DEMAND_SOURCE mediaType: MEDIA_TYPE, networkId: NETWORK_ID, networkName: NETWORK_NAME, @@ -461,7 +464,7 @@ The `interpretResponse` function will be called when the browser has received th bidResponses.push(bidResponse); return bidResponses; -{% endhighlight %} +``` {: .alert.alert-info :} Please provide as much information as possible in the `meta` object. Publishers use this @@ -519,7 +522,7 @@ bid currency. Header Bidding is a first-price auction, the best candidate for Prebid won't resolve any other macros in the creative (e.g. AUCTION_ID, AUCTION_CURRENCY). - + ### Registering User Syncs @@ -529,7 +532,7 @@ Given an array of all the responses from the server, `getUserSyncs` is used to d See below for an example implementation. For more examples, search for `getUserSyncs` in the [modules directory in the repo](https://github.com/prebid/Prebid.js/tree/master/modules). -{% highlight js %} +```javascript { getUserSyncs: function(syncOptions, serverResponses, gdprConsent, uspConsent) { @@ -558,9 +561,9 @@ See below for an example implementation. For more examples, search for `getUser } } -{% endhighlight %} +``` - + ### Registering on Timeout @@ -568,7 +571,7 @@ The `onTimeout` function will be called when an adapter has timed out for an auc Sample data passed to this function: -{% highlight js %} +```javascript [{ "bidder": "example", "bidId": "51ef8751f9aead", @@ -579,7 +582,7 @@ Sample data passed to this function: "timeout": 3000, "auctionId": "18fd8b8b0bd757" }] -{% endhighlight %} +``` ### Registering on Bid Won @@ -587,7 +590,7 @@ The `onBidWon` function will be called when a bid from the adapter won the aucti Sample data received by this function: -{% highlight js %} +```javascript { "bidder": "example", "width": 300, @@ -606,7 +609,7 @@ Sample data received by this function: "hb_size": "350x250" } } -{% endhighlight %} +``` ### Registering on Bid Billable @@ -614,7 +617,7 @@ The `onBidBillable` function will be called when it deems a bid to be billable. Sample data received by this function (same as what is recieved for onBidWon): -{% highlight js %} +```javascript { "bidder": "example", "width": 300, @@ -633,7 +636,7 @@ Sample data received by this function (same as what is recieved for onBidWon): "hb_size": "350x250" } } -{% endhighlight %} +``` ### Registering on Set Targeting @@ -641,7 +644,7 @@ The `onSetTargeting` function will be called when the adserver targeting has bee Sample data received by this function: -{% highlight js %} +```javascript { "bidder": "example", "width": 300, @@ -660,7 +663,7 @@ Sample data received by this function: "hb_size": "350x250" } } -{% endhighlight %} +``` ### Registering on Bidder Error @@ -668,7 +671,7 @@ The `onBidderError` function will be called when the bidder responded with an er Sample data received by this function: -{% highlight js %} +```javascript { error: XMLHttpRequest, bidderRequest: { @@ -692,13 +695,13 @@ Sample data received by this function: } } } -{% endhighlight %} +``` ### Adding adapter aliases Use aliases if you want to reuse your adapter using other name for your partner/client, or just a shortcut name. -{% highlight js %} +```javascript export const spec = { code: 'appnexus', @@ -713,7 +716,7 @@ export const spec = { ... } -{% endhighlight %} +``` spec.aliases can be an array of strings or objects. @@ -748,7 +751,7 @@ Follow the steps in this section to ensure that your adapter properly supports v Add the `supportedMediaTypes` argument to the spec object, and make sure VIDEO is in the list: -{% highlight js %} +```javascript export const spec = { code: BIDDER_CODE, @@ -756,7 +759,7 @@ export const spec = { ... } -{% endhighlight %} +``` {: .alert.alert-info :} If your adapter supports banner and video media types, make sure to include `'banner'` in the `supportedMediaTypes` array as well @@ -793,11 +796,11 @@ Video ad units have a publisher-defined video context, which can be either `'ins mediaTypes: { video: { context: 'outstream', - playerSize: [640, 480], - mimes: ['video/mp4'], - protocols: [1, 2, 3, 4, 5, 6, 7, 8], - playbackmethod: [2], - skip: 1 + playerSize: [640, 480], + mimes: ['video/mp4'], + protocols: [1, 2, 3, 4, 5, 6, 7, 8], + playbackmethod: [2], + skip: 1 // video params must be read from here in place of // or instead of bidder-specific parameters }, @@ -896,7 +899,7 @@ In both use cases, adapter is requesting bid responses for 20 placements in one Adapter must add following new properties to bid response -{% highlight js %} +```javascript { meta: { primaryCatId: '', // only needed if you want to ensure competitive separation @@ -906,7 +909,7 @@ Adapter must add following new properties to bid response durationSeconds: 30 } } -{% endhighlight %} +``` Appnexus Adapter uses above explained approach. You can refer [here](https://github.com/prebid/Prebid.js/blob/master/modules/appnexusBidAdapter.js) @@ -927,7 +930,7 @@ If the demand partner is going to use Prebid API for this process, their adapter **Example** -``` +```javascript getMappingFileInfo: function() { return { url: '', @@ -941,7 +944,7 @@ The mapping file is stored locally to expedite category conversion. Depending on To get the subcategory to use, call this function, which needs to be imported from the `bidderFactory`. -``` +```javascript getIabSubCategory(bidderCode, pCategory) ``` @@ -955,12 +958,12 @@ getIabSubCategory(bidderCode, pCategory) **Example** -{% highlight js %} +```javascript import { getIabSubCategory } from '../src/adapters/bidderFactory'; let primaryCatId = getIabSubCategory(bidderCode, pCategory) -{% endhighlight %} +``` #### Outstream Video Renderers @@ -976,7 +979,7 @@ The returned VAST URL or raw VAST XML should be added into `bid.vastUrl` or `bid For example: -{% highlight js %} +```javascript function createBid(status, reqBid, response) { let bid = bidfactory.createBid(status, reqBid); @@ -991,7 +994,7 @@ function createBid(status, reqBid, response) { return bid; } -{% endhighlight %} +``` ### Deals in Ad Pods @@ -1023,7 +1026,7 @@ The adapter code sample below fulfills requirement #2, unpacking the server's re 1. Checking for native assets on the response. 2. If present, filling in the `native` object with those assets. -{% highlight js %} +```javascript /* Does the bidder respond with native assets? */ else if (FEATURES.NATIVE && rtbBid.rtb.native) { @@ -1045,7 +1048,7 @@ else if (FEATURES.NATIVE && rtbBid.rtb.native) { }; } -{% endhighlight %} +``` The full list of assets your bidder can set are defined [by legacy Prebid.js](/prebid/native-implementation-legacy.html#3-prebidjs-native-adunit-overview). All assets can be returned as strings, or images can be returned as objects with attributes `url`, `height`, and `width`. @@ -1097,7 +1100,7 @@ For example tests, see [the existing adapter test suites](https://github.com/pre ## Full Bid Adapter Example -{% highlight js %} +```javascript import * as utils from 'src/utils'; import {config} from 'src/config'; @@ -1106,8 +1109,8 @@ import {BANNER, VIDEO, NATIVE} from 'src/mediaTypes.js'; const BIDDER_CODE = 'example'; export const spec = { code: BIDDER_CODE, - gvlid: 0000000000, - supportedMediaTypes: [BANNER, VIDEO, NATIVE], + gvlid: 0000000000, + supportedMediaTypes: [BANNER, VIDEO, NATIVE], aliases: [{code: "myAlias", gvlid: 99999999999} ], /** * Determines whether or not the given bid request is valid. @@ -1239,7 +1242,7 @@ export const spec = { } registerBidder(spec); -{% endhighlight %} +``` ## Submitting your adapter @@ -1317,5 +1320,5 @@ The Prebid.org [download page](/download.html) will automatically be updated wit ## Further Reading -+ [Prebid.js Repo - Bidder Adapter Sources](https://github.com/prebid/Prebid.js/tree/master/modules) -+ [Module Rules](/dev-docs/module-rules.html) +* [Prebid.js Repo - Bidder Adapter Sources](https://github.com/prebid/Prebid.js/tree/master/modules) +* [Module Rules](/dev-docs/module-rules.html) diff --git a/dev-docs/bidders/aax.md b/dev-docs/bidders/aax.md index 0d242b4194..011159bfb8 100644 --- a/dev-docs/bidders/aax.md +++ b/dev-docs/bidders/aax.md @@ -29,7 +29,7 @@ sidebarType: 1 | `crid` | required | The placement id provided by Aax. | `'aax_crid'` | `string` | | `video` | required for video Ad units | Object containing video targeting parameters. See [Video Object](#aax-video-object) for details.|`video: { maxduration: 60 }` | `object` | - + #### Video Object @@ -40,20 +40,21 @@ sidebarType: 1 |minduration|integer|(Recommended) Specifies the minimum video ad duration, in seconds.|10| |maxduration|integer|(Recommended) Specifies the maximum video ad duration, in seconds.|60| |w|integer|(Recommended) Specifies the width of the video player, in pixels. Required if playerSize not present in `mediaTypes.video`|640| -|h|integer|(Recommended) Specifies the height of the video player, in pixels. Required if playerSize not present in `mediaTypes.video`|480| -|startdelay |integer | (Recommended) Specifies the start delay of the video ad|0| -|battr| array of integers|Specifies the video creative attributes to block. Refer to section 5.3 of the IAB specification for a list of attributes.| [ 13, 14 ]| -playbackmethod| array of integers| Specifies the allowed playback methods. If not specified, all are assumed to be allowed. Currently supported values are: `1: Autoplay, sound on`; `2: Autoplay, sound off`; `3: Click to play`; `4: Mouse over to play`|[1, 3]| -|api| array of integers| Specifies the supported API frameworks for this impression. If an API is not explicitly listed, it is assumed not to be supported. Currently supported values are: `1: VPAID 1.0`; `2: VPAID 2.0`; `3: MRAID-1`; `4: ORMMA`; `5: MRAID-2`|[1, 2]| -|protocols |array of integers| Array of supported video protocols. Currently supported values are: `1: VAST 1.0`; `2: VAST 2.0`; `3: VAST 3.0`; `4: VAST 1.0 Wrapper`; `5: VAST 2.0 Wrapper`; `6: VAST 3.0 Wrapper`; `7: VAST 4.0`|[1, 2]| -|placement |integer|Placement type for the impression. Possible options: `1: In-Stream`; `2: In-banner`; `3: Outstream/In-article`; `4: In-feed`; `5: Interstitial/Slider/Floating`; `6: Long-Form`;|1| +|h|integer|(Recommended) Specifies the height of the video player, in pixels. Required if playerSize not present in `mediaTypes.video`|480| +|startdelay |integer | (Recommended) Specifies the start delay of the video ad|0| +|battr| array of integers|Specifies the video creative attributes to block. Refer to section 5.3 of the IAB specification for a list of attributes.| [ 13, 14 ]| +playbackmethod| array of integers| Specifies the allowed playback methods. If not specified, all are assumed to be allowed. Currently supported values are: `1: Autoplay, sound on`; `2: Autoplay, sound off`; `3: Click to play`; `4: Mouse over to play`|[1, 3]| +|api| array of integers| Specifies the supported API frameworks for this impression. If an API is not explicitly listed, it is assumed not to be supported. Currently supported values are: `1: VPAID 1.0`; `2: VPAID 2.0`; `3: MRAID-1`; `4: ORMMA`; `5: MRAID-2`|[1, 2]| +|protocols |array of integers| Array of supported video protocols. Currently supported values are: `1: VAST 1.0`; `2: VAST 2.0`; `3: VAST 3.0`; `4: VAST 1.0 Wrapper`; `5: VAST 2.0 Wrapper`; `6: VAST 3.0 Wrapper`; `7: VAST 4.0`|[1, 2]| +|placement |integer|Placement type for the impression. Possible options: `1: In-Stream`; `2: In-banner`; `3: Outstream/In-article`; `4: In-feed`; `5: Interstitial/Slider/Floating`; `6: Long-Form`;|1| Besides the above-mentioned parameters, we support all other OpenRTB 2.x video objects as optional parameters. In addition to `bids[].params.video`, Aax adapter consumes parameters specified in the `mediaTypes.video`. #### Example of Instream Video Ad-unit -``` + +```javascript var videoAdUnit = { code: 'video1', mediaTypes: { @@ -75,7 +76,8 @@ var videoAdUnit = { ``` #### Example of Native Ad-unit -``` + +```javascript var adUnits = [{ code: 'div-gpt-ad-6874091242345-0', mediaTypes: { @@ -102,7 +104,8 @@ var adUnits = [{ ``` #### Example of Banner Ad-unit -``` + +```javascript var adUnits = [{ code: 'div-gpt-ad-6874091242345-0', mediaTypes: { diff --git a/dev-docs/bidders/adlivetech.md b/dev-docs/bidders/adlivetech.md index 3f378af1dd..bb2d7921e8 100644 --- a/dev-docs/bidders/adlivetech.md +++ b/dev-docs/bidders/adlivetech.md @@ -24,7 +24,7 @@ sidebarType: 1 - [Bidder Config](#bidder-config) - [First Party Data](#first-party-data) - + ### Bid Params @@ -35,12 +35,13 @@ sidebarType: 1 | `keywords` | optional | A set of key-value pairs applied to all ad slots on the page. Values can be empty. | `keywords: { topic: ['stress', 'fear'] }` | `object` | | `bidFloor` | optional | Floor of the impression opportunity. If present in the request overrides XML info. | `0.8` | `float` | - + ### Bidder Config You can allow writing in localStorage `pbjs.setBidderConfig` for the bidder `adlivetech` -``` + +```javascript pbjs.setBidderConfig({ bidders: ["adlivetech"], config: { @@ -48,9 +49,10 @@ pbjs.setBidderConfig({ } }) ``` + If it will be "true" this allow Adlivetech Bid Adapter to write userId in first party localStorage - + ### First Party Data diff --git a/dev-docs/bidders/apacdex.md b/dev-docs/bidders/apacdex.md index 9ba8994acb..1806244443 100644 --- a/dev-docs/bidders/apacdex.md +++ b/dev-docs/bidders/apacdex.md @@ -25,7 +25,7 @@ sidebarType: 1 - [Sample Video Ad Unit: Instream](#sample-video-ad-unit-instream) - [Sample Video Ad Unit: Outstream](#sample-video-ad-unit-outstream) - + ### Bid Params @@ -39,7 +39,7 @@ sidebarType: 1 (*) Please do not use `placementId` and `siteId` at the same time. - + ### Geo Object @@ -54,7 +54,7 @@ If the publisher has GEO data of the user's device. Make it available through th | `lastfix` | optional | Number of seconds since this geolocation fix was established. Note that devices may cache location data across multiple fetches. Ideally, this value should be from the time the actual fix was taken. | `30` | `integer` | | `utcoffset` | optional | Local time as the number +/- of minutes from UTC. | `-420` | `integer` | - + ### Video Ad Unit @@ -80,10 +80,11 @@ Publishers declare video inventory by passing the following parameters via media Lists of values are in the [OpenRTB 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) documentation as referenced above. - + ### Sample Banner Ad Unit -``` + +```javascript var adUnits = [ { code: 'test-div', @@ -105,10 +106,11 @@ var adUnits = [ ]; ``` - + ### Sample Video Ad Unit: Instream -``` + +```javascript var instreamAdUnit = { code: 'test-div', sizes: [[640, 480]], @@ -139,13 +141,15 @@ var instreamAdUnit = { ] }; ``` -mediaTypes.video object reference to section 3.2.7 Object: Video in the OpenRTB 2.5 document + +`mediaTypes.video` object reference to section 3.2.7 Object: Video in the OpenRTB 2.5 document You must review all video parameters to ensure validity for your player and DSPs - + ### Sample Video Ad Unit: Outstream -``` + +```javascript var outstreamAdUnit = { code: 'test-div', sizes: [[410, 231]], @@ -175,5 +179,6 @@ var outstreamAdUnit = { ] }; ``` -mediaTypes.video object reference to section 3.2.7 Object: Video in the OpenRTB 2.5 document + +`mediaTypes.video` object reference to section 3.2.7 Object: Video in the OpenRTB 2.5 document You must review all video parameters to ensure validity for your player and DSPs diff --git a/dev-docs/bidders/appier.md b/dev-docs/bidders/appier.md index 6271f7dec7..5061024784 100644 --- a/dev-docs/bidders/appier.md +++ b/dev-docs/bidders/appier.md @@ -9,7 +9,7 @@ gdpr_supported: true sidebarType: 1 --- - + #### Bid Params @@ -18,14 +18,13 @@ sidebarType: 1 |-----------|----------|---------------------------|------------|----------| | `hzid` | required | The zone ID from Appier. | `"WhM5WIOp"` | `string` | - - + #### Custom Settings (Optional) Set the "farm" to use region-specific server -``` +```javascript pbjs.que.push(function() { // use the bid server in Taiwan (country code: tw) pbjs.setConfig({ @@ -38,7 +37,7 @@ pbjs.que.push(function() { Explicitly override the bid server used for bidding -``` +```javascript pbjs.que.push(function() { pbjs.setConfig({ appier: { diff --git a/dev-docs/bidders/appnexus.md b/dev-docs/bidders/appnexus.md index 4eb2b4f7c9..255049c3a1 100644 --- a/dev-docs/bidders/appnexus.md +++ b/dev-docs/bidders/appnexus.md @@ -20,7 +20,7 @@ gvl_id: 32 sidebarType: 1 --- -### Disclosure: +### Disclosure This adapter is known to use an HTTP 1 endpoint. Header bidding often generates multiple requests to the same host and bidders are encouraged to change to HTTP 2 or above to help improve publisher page performance via multiplexing. @@ -41,7 +41,7 @@ This adapter is known to use an HTTP 1 endpoint. Header bidding often generates - [Debug Auction](#debug-auction) - [Prebid Server Test Request](#prebid-server-test-request) - + {: .alert.alert-danger :} All AppNexus (Xandr) placements included in a single call to `requestBids` must belong to the same parent Publisher. If placements from two different publishers are included in the call, the AppNexus bidder will not return any demand for those placements.
@@ -77,7 +77,7 @@ The table below will reflect both formats, though it's recommended to use the lo | `externalImpId` or `external_imp_id` | optional | Specifies the unique identifier of an externally generated auction. | `'bacbab02626452b097f6030b3c89ac05'` | `string` | | `generate_ad_pod_id` | optional | Signal to AppNexus to split impressions by ad pod and add unique ad pod id to each request. Specific to long form video endpoint only. Supported by Prebid Server, not Prebid JS. | `true` | `boolean` | - + #### Video Object @@ -92,8 +92,7 @@ The table below will reflect both formats, though it's recommended to use the lo | `playback_method` | A string that sets the playback method supported by the publisher. Allowed values: `"auto_play_sound_on"`; `"auto_play_sound_off"`; `"click_to_play"`; `"mouse_over"`; `"auto_play_sound_unknown"`. | `string` | | `frameworks` | Array of integers listing API frameworks supported by the publisher. Allowed values: None: `0`; VPAID 1.0: `1`; VPAID 2.0: `2`; MRAID 1.0: `3`; MRAID 2.0: `4`; ORMMA: `5`; OMID 1.0 `6`. | `Array` | - - + #### User Object @@ -107,8 +106,7 @@ The table below will reflect both formats, though it's recommended to use the lo | `dnt` | Do not track flag. Indicates if tracking cookies should be disabled for this auction | `true` | `boolean` | | `language` | Two-letter ANSI code for this user's language. | `EN` | `string` | - - + #### App Object @@ -121,13 +119,13 @@ AppNexus supports using prebid within a mobile app's webview. If you are interes | `device_id` | Object that contains the advertising identifiers of the user (`idfa`, `aaid`, `md5udid`, `sha1udid`, or `windowsadid`). | `{ aaid: "38400000-8cf0-11bd-b23e-10b96e40000d" }` | `object` | | `geo` | Object that contains the latitude (`lat`) and longitude (`lng`) of the user. | `{ lat: 40.0964439, lng: -75.3009142 }` | `object` | - + #### Custom Targeting keys AppNexus returns custom keys that can be sent to the adserver through bidderSettings: buyerMemberId, dealPriority, and dealCode. The following snippet demonstrates how to add these custom keys as key-value pairs. -``` +```javascript pbjs.bidderSettings = { appnexus: { adserverTargeting: [ @@ -153,14 +151,15 @@ pbjs.bidderSettings = { } ``` - + #### Auction Level Keywords It's possible to pass a set of keywords for the whole request, rather than a particular adUnit. Though they would apply to all adUnits (which include the appnexus bidder) in an auction, these keywords can work together with the bidder level keywords (if for example you want to have specific targeting for a particular adUnit). Below is an example of how to define these auction level keywords for the appnexus bidder: -``` + +```javascript pbjs.setConfig({ appnexusAuctionKeywords: { genre: ['classical', 'jazz'], @@ -171,14 +170,13 @@ pbjs.setConfig({ Like in the bidder.params.keywords, the values here can be empty. Please see the section immediately below for more details. - + #### Passing Keys Without Values It's possible to use the `keywords` parameter to define keys that do not have any associated values. Keys with empty values can be created in Prebid.js and can also be sent through Prebid Server to AppNexus. The following are examples of sending keys with empty values: - -``` +```javascript keywords: { myKeyword: '', myOtherKeyword: [''] @@ -189,14 +187,14 @@ The preceding example passes the key `myKeyword` with an empty value. The key `m You can define keys with values and without values in the same `keywords` definition. In this next example, we've defined the key `color` with an array of values: `red`, `blue`, and `green`. We've followed that with the key `otherKeyword` with an empty value array. -``` +```javascript keywords: { color: ['red', 'blue', 'green'], otherKeyword: [''] } ``` - + #### First Party Data @@ -206,14 +204,13 @@ At this time however, the `appnexus` bidder only reads the First Party Data when PBS/PSP supports all first party data fields: site, user, segments, and imp-level first party data. - - + #### User Sync in AMP If you are syncing user id's with Prebid Server and are using AppNexus' managed service, see [AMP Implementation Guide cookie-sync instructions](/dev-docs/show-prebid-ads-on-amp-pages.html#user-sync) for details. - + #### Mobile App Display Manager Version @@ -231,9 +228,9 @@ Enabling the AppNexus Debug Auction feature should only be done for diagnosing t To understand what is happening behind the scenes during an auction, you can enable a debug auction by adding an `apn_prebid_debug` cookie with a JSON string. For example: -{% highlight js %} +```javascript { "enabled": true, "dongle": "QWERTY", "debug_timeout": 1000, "member_id": 958 } -{% endhighlight %} +``` To view the results of the debug auction, add the `pbjs_debug=true` query string parameter and open your browser's developer console. @@ -251,22 +248,22 @@ The following test parameters can be used to verify that Prebid Server is workin server-side Appnexus adapter. This example includes an `imp` object with an Appnexus test placement ID and sizes that would match with the test creative. -``` - "imp": [{ - "id": "some-impression-id", - "banner": { - "format": [{ - "w": 600, - "h": 500 - }, { - "w": 300, - "h": 600 - }] - }, - "ext": { - "appnexus": { - "placement_id": 13144370 - } - } - }] +```json +"imp": [{ + "id": "some-impression-id", + "banner": { + "format": [{ + "w": 600, + "h": 500 + }, { + "w": 300, + "h": 600 + }] + }, + "ext": { + "appnexus": { + "placement_id": 13144370 + } + } +}] ``` diff --git a/dev-docs/bidders/astraone.md b/dev-docs/bidders/astraone.md index e286f085af..044075e224 100644 --- a/dev-docs/bidders/astraone.md +++ b/dev-docs/bidders/astraone.md @@ -15,28 +15,25 @@ You can use this adapter to get a bid from AstraOne. Please reach out to your AstraOne account team before using this plugin to get placeId. The code below returns a demo ad. - ### Bid Params {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |---------------------|---------------------|-------------------------------------------------------------------|-------------------------------------------------------------------------------|----------| | `placeId` | required | The place id. | '5af45ad34d506ee7acad0c26' | `string` | -| `imageUrl` | required | URL of the image on which the banner will be displayed. | 'https://creative.astraone.io/files/default_image-1-600x400.jpg' | `string` | +| `imageUrl` | required | URL of the image on which the banner will be displayed. | `'https://creative.astraone.io/files/default_image-1-600x400.jpg'` | `string` | | `placement` | required | Adunit placement, possible values: inImage | 'inImage' | `string` | - ### InImage Example page - ```html - - Prebid.js Banner Example - - - + + Prebid.js Banner Example + + + + -

Prebid.js InImage Banner Test

+

Prebid.js InImage Banner Test

-
- +
+ - -
+ +
``` diff --git a/dev-docs/bidders/duration.md b/dev-docs/bidders/duration.md index 4943f68984..f7980da4b3 100644 --- a/dev-docs/bidders/duration.md +++ b/dev-docs/bidders/duration.md @@ -26,51 +26,52 @@ sidebarType: 1 | `placementId` | optional | placementId is provided by your Duration Media account manager(s). This parameter allows to report on a specific ad unit | | `integer` | | `video`| optional | Object containing video targeting parameters. Note that this parameter is not used in Prebid Server. See [Video Object](#duration-video-object) for details. | `video: { playback_method: ['auto_play_sound_off'] }` | `object`| - ### Note + If you are using Google Ad Manager (GAM), it is highly recommended to make sure the “Serve in Safeframe” box in creative settings is unchecked. If you absolutely want to run Duration Media in a Saferame creative, please contact your Duration Media repsentative to coordinate this setup. ### Test Parameters -``` - var adUnits = [ - { - code: 'test-div1', - mediaTypes: { - banner: { - sizes: [[300, 250]], // a display size - } - }, - bids: [ - { - bidder: "duration", - params: { - siteId: 2, - placementId: 3 - } - } - ] - },{ - code: 'test-div2', - mediaTypes: { - banner: { - sizes: [[320, 50]], // a mobile size + +```javascript +var adUnits = [ + { + code: 'test-div1', + mediaTypes: { + banner: { + sizes: [[300, 250]], // a display size + } + }, + bids: [ + { + bidder: "duration", + params: { + siteId: 2, + placementId: 3 } - }, - bids: [ - { - bidder: "duration", - params: { - siteId: 2 - } + } + ] + },{ + code: 'test-div2', + mediaTypes: { + banner: { + sizes: [[320, 50]], // a mobile size + } + }, + bids: [ + { + bidder: "duration", + params: { + siteId: 2 } - ] - } - ]; + } + ] + } +]; ``` - + #### Video Object @@ -84,4 +85,3 @@ If you absolutely want to run Duration Media in a Saferame creative, please cont | `minduration` | Integer that defines the minimum video ad duration in seconds. | `integer` | | `maxduration` | Integer that defines the maximum video ad duration in seconds. | `integer` | | `frameworks` | Array of integers listing API frameworks supported by the publisher. Allowed values: None: `0`; VPAID 1.0: `1`; VPAID 2.0: `2`; MRAID 1.0: `3`; ORMMA: `4`; MRAID 2.0: `5`. | `Array` | - diff --git a/dev-docs/bidders/goldbach.md b/dev-docs/bidders/goldbach.md index 343dbbaa1e..f637f537c6 100644 --- a/dev-docs/bidders/goldbach.md +++ b/dev-docs/bidders/goldbach.md @@ -29,7 +29,7 @@ sidebarType: 1 - [Mobile App Display Manager Version](#mobile-app-display-manager-version) - [Debug Auction](#debug-auction) - + {: .alert.alert-danger :} All Goldbach (Xandr) placements included in a single call to `requestBids` must belong to the same parent Publisher. If placements from two different publishers are included in the call, the Goldbach bidder will not return any demand for those placements.
@@ -61,7 +61,7 @@ All Goldbach (Xandr) placements included in a single call to `requestBids` must | `externalImpId` | optional | Specifies the unique identifier of an externally generated auction. | `'bacbab02626452b097f6030b3c89ac05'` | `string` | | `generate_ad_pod_id`| optional | Signal to Goldbach to split impressions by ad pod and add unique ad pod id to each request. Specific to long form video endpoint only. Supported by Prebid Server, not Prebid JS. | `true` | `boolean` | - + #### Video Object @@ -76,8 +76,7 @@ All Goldbach (Xandr) placements included in a single call to `requestBids` must | `playback_method` | A string that sets the playback method supported by the publisher. Allowed values: `"auto_play_sound_on"`; `"auto_play_sound_off"`; `"click_to_play"`; `"mouse_over"`; `"auto_play_sound_unknown"`. | `string` | | `frameworks` | Array of integers listing API frameworks supported by the publisher. Allowed values: None: `0`; VPAID 1.0: `1`; VPAID 2.0: `2`; MRAID 1.0: `3`; MRAID 2.0: `4`; ORMMA: `5`; OMID 1.0 `6`. | `Array` | - - + #### User Object @@ -91,8 +90,7 @@ All Goldbach (Xandr) placements included in a single call to `requestBids` must | `dnt` | Do not track flag. Indicates if tracking cookies should be disabled for this auction | `true` | `boolean` | | `language` | Two-letter ANSI code for this user's language. | `EN` | `string` | - - + #### App Object @@ -105,13 +103,13 @@ Goldbach supports using prebid within a mobile app's webview. If you are interes | `device_id` | Object that contains the advertising identifiers of the user (`idfa`, `aaid`, `md5udid`, `sha1udid`, or `windowsadid`). | `{ aaid: "38400000-8cf0-11bd-b23e-10b96e40000d" }` | `object` | | `geo` | Object that contains the latitude (`lat`) and longitude (`lng`) of the user. | `{ lat: 40.0964439, lng: -75.3009142 }` | `object` | - + #### Custom Targeting keys Goldbach returns custom keys that can be sent to the adserver through bidderSettings: buyerMemberId, dealPriority, and dealCode. The following snippet demonstrates how to add these custom keys as key-value pairs. -``` +```javascript pbjs.bidderSettings = { godlbach: { adserverTargeting: [ @@ -137,14 +135,14 @@ pbjs.bidderSettings = { } ``` - + #### Passing Keys Without Values It's possible to use the `keywords` parameter to define keys that do not have any associated values. Keys with empty values can be created in Prebid.js and can also be sent through Prebid Server to Goldbach. The following are examples of sending keys with empty values: -``` +```javascript keywords: { myKeyword: '', myOtherKeyword: [''] @@ -155,20 +153,20 @@ The preceding example passes the key `myKeyword` with an empty value. The key `m You can define keys with values and without values in the same `keywords` definition. In this next example, we've defined the key `color` with an array of values: `red`, `blue`, and `green`. We've followed that with the key `otherKeyword` with an empty value array. -``` +```javascript keywords: { color: ['red', 'blue', 'green'], otherKeyword: [''] } ``` - + #### User Sync in AMP If you are syncing user id's with Prebid Server and are using Goldbach's managed service, see [AMP Implementation Guide cookie-sync instructions](/dev-docs/show-prebid-ads-on-amp-pages.html#user-sync) for details. - + #### Mobile App Display Manager Version @@ -186,9 +184,9 @@ Enabling the Goldbach Debug Auction feature should only be done for diagnosing t To understand what is happening behind the scenes during an auction, you can enable a debug auction by adding an `apn_prebid_debug` cookie with a JSON string. For example: -{% highlight js %} +```javascript { "enabled": true, "dongle": "QWERTY", "debug_timeout": 1000, "member_id": 958 } -{% endhighlight %} +``` To view the results of the debug auction, add the `pbjs_debug=true` query string parameter and open your browser's developer console. @@ -199,4 +197,3 @@ To view the results of the debug auction, add the `pbjs_debug=true` query string | `dongle` | Your account's unique debug password. | `QWERTY` | `string` | | `member_id` | The ID of the member running the debug auction | `958` | `integer` | | `debug_timeout` | The timeout for the debug auction results to be returned | `3000` | `integer` | - diff --git a/dev-docs/bidders/grid.md b/dev-docs/bidders/grid.md index c3984c8b5c..f366b36fca 100644 --- a/dev-docs/bidders/grid.md +++ b/dev-docs/bidders/grid.md @@ -27,7 +27,7 @@ sidebarType: 1 - [First Party Data](#first-party-data) - [Native setup example (s2s only)](#native-setup-example-s2s-only) - + ### Bid Params @@ -37,12 +37,13 @@ sidebarType: 1 | `uid` | required | Represents the MediaGrid bidder system Ad Slot ID associated with the respective div id from the site page. | `1` | `integer` | | `bidFloor` | optional | Floor of the impression opportunity. If present in the request overrides XML info. | `0.8` | `float` | - + ### Bidder Config You can allow writing in localStorage `pbjs.setBidderConfig` for the bidder `grid` -``` + +```javascript pbjs.setBidderConfig({ bidders: ["grid"], config: { @@ -50,9 +51,10 @@ pbjs.setBidderConfig({ } }) ``` + If it will be "true" this allow TheMediaGrid Bid Adapter to write userId in first party localStorage - + ### First Party Data @@ -73,12 +75,13 @@ AdUnit-specific data using `AdUnit.ortb2Imp` supports following fields: - `ortb2.imp[].ext.data.*` - `ortb2.imp[].instl` - + ### Native setup example (s2s only) Setup native in adUnit mediaTypes, for example: -``` + +```javascript ... mediaTypes: { native: { diff --git a/dev-docs/bidders/hybrid.md b/dev-docs/bidders/hybrid.md index aaeebc1e85..7520627d31 100644 --- a/dev-docs/bidders/hybrid.md +++ b/dev-docs/bidders/hybrid.md @@ -15,16 +15,14 @@ You can use this adapter to get a bid from Hybrid.ai Please reach out to your Hybrid.ai account team before using this plugin to get placeId. The code below returns a demo ad. - ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------------|------------------------|-------------------------------------------------------------------|--------------------------------------|----------| -| `placeId` | required | The place id. | '5af45ad34d506ee7acad0c26' | `string` | -| `placement` | required | Adunit placement, possible values: banner, video, inImage | 'banner' | `string` | -| `imageUrl` | required for inImage | URL of the image on which the banner will be displayed | 'https://hybrid.ai/images/image.jpg' | `string` | - +| Name | Scope | Description | Example | Type | +|---------------------|------------------------|-------------------------------------------------------------------|----------------------------------------|----------| +| `placeId` | required | The place id. | '5af45ad34d506ee7acad0c26' | `string` | +| `placement` | required | Adunit placement, possible values: banner, video, inImage | 'banner' | `string` | +| `imageUrl` | required for inImage | URL of the image on which the banner will be displayed | `'https://hybrid.ai/images/image.jpg'` | `string` | ### Sample Banner Ad Unit @@ -94,10 +92,10 @@ var adUnits = [{ - - Prebid.js Banner Example - - - + + Prebid.js Banner Example + + + + -

Prebid.js Banner Ad Unit Test

-
- - -
+

Prebid.js Banner Ad Unit Test

+
+ + +
``` diff --git a/dev-docs/bidders/improvedigital.md b/dev-docs/bidders/improvedigital.md index eebe5e9af3..739baf9f0f 100755 --- a/dev-docs/bidders/improvedigital.md +++ b/dev-docs/bidders/improvedigital.md @@ -33,7 +33,6 @@ sidebarType: 1 | `extend` | optional | See the [Extend mode section](#improvedigital-extend) | `true` | `boolean` | | `rendererConfig` | optional | Configuration object for JS renderer of the RAZR creatives. Provided by Improve Digital. | `{ key1: value1 }` | `object` | - ### Configuration @@ -41,7 +40,8 @@ sidebarType: 1 #### Sizes By default, the adapter doesn't send Prebid ad unit sizes to Improve Digital's ad server and the sizes defined for each placement in the Polaris platform will be used. If the ad server should only respond with creative sizes as defined in Prebid ad unit configuration, turn on `usePrebidSizes` adapter parameter like this: -``` + +```javascript pbjs.setConfig({ improvedigital: { usePrebidSizes: true } }); @@ -53,7 +53,7 @@ pbjs.setConfig({ Global configuration for the special creative format renderer. Please use [rendererConfig bid param](#improvedigital-params) for ad slot specific configuration. -``` +```javascript pbjs.setConfig({ improvedigital: { rendererConfig: { @@ -69,10 +69,11 @@ pbjs.setConfig({ Improve Digital Extend mode provides publishers with access to additional demand from other SSPs. Before enabling please contact our team for more information. The Extend mode can be enabled: + * per ad unit via the `extend` [bid param](#improvedigital-params) * for all ad units via `setConfig()`: -``` +```javascript pbjs.setConfig({ improvedigital: { extend: true @@ -80,42 +81,46 @@ pbjs.setConfig({ }); ``` - + ### Examples Examples of different ad unit formats can be found in [Prebid.js ad unit reference](https://docs.prebid.org/dev-docs/adunit-reference.html#adUnit-banner-example). Improve Digital bidder must be added in the ad unit's `bids` array. Example: - pbjs.addAdUnits({ - code: 'banner1', - sizes: [[728, 90], [970, 250]], - bids: [ - { - bidder: 'improvedigital', - params: { - placementId: 1111111, - publisherId: 1234 - } +```javascript +pbjs.addAdUnits({ + code: 'banner1', + sizes: [[728, 90], [970, 250]], + bids: [ + { + bidder: 'improvedigital', + params: { + placementId: 1111111, + publisherId: 1234 } - ] - }); + } + ] +}); +``` #### Example for Key-Values - pbjs.addAdUnits({ - code: 'banner1', - sizes: [[600, 290]], - bids: [ - { - bidder: 'improvedigital', - params: { - placementId: 1111111, - publisherId: 1234, - keyValues: { - testKey1: ["testValueA"], - testKey2: ["testValueB", "testValueC"] - } +```javascript +pbjs.addAdUnits({ + code: 'banner1', + sizes: [[600, 290]], + bids: [ + { + bidder: 'improvedigital', + params: { + placementId: 1111111, + publisherId: 1234, + keyValues: { + testKey1: ["testValueA"], + testKey2: ["testValueB", "testValueC"] } } - ] - }); + } + ] +}); +``` diff --git a/dev-docs/bidders/ix-server.md b/dev-docs/bidders/ix-server.md index dbcd1baaa5..1c9e08bb2d 100644 --- a/dev-docs/bidders/ix-server.md +++ b/dev-docs/bidders/ix-server.md @@ -26,21 +26,20 @@ sidebarType: 1 ## Table of contents -- [Table of contents](#table-of-contents) -- [Introduction](#introduction) -- [Supported media types](#supported-media-types) -- [Setup instructions to call Index through Prebid Server](#setup-instructions-to-call-index-through-prebid-server) - - [Call Index from a web browser](#call-index-from-a-web-browser) - - [Call Index from Prebid Mobile SDK](#call-index-from-prebid-mobile-sdk) - - [Call Index from CTV/long-form video environment](#call-index-from-ctvlong-form-video-environment) - - [Call Index from any other server-to-server OpenRTB environment](#call-index-from-any-other-server-to-server-openrtb-environment) -- [Bid request parameters](#bid-request-parameters) - - [Banner](#banner) - - [Video](#video) -- [Examples](#examples) - - - +* [Table of contents](#table-of-contents) +* [Introduction](#introduction) +* [Supported media types](#supported-media-types) +* [Setup instructions to call Index through Prebid Server](#setup-instructions-to-call-index-through-prebid-server) + * [Call Index from a web browser](#call-index-from-a-web-browser) + * [Call Index from Prebid Mobile SDK](#call-index-from-prebid-mobile-sdk) + * [Call Index from CTV/long-form video environment](#call-index-from-ctvlong-form-video-environment) + * [Call Index from any other server-to-server OpenRTB environment](#call-index-from-any-other-server-to-server-openrtb-environment) +* [Bid request parameters](#bid-request-parameters) + * [Banner](#banner) + * [Video](#video) +* [Examples](#examples) + + ## Introduction @@ -51,11 +50,11 @@ Publishers can use Prebid Server in any of the following ways with Index Exchang * In CTV apps and other long-form video environments, you (or the SSAI vendor) can make a call to Prebid Server using OpenRTB, and then Prebid Server uses our server-side adapter to call Index. For set up instructions, see [Call Index from CTV/long-form video environment](#set-up-instructions-to-call-index-through-prebid-server) section on this page. * In any other server-to-server OpenRTB environment, you can send OpenRTB bid requests to the Prebid Server host of your choice. For set up instructions, see [Call Index from any other server-to-server OpenRTB environment](#call-index-from-ortb) section on this page. -**Note about sending multiple ad slots in a single bid request:** Index accepts up to 100 valid ad slots in a single bid request. If a single bid request contains more than 100 ad slots (including invalid ad slots), only the first 100 valid ad slots are accepted and the rest are ignored. For example streaming TV media owners can signal multiple ad pods for long-form programming in a single request. +**Note about sending multiple ad slots in a single bid request:** Index accepts up to 100 valid ad slots in a single bid request. If a single bid request contains more than 100 ad slots (including invalid ad slots), only the first 100 valid ad slots are accepted and the rest are ignored. For example streaming TV media owners can signal multiple ad pods for long-form programming in a single request. - + -## Supported media types +## Supported media types The following table lists the media types that Index supports. For information about the the Time-To-Live (TTL) for each media type, see [How Index counts impressions](https://kb.indexexchange.com/publishers/billing/how_Index_counts_impressions.htm) in our Knowledge Base. @@ -66,24 +65,23 @@ The following table lists the media types that Index supports. For information a | video | Supported, including ad pods for OTT | | native | Supported | - -## Setup instructions to call Index through Prebid Server + + +## Setup instructions to call Index through Prebid Server **Note:** If you are hosting your own Prebid Server instance, you must contact your Index Exchange Representative to get an endpoint and setup instructions. If you are using an existing Prebid Server instance that is already configured to call Index, depending on whether you want to call Index from the browser, mobile app, CTV, or long-form video, follow any of the below sections to complete the Index-specific configuration. + - - -### Call Index from a web browser +### Call Index from a web browser If you want to call Index from a web environment, you can use Prebid.js to call Prebid Server and then Prebid Server uses our server-side adapter to call Index. For setup instructions, see the Index-specific configuration steps in [Set up instructions for Prebid.js](https://docs.prebid.org/dev-docs/bidders/ix.html) in our Prebid.js documentation on the Prebid site. + - - -### Call Index from Prebid Mobile SDK +### Call Index from Prebid Mobile SDK **Before you begin:** Contact your Index Exchange representative to get your `siteId`. You must provide this site ID to your Prebid Server host company. @@ -91,31 +89,32 @@ If you want to call Index from a web environment, you can use Prebid.js to call To add Index as a bidder to your mobile app: -1. Inform your Prebid Server hosting company to add `ix `as a bidder in the configuration and include the `siteId` that Index provides to you at the time of integration. +1. Inform your Prebid Server hosting company to add `ix`as a bidder in the configuration and include the `siteId` that Index provides to you at the time of integration. 2. Define the Index-specific parameters at the bidder level. For information about these parameters, see the [Bid request parameters](#bid-request-parameters) section below. 3. Include any ad unit level required or optional parameters provided in Prebid's [Prebid Mobile API - iOS](https://docs.prebid.org/prebid-mobile/pbm-api/ios/ios-sdk-integration-gam-original-api.html) and [Prebid Mobile API - Android](https://docs.prebid.org/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.html) documentation. - + ### Call Index from CTV/long-form video environment - + **Before you begin:** Contact your Index Exchange Representative to get the `siteId`. You must provide this site ID to your Prebid Server host company. **Note:** To implement CTV and long-form video using Prebid Server, follow Prebid's [Long Form Video](https://docs.prebid.org/prebid-server/use-cases/pbs-lfv.html) documentation. To add Index as a bidder: -1. Inform your Prebid Server hosting company to add `ix `as a bidder in the configuration and include the `siteId` that Index provides to you at the time of integration. +1. Inform your Prebid Server hosting company to add `ix`as a bidder in the configuration and include the `siteId` that Index provides to you at the time of integration. 2. Define the Index-specific parameters at the bidder level. For information about these parameters, see the [Bid request parameters](#bid-request-parameters) section below. 3. Include any ad unit level required or optional parameters provided in Prebid's [/openrtb2/video](https://docs.prebid.org/prebid-server/endpoints/openrtb2/pbs-endpoint-video.html) documentation. - + -### Call Index from any other server-to-server OpenRTB environment +### Call Index from any other server-to-server OpenRTB environment To request bids from Index: -* In requests that you make to your Prebid Server host, add `imp.ext.ix` and include the `siteId `that Index provides to you at the time of integration.
+* In requests that you make to your Prebid Server host, add `imp.ext.ix` and include the `siteId` that Index provides to you at the time of integration.
+ **Example:** ```javascript @@ -128,27 +127,24 @@ To request bids from Index: }], ``` + - - -## Bid request parameters +## Bid request parameters For a list of the OpenRTB fields that Index supports in bid requests, see [List of supported OpenRTB bid request fields for sellers](https://kb.indexexchange.com/publishers/openrtb_integration/list_of_supported_openrtb_bid_request_fields_for_sellers.htm#List_of_supported_OpenRTB_bid_request_fields_for_sellers). The following are the required fields for the various supported media types. +### Banner -### Banner - -You must include these parameters at the bidder level. +You must include these parameters at the bidder level. {: .table .table-bordered .table-striped } | Key | Scope | Type | Description | |---|---|---|---| | `siteId` | Required | String | An Index-specific identifier that is associated with this ad unit. This is similar to a placement ID or an ad unit ID that some other modules have. For example, `'3723'`, `'6482'`, `'3639'`| -### Video - -You must include these parameters at the bidder level. +### Video +You must include these parameters at the bidder level. {: .table .table-bordered .table-striped } | Key | Scope | Type | Description | @@ -157,7 +153,6 @@ You must include these parameters at the bidder level. If you are using Index's outstream player and have placed the video object at the bidder level, you must include the Index required parameters at the bidder level. You can include the optional parameters to specify the outstream player configurations. - {: .table .table-bordered .table-striped } | Key | Scope | Type | Description | |---|---|---|---| @@ -168,14 +163,13 @@ If you are using Index's outstream player and have placed the video object at th | `video.playerConfig.floatOnScroll` | Optional | Boolean | A boolean specifying whether you want to use the player's floating capabilities, where:
- `true`: Use the Index player's float capabilities.
**Note:** If you set `floatOnScroll` to `true`, Index updates the placement value to `5`.
**Note:** We do not recommend using the player's default float capabilities if you have more than one outstream ad unit per page.
-`false`: Do not use the Index player's float capabilities (default). | | `video.playerConfig.floatSize` | Optional | Integer[] | The height and width of the floating player in pixels. If you do not specify a float size, the player adjusts to the aspect ratio of the player size that is defined when it is not floating. Index recommends that you review and test the float size to your user experience preference. | -
+ -## Examples +## Examples **Banner** - -```javascript +```json { "id": "ix-banner-id", "imp": [ @@ -230,11 +224,9 @@ If you are using Index's outstream player and have placed the video object at th } ``` +**Video** -**Video** - - -```javascript +```json { "id": "ix-video-example", "imp": [ diff --git a/dev-docs/bidders/ix.md b/dev-docs/bidders/ix.md index 9f528a1aa1..57beb1b495 100644 --- a/dev-docs/bidders/ix.md +++ b/dev-docs/bidders/ix.md @@ -25,27 +25,27 @@ sidebarType: 1 ## Table of contents -- [Table of contents](#table-of-contents) -- [Introduction](#introduction) -- [Supported media types](#supported-media-types) -- [Set up Prebid.js to call Index directly from the browser (client-side adapter)](#set-up-prebidjs-to-call-index-directly-from-the-browser-client-side-adapter) -- [Set up Prebid.js to call Index through Prebid Server (server-side adapter)](#set-up-prebidjs-to-call-index-through-prebid-server-server-side-adapter) -- [Modules to include in your build process](#modules-to-include-in-your-build-process) -- [Set up First Party Data (FPD)](#set-up-first-party-data-fpd) - - [Global data](#prebid-fpd-module) - - [Index bidder-specific data](#index-bidder-specific-fpd-module) - - [AdUnit-specific data](#adunit-specific-data) -- [Index's outstream video player](#indexs-outstream-video-player) -- [Prebid Native configuration](#prebid-native-configuration) -- [Bid request parameters](#bid-request-parameters) - - [Banner](#banner) - - [Video](#video) - - [Native](#native) -- [Multi-format ad units](#multi-format-ad-units) -- [Examples](#examples) - - - +* [Table of contents](#table-of-contents) +* [Introduction](#introduction) +* [Supported media types](#supported-media-types) +* [Set up Prebid.js to call Index directly from the browser (client-side adapter)](#set-up-prebidjs-to-call-index-directly-from-the-browser-client-side-adapter) +* [Set up Prebid.js to call Index through Prebid Server (server-side adapter)](#set-up-prebidjs-to-call-index-through-prebid-server-server-side-adapter) +* [Modules to include in your build process](#modules-to-include-in-your-build-process) +* [Set up First Party Data (FPD)](#set-up-first-party-data-fpd) + * [Global data](#prebid-fpd-module) + * [Index bidder-specific data](#index-bidder-specific-fpd-module) + * [AdUnit-specific data](#adunit-specific-data) +* [Index's outstream video player](#indexs-outstream-video-player) +* [Prebid Native configuration](#prebid-native-configuration) +* [Bid request parameters](#bid-request-parameters) + * [Banner](#banner) + * [Video](#video) + * [Native](#native) +* [Multi-format ad units](#multi-format-ad-units) +* [Examples](#examples) + + + ## Introduction @@ -54,15 +54,18 @@ Publishers can use Prebid.js to call Index Exchange (Index) in any of the follow * **Call through our client-side adapter:** Prebid.js calls Index directly from the browser using our client-side adapter. This option tends to have a better cookie match rate. For configuration instructions, see the [Set up Prebid.js to call Index directly from the browser (client-side adapter)](#client-side-adapter) on this page. * **Call through our server-side adapter**: Prebid.js makes a call to Prebid Server and then Prebid Server uses our server-side adapter to call Index. This reduces workload on the browser. For configuration instructions, see the [Set up Prebid.js to call Index through Prebid Server (server-side adapter)](#server-side-adapter) on this page. -**Notes:** +**Notes:** + * **Send multiple ad slots in a single bid request**: Index accepts up to 100 valid ad slots in a single bid request. If a single bid request contains more than 100 ad slots (including invalid ad slots), only the first 100 valid ad slots are accepted and the rest are ignored. For example streaming TV media owners can signal multiple ad pods for long-form programming in a single request. * **How to view bid requests sent to Index:** - * In your browser, open a new tab. - * Open the **Developer tools**. - * In **Developer tools**, click the **Network** tab. - * In the **Network** tab, search for requests sent to `casalemedia.com/cygnus` (from version 6.28.0 and earlier) or `casalemedia.com/openrtb/pbjs` (from version 6.29.0 and later). These are the bid requests sent to Index. -* **Recommended Global Bidder settings:** For our adapter, Index recommends enabling local storage. As of Prebid.js 7.x, local storage access must be explicitly specified. By leveraging local storage, Index is able to take advantage of the latest features our exchange has to offer. For instructions on enabling local storage, see Prebid’s [pbjs.bidderSettings](https://docs.prebid.org/dev-docs/publisher-api-reference/bidderSettings.html) documentation.
-Example: + * In your browser, open a new tab. + * Open the **Developer tools**. + * In **Developer tools**, click the **Network** tab. + * In the **Network** tab, search for requests sent to `casalemedia.com/cygnus` (from version 6.28.0 and earlier) or `casalemedia.com/openrtb/pbjs` (from version 6.29.0 and later). These are the bid requests sent to Index. +* **Recommended Global Bidder settings:** For our adapter, Index recommends enabling local storage. As of Prebid.js 7.x, local storage access must be explicitly specified. By leveraging local storage, Index is able to take advantage of the latest features our exchange has to offer. For instructions on enabling local storage, see Prebid’s [pbjs.bidderSettings](https://docs.prebid.org/dev-docs/publisher-api-reference/bidderSettings.html) documentation. + +### Example + ```javascript pbjs.bidderSettings = { ix: { @@ -71,9 +74,9 @@ pbjs.bidderSettings = { }; ``` - + -## Supported media types +## Supported media types The following table lists the media types that Index supports. For information about the the Time-To-Live (TTL) for each media type, see [How Index counts impressions](https://kb.indexexchange.com/publishers/billing/how_Index_counts_impressions.htm) in our Knowledge Base. @@ -85,30 +88,32 @@ The following table lists the media types that Index supports. For information a | video | Supported | | native | Supported | - + ## Set up Prebid.js to call Index directly from the browser (client-side adapter) In this configuration Prebid.js calls Index directly from the browser using our client-side adapter. Follow the quick start instructions provided in Prebid's [Getting Started for Developers](https://docs.prebid.org/dev-docs/getting-started.html) documentation. Complete the following steps to complete the Index-specific configuration: - 1. Build the binary in one of the following ways: * [Download Prebid.js](https://docs.prebid.org/download.html) from the Prebid site to use the standard compiled binary that Prebid includes in the download process and select **Index Exchange** as an adapter. - * Build it on your own from the source code by following the instructions in [Prebid.js project README](https://github.com/prebid/Prebid.js/blob/master/README.md#build-optimization). If you use this method, you will need to include several modules in your build process. See the [Index modules to include in your build process](#modules-to-include-in-your-build-process) section below. + * Build it on your own from the source code by following the instructions in [Prebid.js project README](https://github.com/prebid/Prebid.js/blob/master/README.md#build-optimization). If you use this method, you will need to include several modules in your build process. See the [Index modules to include in your build process](#modules-to-include-in-your-build-process) section below. 2. Define the Index-specific parameters at the bidder level which include adding `ix` as the bidder and the `siteId`. For Index's bidder-specific parameters, see the [Bid request parameters](#bid-request-parameters) section below.
-**Example:** +**Example:** + ```javascript { - bidder: 'ix', - params: { - siteId: '123456' - } + bidder: 'ix', + params: { + siteId: '123456' } +} ``` 3. Define your ad units in the `adUnit` object. This includes the details about the ad slots such as the media types, ad size, and ad code. For more information about this object, see Prebid's [Ad Unit Reference](https://docs.prebid.org/dev-docs/adunit-reference.html) documentation. 4. Enable user syncing by adding the following code in the [pbjs.setConfig()](https://docs.prebid.org/dev-docs/publisher-api-reference/setConfig.html) function. Index strongly recommends enabling user syncing through iFrames, though we do also support image-based syncing. This functionality improves DSP user match rates and increases the Index bid rate and bid price. Make sure to call `pbjs.setConfig()` only once. This configuration is optional in Prebid, but required by Index.
-**Example:** + +**Example:** + ```javascript pbjs.setConfig({ userSync: { @@ -122,21 +127,22 @@ In this configuration Prebid.js calls Index directly from the browser using our } }); ``` + 5. (Optional) Set up First Party Data (FPD). For more information about the data types we support and the instructions for each option, see the [Set up First Party Data (FPD)](#set-up-first-party-data-fpd) section below. 6. (Optional) If you want to monetize instream video, you need to enable a cache endpoint in the [pbjs.setConfig()](https://docs.prebid.org/dev-docs/publisher-api-reference/setConfig.html) function as follows:
-```javascript - pbjs.setConfig({ - cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' - } - }); -``` + ```javascript + pbjs.setConfig({ + cache: { + url: 'https://prebid.adnxs.com/pbc/v1/cache' + } + }); + ``` 7. (Optional) If you want to monetize outstream video, you can choose among the following options. Outstream video is available from Prebid.js version 6.25 or higher. * Use Index’s outstream video player. For more information, see the [Index's outstream video player ](#indexs-outstream-video-player)section below. * Use your own outstream video player. For more information, see [Prebid's documentation on how to show video ads.](https://docs.prebid.org/dev-docs/show-outstream-video-ads.html) 8. (Optional) Configure Prebid Native with Index. For more information, see the [Prebid Native](#prebid-native-configuration) section below. Prebid Native is available from Prebid.js version 7.4.0 or higher. - + ## Set up Prebid.js to call Index through Prebid Server (server-side adapter) @@ -176,14 +182,15 @@ In this configuration, Prebid.js makes a call to Prebid Server and then Prebid S - + ## Modules to include in your build process If you are building the JS binary on your own from source code, follow the instructions in [Prebid.js project README](https://github.com/prebid/Prebid.js/blob/master/README.md#build-optimization). You will need to include the `ixBidAdapter`. If you want to show video ads with Google Ad Manager, also include the `dfpAdServerVideo` module. We highly recommend adding the `gptPreAuction` module as well, which improves a DSP's ability to bid accurately on your supply. The following is an example build command that include these modules:
`gulp build --modules=ixBidAdapter,dfpAdServerVideo,gptPreAuction,fooBidAdapter,bazBidAdapter` -If you are using a JSON file to specify modules, add `ixBidAdapter` and `dfpAdServerVideo` to the modules array as follows: +If you are using a JSON file to specify modules, add `ixBidAdapter` and `dfpAdServerVideo` to the modules array as follows: + ```javascript [ "ixBidAdapter", @@ -195,13 +202,13 @@ If you are using a JSON file to specify modules, add `ixBidAdapter` and `dfpAdSe ``` - + ## Set up First Party Data (FPD) You can set up the Prebid.js FPD module using Global data, Index bidder-specific site data, or ad unit-specific data. Index supports deal targeting in all the three FPD types. - + ### Global data @@ -222,7 +229,7 @@ pbjs.setConfig({ }); ``` - + ### Index bidder-specific data @@ -241,30 +248,30 @@ To include the FPD in a bid request, in the `[pbjs.setConfig()]` object at the ` } }); ``` - + + ### AdUnit-specific data Use this data type to specify key-value pairs at the ad unit level when targeting deals and apply it to all bidders. This will be available from Prebid.js version 7.46 and above. To include the adUnit-specific data in a bid request, see Prebid's [Supplying AdUnit-Specific Data](https://docs.prebid.org/features/firstPartyData.html#supplying-adunit-specific-data) documentation. - ```javascript ortb2Imp: { ext: { data: { pbadslot: "homepage-top-rect", adUnitSpecificAttribute: "123" - } - } - } + } + } +} ``` - + ## Index's outstream video player Publishers who are using Index as a bidding adapter in Prebid.js can show outstream video ads on their site using Index's outstream video player. This allows a video ad to be placed anywhere on a publisher’s site, such as in-article, in-feed, and more. Outstream video is available from Prebid.js version 6.25 or higher.
-**Note:** When you use the Index renderer for outstream video, all impressions are considered viewable, which is similar to how Google's ActiveView counts impressions for outstream. This is because Index renders the outstream video as soon as it is in view and concurrently fires any impression pixels in the VAST. +**Note:** When you use the Index renderer for outstream video, all impressions are considered viewable, which is similar to how Google's ActiveView counts impressions for outstream. This is because Index renders the outstream video as soon as it is in view and concurrently fires any impression pixels in the VAST. To use Index’s outstream video player, in your Prebid.js configuration:
@@ -304,10 +311,9 @@ var adUnits = [{ }] ``` - *Please note that your use of the outstream video player will be governed by and subject to the terms and conditions of i) any master services or license agreement entered into by you and Index Exchange; ii) the information provided on our knowledge base linked [here](https://kb.indexexchange.com/publishers/prebid_integration/outstream_video_prebidjs.htm) and [here](https://kb.indexexchange.com/publishers/guidelines/standard_contractual_clauses.htm), and iii) our [Privacy Policy](https://www.indexexchange.com/privacy/). Your use of Index's outstream video player constitutes your acknowledgement and acceptance of the foregoing.* - + ## Prebid Native configuration @@ -354,17 +360,15 @@ pbjs.addAdUnits({ }); ``` + - - -## Bid request parameters +## Bid request parameters For a list of the OpenRTB fields that Index supports in bid requests, see [List of supported OpenRTB bid request fields for sellers](https://kb.indexexchange.com/publishers/openrtb_integration/list_of_supported_openrtb_bid_request_fields_for_sellers.htm#List_of_supported_OpenRTB_bid_request_fields_for_sellers). The following are the required fields for the various supported media types. +### Banner -### Banner - -You must include these parameters at the bidder level. +You must include these parameters at the bidder level. {: .table .table-bordered .table-striped } @@ -372,10 +376,9 @@ You must include these parameters at the bidder level. |---|---|---|---| | `siteId` | Required | String | An Index-specific identifier that is associated with this ad unit. This is similar to a placement ID or an ad unit ID that some other modules have. For example, `'3723'`, `'6482'`, `'3639'`| -### Video - -You must include these parameters at the bidder level. +### Video +You must include these parameters at the bidder level. {: .table .table-bordered .table-striped } @@ -397,14 +400,14 @@ If you are using Index's outstream player and have placed the video object at th | `video.playerConfig.floatOnScroll` | Optional | Boolean | A boolean specifying whether you want to use the player's floating capabilities, where:
- `true`: Use the Index player's float capabilities.
**Note:** If you set `floatOnScroll` to `true`, Index updates the placement value to `5`.
**Note:** We do not recommend using the player's default float capabilities if you have more than one outstream ad unit per page.
-`false`: Do not use the Index player's float capabilities (default). | | `video.playerConfig.floatSize` | Optional | Integer[] | The height and width of the floating player in pixels. If you do not specify a float size, the player adjusts to the aspect ratio of the player size that is defined when it is not floating. Index recommends that you review and test the float size to your user experience preference. | - ### Native Index supports the same set of native assets that Prebid.js recognizes. For the list of native assets, see [Prebid.js Native Implementation Guide on the Prebid site.](https://docs.prebid.org/prebid/native-implementation.html#3-prebidjs-native-adunit-overview) -
+ ## Multi-format ad units + Index supports multi-format ad units, see [Show Multi-Format Ads with Prebid.js](https://docs.prebid.org/dev-docs/show-multi-format-ads.html). For multi-format ad units, you can optionally specify a different siteId for each multi-format type at the bidder level. This is useful if you have deals set up with Index at the siteId level. See multi-format examples [here](#examples). The following are the parameters that you can specify for each multi-format type at the bidder level. @@ -418,15 +421,12 @@ The following are the parameters that you can specify for each multi-format type | `video.siteId` | Optional | String | An Index-specific identifier that is associated with this ad unit. This siteId will be prioritized over the default siteID for `video` format in the multi-format ad unit.| | `native.siteId` | Optional | String | An Index-specific identifier that is associated with this ad unit. This siteId will be prioritized over the default siteID for `native` format in the multi-format ad unit.| + - - -## Examples - +## Examples **Banner** - ```javascript var adUnits = [{ code: 'banner-div-a', @@ -444,15 +444,13 @@ var adUnits = [{ siteId: '123456' } } - }] + ] }]; ``` - **Video (instream):**
-**Note**: `context` can either be `'instream'` or `'outstream'`. - +**Note**: `context` can either be `'instream'` or `'outstream'`. ```javascript var adUnits = [{ @@ -485,10 +483,8 @@ var adUnits = [{ ``` - **Video (outstream)** - ```javascript var adUnits = [{ code: 'div-gpt-ad-1571167646410-1', @@ -520,10 +516,8 @@ var adUnits = [{ ``` - **Prebid Native** - ```javascript pbjs.addAdUnits({ code: slot.code, @@ -567,6 +561,7 @@ pbjs.addAdUnits({ ``` **Multi-format SiteId Overrides** + ```javascript var adUnits = [{ code: slot.code, diff --git a/dev-docs/bidders/medianet.md b/dev-docs/bidders/medianet.md index 7f38bd69fb..d882554e04 100644 --- a/dev-docs/bidders/medianet.md +++ b/dev-docs/bidders/medianet.md @@ -26,7 +26,7 @@ sidebarType: 1 | `bidfloor` | optional | Bidfloor for the impression | `1.0` | `float` | | `video` | required for video Ad units | Object containing video targeting parameters. See [Video Object](#media.net-video-object) for details.|`video: { maxduration: 60 }` | `object` | -
+ #### Video Object @@ -37,20 +37,21 @@ sidebarType: 1 |minduration|integer|(Recommended) Specifies the minimum video ad duration, in seconds.|10| |maxduration|integer|(Recommended) Specifies the maximum video ad duration, in seconds.|60| |w|integer|(Recommended) Specifies the width of the video player, in pixels. Required if playerSize not present in `mediaTypes.video`|640| -|h|integer|(Recommended) Specifies the height of the video player, in pixels. Required if playerSize not present in `mediaTypes.video`|480| -|startdelay |integer | (Recommended) Specifies the start delay of the video ad|0| -|battr| array of integers|Specifies the video creative attributes to block. Refer to section 5.3 of the IAB specification for a list of attributes.| [ 13, 14 ]| -playbackmethod| array of integers| Specifies the allowed playback methods. If not specified, all are assumed to be allowed. Currently supported values are: `1: Autoplay, sound on`; `2: Autoplay, sound off`; `3: Click to play`; `4: Mouse over to play`|[1, 3]| -|api| array of integers| Specifies the supported API frameworks for this impression. If an API is not explicitly listed, it is assumed not to be supported. Currently supported values are: `1: VPAID 1.0`; `2: VPAID 2.0`; `3: MRAID-1`; `4: ORMMA`; `5: MRAID-2`|[1, 2]| -|protocols |array of integers| Array of supported video protocols. Currently supported values are: `1: VAST 1.0`; `2: VAST 2.0`; `3: VAST 3.0`; `4: VAST 1.0 Wrapper`; `5: VAST 2.0 Wrapper`; `6: VAST 3.0 Wrapper`; `7: VAST 4.0`|[1, 2]| -|placement |integer|Placement type for the impression. Possible options: `1: In-Stream`; `2: In-banner`; `3: Outstream/In-article`; `4: In-feed`; `5: Interstitial/Slider/Floating`; `6: Long-Form`;|1| +|h|integer|(Recommended) Specifies the height of the video player, in pixels. Required if playerSize not present in `mediaTypes.video`|480| +|startdelay|integer |(Recommended) Specifies the start delay of the video ad|0| +|battr|array of integers|Specifies the video creative attributes to block. Refer to section 5.3 of the IAB specification for a list of attributes.| [ 13, 14 ]| +playbackmethod|array of integers|Specifies the allowed playback methods. If not specified, all are assumed to be allowed. Currently supported values are: `1: Autoplay, sound on`; `2: Autoplay, sound off`; `3: Click to play`; `4: Mouse over to play`|[1, 3]| +|api| array of integers|Specifies the supported API frameworks for this impression. If an API is not explicitly listed, it is assumed not to be supported. Currently supported values are: `1: VPAID 1.0`; `2: VPAID 2.0`; `3: MRAID-1`; `4: ORMMA`; `5: MRAID-2`|[1, 2]| +|protocols|array of integers|Array of supported video protocols. Currently supported values are: `1: VAST 1.0`; `2: VAST 2.0`; `3: VAST 3.0`; `4: VAST 1.0 Wrapper`; `5: VAST 2.0 Wrapper`; `6: VAST 3.0 Wrapper`; `7: VAST 4.0`|[1, 2]| +|placement|integer|Placement type for the impression. Possible options: `1: In-Stream`; `2: In-banner`; `3: Outstream/In-article`; `4: In-feed`; `5: Interstitial/Slider/Floating`; `6: Long-Form`;|1| Besides the above-mentioned parameters, we support all other OpenRTB 2.x video objects as optional parameters. In addition to `bids[].params.video`, Media.net adapter consumes parameters specified in the `mediaTypes.video`. #### Example of Instream Video Ad-unit -``` + +```javascript var videoAdUnit = { code: 'video1', mediaTypes: { @@ -78,7 +79,8 @@ var videoAdUnit = { ``` #### Example of Native Ad-unit -``` + +```javascript var adUnits = [{ code: 'div-gpt-ad-1544091247692-0', mediaTypes: { @@ -111,7 +113,8 @@ var adUnits = [{ ``` #### Example of Banner Ad-unit -``` + +```javascript var adUnits = [{ code: 'div-gpt-ad-1460505748561-0', mediaTypes: { @@ -138,4 +141,3 @@ var adUnits = [{ }] }]; ``` - diff --git a/dev-docs/bidders/mgid.md b/dev-docs/bidders/mgid.md index d52a4baf94..6e0047424b 100644 --- a/dev-docs/bidders/mgid.md +++ b/dev-docs/bidders/mgid.md @@ -23,7 +23,7 @@ sidebarType: 1 - [Test Parameters](#test-parameters) - [User Sync](#user-sync) - + ### Description @@ -31,7 +31,7 @@ One of the easiest way to gain access to MGID demand sources - MGID header bidd MGID header bidding adapter connects with MGID demand sources to fetch bids for display placements. Please reach out to your account manager or for more information. - + ### Bid params @@ -43,13 +43,13 @@ MGID header bidding adapter connects with MGID demand sources to fetch bids for | `bidFloor` | optional | Lowest value of expected bid price | `1.1` | `float` | | `currency` | optional | Currency of request and response | `'GBP'` | `string` | - - + ### Test Parameters 300x600 banner test -``` + +```javascript var adUnits = [{ code: 'div-prebid', mediaTypes: { @@ -68,7 +68,8 @@ var adUnits = [{ ``` 300x250 banner test -``` + +```javascript var adUnits = [{ code: 'div-prebid', mediaTypes: { @@ -87,7 +88,8 @@ var adUnits = [{ ``` native test -``` + +```javascript var adUnits = [{ code: 'div-prebid', mediaTypes: { @@ -120,7 +122,7 @@ var adUnits = [{ }]; ``` - + ### User Sync diff --git a/dev-docs/bidders/openx.md b/dev-docs/bidders/openx.md index 7e3fc168e3..56ebee98bd 100644 --- a/dev-docs/bidders/openx.md +++ b/dev-docs/bidders/openx.md @@ -22,7 +22,7 @@ sidebarType: 1 ### Registration -If you have any questions regarding set up, please reach out to your account manager or support@openx.com. +If you have any questions regarding set up, please reach out to your account manager or [support@openx.com]. Please note that OpenX is transitioning its serving architecture and currently has 2 bid adapters as of Prebid 7. The legacy adapter is named openxBidAdapter. The newer of the two is openxOrtbBidAdapter. Publishers are welcome to test with openxOrtbBidAdapter and give feedback. @@ -31,6 +31,7 @@ After the transition openxOrtbBidAdapter will replace openxBidAdapter. IMPORTANT: only include either openxBidAdapter or openxOrtbBidAdapter in your build. ### Bid Parameters + #### Banner {: .table .table-bordered .table-striped } @@ -45,8 +46,8 @@ IMPORTANT: only include either openxBidAdapter or openxOrtbBidAdapter in your bu ** platform is deprecated. Please use delDomain instead. If you have any questions please contact your representative. - ### AdUnit Format for Banner + ```javascript var adUnits = [ { @@ -113,8 +114,8 @@ The following video parameters are supported here so publishers may fully declar | placement | recommended | Placement type for the impression. (see openRTB v2.5 section 5.9 for options) | 1 | integer | | | | | | | - ### AdUnit Format for Video + ```javascript var videoAdUnits = [ { @@ -147,8 +148,8 @@ var videoAdUnits = [ }] ``` - ## Example + ```javascript var adUnits = [ { @@ -199,13 +200,14 @@ var adUnits = [ ]; ``` -#### First Party Data +### First Party Data + OpenX supports FPD configured under `ortb2.user`and `ortb2.site.content` as described [here](/features/firstPartyData.html). -Ad unit specific FPD is not supported, and segment taxonomies (`segtax`) are simply passed through. If you have any -questions, please reach out to us at prebid@openx.com +Ad unit specific FPD is not supported, and segment taxonomies (`segtax`) are simply passed through. If you have any questions, please reach out to us at [prebid@openx.com] -Example: -``` +Example: + +```javascript pbjs.setConfig({ ... ortb2: { @@ -236,6 +238,7 @@ pbjs.setConfig({ ``` ### Configuration + Add the following code to enable user syncing. By default, Prebid.js version 0.34.0+ turns off user syncing through iframes. OpenX strongly recommends enabling user syncing through iframes. This functionality improves DSP user match rates and increases the OpenX bid rate and bid price. Be sure to call `pbjs.setConfig()` only once. @@ -249,6 +252,6 @@ pbjs.setConfig({ ``` ## Additional Details -[Banner Ads](https://docs.openx.com/Content/developers/containers/prebid-adapter.html) (Customer login required.) -[Video Ads](https://docs.openx.com/Content/developers/containers/prebid-video-adapter.html) (Customer login required.) +* [Banner Ads](https://docs.openx.com/Content/developers/containers/prebid-adapter.html) (Customer login required.) +* [Video Ads](https://docs.openx.com/Content/developers/containers/prebid-video-adapter.html) (Customer login required.) diff --git a/dev-docs/bidders/playwire.md b/dev-docs/bidders/playwire.md index 325e7748af..a2e47aecb7 100644 --- a/dev-docs/bidders/playwire.md +++ b/dev-docs/bidders/playwire.md @@ -25,7 +25,7 @@ sidebarType: 1 - [Bidder Config](#bidder-config) - [First Party Data](#first-party-data) - + ### Bid Params @@ -36,12 +36,13 @@ sidebarType: 1 | `keywords` | optional | A set of key-value pairs applied to all ad slots on the page. Values can be empty. | `keywords: { topic: ['stress', 'fear'] }` | `object` | | `bidFloor` | optional | Floor of the impression opportunity. If present in the request overrides XML info. | `0.8` | `float` | - + ### Bidder Config You can allow writing in localStorage `pbjs.setBidderConfig` for the bidder `playwire` -``` + +```javascript pbjs.setBidderConfig({ bidders: ["playwire"], config: { @@ -49,9 +50,10 @@ pbjs.setBidderConfig({ } }) ``` + If it will be "true" this allow Playwire Bid Adapter to write userId in first party localStorage - + ### First Party Data diff --git a/dev-docs/bidders/redtram.md b/dev-docs/bidders/redtram.md index 211f5d062f..8d18f3ecf0 100644 --- a/dev-docs/bidders/redtram.md +++ b/dev-docs/bidders/redtram.md @@ -29,13 +29,13 @@ sidebarType: 1 - [Bid params](#bid-params) - [Test Parameters](#test-parameters) - + ### Description Redtram header bidding adapter connects with redtram demand sources to fetch bids for display placements. Please reach out to your account manager or for more information. - + ### Bid params @@ -45,13 +45,13 @@ Redtram header bidding adapter connects with redtram demand sources to fetch bid | `placementId`| optional | The placement ID from Redtram | `'23611'` | `string` | | `bidFloor` | optional | Lowest value of expected bid price | `1.1` | `float` | - - + ### Test Parameters 300x250 banner test -``` + +```javascript var adUnits = [{ code: 'prebid-place', mediaTypes: { diff --git a/dev-docs/bidders/richaudience.md b/dev-docs/bidders/richaudience.md index ec16d027da..c61810348c 100644 --- a/dev-docs/bidders/richaudience.md +++ b/dev-docs/bidders/richaudience.md @@ -28,8 +28,8 @@ sidebarType: 1 | `keywords` | optional | A key-value applied only to the configured bid. This value is optional. Strings separated by semicolon. | `car=mercedes;car=audi;` | `string` | | `player` | optional | Object containing video targeting parameters. See [Video Object](#ra-video-object) for details. | `player: {init: 'open', end: 'close', skin: 'dark'}` | `object` | + - ### Video Object {: .table .table-bordered .table-striped } diff --git a/dev-docs/bidders/rubicon.md b/dev-docs/bidders/rubicon.md index 0ac9554abb..9514c03512 100644 --- a/dev-docs/bidders/rubicon.md +++ b/dev-docs/bidders/rubicon.md @@ -25,7 +25,7 @@ sidebarType: 1 ### Registration -For both Prebid.js and Prebid Server, the Rubicon Project adapter requires setup and approval from the Magnite team, even for existing accounts. Please reach out to your account team or globalsupport@magnite.com for more information. +For both Prebid.js and Prebid Server, the Rubicon Project adapter requires setup and approval from the Magnite team, even for existing accounts. Please reach out to your account team or [globalsupport@magnite.com] for more information. ### Bid Params @@ -42,23 +42,25 @@ For both Prebid.js and Prebid Server, the Rubicon Project adapter requires setup | `inventory` | optional | See below for details on First Party Data. In release 4.29 and earlier, this parameter allows the definition of an object defining arbitrary key-value pairs concerning the page for use in targeting. The values must be arrays of strings. | `{"rating":["5-star"], "prodtype":["tech","mobile"]}` | `object` | | `visitor` | optional | See below for details on First Party Data. In release 4.29 and earlier, this parameter allows the definition of an object defining arbitrary key-value pairs concerning the visitor for use in targeting. The values must be arrays of strings. | `{"ucat":["new"], "search":["iphone"]}` | `object` | | `keywords` | optional | See below for details on First Party Data. In release 4.29 and earlier, this can be used to influence reports for client-side display. To get video or server-side reporting, please use First Party data or the inventory/visitor parameters. | `["travel", "tourism"]` | `Array` | -| `video` | required for video | Video targeting parameters. See the [video section below](#rubicon-video). | `{"language": "en"}` | `object` | +| `video` | required for video | Video targeting parameters. See the [video section below](#mediatypesvideo). | `{"language": "en"}` | `object` | | pchain | optional | deprecated option that was an early alternative to schain | "GAM:11111-reseller1:22222" | string | | `bidonmultiformat` | optional | Beta parameter - please check with your account manager before setting this value | `boolean` | `true` | #### First Party Data In release 4.30 and later, publishers should use the `ortb2` method of setting First Party Data. The following fields are supported: -- ortb2.site.ext.data.* -- ortb2.site.keywords -- ortb2.site.content.data[] -- ortb2.user.ext.data.* -- ortb2.user.data[] + +* ortb2.site.ext.data.* +* ortb2.site.keywords +* ortb2.site.content.data[] +* ortb2.user.ext.data.* +* ortb2.user.data[] With regards to Contextual and Audience segments, the Magnite exchange supports the IAB standard taxonomies. See [the segment management user guide](https://resources.rubiconproject.com/resource/publisher-resources/segment-management-user-guide/) for more information. Example first party data that's available to all bidders and all adunits: -``` + +```javascript pbjs.setConfig({ ortb2: { site: { @@ -81,7 +83,8 @@ pbjs.setConfig({ ``` Example of first party data available only to the Rubicon Project bidder. Applies across all ad units. -``` + +```javascript pbjs.setBidderConfig({ bidders: ["rubicon"], config: { @@ -107,7 +110,8 @@ pbjs.setBidderConfig({ ``` For Prebid.js 4.29 and before, use the bidder specific AdUnit parameters noted above: -``` + +```javascript var adUnit = { ... bids: [{ @@ -137,12 +141,13 @@ Rubicon supports passing up to 50 domains in `badv` for anything hitting Prebid 4. AMP For example: -``` + +```javascript pbjs.setConfig({ ortb2: { badv: ["domain1.com", "domain2.com"] } -)}; +}); ``` #### mediaTypes.video @@ -152,7 +157,7 @@ The following video parameters are supported here so publishers may fully declar {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |----------------|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|-----------| -| context | required | instream or outstream |"outstream" | string | +| context | required | instream or outstream |"outstream" | string | | playerSize| required | width, height of the player in pixels | [640,360] - will be translated to w and h in bid request | array | | mimes | required | List of content MIME types supported by the player (see openRTB v2.5 for options) | ["video/mp4"]| array| | protocols | required | Supported video bid response protocol values
1: VAST 1.0
2: VAST 2.0
3: VAST 3.0
4: VAST 1.0 Wrapper
5: VAST 2.0 Wrapper
6: VAST 3.0 Wrapper
7: VAST 4.0
8: VAST 4.0 Wrapper | [2,3,5,6] | array| @@ -169,7 +174,6 @@ The following video parameters are supported here so publishers may fully declar | placement* | recommended | Placement type for the impression. (see openRTB v2.5 section 5.9 for options) | 1 | integer | | | | | | | - #### bids.params.video The following Rubicon Project-specific video parameters are supported: @@ -182,7 +186,7 @@ The following Rubicon Project-specific video parameters are supported: Here's a video example for Prebid.js 2.5 or later: -``` +```javascript var videoAdUnit = { code: 'myVideoAdUnit', mediaTypes: { @@ -216,7 +220,6 @@ We recommend discussing video demand with your Magnite account representative. Lists of values are in the [OpenRTB 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) documentation as referenced above. - #### Outstream Video As of Prebid.js 4.37 Magnite's Rubicon Project adapter supports outstream video in two ways: using your own renderer or using ours. See the [Prebid.org Outstream documentation](/dev-docs/show-outstream-video-ads.html) for more information on using your own renderer. @@ -227,7 +230,7 @@ The Magnite outstream renderer is a JavaScript tag that will load our outstream The renderer appearance can be configured with the following parameters, all of them optional. If any parameter is missing, the default value will be used. All options are case-sensitive and unknown options will be ignored. Additional advanced options are available by calling your Magnite account representative. -``` +```javascript pbjs.setConfig({ rubicon: { rendererConfig: { @@ -241,15 +244,15 @@ pbjs.setConfig({ }); ``` - * The Rubicon Project exchange does not make multi-format requests. If multiple mediatypes are defined, we bid on banner first, then video. Native bids will only be made if it's the only mediatype present. * Note that only the Prebid-Server-side rubicon adapter currently supports native. ### Setting up the Prebid Server Adapter -If you're a Prebid Server host company looking to enable the Rubicon server-side adapter, you'll need to contact globalsupport@magnite.com. They will provide: -- a Magnite DV+ XAPI login and password that you'll place in the PBS config -- a partner code you can use for cookie-syncing with Magnite's service +If you're a Prebid Server host company looking to enable the Rubicon server-side adapter, you'll need to contact [globalsupport@magnite.com]. They will provide: + +* a Magnite DV+ XAPI login and password that you'll place in the PBS config +* a partner code you can use for cookie-syncing with Magnite's service ### Configuration @@ -258,7 +261,8 @@ If you're a Prebid Server host company looking to enable the Rubicon server-side By default, the Rubicon Project adapter sends one request to rubiconproject.com for each AdUnit. For example, if there are 4 PBJS AdUnits defined on the page, you'll see 4 calls out to rubiconproject.com/fastlane.json. As of PBJS 1.12, the Rubicon Project adapter supports `Single Request` mode, where all AdUnit requests are made in a single call to rubiconproject.com. To turn this feature on, call `setConfig`: -``` + +```javascript pbjs.setConfig({ rubicon: {singleRequest: true} }); @@ -276,6 +280,6 @@ For Prebid, the Rubicon Project bid adapter reports the revenue type as ‘gross It’s important to note that what the Rubicon Prebid bid adapter reports is not directly related to the setting with the Rubicon Project exchange. If you are a publisher who has set your Rubicon exchange revenue type set to ‘gross’ and you'd like the Rubicon bid adapter to also report 'gross', you can change the 2.35+ default 'net' setting in Prebid.js with: -``` +```javascript pbjs.setConfig({ rubicon: {netRevenue: false} }); ``` diff --git a/dev-docs/bidders/smaato.md b/dev-docs/bidders/smaato.md index dfab0ab753..1dd1b947b0 100644 --- a/dev-docs/bidders/smaato.md +++ b/dev-docs/bidders/smaato.md @@ -35,19 +35,19 @@ sidebarType: 1 - [First Party Data](#first-party-data) - [Test Parameters](#test-parameters) -
+ ### Registration -The Smaato adapter requires setup and approval from the Smaato team, even for existing Smaato publishers. Please reach out to your account team or prebid@smaato.com for more information. +The Smaato adapter requires setup and approval from the Smaato team, even for existing Smaato publishers. Please reach out to your account team or [prebid@smaato.com] for more information. - + ### Note The Smaato adapter will convert bidfloors to 'USD' currency as needed. - + ### Bid Params @@ -63,7 +63,7 @@ The Smaato adapter will convert bidfloors to 'USD' currency as needed. In case of AdPods, the Smaato adapter will only read the first `imp[].skadn` entry for each AdPod, such that there should only be one `skadn` occurrence per AdPod. - + #### App Object @@ -75,7 +75,7 @@ Smaato supports using prebid within a mobile app's webview. | `ifa` | String that contains the advertising identifier of the user (e.g. idfa or aaid). | `'56700000-9cf0-22bd-b23e-46b96e40003a'` | `string` | | `geo` | Object that contains the latitude (`lat`) and longitude (`lon`) of the user. | `{ lat: 33.3, lon: -88.8 }` | `object` | - + ### Example Ad Units @@ -205,10 +205,12 @@ var adUnit = { }; ``` - + ### First Party Data + Publishers should use the `ortb2` method of setting First Party Data. The following fields are supported: + - ortb2.site.keywords - ortb2.site.content - ortb2.user.keywords @@ -248,13 +250,13 @@ pbjs.setConfig({ }); ``` - + ### Test Parameters Following example includes sample `imp` object with publisherId and adSlot which can be used to test Smaato Adapter -``` +```json "imp":[ { "id":"1C86242D-9535-47D6-9576-7B1FE87F282C", diff --git a/dev-docs/bidders/smartadserver.md b/dev-docs/bidders/smartadserver.md index 2b24156ef1..295ee92166 100644 --- a/dev-docs/bidders/smartadserver.md +++ b/dev-docs/bidders/smartadserver.md @@ -39,7 +39,7 @@ The Smart AdServer bidder adapter requires setup and approval from the Equativ ( **Note:** The site, page and format identifiers have to all be provided or all empty. - + #### Video Object @@ -70,47 +70,48 @@ The Smart AdServer bidder adapter requires setup and approval from the Equativ ( ### Examples Without site/page/format : -``` - "imp": [{ - "id": "some-impression-id", - "banner": { - "format": [{ - "w": 600, - "h": 500 - }, { - "w": 300, - "h": 600 - }] - }, - "ext": { - "smartadserver": { - "networkId": 73 - } - } - }] + +```json + "imp": [{ + "id": "some-impression-id", + "banner": { + "format": [{ + "w": 600, + "h": 500 + }, { + "w": 300, + "h": 600 + }] + }, + "ext": { + "smartadserver": { + "networkId": 73 + } + } + }] ``` With site/page/format : -``` - "imp": [{ - "id": "some-impression-id", - "banner": { - "format": [{ - "w": 600, - "h": 500 - }, { - "w": 300, - "h": 600 - }] - }, - "ext": { - "smartadserver": { +```json + "imp": [{ + "id": "some-impression-id", + "banner": { + "format": [{ + "w": 600, + "h": 500 + }, { + "w": 300, + "h": 600 + }] + }, + "ext": { + "smartadserver": { "networkId": 73 "siteId": 1, "pageId": 2, "formatId": 3 - } - } - }] + } + } + }] ``` diff --git a/dev-docs/bidders/smartx.md b/dev-docs/bidders/smartx.md index 678ae6cd86..453d58a9ed 100644 --- a/dev-docs/bidders/smartx.md +++ b/dev-docs/bidders/smartx.md @@ -16,6 +16,7 @@ sidebarType: 1 --- ### Registration + Please reach out to your smartclip business contact for any questions and assistance in configuration. ### Bid Params @@ -37,7 +38,7 @@ Please reach out to your smartclip business contact for any questions and assist | `max_duration` | optional | Maximum video ad duration in seconds | `60` | `integer` | | `sitekey` | optional | Sitekey provided by smartclip. | `'foo.bar.baz'` | `string` | - + #### outstream_options Object diff --git a/dev-docs/bidders/spotx.md b/dev-docs/bidders/spotx.md index a692ccb0e8..c9863480ff 100644 --- a/dev-docs/bidders/spotx.md +++ b/dev-docs/bidders/spotx.md @@ -41,8 +41,7 @@ The SpotX adapter requires setup and approval from your Magnite account manager. | `position` | optional | Number corresponding to the position of the ad. See SpotX documentation [here](https://developer.spotxchange.com/content/local/docs/sdkDocs/EASI/easi-integration.md#common-javascript-attributes) | | `integer` | | `page` | optional | The URL of the page the ad is being displayed on. Used to override the detected referrer if necessary | `'https://www.spotx.tv'` | `string` | - - + #### outstream_options Object diff --git a/dev-docs/bidders/triplelift.md b/dev-docs/bidders/triplelift.md index 109444a6e3..e5c1d5144f 100644 --- a/dev-docs/bidders/triplelift.md +++ b/dev-docs/bidders/triplelift.md @@ -30,13 +30,13 @@ sidebarType: 1 - [Banner](#banner) - [Video](#video) - [Example Configuration](#example-configuration) - - [Banner](#banner-1) + - [Banner](#banner-configuration) - [Video (Instream)](#video-instream) - [Video (Outstream)](#video-outstream) - [First Party Data](#first-party-data) - [Programmatic DMP](#triplelift-programmatic-dmp) - + ### Overview @@ -45,7 +45,7 @@ Publishers may integrate with Triplelift through our Prebid.js and/or Prebid Ser {: .alert.alert-info :} The Triplelift Prebid Server bidding adapter and user sync endpoint require setup before beginning. Please contact us at prebid@triplelift.com. - + ### Bid Params @@ -58,7 +58,6 @@ The Triplelift Prebid Server bidding adapter and user sync endpoint require setu | `inventoryCode` | required | TripleLift inventory code for this ad unit (provided to you by your partner manager) | `'pubname_top_banner'` | `string` | | `floor` | optional | Bid floor | `1.00` | `float` | - #### Video Triplelift bid params for video mediaTypes are identical, but be sure to include the appropriate video.placement value to indicate instream/outstream format. Speak with your partner manager about which value to place here based on what formats are enabled. @@ -72,13 +71,13 @@ See the [Ad Unit Reference](https://docs.prebid.org/dev-docs/adunit-reference.ht | `adUnit.mediaTypes.video.placement` | required | Instream: 1; Outstream: 3, 4, 5. | `3` | `int` | | `adUnit.mediaTypes.video.playerSize` | required | Video player dimensions or size in pixels | `[640, 480]` | `integer array` | - + ### Example Configuration -#### Banner +#### Banner Configuration -``` +```javascript var adUnits = [ { code: 'top-banner', @@ -101,7 +100,7 @@ var adUnits = [ #### Video (Instream) -``` +```javascript var videoAdUnit = { code: 'video1', mediaTypes: { @@ -123,7 +122,7 @@ var videoAdUnit = { #### Video (Outstream) -``` +```javascript var videoAdUnit = { code: 'video1', mediaTypes: { @@ -143,27 +142,29 @@ var videoAdUnit = { }; ``` - + ### First Party Data Publishers should use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html). The following fields are supported: + - `ortb2.site.*`: Standard IAB OpenRTB 2.5 site fields - `ortb2.user.*`: Standard IAB OpenRTB 2.5 user fields AdUnit-specific data is supported using `AdUnit.ortb2Imp.ext.*` - + ### Programmatic DMP -Triplelift provides audience and contextual targeting via the integration of a Programmatic DMP tag. Please reach out to your Triplelift representative to discuss specifics of the integration. +Triplelift provides audience and contextual targeting via the integration of a Programmatic DMP tag. Please reach out to your Triplelift representative to discuss specifics of the integration. + +#### Requirements -#### Requirements: - Prebid v7.1.0 or later - In Prebid's `bidderSettings`, the `storageAllowed` parameter must be set to **true**. In Prebid v7.0 and later, `storageAllowed` defaults to false, so you will need to explicitly set this value to true. - ``` + ```javascript pbjs.bidderSettings = { triplelift: { storageAllowed: true diff --git a/dev-docs/bidders/triplelift_native.md b/dev-docs/bidders/triplelift_native.md index 4085b6e4bd..7a58f447e4 100644 --- a/dev-docs/bidders/triplelift_native.md +++ b/dev-docs/bidders/triplelift_native.md @@ -23,10 +23,10 @@ sidebarType: 1 --- {: .alert.alert-info :} -This is a Prebid Server adapter for running component native only. For the standard Prebid JS Triplelift bid adapter, see the "Triplelift" bidder. If you are interested in running component native via Prebid JS, please contact us at prebid@triplelift.com. +This is a Prebid Server adapter for running component native only. For the standard Prebid JS Triplelift bid adapter, see the "Triplelift" bidder. If you are interested in running component native via Prebid JS, please contact us at [prebid@triplelift.com]. {: .alert.alert-info :} -The Triplelift Prebid Server bidding adapter and user sync endpoint require setup before beginning. Please contact us at prebid@triplelift.com. +The Triplelift Prebid Server bidding adapter and user sync endpoint require setup before beginning. Please contact us at [prebid@triplelift.com]. ### Table of Contents @@ -34,7 +34,7 @@ The Triplelift Prebid Server bidding adapter and user sync endpoint require setu - [Bid Params](#bid-params) - [First Party Data](#first-party-data) - + ### Bid Params @@ -44,10 +44,11 @@ The Triplelift Prebid Server bidding adapter and user sync endpoint require setu | inventoryCode | required | TripleLift inventory code for this ad unit (provided to you by your partner manager) | 'code1' | string | | floor | optional | the bid floor, in usd | 1.2 | number | - + ### First Party Data Triplelift supports standard IAB OpenRTB 2.5 First Party Data fields, including: + - `site.*` - `user.*` diff --git a/dev-docs/bidders/trustx.md b/dev-docs/bidders/trustx.md index f05359fd35..bf7fbbf18d 100644 --- a/dev-docs/bidders/trustx.md +++ b/dev-docs/bidders/trustx.md @@ -27,7 +27,7 @@ sidebarType: 1 - [Bidder Config](#bidder-config) - [First Party Data](#first-party-data) - + ### Bid Params @@ -39,7 +39,8 @@ sidebarType: 1 | `bidFloor` | optional | Floor of the impression opportunity. If present in the request overrides XML info. | `0.8` | `float` | Parameter `keywords` must have following format: -``` + +```javascript { "site":{ "publisher1":[ @@ -61,12 +62,13 @@ Parameter `keywords` must have following format: } ``` - + ### Bidder Config You can allow writing in localStorage `pbjs.setBidderConfig` for the bidder `trustx` -``` + +```javascript pbjs.setBidderConfig({ bidders: ["trustx"], config: { @@ -74,10 +76,12 @@ pbjs.setBidderConfig({ } }) ``` + If it will be "true" this allow TheMediaGrid Bid Adapter to write userId in first party localStorage If you want to make alias on TrustX Bid Adapter, you must set `forceBidderName` in bidderConfig as `"trustx"`. -``` + +```javascript pbjs.setBidderConfig({ bidders: ["aliasName"], config: { @@ -86,7 +90,7 @@ pbjs.setBidderConfig({ }) ``` - + ### First Party Data diff --git a/dev-docs/bidders/trustxstandalone.md b/dev-docs/bidders/trustxstandalone.md index f67fa71d6b..f29d509159 100644 --- a/dev-docs/bidders/trustxstandalone.md +++ b/dev-docs/bidders/trustxstandalone.md @@ -21,7 +21,7 @@ sidebarType: 1 - [Bid Params](#bid-params) - [First Party Data](#first-party-data) - + ### Bid Params @@ -33,7 +33,7 @@ sidebarType: 1 | `keywords` | optional (pbjs only) | A set of key-value pairs applied to all ad slots on the page. Values can be empty. | `keywords: { topic: ['stress', 'fear'] }` | `object` | | `useNewFormat` | optional (pbjs only) | Indicates to use the new ad request format. | `true` | `boolean` | - + ### First Party Data diff --git a/dev-docs/bidders/ucfunnel.md b/dev-docs/bidders/ucfunnel.md index 3ea94149bb..78e9a0d3d6 100644 --- a/dev-docs/bidders/ucfunnel.md +++ b/dev-docs/bidders/ucfunnel.md @@ -18,14 +18,14 @@ sidebarType: 1 ### Prebid JS -#### Bid params +#### Bid params (Prebid.js) {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |--------|----------|-------------------------------------------------|---------|----------| | `adid` | required | The ad unit ID retrived from ucfunnel dashboard | | `string` | -``` +```javascript var adUnits = [{ code: 'div-gpt-ad-1460505748511-01', sizes: [ @@ -43,17 +43,17 @@ var adUnits = [{ {: .alert.alert-info :} Sizes set in the `adUnit` object will also apply to the ucfunnel bid requests. - -### Examples + - - [Banner Ads](https://cdn.aralego.net/ucfad/test/ucfunnel/compliance/pbjs_banner.html) - - [Instream Video Ads](https://cdn.aralego.net/ucfad/test/ucfunnel/compliance/pbjs_video.html) - - [Native Ads](https://cdn.aralego.net/ucfad/test/ucfunnel/compliance/pbjs_native.html) +### Examples +- [Banner Ads](https://cdn.aralego.net/ucfad/test/ucfunnel/compliance/pbjs_banner.html) +- [Instream Video Ads](https://cdn.aralego.net/ucfad/test/ucfunnel/compliance/pbjs_video.html) +- [Native Ads](https://cdn.aralego.net/ucfad/test/ucfunnel/compliance/pbjs_native.html) ### Prebid server -#### Bid params +#### Bid params (Prebid Server) {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | diff --git a/dev-docs/conditional-ad-units.md b/dev-docs/conditional-ad-units.md index dfcfbbc799..41d7b54dbb 100644 --- a/dev-docs/conditional-ad-units.md +++ b/dev-docs/conditional-ad-units.md @@ -37,7 +37,7 @@ to send them requests from display or tablets. We'll start with how to set up the labels from `sizeConfig`: -{% highlight js %} +```javascript pbjs.setConfig({ sizeConfig: [{ @@ -55,12 +55,12 @@ pbjs.setConfig({ }] }); -{% endhighlight %} +``` In the above `sizeConfig`, labels are applied for each of the 3 screen sizes that can later be used in conditional ad unit logic. Now you need to label your AdUnits to match. For example: -{% highlight js %} +```javascript var AdUnits = [{ code: "ad-slot-1", @@ -85,7 +85,7 @@ var AdUnits = [{ ] }] -{% endhighlight %} +``` How this works: @@ -113,7 +113,7 @@ Assuming the same `sizeConfig` as in the first use case above, the AdUnit would placements, but the conditional `labelAny` is added to them both. This will cause the bid to be fired only if one or more of the strings in the array matches a defined label. -{% highlight js %} +```javascript var AdUnits = [{ code: "ad-slot-1", @@ -139,7 +139,7 @@ var AdUnits = [{ ] }] -{% endhighlight %} +``` How this works: @@ -153,7 +153,7 @@ How this works: Here's another way of doing the same thing as shown in the previous section: -{% highlight js %} +```javascript var AdUnits = [{ code: "ad-slot-1", @@ -185,7 +185,7 @@ var AdUnits = [{ ] }] -{% endhighlight %} +``` ## Some Ad Unit Auctions Should Be Skipped Entirely for Some Devices @@ -193,7 +193,7 @@ var AdUnits = [{ Say there's a responsive page where one of the ad units only supports larger sizes, so it doesn't make sense on phones. To suppress the ad unit for mobile users, we can apply conditional logic to the entire ad unit. Here's an example using the global sizeConfig approach (banner only): -{% highlight js %} +```javascript var AdUnits = [{ code: "ad-slot-1", @@ -221,7 +221,7 @@ var AdUnits = [{ See the [Advanced Size Mapping module](/dev-docs/modules/sizeMappingV2.html) if you need to do something like this for video. -{% endhighlight %} +``` ## Some Bid Requests Apply Only to Users Originating from Certain Countries @@ -232,17 +232,17 @@ certain region. It's really not worth sending them bid requests for users outside of their geographic area. Assuming the page can figure out where the user's from, a label can be implemented and applied to make the bid conditional. -{% highlight js %} +```javascript // page logic determines the 'europeanUser' boolean If (europeanUser) { reqArgs={labels:['eur']}; } pbjs.requestBids(reqArgs); -{% endhighlight %} +``` Then this label can be applied to conditions in the AdUnit just like labels that originate from `sizeConfig`. E.g. -{% highlight js %} +```javascript var AdUnits = [{ code: "ad-slot-1", mediaTypes: { @@ -261,7 +261,7 @@ var AdUnits = [{ ... ] }] -{% endhighlight %} +``` This example shows that the 'euroMobileBidder' is only interested in receiving bids that have **both** labels: diff --git a/dev-docs/faq.md b/dev-docs/faq.md index d5dc451d09..f5dd81376d 100644 --- a/dev-docs/faq.md +++ b/dev-docs/faq.md @@ -140,7 +140,7 @@ All prebid adapters that get merged should automatically detect if they're servi In other words, you shouldn't have to do anything other than make sure your own page loads Prebid.js securely, e.g., ```html - ``` (Except that you should *never never never* use the copy of Prebid.js at that URL in production, it isn't meant for production use and may break everything at any time.) diff --git a/dev-docs/integrate-with-the-prebid-analytics-api.md b/dev-docs/integrate-with-the-prebid-analytics-api.md index a433dfc4be..960a5d49ba 100644 --- a/dev-docs/integrate-with-the-prebid-analytics-api.md +++ b/dev-docs/integrate-with-the-prebid-analytics-api.md @@ -12,19 +12,21 @@ sidebarType: 1 # How to Add a Prebid.js Analytics Adapter + {:.no_toc} The Prebid Analytics API provides a way to get analytics data from `Prebid.js` and send it to the analytics provider of your choice, such as Google Analytics. Because it's an open source API, you can write an adapter to send analytics data to any provider you like. Integrating with the Prebid Analytics API has the following benefits: -+ It decouples your analytics from the `Prebid.js` library so you can choose the analytics provider you like, based on your needs. +* It decouples your analytics from the `Prebid.js` library so you can choose the analytics provider you like, based on your needs. -+ You can selectively build the `Prebid.js` library to include only the analytics adapters for the provider(s) you want. This keeps the library small and minimizes page load time. +* You can selectively build the `Prebid.js` library to include only the analytics adapters for the provider(s) you want. This keeps the library small and minimizes page load time. -+ Since this API separates your analytics provider's code from `Prebid.js`, the upgrade and maintenance of the two systems are separate. If you want to upgrade your analytics library, there is no need to upgrade or test the core of `Prebid.js`. +* Since this API separates your analytics provider's code from `Prebid.js`, the upgrade and maintenance of the two systems are separate. If you want to upgrade your analytics library, there is no need to upgrade or test the core of `Prebid.js`. [//]: # (This comment is a separator that allows the list above and the TOC to be rendered at the same time) * TOC + {:toc } ## Architecture of the Analytics API @@ -56,7 +58,9 @@ with the [module rules](/dev-docs/module-rules.html) that apply globally and to Create a markdown file under `modules` with the name of the bidder suffixed with 'AnalyticsAdapter', e.g., `exAnalyticsAdapter.md` Example markdown file: -{% highlight text %} + +```md + # Overview Module Name: Ex Analytics Adapter @@ -67,7 +71,7 @@ Maintainer: prebid@example.com Analytics adapter for Example.com. Contact prebid@example.com for information. -{% endhighlight %} +``` ### Step 2: Add analytics source code @@ -77,8 +81,8 @@ Analytics adapter for Example.com. Contact prebid@example.com for information. 3. There are two types of analytics adapters. The example here focuses on the 'endpoint' type. See [AnalyticsAdapter.js](https://github.com/prebid/Prebid.js/blob/master/libraries/analyticsAdapter/AnalyticsAdapter.js) for more info on the 'bundle' type. - * endpoint - Calls the specified URL on analytics events. Doesn't require a global context. - * bundle - An advanced option expecting a global context. + 1. endpoint - Calls the specified URL on analytics events. Doesn't require a global context. + 2. bundle - An advanced option expecting a global context. 4. In order to get access to the configuration passed in from the page, the analytics adapter needs to specify an enableAnalytics() function, but it should also call @@ -92,7 +96,7 @@ The best way to get started is to look at some of the existing AnalyticsAdapter. Here's a skeleton outline: -{% highlight js %} +```javascript import {ajax} from '../src/ajax.js'; import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js'; import CONSTANTS from '../src/constants.json'; @@ -121,7 +125,7 @@ adaptermanager.registerAnalyticsAdapter({ }); export default exAnalytics; -{% endhighlight %} +``` #### Reading TCF2 enforcement actions @@ -129,7 +133,7 @@ Analytics adapters can learn what happened with regards to GDPR TCF2 enforcement The callback will receive an object with the following attributes: -``` +```javascript { storageBlocked: ['moduleA', 'moduleB'], biddersBlocked: ['moduleB'], @@ -146,8 +150,8 @@ There are two error events analytics modules may wish to listen for: auctionDebu #### Analytics adapter best practices -+ listen only to the events required -+ batch up calls to the backend for post-auction logging rather than calling immediately after each event. +* listen only to the events required +* batch up calls to the backend for post-auction logging rather than calling immediately after each event. ### Step 3: Add unit tests @@ -169,7 +173,7 @@ Add a documentation file for your new analytics adapter. 3. Update the metadata fields at the top of the file to suit your needs: -``` +```markdown layout: analytics title: Your Company Name description: Your Company Analytics Adapter @@ -186,13 +190,11 @@ What does it mean to "support" the privacy protocols? At a high level, it means specifically discussed privacy policy actions and rules with your lawyers and implemented the results of that discussion. Some specific examples: -- GDPR support means: the analytics endpoint respects GDPR consent, Special Feature 1, and deals with any other Purposes declared in the vendor's Global Vendor List -- COPPA support means: analytics companies should not be building targeting profiles for users on sites flagged as COPPA -- USP/CCPA support means: analytics adapters cannot share user information if that user has opted out of sale - +1. GDPR support means: the analytics endpoint respects GDPR consent, Special Feature 1, and deals with any other Purposes declared in the vendor's Global Vendor List +2. COPPA support means: analytics companies should not be building targeting profiles for users on sites flagged as COPPA +3. USP/CCPA support means: analytics adapters cannot share user information if that user has opted out of sale 4. Update the body of the file to describe the options publishers have when configuring your adapter. See other adapters (e.g. rubicon.md) for a template. - 5. Submit the pull request to the prebid.github.io repo. ### Step 6: Wait for Prebid volunteers to review @@ -201,6 +203,6 @@ We sometimes get pretty busy, so it can take a couple of weeks for the review pr ## Further Reading -- [Analytics for Prebid](/overview/analytics.html) (Overview and list of analytics providers) -- [Module Rules](/dev-docs/module-rules.html) -- [Instream Video Ads Tracking](/dev-docs/modules/instreamTracking.html) +* [Analytics for Prebid](/overview/analytics.html) (Overview and list of analytics providers) +* [Module Rules](/dev-docs/module-rules.html) +* [Instream Video Ads Tracking](/dev-docs/modules/instreamTracking.html) diff --git a/dev-docs/modules/adpod.md b/dev-docs/modules/adpod.md index 0519cd9db6..bab5d9381b 100644 --- a/dev-docs/modules/adpod.md +++ b/dev-docs/modules/adpod.md @@ -75,7 +75,7 @@ To enable publishers to prioritize video deals with direct buys and over deals a ### Examples: -{% highlight js %} +```javascript // This will replace the cpm with dealId in cache key as well as targeting kv pair when prioritizeDeals flag is set to true. pbjs.setConfig({ adpod: { @@ -92,10 +92,10 @@ pbjs.setConfig({ } } }) -{% endhighlight %} +``` If the bidder returns multiple bid, each bid can have a different priority/deal tier set. To give publishers control over the deal tier a `filterBids` option has been added to `pbjs.adServers.freewheel.getTargeting` to select certain deal bids. -{% highlight js %} +```javascript pbjs.adServers.freewheel.getTargeting({ codes: [adUnitCode1], @@ -103,11 +103,11 @@ pbjs.adServers.freewheel.getTargeting({ //pass targeting to player api } }); -{% endhighlight %} +``` #### Return -{% highlight js %} +```javascript // Sample return targeting key value pairs { 'adUnitCode-1': [ @@ -125,7 +125,7 @@ pbjs.adServers.freewheel.getTargeting({ } ] } -{% endhighlight %} +``` ## Further Reading diff --git a/dev-docs/modules/bidViewable.md b/dev-docs/modules/bidViewable.md index a9da963a12..f5776afbad 100644 --- a/dev-docs/modules/bidViewable.md +++ b/dev-docs/modules/bidViewable.md @@ -49,7 +49,7 @@ The default logic used to find a matching Prebid.js bid for a GPT slot is | `bidViewability.customMatchFunction` | Optional | function(bid, slot) | this function will be used to find the matching winning bid for the GPT slot. See above for the default. | ## Example of setting module config -{% highlight js %} +```javascript pbjs.setConfig({ bidViewability: { enabled: true, @@ -60,14 +60,14 @@ The default logic used to find a matching Prebid.js bid for a GPT slot is } } }); -{% endhighlight %} +``` ## Example of consuming BID_VIEWABLE event -{% highlight js %} +```javascript pbjs.onEvent('bidViewable', function(bid){ console.log('got bid details in bidViewable event', bid); }); -{% endhighlight %} +``` ## Related Reading diff --git a/dev-docs/modules/bidViewableIO.md b/dev-docs/modules/bidViewableIO.md index 92d79be58c..d6fe041630 100644 --- a/dev-docs/modules/bidViewableIO.md +++ b/dev-docs/modules/bidViewableIO.md @@ -50,20 +50,20 @@ Note that there are other viewability modules in Prebid.js: | `bidViewabilityIO.enabled` | Required | Boolean | when set to true, the module will emit BID_VIEWABLE when applicable. Default: `false` | ## Example of setting module config -{% highlight js %} +```javascript pbjs.setConfig({ bidViewabilityIO: { enabled: true, } }); -{% endhighlight %} +``` ## Example of consuming BID_VIEWABLE event -{% highlight js %} +```javascript pbjs.onEvent('bidViewable', function(bid){ console.log('got bid details in bidViewable event', bid); }); -{% endhighlight %} +``` ## Related Reading diff --git a/dev-docs/modules/consentManagement.md b/dev-docs/modules/consentManagement.md index 963b003db9..2b956730b1 100644 --- a/dev-docs/modules/consentManagement.md +++ b/dev-docs/modules/consentManagement.md @@ -98,7 +98,7 @@ A related parameter is `deviceAccess`, which is at the global level of Prebid.js Example 1: IAB CMP using custom timeout and setting GDPR in-scope by default. -{% highlight js %} +```javascript var pbjs = pbjs || {}; pbjs.que = pbjs.que || []; pbjs.que.push(function() { @@ -112,11 +112,11 @@ Example 1: IAB CMP using custom timeout and setting GDPR in-scope by default. } }); }); -{% endhighlight %} +``` Example 2: IAB CMP using custom timeout in combination with actionTimeout and setting GDPR in-scope by default. The following will wait `500ms` for the CMP to load, if it does an additional `10000ms` will be waited for a user to provide consent (if none had yet been provided). -{% highlight js %} +```javascript var pbjs = pbjs || {}; pbjs.que = pbjs.que || []; pbjs.que.push(function() { @@ -131,11 +131,11 @@ Example 2: IAB CMP using custom timeout in combination with actionTimeout and se } }); }); -{% endhighlight %} +``` Example 3: Static CMP using custom data passing. -{% highlight js %} +```javascript var pbjs = pbjs || {}; pbjs.que = pbjs.que || []; pbjs.que.push(function() { @@ -173,15 +173,15 @@ Example 3: Static CMP using custom data passing. } }); }); -{% endhighlight %} +``` ## Build the Package Follow the basic build instructions in the GitHub Prebid.js repo's main [README](https://github.com/prebid/Prebid.js/blob/master/README.md). To include the consent management module, an additional option must be added to the **gulp build** command: -{% highlight bash %} +```bash gulp build --modules=consentManagement,bidAdapter1,bidAdapter2 -{% endhighlight %} +``` You can also use the [Prebid.js Download](/download.html) page. @@ -196,7 +196,7 @@ If you are submitting changes to an adapter to support TCF v2.0, please also sub To find the GDPR consent information to pass along to your system, adapters should look for the `bidderRequest.gdprConsent` field in their `buildRequests()` method. Here is a sample of how the data is structured in the `bidderRequest` object: -{% highlight js %} +```javascript { "bidderCode": "bidderA", "auctionId": "e3a336ad-2222-4a1c-bbbb-ecc7c5294a34", @@ -209,7 +209,7 @@ Here is a sample of how the data is structured in the `bidderRequest` object: }, ... } -{% endhighlight %} +``` **gdprConsent Data Fields** @@ -236,7 +236,7 @@ One of two general approaches can be taken by the adapter to populate this field The following is an example of how the integration could look for the former option: -{% highlight js %} +```javascript ... buildRequests: function (bidRequests, bidderRequest) { ... @@ -250,7 +250,7 @@ buildRequests: function (bidRequests, bidderRequest) { ... } ... -{% endhighlight %} +``` The implementation of the latter option is up to the adapter, but the general premise is the same. You would check to see if the `bidderRequest.gdprConsent.gdprApplies` field is undefined and if so, set the derived value from your independent system. @@ -261,11 +261,11 @@ If neither option are taken, then there is the remote chance this field's value The `gdprConsent` object is also available when registering `userSync` pixels. The object can be accessed by including it as an argument in the `getUserSyncs` function: -{% highlight js %} +```javascript getUserSyncs: function(syncOptions, responses, gdprConsent, usPrivacy) { ... } -{% endhighlight %} +``` Depending on your needs, you could include the consent information in a query of your pixel and/or, given the consent choices, determine if you should drop the pixels at all. @@ -297,7 +297,7 @@ At a high level, this could be done as follows: Below is sample code for implementing the stub functions. Sample code for formatting the consent string can be obtained [here](https://github.com/appnexus/cmp). -{% highlight js %} +```javascript var iabConsentData; // build the IAB consent string var gdprApplies; // true if gdpr applies to the user, else false var responseCode; // false if there was an error, else true @@ -355,7 +355,7 @@ var responseCode; // false if there was an error, else true } } })(window, document); -{% endhighlight %} +``` #### Explanation of Parameters diff --git a/dev-docs/modules/consentManagementGpp.md b/dev-docs/modules/consentManagementGpp.md index c0e3be1ff2..d5c46f463a 100644 --- a/dev-docs/modules/consentManagementGpp.md +++ b/dev-docs/modules/consentManagementGpp.md @@ -78,7 +78,7 @@ In addition to the static approach described above, there is another means to pa Example 1: IAB CMP using a custom timeout -{% highlight js %} +```javascript var pbjs = pbjs || {}; pbjs.que = pbjs.que || []; pbjs.que.push(function() { @@ -91,11 +91,11 @@ Example 1: IAB CMP using a custom timeout } }); }); -{% endhighlight %} +``` Example 2: Static CMP using custom data passing. -{% highlight js %} +```javascript var pbjs = pbjs || {}; pbjs.que = pbjs.que || []; pbjs.que.push(function() { @@ -115,15 +115,15 @@ Example 2: Static CMP using custom data passing. } }); }); -{% endhighlight %} +``` ## Build the Package Follow the basic build instructions in the GitHub Prebid.js repo's main [README](https://github.com/prebid/Prebid.js/blob/master/README.md). To include the consent management module, an additional option must be added to the **gulp build** command: -{% highlight bash %} +```bash gulp build --modules=consentManagementGpp,bidAdapter1,bidAdapter2 -{% endhighlight %} +``` You can also use the [Prebid.js Download](/download.html) page. @@ -138,7 +138,7 @@ If you are submitting changes to an adapter to support GPP, please also submit a To find the GPP consent information to pass along to your system, adapters should look for the `bidderRequest.gppConsent` field in their `buildRequests()` method; this field includes a copy of the full GPPData object from the CMP, in case additional information (beyond the gppString and applicableSections values) is needed. Alternatively if only the consent string and/or the applicableSections values are needed, these two values can also be found in the `bidderRequest.ortb2.regs` field under the OpenRTB 2.6 field names (`gpp` and `gpp_sid`). Here is a sample of how the data is structured in the `bidderRequest` object: -{% highlight js %} +```javascript { "bidderCode": "bidderA", "auctionId": "e3a336ad-2222-4a1c-bbbb-ecc7c5294a34", @@ -157,18 +157,18 @@ Here is a sample of how the data is structured in the `bidderRequest` object: }, ... } -{% endhighlight %} +``` ### UserSync Integration The `gppConsent` object is also available when registering `userSync` pixels. The object can be accessed by including it as an argument in the `getUserSyncs` function: -{% highlight js %} +```javascript getUserSyncs: function(syncOptions, responses, gdprConsent, usPrivacy, gppConsent) { ... } -{% endhighlight %} +``` Depending on your needs, you could include the consent information in a query of your pixel and/or, given the consent choices, determine if you should drop the pixels at all. diff --git a/dev-docs/modules/consentManagementUsp.md b/dev-docs/modules/consentManagementUsp.md index f42bf1cdb2..c9853e7753 100644 --- a/dev-docs/modules/consentManagementUsp.md +++ b/dev-docs/modules/consentManagementUsp.md @@ -97,7 +97,7 @@ to the GDPR implementation, though US-Privacy doesn't specifically use that term Example 1: Support both US Privacy and GDPR -{% highlight js %} +```javascript var pbjs = pbjs || {}; pbjs.que = pbjs.que || []; pbjs.que.push(function() { @@ -114,11 +114,11 @@ Example 1: Support both US Privacy and GDPR } }); }); -{% endhighlight %} +``` Example 2: Support US Privacy; timeout the api availability at zero because it is always available if it applies -{% highlight js %} +```javascript var pbjs = pbjs || {}; pbjs.que = pbjs.que || []; pbjs.que.push(function() { @@ -131,11 +131,11 @@ Example 2: Support US Privacy; timeout the api availability at zero because it i } }); }); -{% endhighlight %} +``` Example 3: Static CMP using custom data passing. Placing this config call in the command queue before loading Prebid is important to ensure the string is available before Prebid begins making external calls. -{% highlight js %} +```javascript var pbjs = pbjs || {}; pbjs.que = pbjs.que || []; pbjs.que.push(function() { @@ -152,11 +152,11 @@ Example 3: Static CMP using custom data passing. Placing this config call in the } }); }); -{% endhighlight %} +``` Example 4: Static CMP with USP string set to does not apply for all fields, which may be useful to prevent excessive interaction with the `__uspapi` outside of the geographic scope. Placing this config call in the command queue before loading Prebid is important to ensure it is available early. -{% highlight js %} +```javascript var pbjs = pbjs || {}; pbjs.que = pbjs.que || []; pbjs.que.push(function() { @@ -173,14 +173,14 @@ Example 4: Static CMP with USP string set to does not apply for all fields, whic } }); }); -{% endhighlight %} +``` ## Build the Package Follow the basic build instructions in the GitHub Prebid.js repo's main [README](https://github.com/prebid/Prebid.js/blob/master/README.md). To include the consent management module, an additional option must be added to the the **gulp build** command: -{% highlight bash %} +```bash gulp build --modules=consentManagementUsp,bidAdapter1,bidAdapter2 -{% endhighlight %} +``` ## Adapter Integration @@ -191,7 +191,7 @@ If you are submitting changes to an adapter to support this approach, please als To find the US Privacy/CCPA notice and opt-out status information to pass along to your system, adapters should look for the `bidderRequest.uspConsent` field in their `buildRequests()` method. Below is a sample of how the data is structured in the `bidderRequest` object: -{% highlight js %} +```javascript { "bidderCode": "bidderA", "auctionId": "e3a336ad-2222-4a1c-bbbb-ecc7c5554a34", @@ -199,18 +199,18 @@ Below is a sample of how the data is structured in the `bidderRequest` object: "uspConsent": "1YYY", ... } -{% endhighlight %} +``` ### UserSync Integration The `usPrivacy` object is also available when registering `userSync` pixels. The object can be accessed by including it as an argument in the `getUserSyncs` function: -{% highlight js %} +```javascript getUserSyncs: function(syncOptions, responses, gdprConsent, usPrivacy) { ... } -{% endhighlight %} +``` Depending on your needs, you could include the US-Privacy information in a query of your pixel and/or, given the notice and opt-out status choices, determine if you should drop the pixels at all. diff --git a/dev-docs/modules/currency.md b/dev-docs/modules/currency.md index bc8dd3562d..9d18ac35de 100644 --- a/dev-docs/modules/currency.md +++ b/dev-docs/modules/currency.md @@ -53,7 +53,7 @@ For example, the default Prebid "low granularity" bucket is: The following config translates the "low granularity" bucket with a conversion rate of 108 yen to 1 US dollar. It also defines the default conversion rate as being 110 yen to the dollar. -{% highlight js %} +```javascript pbjs.setConfig({ "priceGranularity": "low", "currency": { @@ -62,7 +62,7 @@ pbjs.setConfig({ "defaultRates": { "USD": { "JPY": 110 }} } }); -{% endhighlight %} +``` This results in a granularity rule that's scaled up to make sense in Yen: @@ -172,7 +172,7 @@ from USD to JPY is 110. Adding the currency module to a page is done with a call to the setConfig API with one or more parameters. The simplest recommended implementation would be: -{% highlight js %} +```javascript pbjs.setConfig({ "currency": { "adServerCurrency": "JPY", @@ -180,13 +180,13 @@ pbjs.setConfig({ "defaultRates": { "USD": { "JPY": 110 }} } }); -{% endhighlight %} +``` {: .alert.alert-warning :} Note that the `defaultRates` attribute is optional, but recommended in case there's an issue loading the currency file. In this example, the publisher is providing their own `conversionRateFile`: -{% highlight js %} +```javascript pbjs.setConfig({ "currency": { // enables currency feature @@ -198,10 +198,10 @@ pbjs.setConfig({ "defaultRates": { "USD": { "GPB": 0.75 }} } }); -{% endhighlight %} +``` And finally, here's an example where the conversion rate is specified right in the config, so the external file won't be loaded: -{% highlight js %} +```javascript pbjs.setConfig({ "currency": { "adServerCurrency": "JPY", @@ -209,7 +209,7 @@ pbjs.setConfig({ "rates": { "USD": { "JPY": 110.21 }} } }); -{% endhighlight %} +``` ## Building the Prebid package with Currency Support @@ -218,9 +218,9 @@ pbjs.setConfig({ Follow the basic build instructions on the Gihub repo's main README. To include the module, an additional option must be added to the the gulp build command: -{% highlight js %} +```javascript gulp build --modules=currency,exampleBidAdapter -{% endhighlight %} +``` This command will build the following files: @@ -235,7 +235,7 @@ After testing, get your javascript file(s) out to your Content Delivery Network Note that there are more dynamic ways of combining these components for publishers or integrators ready to build a more advanced infrastructure. - + ## Functions diff --git a/dev-docs/modules/debugging.md b/dev-docs/modules/debugging.md index 23538a64ff..35f3ea0678 100644 --- a/dev-docs/modules/debugging.md +++ b/dev-docs/modules/debugging.md @@ -13,15 +13,16 @@ sidebarType : 1 This module allows to "intercept" bids and replace their contents with arbitrary data for the purposes of testing and development. -Bids intercepted in this way are never seen by bid adapters or their backend SSPs, but they are nonetheless injected into the auction as if they originated from them. +Bids intercepted in this way are never seen by bid adapters or their backend SSPs, but they are nonetheless injected into the auction as if they originated from them. {: .pb-alert .pb-alert-warning :} For convenience, `debugging` configuration is persisted to the browser's session storage, so that you may type `pbjs.setConfig({debugging: ...})` in the console and reload the page to immediately see the effects. This means that you need to remember to **deactivate debuggging (or clear session storage) when you are done**. - -### Usage example + -The following will intercept all bids for the ad unit with code "test-div", and replace them with mocks that have `cpm: 10`: +## Usage example + +The following will intercept all bids for the ad unit with code "test-div", and replace them with mocks that have `cpm: 10`: ```javascript pbjs.setConfig({ @@ -56,7 +57,8 @@ pbjs.setConfig({ Rules are evaluated on each bid in the order they are provided: the first one that has a matching `when` definition takes the bid out of the normal auction flow and replaces it according to its `then` definition. - + + ### Match rules The match rule can be provided as a function that takes the bid request as its only argument and returns `true` if the bid should be intercepted, `false` otherwise. The [example above](#example) could be written as: @@ -79,9 +81,9 @@ pbjs.setConfig({ Alternatively, the rule can be expressed as an object, and it matches if for each `key`-`value` pair: - - `bidRequest[key] === value`, or - - `value` is a function and `value(bidRequest[key])` is `true`, or - - `value` is a regular expression and it matches `bidRequest[key]`. +- `bidRequest[key] === value`, or +- `value` is a function and `value(bidRequest[key])` is `true`, or +- `value` is a regular expression and it matches `bidRequest[key]`. To illustrate, these definitions are equivalent: @@ -103,7 +105,8 @@ To illustrate, these definitions are equivalent: }; ``` - + + ### Replace rules The replace rule can be provided as a function that takes the bid request as its only argument and returns an object with the desired response properties. The [first example above](#example) could be written as: @@ -144,7 +147,8 @@ To illustrate, the following definitions are equivalent: } ``` - + + ### Rule options {: .table .table-bordered .table-striped } diff --git a/dev-docs/modules/dfp_express.md b/dev-docs/modules/dfp_express.md index 55da3c2036..37183767cf 100644 --- a/dev-docs/modules/dfp_express.md +++ b/dev-docs/modules/dfp_express.md @@ -36,9 +36,9 @@ Definitions: ## Page integration Adding the module to a page is done by adding just one line of javascript: -{% highlight js %} +```javascript + ## pbjs + {% for page in api_pages %}
  • {{page.title}}
  • {% endfor %} - - diff --git a/dev-docs/publisher-api-reference/adServers.dfp.buildAdpodVideoUrl.md b/dev-docs/publisher-api-reference/adServers.dfp.buildAdpodVideoUrl.md index abb5491e1a..02adfbb293 100644 --- a/dev-docs/publisher-api-reference/adServers.dfp.buildAdpodVideoUrl.md +++ b/dev-docs/publisher-api-reference/adServers.dfp.buildAdpodVideoUrl.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.adServers.dfp.buildAdpodVideoUrl(options) [Alpha] -description: +description: adServers.dfp.buildAdpodVideoUrl API sidebarType: 1 --- @@ -57,4 +57,4 @@ pbjs.que.push(function(){ }); ``` -{% include alerts/alert_warning.html content="Set the `pbjs.setConfig.cache.url` to the URL that will cache the VAST XML. " %} \ No newline at end of file +{% include alerts/alert_warning.html content="Set the `pbjs.setConfig.cache.url` to the URL that will cache the VAST XML. " %} diff --git a/dev-docs/publisher-api-reference/adServers.dfp.buildVideoUrl.md b/dev-docs/publisher-api-reference/adServers.dfp.buildVideoUrl.md index bac83f2a52..6c8ccae331 100644 --- a/dev-docs/publisher-api-reference/adServers.dfp.buildVideoUrl.md +++ b/dev-docs/publisher-api-reference/adServers.dfp.buildVideoUrl.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.adServers.dfp.buildVideoUrl(options) -description: +description: adServers.dfp.buildVideoUrl API sidebarType: 1 --- @@ -81,4 +81,4 @@ var videoUrl = pbjs.adServers.dfp.buildVideoUrl({ {: .alert.alert-warning :} -In the event of collisions, querystring values passed via `options.params` take precedence over those passed via `options.url`. \ No newline at end of file +In the event of collisions, querystring values passed via `options.params` take precedence over those passed via `options.url`. diff --git a/dev-docs/publisher-api-reference/adServers.freewheel.getTargeting.md b/dev-docs/publisher-api-reference/adServers.freewheel.getTargeting.md index d45c2e2367..12b22adfb9 100644 --- a/dev-docs/publisher-api-reference/adServers.freewheel.getTargeting.md +++ b/dev-docs/publisher-api-reference/adServers.freewheel.getTargeting.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.adServers.freewheel.getTargeting(options) -description: +description: adServers.freewheel.getTargeting API sidebarType: 1 --- @@ -14,7 +14,6 @@ Use this method to get targeting key-value pairs to be sent to the ad server. + `pbjs.adServers.freewheel.getTargeting(options)`: returns key-value pair from the ad server. ```javascript - pbjs.adServers.freewheel.getTargeting({ codes: [adUnitCode1], callback: function(err, targeting) { @@ -22,6 +21,7 @@ pbjs.adServers.freewheel.getTargeting({ } }); ``` + #### Argument Reference ##### The `options` object @@ -30,4 +30,4 @@ pbjs.adServers.freewheel.getTargeting({ | Param | Scope | Type | Description | | --- | --- | --- | --- | | codes | Optional | `Array` | [`adUnitCode1`] | -| callback | Required | `Function` | Callback function to execute when targeting data is back. | \ No newline at end of file +| callback | Required | `Function` | Callback function to execute when targeting data is back. | diff --git a/dev-docs/publisher-api-reference/addAdUnits.md b/dev-docs/publisher-api-reference/addAdUnits.md index b5eefaef0a..4af75f0210 100644 --- a/dev-docs/publisher-api-reference/addAdUnits.md +++ b/dev-docs/publisher-api-reference/addAdUnits.md @@ -8,10 +8,10 @@ sidebarType: 1 Takes one ad unit object or an array of ad unit objects and adds them to the Prebid auction. For usage examples, see [Examples](#addAdUnits-Examples) below and the [Getting Started]({{site.baseurl}}/dev-docs/getting-started.html) page. -+ [Ad Unit Properties](#addAdUnits-AdUnitProperties) -+ [Examples](#addAdUnits-Examples) +* [Ad Unit Properties](#addAdUnits-AdUnitProperties) +* [Examples](#addAdUnits-Examples) - + #### Ad Unit Properties @@ -28,13 +28,13 @@ See the table below for the list of properties on the ad unit. For example ad u | `labelAll` | optional | array | An array of string labels, used for showing responsive and conditional ads. With the `labelAll` conditional, every element of the target array must match an element of the label array in order for the condition to be true. Works with the `sizeConfig` object passed in to [pbjs.setConfig]({{site.baseurl}}/dev-docs/publisher-api-reference/setConfig.html). | | `video` | Optional | Object | Used to link an Ad Unit to the [Video Module]({{site.github.url}}/prebid-video/video-module.html). For allowed params see the [adUnit.video reference](#adUnit-video). | - + ##### Bids See the table below for the list of properties in the `bids` array of the ad unit. For example ad units, see the [Examples](#addAdUnits-Examples) below. -Note that `bids` is optional only for [Prebid Server stored impressions](/dev-docs/modules/prebidServer.html#stored-imp), and required in all other cases. +Note that `bids` is optional only for [Prebid Server stored impressions](/dev-docs/modules/prebidServer.html#stored-imp), and required in all other cases. {: .table .table-bordered .table-striped } @@ -45,7 +45,7 @@ Note that `bids` is optional only for [Prebid Server stored impressions](/dev-do | `labelAny` | optional | array | An array of string labels, used for showing responsive ads. With the `labelAny` operator, just one label has to match for the condition to be true. Works with the `sizeConfig` object passed in to [pbjs.setConfig]({{site.baseurl}}/dev-docs/publisher-api-reference/setConfig.html). | | `labelAll` | optional | array | An array of string labels, used for showing responsive and conditional ads. With the `labelAll` conditional, every element of the target array must match an element of the label array in order for the condition to be true. Works with the `sizeConfig` object passed in to [pbjs.setConfig]({{site.baseurl}}/dev-docs/publisher-api-reference/setConfig.html). | - + ##### Media Types @@ -62,24 +62,23 @@ See the table below for the list of properties in the `mediaTypes` object of the For the list of properties please visit the [adUnit.video reference]({{site.baseurl}}/dev-docs/adunit-reference.html#adUnit.video). - + #### Examples -- [Ad Unit Properties](#ad-unit-properties) - - [Bids](#bids) - - [Media Types](#media-types) -- [Video](#video) -- [Examples](#examples) - - [Native](#native) - - [Video](#video-1) - - [Banner](#banner) - - [Multi-format](#multi-format) +* [Ad Unit Properties](#ad-unit-properties) + * [Bids](#bids) + * [Media Types](#media-types) +* [Video](#video) +* [Examples](#examples) + * [Native](#mediatype-native) + * [Video](#mediatype-video) + * [Banner](#mediatype-banner) + * [Multi-format](#multi-format) + - - -##### Native +##### MediaType Native For an example of a native ad unit, see below. For more detailed instructions, see [Show Native Ads]({{site.baseurl}}/dev-docs/show-native-ads.html). @@ -124,11 +123,11 @@ pbjs.addAdUnits({ {% include dev-docs/native-image-asset-sizes.md %} - + -##### Video +##### MediaType Video -If using the Video Module, see below. For more information on the Video Module, see the [Video Module docs]({{site.github.url}}/prebid-video/video-module.html). +If using the Video Module, see below. For more information on the Video Module, see the [Video Module docs]({{site.github.url}}/prebid-video/video-module.html). ```javascript pbjs.addAdUnits({ @@ -204,9 +203,9 @@ pbjs.addAdUnit({ }) ``` - + -##### Banner +##### MediaType Banner For an example of a banner ad unit, see below. For more detailed instructions, see [Getting Started]({{site.baseurl}}/dev-docs/getting-started.html). @@ -229,7 +228,7 @@ pbjs.addAdUnits({ }) ``` - + ##### Multi-format @@ -251,10 +250,10 @@ pbjs.addAdUnits({ video: { context: 'outstream', playerSize: [640, 480], - mimes: ['video/mp4'], - protocols: [1, 2, 3, 4, 5, 6, 7, 8], - playbackmethod: [2], - skip: 1 + mimes: ['video/mp4'], + protocols: [1, 2, 3, 4, 5, 6, 7, 8], + playbackmethod: [2], + skip: 1 }, }, bids: [ diff --git a/dev-docs/publisher-api-reference/aliasBidder.md b/dev-docs/publisher-api-reference/aliasBidder.md index 1b5c6ee32d..ff4886f2f4 100644 --- a/dev-docs/publisher-api-reference/aliasBidder.md +++ b/dev-docs/publisher-api-reference/aliasBidder.md @@ -8,11 +8,11 @@ sidebarType: 1 To define an alias for a bidder adapter, call this method at runtime: -{% highlight js %} +```javascript pbjs.aliasBidder('appnexus', 'newAlias', optionsObject ); -{% endhighlight %} +``` Defining an alias can help avoid user confusion since it's possible to send parameters to the same adapter but in different contexts (e.g, The publisher uses `"appnexus"` for demand and also uses `"newAlias"` which is an SSP partner that uses the `"appnexus"` adapter to serve their own unique demand). diff --git a/dev-docs/publisher-api-reference/aliasRegistry.md b/dev-docs/publisher-api-reference/aliasRegistry.md index f3773f5512..6740d839ca 100644 --- a/dev-docs/publisher-api-reference/aliasRegistry.md +++ b/dev-docs/publisher-api-reference/aliasRegistry.md @@ -8,16 +8,16 @@ sidebarType: 1 Exposes the aliasRegistry. It can be used to fetch the entire aliasRegistry object or an individual adapter code by alias name. -{% highlight js %} - -pbjs.aliasRegistry; or pbjs.aliasRegistry[aliasName]; - -{% endhighlight %} +```javascript +pbjs.aliasRegistry; +// or +pbjs.aliasRegistry['aliasName']; +``` {: .alert.alert-warning :} Note that by default, the alias registry will be made public. If you would like the registry to be private, you can utilize the `setConfig` option below: -``` +```javascript pbjs.setConfig({aliasRegistry: 'private'}) ``` diff --git a/dev-docs/publisher-api-reference/bidderSettings.md b/dev-docs/publisher-api-reference/bidderSettings.md index 34b7810e43..c8079ca699 100644 --- a/dev-docs/publisher-api-reference/bidderSettings.md +++ b/dev-docs/publisher-api-reference/bidderSettings.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.bidderSettings -description: +description: bidderSettings API sidebarType: 1 --- @@ -11,8 +11,7 @@ sidebarType: 1 The bidderSettings object provides a way to define some behaviors for the platform and specific adapters. The basic structure is a 'standard' section with defaults for all adapters, and then one or more adapter-specific sections that override behavior for that bidder: -{% highlight js %} - +```javascript pbjs.bidderSettings = { standard: { [...] @@ -24,8 +23,7 @@ pbjs.bidderSettings = { [...] }, } - -{% endhighlight %} +``` Defining bidderSettings is optional; the platform has default values for all of the options. Adapters may specify their own default settings, though this isn't common. @@ -42,7 +40,7 @@ Some sample scenarios where publishers may wish to alter the default settings: | --- | --- | --- | --- | --- | | adserverTargeting | standard or adapter-specific | all | see below | Define which key/value pairs are sent to the ad server. | | bidCpmAdjustment | standard or adapter-specific | all | n/a | Custom CPM adjustment function. Could, for example, adjust a bidder's gross-price bid to net price. | -| inverseCpmAdjustment | standard or adapter-specific | 7.33.0 | n/a | Inverse of `bidCpmAdjustment` | +| inverseCpmAdjustment | standard or adapter-specific | 7.33.0 | n/a | Inverse of `bidCpmAdjustment` | | sendStandardTargeting | adapter-specific | 0.13.0 | true | If adapter-specific targeting is specified, can be used to suppress the standard targeting for that adapter. | | suppressEmptyKeys | standard or adapter-specific | 0.13.0 | false | If custom adserverTargeting functions are specified that may generate empty keys, this can be used to suppress them. | | allowZeroCpmBids | standard or adapter-specific | 6.2.0 | false | Would allow bids with a 0 CPM to be accepted by Prebid.js and could be passed to the ad server. | @@ -72,12 +70,11 @@ The key value pair targeting is applied to the bid's corresponding ad unit. Your If you'd like to customize the key value pairs, you can overwrite the settings as the below example shows. *Note* that once you updated the settings, let your ad ops team know about the change, so they can update the line item targeting accordingly. See the [Ad Ops](/adops/before-you-start.html) documentation for more information. - + There's no need to include the following code if you choose to use the *below default setting*. -{% highlight js %} - +```javascript pbjs.bidderSettings = { standard: { adserverTargeting: [{ @@ -113,8 +110,7 @@ pbjs.bidderSettings = { }] } } - -{% endhighlight %} +``` {: .alert.alert-warning :} Note that the existence of `bidderSettings.adserverTargeting.standard` will prevent the system from adding the standard display targeting values: hb_bidder, hb_adid, hb_pb, hb_size, and hb_format. However, if the mediaType is video and `bidderSettings.adserverTargeting.standard` does not specify hb_uuid, hb_cache_id, or hb_cache_host, they will be added unless `bidderSettings.sendStandardTargeting` is set to false. @@ -127,7 +123,7 @@ settings as the below example for AppNexus shows. *Note that the line item setup has to match the targeting change* -{% highlight js %} +```javascript pbjs.bidderSettings = { appnexus: { sendStandardTargeting: false, @@ -146,8 +142,7 @@ pbjs.bidderSettings = { ] } } -{% endhighlight %} - +``` In other words, the above config sends 2 pairs of key/value strings targeting for every AppNexus bid and for every ad unit. The 1st pair would be `apn_pbMg` => the value of `bidResponse.pbMg`. The 2nd pair would be `apn_adId` => the value of `bidResponse.adId`. You can find the bidResponse object documentation [here](/troubleshooting/troubleshooting-guide.html#common-bid-response-parameters). @@ -159,8 +154,7 @@ Now let's say you would like to define a bidder-specific price bucket function r *Note: this will only impact the price bucket sent to the ad server for targeting. It won't actually impact the cpm value used for ordering the bids.* -{% highlight js %} - +```javascript pbjs.bidderSettings = { standard: { [...] @@ -181,10 +175,10 @@ pbjs.bidderSettings = { return "pb6"; // all bids $6 and above are assigned to price bucket 'pb6' } }] - [...] + // [...] } } -{% endhighlight %} +``` ##### 2.2. bidCpmAdjustment @@ -194,13 +188,12 @@ In this case, the publisher may want to adjust the bidder's returned price to ru header bidding auction. Otherwise, this bidder's gross price will unfairly win over your other demand sources who report the real price. -Custom adjustment can be provided as a function taking 3 arguments: `bidCpmAdjustment(cpm, bidResponse, bidRequest)`. -Note that either `bidResponse` or `bidRequest` may be missing, although at least one of them is guaranteed to be present. This is because Prebid will sometimes need to run adjustment when no bid has been made yet; see [inverseCpmAdjustment](#inverseCpmAdjustment) below. +Custom adjustment can be provided as a function taking 3 arguments: `bidCpmAdjustment(cpm, bidResponse, bidRequest)`. +Note that either `bidResponse` or `bidRequest` may be missing, although at least one of them is guaranteed to be present. This is because Prebid will sometimes need to run adjustment when no bid has been made yet; see [inverseCpmAdjustment](#23-inversecpmadjustment) below. For example: -{% highlight js %} - +```javascript pbjs.bidderSettings = { standard: { ... } aol: { @@ -211,20 +204,18 @@ pbjs.bidderSettings = { } } }; - -{% endhighlight %} +``` In the above example, the AOL bidder will inherit from "standard" adserverTargeting keys, so that you don't have to define the targeting keywords again. ##### 2.3. inverseCpmAdjustment -When using [price floors](/dev-docs/modules/floors.html), Prebid attempts to calculate the inverse of `bidCpmAdjustment`, so that the floor values it requests from SSPs take into account how the bid will be adjusted. +When using [price floors](/dev-docs/modules/floors.html), Prebid attempts to calculate the inverse of `bidCpmAdjustment`, so that the floor values it requests from SSPs take into account how the bid will be adjusted. For example, if the adjustment is `bidCpm * .85` as above, floors are adjusted by `bidFloor * 1 / .85`. The automatically derived inverse function is correct only when `bidCpmAdjustment` is a simple multiplication. If it isn't, the inverse should also be provided through `inverseCpmAdjustment`. For example: -{% highlight js %} - +```javascript pbjs.bidderSettings = { aol: { bidCpmAdjustment : function(cpm) { @@ -234,12 +225,8 @@ pbjs.bidderSettings = { return Math.max(0.2, (cpm / .85) + 0.2) } } -} }; - -{% endhighlight %} - - +``` ##### 2.4. sendStandardTargeting @@ -258,23 +245,24 @@ If a custom adServerTargeting function can return an empty value, this boolean f ##### 2.6. allowZeroCpmBids By default, 0 CPM bids are ignored by Prebid.js entirely. However if there's a valid business reason to allow these bids, this setting can be enabled to allow -either specific bid adapter(s) or all bid adapters the permission for these bids to be processed by Prebid.js and potentially sent to the respective ad server +either specific bid adapter(s) or all bid adapters the permission for these bids to be processed by Prebid.js and potentially sent to the respective ad server (depending on the Prebid.js auction results). ##### 2.7. storageAllowed This setting defines if the bid adapter can access browser cookies or local storage. Allowed values are: - - an array containing either `'html5'`, `'cookie'` or both to allow specific storage methods (e.g. `['cookie']` enables cookies but not local storage) - - `true` to allow any storage method; - - `false` to disable all storage. - +* an array containing either `'html5'`, `'cookie'` or both to allow specific storage methods (e.g. `['cookie']` enables cookies but not local storage) +* `true` to allow any storage method; +* `false` to disable all storage. +
    Default value is `true` in version 6.x
    Default value is `false` in version 7.x Note that: - - [Disabling device access](/dev-docs/publisher-api-reference/setConfig.html#setConfig-deviceAccess) will prevent access to storage regardless of this setting; - - `storageAllowed` will only affect bid adapters and not any other type of module (such as analytics or RTD). + +* [Disabling device access](/dev-docs/publisher-api-reference/setConfig.html#setConfig-deviceAccess) will prevent access to storage regardless of this setting; +* `storageAllowed` will only affect bid adapters and not any other type of module (such as analytics or RTD). @@ -284,12 +272,11 @@ If this flag is set to `true`, bidders that have not been explicitly requested i
    Default value is `true` in version 6.x
    Default value will be `false` from version 7.0 - ##### 2.9. allowedAlternateBidderCodes This array will work in conjunction with `allowAlternateBidderCodes`. In this array, you can specify the names of the bidder for which an adapter can accept the bid. If the value is not specified for the array or `[‘*’]` is specified, Prebid will accept bids of all the bidders for the given adapter. -{% highlight js %} +```javascript pbjs.bidderSettings = { standard: { @@ -313,7 +300,7 @@ pbjs.bidderSettings = { [...] } } -{% endhighlight %} +``` In the above example, `groupm` bid will have a bid adjustment of 80% since the `bidCpmAdjustment` function says so.
    If `appnexus` bids with another bidder code, say `appnexus2`. This bidder code will adjust the bid cpm to 95% because it will apply the `bidCpmAdjustment` function from `standard` setting, since the `bidCpmAdjustment` is missing for given bidder code I.e `appnexus2` @@ -326,7 +313,7 @@ Optionally allow alternate bidder codes originating from a specific bid adapter 2. Adapter bidCpmAdjustment function 3. The standard bidCpmAdjustment function -{% highlight js %} +```javascript pbjs.bidderSettings = { standard: { @@ -348,7 +335,7 @@ pbjs.bidderSettings = { [...] } } -{% endhighlight %} +``` In the above example, if PubMatic were to return the "groupm" bidder code then the bidCpmAdjustment function under `pubmatic` would be used instead of what is available under `standard`. diff --git a/dev-docs/publisher-api-reference/enableAnalytics.md b/dev-docs/publisher-api-reference/enableAnalytics.md index 7e6ac4fb02..7ba8ac6852 100644 --- a/dev-docs/publisher-api-reference/enableAnalytics.md +++ b/dev-docs/publisher-api-reference/enableAnalytics.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.enableAnalytics(config) -description: +description: enableAnalytics API sidebarType: 1 --- @@ -10,7 +10,7 @@ Enables sending event data to the analytics provider of your choice. For a list ### Example -``` +```javascript pbjs.enableAnalytics([{ provider: "analyticsA", options: { @@ -31,16 +31,13 @@ pbjs.enableAnalytics([{ | `includeEvents` | Optional | Array of strings | Event whitelist; if provided, only these events will be forwarded to the adapter | | `excludeEvents` | Optional | Array of strings | Event blacklist; if provided, these events will not be forwarded to the adapter | - Note each analytics adapter has its own invocation parameters. Analytics adapters that are built in the standard way should support a `option.sampling` parameter. You'll need to check with your analytics provider to confirm whether their system recommends the use of this parameter. They may have alternate methods of sampling. - ### See also -- [Prebid.js events](/dev-docs/publisher-api-reference/getEvents.html) -- [How to Add an Analytics Adapter](/dev-docs/integrate-with-the-prebid-analytics-api.html). - +* [Prebid.js events](/dev-docs/publisher-api-reference/getEvents.html) +* [How to Add an Analytics Adapter](/dev-docs/integrate-with-the-prebid-analytics-api.html).
    diff --git a/dev-docs/publisher-api-reference/getAdserverTargeting.md b/dev-docs/publisher-api-reference/getAdserverTargeting.md index d054407e12..296c69a785 100644 --- a/dev-docs/publisher-api-reference/getAdserverTargeting.md +++ b/dev-docs/publisher-api-reference/getAdserverTargeting.md @@ -1,13 +1,12 @@ --- layout: api_prebidjs title: pbjs.getAdserverTargeting() -description: +description: getAdserverTargeting API sidebarType: 1 ---
    - Returns all ad server targeting for all ad units. Note that some bidder's response may not have been received if you call this function too quickly after the requests are sent. The targeting keys can be configured in [ad server targeting](/dev-docs/publisher-api-reference/bidderSettings.html). @@ -20,7 +19,7 @@ When [deals are enabled]({{site.baseurl}}/adops/deals.html), the object returned **Returned Object Example:** -{% highlight js %} +```javascript { "/9968336/header-bid-tag-0": { "hb_bidder": "rubicon", @@ -39,4 +38,4 @@ When [deals are enabled]({{site.baseurl}}/adops/deals.html), the object returned "hb_deal_appnexus": "ABC_123" } } -{% endhighlight %} +``` diff --git a/dev-docs/publisher-api-reference/getAdserverTargetingForAdUnitCode.md b/dev-docs/publisher-api-reference/getAdserverTargetingForAdUnitCode.md index 94e6056b9e..4d76b7681e 100644 --- a/dev-docs/publisher-api-reference/getAdserverTargetingForAdUnitCode.md +++ b/dev-docs/publisher-api-reference/getAdserverTargetingForAdUnitCode.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.getAdserverTargetingForAdUnitCode([adunitCode]) -description: +description: getAdserverTargetingForAdUnitCode API sidebarType: 1 --- @@ -21,10 +21,10 @@ This function returns the query string targeting parameters available at this mo **Returned Object Example:** -{% highlight js %} +```javascript { "hb_bidder": "rubicon", "hb_adid": "13f44b0d3c", "hb_pb": "0.50" } -{% endhighlight %} +``` diff --git a/dev-docs/publisher-api-reference/getAllPrebidWinningBids.md b/dev-docs/publisher-api-reference/getAllPrebidWinningBids.md index 8c3fac6925..9d9bb09271 100644 --- a/dev-docs/publisher-api-reference/getAllPrebidWinningBids.md +++ b/dev-docs/publisher-api-reference/getAllPrebidWinningBids.md @@ -1,11 +1,11 @@ --- layout: api_prebidjs title: pbjs.getAllPrebidWinningBids() -description: +description: getAllPrebidWinningBids API sidebarType: 1 --- Use this method to get all of the bids that have won their respective auctions but not rendered on the page. Useful for [troubleshooting your integration]({{site.baseurl}}/dev-docs/prebid-troubleshooting-guide.html). -+ `pbjs.getAllPrebidWinningBids()`: returns an array of bid objects that have won their respective auctions but not rendered on the page. \ No newline at end of file +* `pbjs.getAllPrebidWinningBids()`: returns an array of bid objects that have won their respective auctions but not rendered on the page. diff --git a/dev-docs/publisher-api-reference/getAllWinningBids.md b/dev-docs/publisher-api-reference/getAllWinningBids.md index b47fc716d1..f05f13bb93 100644 --- a/dev-docs/publisher-api-reference/getAllWinningBids.md +++ b/dev-docs/publisher-api-reference/getAllWinningBids.md @@ -1,11 +1,11 @@ --- layout: api_prebidjs title: pbjs.getAllWinningBids() -description: +description: getAllWinningBids API sidebarType: 1 --- Use this method to get all of the bids that have won their respective auctions and also rendered on the page. Useful for [troubleshooting your integration]({{site.baseurl}}/dev-docs/prebid-troubleshooting-guide.html). -+ `pbjs.getAllWinningBids()`: returns an array of bid objects that have won their respective auctions and also rendered on the page. \ No newline at end of file +* `pbjs.getAllWinningBids()`: returns an array of bid objects that have won their respective auctions and also rendered on the page. diff --git a/dev-docs/publisher-api-reference/getBidResponses.md b/dev-docs/publisher-api-reference/getBidResponses.md index cab2bcf46e..44ae1d92d0 100644 --- a/dev-docs/publisher-api-reference/getBidResponses.md +++ b/dev-docs/publisher-api-reference/getBidResponses.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.getBidResponses() -description: +description: getBidResponses API sidebarType: 1 --- @@ -47,14 +47,12 @@ This function returns the bid responses at the given moment. -
    - -{% highlight bash %} +```json { "/9968336/header-bid-tag-0": { "bids": [ @@ -168,7 +166,8 @@ This function returns the bid responses at the given moment. ] } } -{% endhighlight %} +``` +
    @@ -182,84 +181,83 @@ This function returns the bid responses at the given moment. -
    -{% highlight bash %} +```json { - "div-banner-outstream-native" : { - "bids" : [ - { - "pbMg" : "10.00", - "pbLg" : "5.00", - "width" : 0, - "requestTimestamp" : 1516315716062, - "creativeId" : 81589325, - "pbCg" : "", - "adUnitCode" : "div-banner-outstream-native", - "size" : "0x0", - "bidder" : "appnexus", - "pbAg" : "10.00", - "adId" : "473965c9df19d2", - "adserverTargeting" : { - "hb_native_icon" : "https://vcdn.adnxs.com/p/creative-image/d4/06/e2/33/d406e233-a5f9-44a6-a3e0-8a714bf0e980.png", - "hb_native_title" : "This is a Prebid Native Multi-Format Creative", - "hb_native_brand" : "Prebid.org", - "hb_adid" : "473965c9df19d2", - "hb_pb" : "10.00", - "hb_source" : "client", - "hb_bidder" : "appnexus", - "hb_native_image" : "https://vcdn.adnxs.com/p/creative-image/9e/26/5f/b2/9e265fb2-50c8-43f0-88ef-a5a48a9d0dcf.jpg", - "hb_size" : "0x0", - "hb_mediatype" : "native", - "hb_native_body" : "This is a Prebid Native Creative. There are many like it, but this one is mine.", - "hb_native_linkurl" : "https://prebid.org/dev-docs/show-native-ads.html" - }, - "native" : { - "icon" : { - "url" : "https://vcdn.adnxs.com/p/creative-image/d4/06/e2/33/d406e233-a5f9-44a6-a3e0-8a714bf0e980.png", - "height" : 75, - "width" : 75 - }, - "body" : "This is a Prebid Native Creative. There are many like it, but this one is mine.", - "image" : { - "url" : "https://vcdn.adnxs.com/p/creative-image/9e/26/5f/b2/9e265fb2-50c8-43f0-88ef-a5a48a9d0dcf.jpg", - "height" : 2250, - "width" : 3000 - }, - "clickUrl" : "https://prebid.org/dev-docs/show-native-ads.html", - "clickTrackers" : [ - "..." - ], - "title" : "This is a Prebid Native Multi-Format Creative", - "impressionTrackers" : [ - "..." - ], - "sponsoredBy" : "Prebid.org" - }, - "timeToRespond" : 143, - "mediaType" : "native", - "bidderCode" : "appnexus", - "source" : "client", - "auctionId" : "1338a6fb-e514-48fc-8db6-872ddf3babdb", - "responseTimestamp" : 1516315716205, - "netRevenue" : true, - "pbDg" : "10.00", - "pbHg" : "10.00", - "ttl" : 300, - "status" : "targetingSet", - "height" : 0, - "statusMessage" : "Bid available", - "cpm" : 10, - "currency" : "USD" - } - ] - } - } -{% endhighlight %} + "div-banner-outstream-native" : { + "bids" : [ + { + "pbMg" : "10.00", + "pbLg" : "5.00", + "width" : 0, + "requestTimestamp" : 1516315716062, + "creativeId" : 81589325, + "pbCg" : "", + "adUnitCode" : "div-banner-outstream-native", + "size" : "0x0", + "bidder" : "appnexus", + "pbAg" : "10.00", + "adId" : "473965c9df19d2", + "adserverTargeting" : { + "hb_native_icon" : "https://vcdn.adnxs.com/p/creative-image/d4/06/e2/33/d406e233-a5f9-44a6-a3e0-8a714bf0e980.png", + "hb_native_title" : "This is a Prebid Native Multi-Format Creative", + "hb_native_brand" : "Prebid.org", + "hb_adid" : "473965c9df19d2", + "hb_pb" : "10.00", + "hb_source" : "client", + "hb_bidder" : "appnexus", + "hb_native_image" : "https://vcdn.adnxs.com/p/creative-image/9e/26/5f/b2/9e265fb2-50c8-43f0-88ef-a5a48a9d0dcf.jpg", + "hb_size" : "0x0", + "hb_mediatype" : "native", + "hb_native_body" : "This is a Prebid Native Creative. There are many like it, but this one is mine.", + "hb_native_linkurl" : "https://prebid.org/dev-docs/show-native-ads.html" + }, + "native" : { + "icon" : { + "url" : "https://vcdn.adnxs.com/p/creative-image/d4/06/e2/33/d406e233-a5f9-44a6-a3e0-8a714bf0e980.png", + "height" : 75, + "width" : 75 + }, + "body" : "This is a Prebid Native Creative. There are many like it, but this one is mine.", + "image" : { + "url" : "https://vcdn.adnxs.com/p/creative-image/9e/26/5f/b2/9e265fb2-50c8-43f0-88ef-a5a48a9d0dcf.jpg", + "height" : 2250, + "width" : 3000 + }, + "clickUrl" : "https://prebid.org/dev-docs/show-native-ads.html", + "clickTrackers" : [ + "..." + ], + "title" : "This is a Prebid Native Multi-Format Creative", + "impressionTrackers" : [ + "..." + ], + "sponsoredBy" : "Prebid.org" + }, + "timeToRespond" : 143, + "mediaType" : "native", + "bidderCode" : "appnexus", + "source" : "client", + "auctionId" : "1338a6fb-e514-48fc-8db6-872ddf3babdb", + "responseTimestamp" : 1516315716205, + "netRevenue" : true, + "pbDg" : "10.00", + "pbHg" : "10.00", + "ttl" : 300, + "status" : "targetingSet", + "height" : 0, + "statusMessage" : "Bid available", + "cpm" : 10, + "currency" : "USD" + } + ] + } +} +```
    diff --git a/dev-docs/publisher-api-reference/getBidResponsesForAdUnitCode.md b/dev-docs/publisher-api-reference/getBidResponsesForAdUnitCode.md index 64c39ab4b9..1b95567d74 100644 --- a/dev-docs/publisher-api-reference/getBidResponsesForAdUnitCode.md +++ b/dev-docs/publisher-api-reference/getBidResponsesForAdUnitCode.md @@ -1,12 +1,11 @@ --- layout: api_prebidjs title: pbjs.getBidResponsesForAdUnitCode(adUnitCode) -description: +description: getBidResponsesForAdUnitCode API sidebarType: 1 --- - -Returns bidResponses for the specified adUnitCode. See full documentation at [pbjs.getBidResponses()](#module_pbjs.getBidResponses). +Returns bidResponses for the specified adUnitCode. See full documentation at [pbjs.getBidResponses()](module_pbjs.getBidResponses). **Kind**: static method of `pbjs` diff --git a/dev-docs/publisher-api-reference/getConfig.md b/dev-docs/publisher-api-reference/getConfig.md index c85d4f3cc5..d614562e17 100644 --- a/dev-docs/publisher-api-reference/getConfig.md +++ b/dev-docs/publisher-api-reference/getConfig.md @@ -1,29 +1,27 @@ --- layout: api_prebidjs title: pbjs.getConfig([string]) -description: +description: getConfig API sidebarType: 1 --- ## Overview -The `getConfig` function is used for retrieving the current configuration object or subscribing to configuration updates. When called with no parameters, the entire config object is returned. When called with a string parameter, a single configuration property matching that parameter is returned. Be careful with use of this function, as it returns a reference to the configuration instead of a clone. The readConfig function has been introduced for safer use. +The `getConfig` function is used for retrieving the current configuration object or subscribing to configuration updates. When called with no parameters, the entire config object is returned. When called with a string parameter, a single configuration property matching that parameter is returned. Be careful with use of this function, as it returns a reference to the configuration instead of a clone. The readConfig function has been introduced for safer use. -{% highlight js %} +```javascript /* Get config object */ config.getConfig() /* Get debug config */ config.getConfig('debug') -{% endhighlight %} - +``` ### Subscribe The `getConfig` function contains a `subscribe` feature that adds a callback function to a set of listeners that are invoked whenever `setConfig` is called. The `subscribed` function will be passed the `options` object that was used in the `setConfig` call. Individual topics can be subscribed to by passing a string as the first parameter and a callback function as the second. For example: -{% highlight js %} - +```javascript /* Subscribe to all configuration changes */ getConfig((config) => console.log('config set:', config)); @@ -33,7 +31,6 @@ getConfig('logging', (config) => console.log('logging set:', config)); /* Unsubscribe */ const unsubscribe = getConfig(...); unsubscribe(); // no longer listening - -{% endhighlight %} +```
    diff --git a/dev-docs/publisher-api-reference/getConsentMetadata.md b/dev-docs/publisher-api-reference/getConsentMetadata.md index c3afe05324..663dac84b9 100644 --- a/dev-docs/publisher-api-reference/getConsentMetadata.md +++ b/dev-docs/publisher-api-reference/getConsentMetadata.md @@ -1,14 +1,13 @@ --- layout: api_prebidjs title: pbjs.getConsentMetadata() -description: +description: getConsentMetadata API sidebarType: 1 --- - The `getConsentMetadata()` function will return basic information about the status of supported (and configured!) consent content within Prebid. -``` +```javascript pbjs.getConsentMetadata() // returns e.g. { "coppa": false, @@ -23,4 +22,4 @@ pbjs.getConsentMetadata() // returns e.g. "usp": "1YYY" } } -``` \ No newline at end of file +``` diff --git a/dev-docs/publisher-api-reference/getEvents.md b/dev-docs/publisher-api-reference/getEvents.md index 399c899fc8..cc643102e0 100644 --- a/dev-docs/publisher-api-reference/getEvents.md +++ b/dev-docs/publisher-api-reference/getEvents.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.getEvents() -description: +description: getEvents API sidebarType: 1 --- @@ -14,10 +14,11 @@ The `getEvents` method returns a copy of all emitted events since the page loade **Returns**: `array of objects` **Returned Object Params**: -- eventType (see table below) -- args (varies for each event type) -- id (only for bidWon, set to adUnit.code) -- elapsedTime + +* eventType (see table below) +* args (varies for each event type) +* id (only for bidWon, set to adUnit.code) +* elapsedTime The available events are: @@ -47,13 +48,13 @@ The available events are: The example below shows how these events can be used. -{% highlight js %} - pbjs.getEvents().forEach(event => { - console.log("event: "+event.eventType) - }); -{% endhighlight %} - +```javascript +pbjs.getEvents().forEach(event => { + console.log("event: "+event.eventType) +}); +``` ## See Also -- [onEvent](/dev-docs/publisher-api-reference/onEvent.html) -- [offEvent](/dev-docs/publisher-api-reference/offEvent.html) + +* [onEvent](/dev-docs/publisher-api-reference/onEvent.html) +* [offEvent](/dev-docs/publisher-api-reference/offEvent.html) diff --git a/dev-docs/publisher-api-reference/getHighestCpmBids.md b/dev-docs/publisher-api-reference/getHighestCpmBids.md index ac3051d795..6794aac0e2 100644 --- a/dev-docs/publisher-api-reference/getHighestCpmBids.md +++ b/dev-docs/publisher-api-reference/getHighestCpmBids.md @@ -1,15 +1,15 @@ --- layout: api_prebidjs title: pbjs.getHighestCpmBids([adUnitCode]) -description: +description: getHighestCpmBids API sidebarType: 1 --- Use this method to retrieve an array of winning bids. -+ `pbjs.getHighestCpmBids()`: with no argument, returns an array of winning bid objects for each ad unit on page -+ `pbjs.getHighestCpmBids(adUnitCode)`: when passed an ad unit code, returns an array with the winning bid object for that ad unit +* `pbjs.getHighestCpmBids()`: with no argument, returns an array of winning bid objects for each ad unit on page +* `pbjs.getHighestCpmBids(adUnitCode)`: when passed an ad unit code, returns an array with the winning bid object for that ad unit {: .alert.alert-warning :} -Note that from **Prebid 3.0** onwards, `pbjs.getHighestCpmBids` will not return rendered bids. \ No newline at end of file +Note that from **Prebid 3.0** onwards, `pbjs.getHighestCpmBids` will not return rendered bids. diff --git a/dev-docs/publisher-api-reference/getHighestUnusedBidResponseForAdUnitCode.md b/dev-docs/publisher-api-reference/getHighestUnusedBidResponseForAdUnitCode.md index b6a584c7d0..03058d70c3 100644 --- a/dev-docs/publisher-api-reference/getHighestUnusedBidResponseForAdUnitCode.md +++ b/dev-docs/publisher-api-reference/getHighestUnusedBidResponseForAdUnitCode.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.getHighestUnusedBidResponseForAdUnitCode(adUnitCode) -description: +description: getHighestUnusedBidResponseForAdUnitCode API sidebarType: 1 --- diff --git a/dev-docs/publisher-api-reference/getNoBids.md b/dev-docs/publisher-api-reference/getNoBids.md index 399fc947bd..deb7ff2082 100644 --- a/dev-docs/publisher-api-reference/getNoBids.md +++ b/dev-docs/publisher-api-reference/getNoBids.md @@ -1,11 +1,11 @@ --- layout: api_prebidjs title: pbjs.getNoBids() -description: +description: getNoBids API sidebarType: 1 --- Use this method to get all of the bid requests that resulted in a NO_BID. These are bid requests that were sent to a bidder but, for whatever reason, the bidder decided not to bid on. Used by debugging snippet in the [Troubleshooting Guide](/troubleshooting/troubleshooting-guide.html). -+ `pbjs.getNoBids()`: returns an array of bid request objects that were deliberately not bid on by a bidder. +* `pbjs.getNoBids()`: returns an array of bid request objects that were deliberately not bid on by a bidder. diff --git a/dev-docs/publisher-api-reference/getNoBidsForAdUnitCode.md b/dev-docs/publisher-api-reference/getNoBidsForAdUnitCode.md index c8eae80746..395e46d353 100644 --- a/dev-docs/publisher-api-reference/getNoBidsForAdUnitCode.md +++ b/dev-docs/publisher-api-reference/getNoBidsForAdUnitCode.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.getNoBidsForAdUnitCode(adUnitCode) -description: +description: getNoBidsForAdUnitCode API sidebarType: 1 --- diff --git a/dev-docs/publisher-api-reference/getUserIds.md b/dev-docs/publisher-api-reference/getUserIds.md index 56a68932d7..839454f111 100644 --- a/dev-docs/publisher-api-reference/getUserIds.md +++ b/dev-docs/publisher-api-reference/getUserIds.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.getUserIds() -description: +description: getUserIds API sidebarType: 1 --- @@ -11,6 +11,6 @@ To use this function, include the [UserId module](/dev-docs/modules/userId.html) If you need to export the user IDs stored by Prebid User ID module, the `getUserIds()` function will return an object formatted the same as bidRequest.userId. -``` +```javascript pbjs.getUserIds() // returns object like bidRequest.userId. e.g. {"pubcid":"1111", "tdid":"2222"} -``` \ No newline at end of file +``` diff --git a/dev-docs/publisher-api-reference/getUserIdsAsEids.md b/dev-docs/publisher-api-reference/getUserIdsAsEids.md index 69e6a5629c..2aa58a6965 100644 --- a/dev-docs/publisher-api-reference/getUserIdsAsEids.md +++ b/dev-docs/publisher-api-reference/getUserIdsAsEids.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.getUserIdsAsEids() -description: +description: getUserIdsAsEids API sidebarType: 1 --- @@ -11,7 +11,7 @@ To use this function, include the [UserId module](/dev-docs/modules/userId.html) If you need to export the user IDs stored by Prebid User ID module in ORTB Eids frormat, then the `getUserIdsAsEids()` function will return an array formatted as per [ORTB Eids](https://github.com/prebid/Prebid.js/blob/master/modules/userId/eids.md). -``` +```javascript pbjs.getUserIdsAsEids() // returns userIds in ORTB Eids format. e.g. [ { @@ -33,4 +33,4 @@ pbjs.getUserIdsAsEids() // returns userIds in ORTB Eids format. e.g. }] } ] -``` \ No newline at end of file +``` diff --git a/dev-docs/publisher-api-reference/getUserIdsAsync.md b/dev-docs/publisher-api-reference/getUserIdsAsync.md index 639cef4c86..fb00216016 100644 --- a/dev-docs/publisher-api-reference/getUserIdsAsync.md +++ b/dev-docs/publisher-api-reference/getUserIdsAsync.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.getUserIdsAsync() -description: +description: getUserIdsAsync API sidebarType: 1 --- @@ -10,7 +10,7 @@ To use this function, include the [UserId module](/dev-docs/modules/userId.html) `getUserIdsAsync()` returns a promise to the same value returned by [getUserIds()](/dev-docs/publisher-api-reference/getUserIds.html), but it's guaranteed to resolve only once the complete set of IDs is available: -``` +```javascript pbjs.getUserIdsAsync().then(function (userIds) { // all IDs are available here: pbjs.getUserIds() // same as the `userIds` argument diff --git a/dev-docs/publisher-api-reference/installedModules.md b/dev-docs/publisher-api-reference/installedModules.md index 465de4dcd9..51686a3cdd 100644 --- a/dev-docs/publisher-api-reference/installedModules.md +++ b/dev-docs/publisher-api-reference/installedModules.md @@ -1,14 +1,15 @@ --- layout: api_prebidjs title: pbjs.installedModules -description: +description: installedModules API sidebarType: 1 --- When a Prebid.js package is built, the list of modules compiled into it are placed in the pbjs.installedModules array. e.g. if this builds the package: -``` + +```bash gulp build --modules=a,b,c ``` diff --git a/dev-docs/publisher-api-reference/markWinningBidAsUsed.md b/dev-docs/publisher-api-reference/markWinningBidAsUsed.md index 8562bf26bf..45dfbdd629 100644 --- a/dev-docs/publisher-api-reference/markWinningBidAsUsed.md +++ b/dev-docs/publisher-api-reference/markWinningBidAsUsed.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.markWinningBidAsUsed(markBidRequest) -description: +description: markWinningBidAsUsed API sidebarType: 1 --- @@ -17,4 +17,4 @@ If you know the adId, then be specific, otherwise Prebid will retrieve the winni | Param | Type | Description | | --- | --- | --- | | adUnitCode | `string` | (Optional) The ad unit code | -| adId | `string` | (Optional) The id representing the ad we want to mark | \ No newline at end of file +| adId | `string` | (Optional) The id representing the ad we want to mark | diff --git a/dev-docs/publisher-api-reference/mergeBidderConfig.md b/dev-docs/publisher-api-reference/mergeBidderConfig.md index a99a68cff8..25673d0027 100644 --- a/dev-docs/publisher-api-reference/mergeBidderConfig.md +++ b/dev-docs/publisher-api-reference/mergeBidderConfig.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.mergeBidderConfig(options) -description: +description: mergeBidderConfig API sidebarType: 1 --- @@ -9,13 +9,13 @@ This is the same as [`setBidderConfig(options, true)`](/dev-docs/publisher-api-r The page usage is: -{% highlight js %} +```javascript pbjs.mergeBidderConfig({ bidders: ['bidderA'], config: { customArg: "customVal" } }); -{% endhighlight %} +``` Intrepration: When 'bidderA' calls `getConfig('customArg')`, it will receive the object that contains 'customArg'. If any other bidder calls `getConfig('customArg')`, it will receive nothing. diff --git a/dev-docs/publisher-api-reference/mergeConfig.md b/dev-docs/publisher-api-reference/mergeConfig.md index 968cf13755..ef31eacf83 100644 --- a/dev-docs/publisher-api-reference/mergeConfig.md +++ b/dev-docs/publisher-api-reference/mergeConfig.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.mergeConfig(options) -description: +description: mergeConfig API sidebarType: 1 --- diff --git a/dev-docs/publisher-api-reference/offEvent.md b/dev-docs/publisher-api-reference/offEvent.md index bc220b9caf..603b168032 100644 --- a/dev-docs/publisher-api-reference/offEvent.md +++ b/dev-docs/publisher-api-reference/offEvent.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.offEvent(eventType, handler, id) -description: +description: offEvent API sidebarType: 1 --- @@ -24,34 +24,34 @@ events for a specific item in the event context. Example -{% highlight js %} - /* This handler will be called only for rightAdUnit */ - /* Uses the `pbjs.offEvent` method to remove the handler once it has been called */ - var bidWonHandler = function bidWonHandler() { - console.log('bidWonHandler: ', arguments); - pbjs.offEvent('bidWon', bidWonHandler, rightAdUnit); - }; - - var rightAdUnit="/111111/right"; - pbjs.que.push(function () { - var adUnits = [{ - code: rightAdUnit, - ... - },{ - ... - }]; - pbjs.addAdUnits(adUnits); - pbjs.requestBids({ - ... - }); - - /* Register a callback for just the rightSlot `bidWon` event */ - /* Note that defining an event that uses the 3rd parameter must come after initiating the auction */ - pbjs.onEvent('bidWon', bidWonHandler, rightAdUnit); - - ... -{% endhighlight %} +```javascript +/* This handler will be called only for rightAdUnit */ +/* Uses the `pbjs.offEvent` method to remove the handler once it has been called */ +var bidWonHandler = function bidWonHandler() { + console.log('bidWonHandler: ', arguments); + pbjs.offEvent('bidWon', bidWonHandler, rightAdUnit); +}; + +var rightAdUnit="/111111/right"; +pbjs.que.push(function () { + var adUnits = [{ + code: rightAdUnit, + // ... + },{ + // ... + }]; + pbjs.addAdUnits(adUnits); + pbjs.requestBids({ + //... + }); + + /* Register a callback for just the rightSlot `bidWon` event */ + /* Note that defining an event that uses the 3rd parameter must come after initiating the auction */ + pbjs.onEvent('bidWon', bidWonHandler, rightAdUnit); +}); +``` ## See Also -- [getEvents](/dev-docs/publisher-api-reference/getEvents.html) -- [onEvent](/dev-docs/publisher-api-reference/onEvent.html) + +* [getEvents](/dev-docs/publisher-api-reference/getEvents.html) +* [onEvent](/dev-docs/publisher-api-reference/onEvent.html) diff --git a/dev-docs/publisher-api-reference/onEvent.md b/dev-docs/publisher-api-reference/onEvent.md index 9aa5d9f4b2..92d26e975a 100644 --- a/dev-docs/publisher-api-reference/onEvent.md +++ b/dev-docs/publisher-api-reference/onEvent.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.onEvent(eventType, handler, id) -description: +description: onEvent API sidebarType: 1 --- @@ -31,39 +31,42 @@ this method registers the callback for every `bidWon` event. Currently, `bidWon` is the only event that accepts the `id` parameter. Example 1: Basic event logging -``` - /* Log when ad units are added to Prebid */ - pbjs.onEvent('addAdUnits', function() { - console.log('Ad units were added to Prebid.') - console.log(pbjs.adUnits); - }); - /* Log when Prebid wins the ad server auction */ - pbjs.onEvent('bidWon', function(data) { - console.log(data.bidderCode+ ' won the ad server auction for ad unit ' +data.adUnitCode+ ' at ' +data.cpm+ ' CPM'); - }); +```javascript +/* Log when ad units are added to Prebid */ +pbjs.onEvent('addAdUnits', function() { + console.log('Ad units were added to Prebid.') + console.log(pbjs.adUnits); +}); +/* Log when Prebid wins the ad server auction */ +pbjs.onEvent('bidWon', function(data) { + console.log(data.bidderCode+ ' won the ad server auction for ad unit ' +data.adUnitCode+ ' at ' +data.cpm+ ' CPM'); +}); ``` Example 2: Dynamically modify the auction -``` - var bidderFilter = function bidderFilter(adunits) { - // pub-specific logic to optimize bidders - // e.g. "remove any that haven't bid in the last 4 refreshes" - }; - pbjs.onEvent('beforeRequestBids', bidderFilter); + +```javascript +var bidderFilter = function bidderFilter(adunits) { + // pub-specific logic to optimize bidders + // e.g. "remove any that haven't bid in the last 4 refreshes" +}; +pbjs.onEvent('beforeRequestBids', bidderFilter); ``` Example 3: Log errors and render fails to your own endpoint -``` - pbjs.onEvent('adRenderFailed', function () { - // pub-specific logic to call their own endpoint - }); - pbjs.onEvent('auctionDebug', function () { - // pub-specific logic to call their own endpoint - }); + +```javascript +pbjs.onEvent('adRenderFailed', function () { + // pub-specific logic to call their own endpoint + }); +pbjs.onEvent('auctionDebug', function () { + // pub-specific logic to call their own endpoint + }); ``` ## See Also -- [getEvents](/dev-docs/publisher-api-reference/getEvents.html) -- [offEvent](/dev-docs/publisher-api-reference/offEvent.html) + +* [getEvents](/dev-docs/publisher-api-reference/getEvents.html) +* [offEvent](/dev-docs/publisher-api-reference/offEvent.html) diff --git a/dev-docs/publisher-api-reference/readConfig.md b/dev-docs/publisher-api-reference/readConfig.md index 38caa096b6..8d1c53a0f6 100644 --- a/dev-docs/publisher-api-reference/readConfig.md +++ b/dev-docs/publisher-api-reference/readConfig.md @@ -6,14 +6,14 @@ sidebarType: 1 --- -The `readConfig` function is used for retrieving the current configuration object or subscribing to configuration updates. When called with no parameters, the entire config object is returned. When called with a string parameter, a single configuration property matching that parameter is returned. The readConfig function has been introduced for safer use of the getConfig functionality, as it returns a clone. +The `readConfig` function is used for retrieving the current configuration object or subscribing to configuration updates. When called with no parameters, the entire config object is returned. When called with a string parameter, a single configuration property matching that parameter is returned. The readConfig function has been introduced for safer use of the getConfig functionality, as it returns a clone. -{% highlight js %} +```javascript /* Get config object */ config.readConfig() /* Get debug config */ config.readConfig('debug') -{% endhighlight %} +```
    diff --git a/dev-docs/publisher-api-reference/refreshUserIds.md b/dev-docs/publisher-api-reference/refreshUserIds.md index c698413f2d..8e7eccb5f2 100644 --- a/dev-docs/publisher-api-reference/refreshUserIds.md +++ b/dev-docs/publisher-api-reference/refreshUserIds.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.refreshUserIds(options, callback) -description: +description: refreshUserIds API sidebarType: 1 --- @@ -18,8 +18,7 @@ The `refreshUserIds` function allows you to force either all or a subset of user | options.submoduleNames | optional | Array of strings | The userId submodule names that should be refreshed. If this option is omitted, all userId submodules are refreshed. | | callback | optional | Function | Callback that is called after refreshing user ids has completed | - -``` +```javascript pbjs.refreshUserIds(); pbjs.refreshUserIds({ submoduleNames: ['britepoolId'] }, () => console.log("Done!")); ``` diff --git a/dev-docs/publisher-api-reference/registerSignalSources.md b/dev-docs/publisher-api-reference/registerSignalSources.md index 7529cc3651..aca0b73b8d 100644 --- a/dev-docs/publisher-api-reference/registerSignalSources.md +++ b/dev-docs/publisher-api-reference/registerSignalSources.md @@ -8,7 +8,7 @@ sidebarType: 1 {: .alert.alert-info :} To use this function, include the [UserId module](/dev-docs/modules/userId.html) in your Prebid.js build. -This function will register all configured encrypted signals as described in the [UserId module ESP configuration](/dev-docs/modules/userId.html#esp-configurations). +This function will register all configured encrypted signals as described in the [UserId module ESP configuration](/dev-docs/modules/userId.html#esp-configurations). The condition can only be called under two conditions diff --git a/dev-docs/publisher-api-reference/removeAdUnit.md b/dev-docs/publisher-api-reference/removeAdUnit.md index 54c6f2099c..e70baf5f7c 100644 --- a/dev-docs/publisher-api-reference/removeAdUnit.md +++ b/dev-docs/publisher-api-reference/removeAdUnit.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.removeAdUnit(adUnitCode) -description: +description: removeAdUnit API sidebarType: 1 --- @@ -10,7 +10,6 @@ Remove adUnit(s) from the pbjs configuration, If adUnit is not given then it wil **Kind**: static method of pbjs API. - {: .table .table-bordered .table-striped } | Param | Scope | Type | Description | | --- | --- | --- | --- | diff --git a/dev-docs/publisher-api-reference/renderAd.md b/dev-docs/publisher-api-reference/renderAd.md index 5d9b1d7d37..8e07f516e1 100644 --- a/dev-docs/publisher-api-reference/renderAd.md +++ b/dev-docs/publisher-api-reference/renderAd.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.renderAd(doc, id, options) -description: +description: renderAd API sidebarType: 1 --- @@ -16,12 +16,12 @@ If this property is set the value of clickThrough will replace any occurrence of {: .alert.alert-info :} Note: In regards to `options.clickThrough`: + - To make use of this feature, bid adapters would be required to respond with ad tags including the ${CLICKTHROUGH} macro. - The renderAd function must be invoked with the options argument. Ex: `renderAd(doc, bidId, {clickThrough: 'https://someadserverclickurl.com'});` - Not compatible with safeframes (since the logic around rendering safeframe's does not invoke the renderAd function). - Not supported with Prebid Universal Creative at this time, only the standard pbjs.renderAd method. - {: .table .table-bordered .table-striped } | Param | Scope | Type | Description | | --- | --- | --- | --- | diff --git a/dev-docs/publisher-api-reference/requestBids.md b/dev-docs/publisher-api-reference/requestBids.md index c1e0791054..94af1512c9 100644 --- a/dev-docs/publisher-api-reference/requestBids.md +++ b/dev-docs/publisher-api-reference/requestBids.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.requestBids(requestObj) -description: +description: requestBids API sidebarType: 1 --- @@ -22,26 +22,25 @@ Request bids. When `adUnits` or `adUnitCodes` are not specified, request bids fo | requestObj.adUnits | Optional | `Array of objects` | AdUnitObjects to request. Use this or `requestObj.adUnitCodes`. Default to all `adUnits` if empty. | | requestObj.timeout | Optional | `Integer` | Timeout for requesting the bids specified in milliseconds | | requestObj.bidsBackHandler | Optional | `function` | Callback to execute when all the bid responses are back or the timeout hits. Callback will be passed 3 arguments - `bids`, `timedOut`, and `auctionId` - [see below](#result) | -| requestObj.labels | Optional | `Array of strings` | Defines [labels](#labels) that may be matched on ad unit targeting conditions. | +| requestObj.labels | Optional | `Array of strings` | Defines `labels` that may be matched on ad unit targeting conditions. | | requestObj.auctionId | Optional | `String` | Defines an auction ID to be used rather than having the system generate one. This can be useful if there are multiple wrappers on a page and a single auction ID is desired to tie them together in analytics. | | requestObj.ortb2 | Optional | `Object` | Additional [first-party data](/features/firstPartyData.html) to use for this auction only | | requestObj.ttlBuffer | Optional | `Number` | TTL buffer override for this auction. See [setConfig({ttlBuffer})](/dev-docs/publisher-api-reference/setConfig.html#setConfig-ttlBuffer) | - - + **Result**: {: .table .table-bordered .table-stripped :} | Param | Type | Description | | --- | --- | --- | -| bids | Object | Bids received; see [getBidResponses](getBidResponses.html) for details | +| bids | Object | Bids received; see [getBidResponses](getBidResponses.html) for details | | timedOut | Boolean | true if any bidder timed out | | auctionId | String | the auction's ID | Example call: -``` +```javascript pbjs.requestBids({ bidsBackHandler: sendAdserverRequest, timeout: 1000, @@ -50,7 +49,8 @@ pbjs.requestBids({ ``` Example parameters sent to the bidsBackHandler: -``` + +```javascript function sendAdserverRequest(bids, timedOut, auctionId) { // bids // {"test-div":{"bids":[{"bidderCode":"bidderA", ...}]}} diff --git a/dev-docs/publisher-api-reference/setBidderConfig.md b/dev-docs/publisher-api-reference/setBidderConfig.md index e882f2336b..3a2cbf0a26 100644 --- a/dev-docs/publisher-api-reference/setBidderConfig.md +++ b/dev-docs/publisher-api-reference/setBidderConfig.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.setBidderConfig(options, mergeFlag) -description: +description: setBidderConfig API sidebarType: 1 --- @@ -17,16 +17,18 @@ Note if you would like to add to existing config you can pass `true` for the opt The page usage is: -{% highlight js %} +```javascript pbjs.setBidderConfig({ bidders: ['bidderA'], config: { customArg: "customVal" } }); -{% endhighlight %} +``` + or -{% highlight js %} + +```javascript pbjs.setBidderConfig({ bidders: ['bidderB'], config: { @@ -50,11 +52,12 @@ pbjs.setBidderConfig({ } } }); -{% endhighlight %} +``` How to interpret these examples: -- When 'bidderA' calls `getConfig('customArg')`, it will receive the object that contains 'customArg'. If any other bidder calls `getConfig('customArg')`, it will receive nothing. -- When 'bidderB' calls `getConfig('ortb2')`, it will receive this override definition rather than whatever else might have been defined globally. If any other bidder calls `getConfig('ortb2')`, it will receive the globally defined objects. + +* When 'bidderA' calls `getConfig('customArg')`, it will receive the object that contains 'customArg'. If any other bidder calls `getConfig('customArg')`, it will receive nothing. +* When 'bidderB' calls `getConfig('ortb2')`, it will receive this override definition rather than whatever else might have been defined globally. If any other bidder calls `getConfig('ortb2')`, it will receive the globally defined objects. {: .alert.alert-info :} This function is also used by the `schain` feature. Refer to the [schain](/dev-docs/modules/schain.html) documentation for examples. diff --git a/dev-docs/publisher-api-reference/setConfig.md b/dev-docs/publisher-api-reference/setConfig.md index eadf9a5fad..f581026536 100644 --- a/dev-docs/publisher-api-reference/setConfig.md +++ b/dev-docs/publisher-api-reference/setConfig.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.setConfig(options) -description: +description: setConfig API sidebarType: 1 --- @@ -14,44 +14,45 @@ See below for usage examples. Core config: -+ [Debugging](#setConfig-Debugging) -+ [Device Access](#setConfig-deviceAccess) -+ [Bidder Timeouts](#setConfig-Bidder-Timeouts) -+ [Max Requests Per Origin](#setConfig-Max-Requests-Per-Origin) -+ [Disable Ajax Timeout](#setConfig-Disable-Ajax-Timeout) -+ [Set Timeout Buffer](#setConfig-timeoutBuffer) -+ [Set TTL Buffer](#setConfig-ttlBuffer) -+ [Turn on send all bids mode](#setConfig-Send-All-Bids) -+ [Configure send bids control](#setConfig-Send-Bids-Control) -+ [Bid cache](#setConfig-Use-Bid-Cache) -+ [Set the order in which bidders are called](#setConfig-Bidder-Order) -+ [Set the page URL](#setConfig-Page-URL) -+ [Set price granularity](#setConfig-Price-Granularity) -+ [Set media type price granularity](#setConfig-MediaType-Price-Granularity) -+ [Set custom cpm rounding](#setConfig-Cpm-Rounding) -+ [Configure server-to-server header bidding](#setConfig-Server-to-Server) -+ [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) -+ [First Party Data](#setConfig-fpd) -+ [Video Module to integrate with Video Players](#video-module) -+ [Caching VAST XML](#setConfig-vast-cache) -+ [Site Metadata](#setConfig-site) -+ [Disable performance metrics](#setConfig-performanceMetrics) -+ [Setting alias registry to private](#setConfig-aliasRegistry) -+ [Generic Configuration](#setConfig-Generic-Configuration) -+ [Troubleshooting configuration](#setConfig-Troubleshooting-your-configuration) +* [Debugging](#setConfig-Debugging) +* [Device Access](#setConfig-deviceAccess) +* [Bidder Timeouts](#setConfig-Bidder-Timeouts) +* [Max Requests Per Origin](#setConfig-Max-Requests-Per-Origin) +* [Disable Ajax Timeout](#setConfig-Disable-Ajax-Timeout) +* [Set Timeout Buffer](#setConfig-timeoutBuffer) +* [Set TTL Buffer](#setConfig-ttlBuffer) +* [Turn on send all bids mode](#setConfig-Send-All-Bids) +* [Configure send bids control](#setConfig-Send-Bids-Control) +* [Bid cache](#setConfig-Use-Bid-Cache) +* [Set the order in which bidders are called](#setConfig-Bidder-Order) +* [Set the page URL](#setConfig-Page-URL) +* [Set price granularity](#setConfig-Price-Granularity) +* [Set media type price granularity](#setConfig-MediaType-Price-Granularity) +* [Set custom cpm rounding](#setConfig-Cpm-Rounding) +* [Configure server-to-server header bidding](#setConfig-Server-to-Server) +* [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) +* [First Party Data](#setConfig-fpd) +* [Video Module to integrate with Video Players](#video-module) +* [Caching VAST XML](#setConfig-vast-cache) +* [Site Metadata](#setConfig-site) +* [Disable performance metrics](#setConfig-performanceMetrics) +* [Setting alias registry to private](#setConfig-aliasRegistry) +* [Generic Configuration](#setConfig-Generic-Configuration) +* [Troubleshooting configuration](#setConfig-Troubleshooting-your-configuration) + Module config: other options to `setConfig()` are available if the relevant module is included in the Prebid.js build. -+ [Currency module](/dev-docs/modules/currency.html) -+ [Consent Management](/dev-docs/modules/consentManagement.html#page-integration) -+ [User ID module](/dev-docs/modules/userId.html#configuration) -+ [Adpod](/dev-docs/modules/adpod.html) -+ [IAB Category Translation](/dev-docs/modules/categoryTranslation.html) +* [Currency module](/dev-docs/modules/currency.html) +* [Consent Management](/dev-docs/modules/consentManagement.html#page-integration) +* [User ID module](/dev-docs/modules/userId.html#configuration) +* [Adpod](/dev-docs/modules/adpod.html) +* [IAB Category Translation](/dev-docs/modules/categoryTranslation.html) - + #### Debugging @@ -62,34 +63,35 @@ Note that debugging can be specified for a specific page view by adding `pbjs_debug=true` to the URL's query string. e.g. /pbjs_demo.html?pbjs_debug=true See [Prebid.js troubleshooting guide](/troubleshooting/troubleshooting-guide.html) for more information. Turn on debugging permanently in the page: -{% highlight js %} + +```javascript pbjs.setConfig({ debug: true }); -{% endhighlight %} +``` {: .alert.alert-warning :} Note that turning on debugging for Prebid Server causes most server-side adapters to consider it a test request, meaning that they won't count on reports. - + #### Device Access You can prevent Prebid.js from reading or writing cookies or HTML localstorage by setting this flag: -{% highlight js %} +```javascript pbjs.setConfig({ deviceAccess: false }); -{% endhighlight %} +``` This can be useful in GDPR, CCPA, COPPA or other privacy scenarios where a publisher has determined that header bidding should not read from or write the user's device. - + #### Bidder Timeouts Set a global bidder timeout: -{% highlight js %} +```javascript pbjs.setConfig({ bidderTimeout: 3000 }); -{% endhighlight %} +``` {: .alert.alert-warning :} **Bid Timeouts and JavaScript Timers** @@ -99,57 +101,57 @@ For more information about the asynchronous event loop and `setTimeout`, see [Ho #### Max Requests Per Origin - + Since browsers have a limit of how many requests they will allow to a specific domain before they block, Prebid.js will queue auctions that would cause requests to a specific origin to exceed that limit. The limit is different for each browser. Prebid.js defaults to a max of `4` requests per origin. That value can be configured with `maxRequestsPerOrigin`. -{% highlight js %} +```javascript // most browsers allow at least 6 requests, but your results may vary for your user base. Sometimes using all // `6` requests can impact performance negatively for users with poor internet connections. pbjs.setConfig({ maxRequestsPerOrigin: 6 }); // to emulate pre 1-x behavior and have all auctions queue (no concurrent auctions), you can set it to `1`. pbjs.setConfig({ maxRequestsPerOrigin: 1 }); -{% endhighlight %} +``` #### Disable Ajax Timeout - + Prebid core adds a timeout on XMLHttpRequest request to terminate the request once auction is timedout. Since Prebid is ignoring all the bids after timeout it does not make sense to continue the request after timeout. However, you have the option to disable this by using `disableAjaxTimeout`. -{% highlight js %} +```javascript pbjs.setConfig({ disableAjaxTimeout: true }); -{% endhighlight %} +``` #### Set Timeout Buffer - + Prebid core adds a timeout buffer to extend the time that bidders have to return a bid after the auction closes. This buffer is used to offset the "time slippage" of the setTimeout behavior in browsers. Prebid.js sets the default value to 400ms. You can change this value by setting `timeoutBuffer` to the amount of time you want to use. The following example sets the buffer to 300ms. -{% highlight js %} +```javascript pbjs.setConfig({ timeoutBuffer: 300 }); -{% endhighlight %} +``` #### Set TTL Buffer - + When an adapter bids, it provides a TTL (time-to-live); the bid is considered expired and unusuable after that time has elapsed. Core subtracts from it a buffer of 1 second; that is, a bid with TTL of 30 seconds is considered expired after 29 seconds. You can adjust this buffer with: -{% highlight js %} +```javascript pbjs.setConfig({ ttlBuffer: 10 // TTL buffer in seconds }); -{% endhighlight %} +``` #### Send All Bids - + When enableSendAllBids is **true** (the default), the page will send keywords for all bidders to your ad server. The ad server can then make the decision on which bidder will win. Some ad servers, such as Google Ad Manager, can then generate reporting on historical bid prices from all bidders. @@ -166,7 +168,7 @@ Note that targeting config must be set before either `pbjs.setTargetingForGPTAsy ##### Example results where enableSendAllBids is true -{% highlight bash %} +```bash { "hb_adid_audienceNetw": "1663076dadb443d", "hb_pb_audienceNetwor": "9.00", @@ -191,7 +193,7 @@ Note that targeting config must be set before either `pbjs.setTargetingForGPTAsy "hb_size": "300x250", "hb_format": "banner" } -{% endhighlight %} +``` You can see how the number of ad server targeting variable could get large when many bidders are present. @@ -218,11 +220,11 @@ pbjs.setConfig({ }); ``` - + #### Configure Send Bids Control - + The `sendBidsControl` object passed to `pbjs.setConfig` provides the publisher with the ability to adjust the targeting behavior when [sendAllBids](#setConfig-Send-All-Bids) is enabled. @@ -243,6 +245,7 @@ pbjs.setConfig({ } }); ``` + When this property is set, the value assigned to `bidLimit` is the maximum number of bids that will be sent to the ad server. If `bidLimit` is set to 0, sendAllBids will have no maximum bid limit and *all* bids will be sent. This setting can be helpful if you know that your ad server has a finite limit to the amount of query characters it will accept and process. {: .alert.alert-info :} @@ -250,7 +253,7 @@ Note that this feature overlaps and can be used in conjunction with [targetingCo #### Use Bid Cache - + Prebid.js currently allows for [caching and reusing bids in a very narrowly defined scope](/dev-docs/faq.html#does-prebidjs-cache-bids). However, if you'd like, you can disable this feature and prevent Prebid.js from using anything but the latest bids for @@ -260,86 +263,83 @@ a given auction. This option is available in version 1.39 as true-by-default and became false-by-default as of Prebid.js 2.0. If you want to use this feature in 2.0 and later, you'll need to set the value to true. -{% highlight js %} +```javascript pbjs.setConfig({ useBidCache: true }) -{% endhighlight %} - +``` #### Bid Cache Filter Function - + When [Bid Caching](#setConfig-Use-Bid-Cache) is turned on, a custom Filter Function can be defined to gain more granular control over which "cached" bids can be used. This function will only be called for "cached" bids from previous auctions, not "current" bids from the most recent auction. The function should take a single bid object argument, and return `true` to use the cached bid, or `false` to not use the cached bid. For Example, to turn on Bid Caching, but exclude cached video bids, you could do this: -{% highlight js %} +```javascript pbjs.setConfig({ useBidCache: true, bidCacheFilterFunction: bid => bid.mediaType !== 'video' }); -{% endhighlight %} - +``` #### Bidder Order Set the order in which bidders are called: -{% highlight js %} +```javascript pbjs.setConfig({ bidderSequence: "fixed" }) /* default is "random" */ -{% endhighlight %} +``` - + #### Page URL Override the Prebid.js page referrer for some bidders. -{% highlight js %} +```javascript pbjs.setConfig({ pageUrl: "https://example.com/index.html" }) -{% endhighlight %} - +``` - + #### Price Granularity This configuration defines the price bucket granularity setting that will be used for the `hb_pb` keyword. -{% highlight js %} +```javascript pbjs.setConfig({ priceGranularity: "medium" }) -{% endhighlight %} +``` Standard values: -+ `"low"`: $0.50 increments, capped at $5 CPM -+ `"medium"`: $0.10 increments, capped at $20 CPM (the default) -+ `"high"`: $0.01 increments, capped at $20 CPM -+ `"auto"`: Applies a sliding scale to determine granularity as shown in the [Auto Granularity](#autoGranularityBucket) table below. -+ `"dense"`: Like `"auto"`, but the bid price granularity uses smaller increments, especially at lower CPMs. For details, see the [Dense Granularity](#denseGranularityBucket) table below. -+ `customConfigObject`: If you pass in a custom config object (as shown in the [Custom CPM Bucket Sizing](#customCPMObject) example below), you can have much finer control over CPM bucket sizes, precision, and caps. +* `"low"`: $0.50 increments, capped at $5 CPM +* `"medium"`: $0.10 increments, capped at $20 CPM (the default) +* `"high"`: $0.01 increments, capped at $20 CPM +* `"auto"`: Applies a sliding scale to determine granularity as shown in the [Auto Granularity](#autoGranularityBucket) table below. +* `"dense"`: Like `"auto"`, but the bid price granularity uses smaller increments, especially at lower CPMs. For details, see the [Dense Granularity](#denseGranularityBucket) table below. +* `customConfigObject`: If you pass in a custom config object (as shown in the [Custom CPM Bucket Sizing](#customCPMObject) example below), you can have much finer control over CPM bucket sizes, precision, and caps. ##### Auto Granularity {: .table .table-bordered .table-striped } -| CPM | Granularity | Example | +| CPM | Granularity | Example | |---------------------+----------------------------------+--------| -| CPM <= $5 | $0.05 increments | $1.87 floored to $1.85 | -| CPM <= $10 and > $5 | $0.10 increments | $5.09 floored to $5.00 | -| CPM <= $20 and > $10 | $0.50 increments | $14.26 floored to $14.00 | -| CPM > $20 | Caps the price bucket at $20 | $24.82 floored to $20.00 | +| CPM <= $5 | $0.05 increments | $1.87 floored to $1.85 | +| CPM <= $10 and > $5 | $0.10 increments | $5.09 floored to $5.00 | +| CPM <= $20 and > $10 | $0.50 increments | $14.26 floored to $14.00 | +| CPM > $20 | Caps the price bucket at $20 | $24.82 floored to $20.00 | ##### Dense Granularity {: .table .table-bordered .table-striped } -| CPM | Granularity | Example | +| CPM | Granularity | Example | |------------+-------------------------------+---------| -| CPM <= $3 | $0.01 increments | $1.87 floored to $1.87 | -| CPM <= $8 and >$3 | $0.05 increments | $5.09 floored to $5.05 | -| CPM <= $20 and >$8 | $0.50 increments | $14.26 floored to $14.00 | -| CPM > $20 | Caps the price bucket at $20 | $24.82 floored to $20.00 | +| CPM <= $3 | $0.01 increments | $1.87 floored to $1.87 | +| CPM <= $8 and >$3 | $0.05 increments | $5.09 floored to $5.05 | +| CPM <= $20 and >$8 | $0.50 increments | $14.26 floored to $14.00 | +| CPM > $20 | Caps the price bucket at $20 | $24.82 floored to $20.00 | @@ -372,9 +372,9 @@ pbjs.setConfig({ Here are the rules for CPM intervals: -- `max` and `increment` must be specified -- A range's minimum value is assumed to be the max value of the previous range. The first interval starts at a min value of 0. -- `precision` is optional and defaults to 2 +* `max` and `increment` must be specified +* A range's minimum value is assumed to be the max value of the previous range. The first interval starts at a min value of 0. +* `precision` is optional and defaults to 2 {% capture warning-granularity %} As of Prebid.js 3.0, the 'min' parameter is no longer supported in custom granularities. @@ -390,8 +390,7 @@ This implies that ranges should have max values that are really the min value of {% include alerts/alert_warning.html content=warning-granularity %} - - + #### Media Type Price Granularity @@ -399,10 +398,11 @@ The standard [Prebid price granularities](#setConfig-Price-Granularity) cap out granularity as described above. Another approach is to use `mediaTypePriceGranularity` config that may be set to define different price bucket structures for different types of media: -- for each of five media types: banner, video, video-instream, video-outstream, and native. -- it is recommended that defined granularities be custom. It's possible to define "standard" granularities (e.g. "medium"), but it's not possible to mix both custom and standard granularities. -{% highlight js %} +* for each of five media types: banner, video, video-instream, video-outstream, and native. +* it is recommended that defined granularities be custom. It's possible to define "standard" granularities (e.g. "medium"), but it's not possible to mix both custom and standard granularities. + +```javascript const customPriceGranularityVideo = { 'buckets': [ { 'precision': 2, 'max': 5, 'increment': 0.25 }, @@ -419,11 +419,11 @@ const customPriceGranularityBanner = { pbjs.setConfig({'mediaTypePriceGranularity': { 'video': customPriceGranularity, // used as default for instream video - 'video-outstream': customPriceGranularityBanner, + 'video-outstream': customPriceGranularityBanner, 'banner': 'customPriceGranularityBanner' } }); -{% endhighlight %} +``` Any `mediaTypePriceGranularity` setting takes precedence over `priceGranularity`. @@ -437,16 +437,17 @@ are recognized. This was driven by the recognition that outstream often shares l If the mediatype is video, the price bucketing code further looks at the context (e.g. outstream) to see if there's a price granularity override. If it doesn't find 'video-outstream' defined, it will then look for just 'video'. - + #### Custom CPM Rounding -Prebid defaults to rounding down all bids to the nearest increment, which may cause lower CPM ads to be selected. -While this can be addressed through higher [price granularity](#setConfig-Price-Granularity), Prebid also allows setting a custom rounding function. -This function will be used by Prebid to determine what increment a bid will round to. +Prebid defaults to rounding down all bids to the nearest increment, which may cause lower CPM ads to be selected. +While this can be addressed through higher [price granularity](#setConfig-Price-Granularity), Prebid also allows setting a custom rounding function. +This function will be used by Prebid to determine what increment a bid will round to.

    You can set a simple rounding function: + ```javascript // Standard rounding pbjs.setConfig({'cpmRoundingFunction': Math.round}); @@ -468,13 +469,13 @@ const roundToNearestEvenIncrement = function (number) { pbjs.setConfig({'cpmRoundingFunction': roundToNearestEvenIncrement}); ``` - + #### Server to Server See the [Prebid Server module](/dev-docs/modules/prebidServer.html). - + #### Mobile App Post-Bid @@ -482,7 +483,7 @@ To support [post-bid](/overview/what-is-post-bid.html) scenarios on mobile apps, prebidServerBidAdapter module will accept `ortb2.app` config to forward details through the server: -{% highlight js %} +```javascript pbjs.setConfig({ ortb2: { app: { @@ -491,12 +492,12 @@ pbjs.setConfig({ } } }); -{% endhighlight %} +``` {: .alert.alert-warning :} In PBJS 4.29 and earlier, don't add the `ortb2` level here -- just `app` directly. Oh, and please upgrade. 4.29 was a long time ago. - + #### Configure User Syncing @@ -505,9 +506,9 @@ This practice is called "user syncing" because the aim is to let the bidders mat There's a good reason for bidders to be doing this -- DSPs are more likely to bid on impressions where they know something about the history of the user. However, there are also good reasons why publishers may want to control the use of these practices: -- *Page performance*: Publishers may wish to move ad-related cookie work to much later in the page load after ads and content have loaded. -- *User privacy*: Some publishers may want to opt out of these practices even though it limits their users' values on the open market. -- *Security*: Publishers may want to control which bidders are trusted to inject images and JavaScript into their pages. +* *Page performance*: Publishers may wish to move ad-related cookie work to much later in the page load after ads and content have loaded. +* *User privacy*: Some publishers may want to opt out of these practices even though it limits their users' values on the open market. +* *Security*: Publishers may want to control which bidders are trusted to inject images and JavaScript into their pages. {: .alert.alert-info :} **User syncing default behavior** @@ -515,11 +516,11 @@ If you don't tweak any of the settings described in this section, the default be For more information, see the sections below. -- [User Sync Properties](#setConfig-ConfigureUserSyncing-UserSyncProperties) -- [User Sync Examples](#setConfig-ConfigureUserSyncing-UserSyncExamples) -- [How User Syncing Works](#setConfig-ConfigureUserSyncing-HowUserSyncingWorks) +* [User Sync Properties](#setConfig-ConfigureUserSyncing-UserSyncProperties) +* [User Sync Examples](#setConfig-ConfigureUserSyncing-UserSyncExamples) +* [How User Syncing Works](#setConfig-ConfigureUserSyncing-HowUserSyncingWorks) - + ##### User Sync Properties @@ -536,7 +537,7 @@ For descriptions of all the properties that control user syncs, see the table be | `enableOverride` | Boolean | Enable/disable publisher to trigger user syncs by calling `pbjs.triggerUserSyncs()`. Default: `false`. | | `aliasSyncEnabled` | Boolean | Enable/disable registered syncs for aliased adapters. Default: `false`. | - + ##### User Sync Examples @@ -544,37 +545,37 @@ For examples of configurations that will change the default behavior, see below. Push the user syncs to later in the page load: -{% highlight js %} +```javascript pbjs.setConfig({ userSync: { syncDelay: 5000 // write image pixels 5 seconds after the auction } }); -{% endhighlight %} +``` Turn off user syncing entirely: -{% highlight js %} +```javascript pbjs.setConfig({ userSync: { syncEnabled: false } }); -{% endhighlight %} +``` Delay auction to retrieve userId module IDs first: -{% highlight js %} +```javascript pbjs.setConfig({ userSync: { auctionDelay: 1000 // delay auction up to 1 second } }); -{% endhighlight %} +``` Allow iframe-based syncs (the presence of a valid `filterSettings.iframe` object automatically enables iframe type user-syncing): -{% highlight js %} +```javascript pbjs.setConfig({ userSync: { filterSettings: { @@ -585,12 +586,13 @@ pbjs.setConfig({ } } }); -{% endhighlight %} -_Note - iframe-based syncing is disabled by default. Image-based syncing is enabled by default; it can be disabled by excluding all/certain bidders via the `filterSettings` object._ +``` + +Note - iframe-based syncing is disabled by default. Image-based syncing is enabled by default; it can be disabled by excluding all/certain bidders via the `filterSettings` object._ Only certain bidders are allowed to sync and only certain types of sync pixels: -{% highlight js %} +```javascript pbjs.setConfig({ userSync: { filterSettings: { @@ -607,11 +609,11 @@ pbjs.setConfig({ syncDelay: 6000, // 6 seconds after the auction } }); -{% endhighlight %} +``` If you want to apply the same bidder inclusion/exlusion rules for both types of sync pixels, you can use the `all` object instead specifying both `image` and `iframe` objects like so: -{% highlight js %} +```javascript pbjs.setConfig({ userSync: { /* only these bidders are allowed to sync. Both iframe and image pixels are permitted. */ @@ -625,13 +627,13 @@ pbjs.setConfig({ syncDelay: 6000, // 6 seconds after the auction } }); -{% endhighlight %} +``` -_Note - the `all` field is mutually exclusive and cannot be combined with the `iframe`/`image` fields in the `userSync` config. This restriction is to promote clear logic as to how bidders will operate in regards to their `userSync` pixels. If the fields are used together, this will be considered an invalid config and Prebid will instead use the default `userSync` logic (all image pixels permitted and all iframe pixels are blocked)._ +Note - the `all` field is mutually exclusive and cannot be combined with the `iframe`/`image` fields in the `userSync` config. This restriction is to promote clear logic as to how bidders will operate in regards to their userSync` pixels. If the fields are used together, this will be considered an invalid config and Prebid will instead use the default `userSync` logic (all image pixels permitted and all iframe pixels are blocked)._ The same bidders can drop sync pixels, but the timing will be controlled by the page: -{% highlight js %} +```javascript pbjs.setConfig({ userSync: { /* only these bidders are allowed to sync, and only image pixels */ @@ -644,15 +646,15 @@ pbjs.setConfig({ enableOverride: true // publisher will call `pbjs.triggerUserSyncs()` } }); -{% endhighlight %} +``` As noted, there's a function available to give the page control of when registered user syncs are added. -{% highlight js %} +```javascript pbjs.triggerUserSyncs(); -{% endhighlight %} +``` - + ##### How User Syncing Works @@ -664,7 +666,7 @@ The [userSync.registerSync()]({{site.baseurl}}/dev-docs/bidder-adaptor.html#bidd When user syncs are run, regardless of whether they are invoked by the platform or by the page calling pbjs.triggerUserSyncs(), the queue entries are randomized and appended to the bottom of the HTML tag. - + #### Configure Targeting Controls @@ -722,7 +724,7 @@ Between these two values (Prebid's targeting key count and the overall ad URL qu Between this feature and the overlapping [sendBidsControl.bidLimit](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Send-Bids-Control), you should be able to make sure that there's not too much data going to the ad server. - + ##### Details on the allowTargetingKeys setting @@ -731,6 +733,7 @@ The `allowTargetingKeys` config creates a targeting key mask based on the defaul Prebid.js introduced the concept of optional targeting keys with 4.23. CONSTANTS.DEFAULT_TARGETING_KEYS is defined as a subset of CONSTANTS.TARGETING_KEYS. When a publisher defines targetingControls.allowTargetingKeys, this replaces the constant CONSTANTS.DEFAULT_TARGETING_KEYS and can include optional keys defined in CONSTANTS.TARGETING_KEYS. One example of this would be to make `hb_adomain` part of the default set. To accomplish this, Prebid does the following: + * Collect original targeting generated by the auction. * Generate new targeting filtered against allowed keys. * Custom targeting keys are always added to targeting. @@ -783,6 +786,7 @@ config.setConfig({ } }); ``` + Another example config showing the addition of `hb_adomain` and excluding all default targeting keys except `hb_bidder`, `hb_adid`, `hb_size` and `hb_pb`: ```javascript @@ -793,11 +797,11 @@ config.setConfig({ }); ``` - + ##### Details on the addTargetingKeys setting -The `addTargetingKeys` config is similar to `allowTargetingKeys`, except it adds to the keys in CONSTANTS.DEFAULT_TARGETING_KEYS instead of replacing them. This is useful if you need Prebid.js to generate targeting for some keys that are not allowed by default without removing any of the default ones (see [allowTargetingKeys](#targetingControls-allowTargetingKeys) for details on how targeting is generated). +The `addTargetingKeys` config is similar to `allowTargetingKeys`, except it adds to the keys in CONSTANTS.DEFAULT_TARGETING_KEYS instead of replacing them. This is useful if you need Prebid.js to generate targeting for some keys that are not allowed by default without removing any of the default ones (see [allowTargetingKeys](#targetingControls-allowTargetingKeys) for details on how targeting is generated). Note that you may specify only one of `allowTargetingKeys` or `addTargetingKeys`. @@ -851,7 +855,6 @@ config.setConfig({ }); ``` - ##### Details on the allowSendAllBidsTargetingKeys setting The `allowSendAllBidsTargetingKeys` is similar to `allowTargetingKeys` except it limits any default bidder specific keys sent to the adserver when sendAllBids is enabled. Any default bidder specific keys that do not match the mask will not be sent to the adserver. This setting can be helpful if you find that your default Prebid.js implementation is sending key values that your adserver isn't configured to process; extraneous key values may lead to the ad server request being truncated, which can cause potential issues with the delivery or rendering ads. An example of an extraneous key value many publishers may find redundant and want to remove is `hb_bidder_biddercode = biddercode`. @@ -866,8 +869,7 @@ config.setConfig({ }); ``` - - + #### Configure Responsive Ads @@ -889,19 +891,19 @@ If, on the other hand, you're only working with the banner mediaType and the AdU {% endcapture %} {% include alerts/alert_tip.html content=tip-choosing %} -+ [How it works](#sizeConfig-How-it-Works) -+ [Example](#sizeConfig-Example) -+ [Labels](#labels) +* [How it works](#sizeConfig-How-it-Works) +* [Example](#sizeConfig-Example) +* [Labels](#labels) - + ##### How Size Config Works for Banners -- Before `requestBids` sends bid requests to adapters, it will evaluate and pick the appropriate label(s) based on the `sizeConfig.mediaQuery` and device properties. Once it determines the active label(s), it will then filter the `adUnit.bids` array based on the `labels` defined and whether the `banner` mediaType was included. Ad units that include a `banner` mediaType that don't match the label definition are dropped. -- The required `sizeConfig.mediaQuery` property allows [CSS media queries](https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries). The queries are tested using the [`window.matchMedia`](https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia) API. -- If a label conditional (e.g. `labelAny`) doesn't exist on an ad unit, it is automatically included in all requests for bids. -- If multiple rules match, the sizes will be filtered to the intersection of all matching rules' `sizeConfig.sizesSupported` arrays. -- The `adUnit.mediaTypes.banner.sizes` selected will be filtered based on the `sizesSupported` of the matched `sizeConfig`. So the `adUnit.mediaTypes.banner.sizes` is a subset of the sizes defined from the resulting intersection of `sizesSupported` sizes and `adUnit.mediaTypes.banner.sizes`. (Note: size config will also operate on `adUnit.sizes`, however `adUnit.sizes` is deprecated in favor of `adUnit.mediaTypes`) +* Before `requestBids` sends bid requests to adapters, it will evaluate and pick the appropriate label(s) based on the `sizeConfig.mediaQuery` and device properties. Once it determines the active label(s), it will then filter the `adUnit.bids` array based on the `labels` defined and whether the `banner` mediaType was included. Ad units that include a `banner` mediaType that don't match the label definition are dropped. +* The required `sizeConfig.mediaQuery` property allows [CSS media queries](https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries). The queries are tested using the [`window.matchMedia`](https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia) API. +* If a label conditional (e.g. `labelAny`) doesn't exist on an ad unit, it is automatically included in all requests for bids. +* If multiple rules match, the sizes will be filtered to the intersection of all matching rules' `sizeConfig.sizesSupported` arrays. +* The `adUnit.mediaTypes.banner.sizes` selected will be filtered based on the `sizesSupported` of the matched `sizeConfig`. So the `adUnit.mediaTypes.banner.sizes` is a subset of the sizes defined from the resulting intersection of `sizesSupported` sizes and `adUnit.mediaTypes.banner.sizes`. (Note: size config will also operate on `adUnit.sizes`, however `adUnit.sizes` is deprecated in favor of `adUnit.mediaTypes`) ###### Note on sizeConfig and different mediaTypes @@ -911,13 +913,13 @@ For example, if a request contained the `banner` and `video` `mediaTypes` and i If the ad unit does not include `banner` `mediaType` at all, then the sizeConfig logic will not influence that ad Unit; it will automatically be passed into the auction. - + -##### Example +##### Size Config Example To set size configuration rules, pass in `sizeConfig` as follows: -{% highlight js %} +```javascript pbjs.setConfig({ sizeConfig: [{ @@ -954,7 +956,7 @@ pbjs.setConfig({ }] }); -{% endhighlight %} +``` ##### Labels @@ -968,22 +970,24 @@ Labels may be defined in two ways: 1. Through [`sizeConfig`](#setConfig-Configure-Responsive-Ads) 2. As an argument to [`pbjs.requestBids`](/dev-docs/publisher-api-reference/requestBids.html) -{% highlight js %} +```javascript pbjs.requestBids({labels: []}); -{% endhighlight %} +``` Labels may be targeted in the AdUnit structure by two conditional operators: `labelAny` and `labelAll`. With the `labelAny` operator, just one label has to match for the condition to be true. In the example below, either A or B can be defined in the label array to activate the bid or ad unit: -{% highlight bash %} + +```javascript labelAny: ["A", "B"] -{% endhighlight %} +``` With the `labelAll` conditional, every element of the target array must match an element of the label array in order for the condition to be true. In the example below, both A and B must be defined in the label array to activate the bid or ad unit: -{% highlight bash %} + +```javascript labelAll: ["A", "B"] -{% endhighlight %} +``` {: .alert.alert-warning :} Only one conditional may be specified on a given AdUnit or bid -- if both `labelAny` and `labelAll` are specified, only the first one will be utilized and an error will be logged to the console. It is allowable for an AdUnit to have one condition and a bid to have another. @@ -996,8 +1000,7 @@ It is important to note that labels do not act as filters for sizeConfig. In the Label targeting on the ad unit looks like the following: -{% highlight js %} - +```javascript pbjs.addAdUnits([{ code: "ad-slot-1", mediaTypes: { @@ -1048,12 +1051,11 @@ pbjs.addAdUnits([{ ] }]); -{% endhighlight %} +``` See [Conditional Ad Units]({{site.baseurl}}/dev-docs/conditional-ad-units.html) for additional use cases around labels. - - + #### COPPA @@ -1061,11 +1063,11 @@ Bidder adapters that support the Child Online Privacy Protection Act (COPPA) rea 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 %} +```javascript pbjs.setConfig({coppa: true}); -{% endhighlight %} +``` - + #### First Party Data @@ -1077,24 +1079,25 @@ Not all bid adapters currently support reading first party data in this way, but **Scenario 1** - Global (cross-adunit) First Party Data open to all bidders -{% highlight js %} +```javascript pbjs.setConfig({ ortb2: { site: { - ... + // ... }, user: { - ... + // ... } } }); -{% endhighlight %} +``` The `ortb2` JSON structure reflects the OpenRTB standard: -- Fields that like keywords, search, content, gender, yob, and geo are values defined in OpenRTB, so should go directly under the site or user objects. -- Arbitrary values should go in site.ext.data or user.ext.data. -- Segments should go in site.content.data[] or user.data[]. -- Any other OpenRTB 2.5 field could be added here as well, e.g. site.content.language. + +* Fields that like keywords, search, content, gender, yob, and geo are values defined in OpenRTB, so should go directly under the site or user objects. +* Arbitrary values should go in site.ext.data or user.ext.data. +* Segments should go in site.content.data[] or user.data[]. +* Any other OpenRTB 2.5 field could be added here as well, e.g. site.content.language. **Scenario 2** - Auction (cross-adunit) First Party Data open to all bidders @@ -1110,7 +1113,7 @@ See the [AdUnit Reference](/dev-docs/adunit-reference.html) for AdUnit-specific See [Prebid Server First Party Data](/prebid-server/features/pbs-fpd.html) for details about passing data server-side. - + #### Video Module to integrate with Video Players @@ -1142,10 +1145,11 @@ To register a video player with Prebid, you must use `setConfig` to set a `video **Note:** You can integrate with different Player vendors. For this to work, you must ensure that the right Video Submodules are included in your build, and that the providers have the right `vendorCode`s and `divId`s. -##### Example +##### Player Integration Example Assuming your page has 2 JW Player video players, 1 video.js video player, and your ad server is GAM. -{% highlight js %} + +```javascript pbjs.setConfig({ video: { providers: [{ @@ -1181,9 +1185,9 @@ pbjs.setConfig({ } } }); -{% endhighlight %} +``` - + #### Client-side Caching of VAST XML @@ -1192,16 +1196,16 @@ video player can retrieve them when it's ready. Players don't obtain the VAST XM the JavaScript DOM in Prebid.js, but rather expect to be given a URL where it can be retrieved. There are two different flows possible with Prebid.js around VAST XML caching: -- Server-side caching: +* Server-side caching: Some video bidders (e.g. Rubicon Project) always cache the VAST XML on their servers as part of the bid. They provide a 'videoCacheKey', which is used in conjunction with the VAST URL in the ad server to retrieve the correct VAST XML when needed. In this case, Prebid.js has nothing else to do. As of Prebid.js 4.28, a publisher may specify the `ignoreBidderCacheKey` flag to re-cache these bids somewhere else using a VAST wrapper. -- Client-side caching: +* Client-side caching: Video bidders that don't cache on their servers return the entire VAST XML body. In this scenario, Prebid.js needs to copy the VAST XML to a publisher-defined cache location on the network. Prebid.js POSTs the VAST XML to the named Prebid Cache URL. It then sets the 'videoCacheKey' to the key that's returned in the response. {: .table .table-bordered .table-striped } | Cache Attribute | Required? | Type | Description | |----+--------+-----+-------| | cache.url | yes | string | The URL of the Prebid Cache server endpoint where VAST creatives will be sent. | -| cache.timeout | no | number | Timeout (in milliseconds) for network requests to the cache | +| cache.timeout | no | number | Timeout (in milliseconds) for network requests to the cache | | cache.vasttrack | no | boolean | Passes additional data to the url, used for additional event tracking data. Defaults to `false`. | | cache.ignoreBidderCacheKey | no | boolean | If the bidder supplied their own cache key, setting this value to true adds a VAST wrapper around that URL, stores it in the cache defined by the `url` parameter, and replaces the original video cache key with the new one. This can dramatically simplify ad server setup because it means all VAST creatives reside behind a single URL. The tradeoff: this approach requires the video player to unwrap one extra level of VAST. Defaults to `false`. | | cache.batchSize | no | number | Enables video cache requests to be batched by a specified amount (defaults to 1) instead of making a single request per each video. | @@ -1209,44 +1213,44 @@ be retrieved. There are two different flows possible with Prebid.js around VAST Here's an example of basic client-side caching. Substitute your Prebid Cache URL as needed: -{% highlight js %} +```javascript pbjs.setConfig({ cache: { url: 'https://prebid.adnxs.com/pbc/v1/cache' } }); -{% endhighlight %} +``` {: .alert.alert-warning :} The endpoint URL provided must be a Prebid Cache or be otherwise compatible with the [Prebid Cache interface](https://github.com/prebid/prebid-cache). As of Prebid.js 4.28, you can specify the `ignoreBidderCacheKey` option: -{% highlight js %} +```javascript pbjs.setConfig({ cache: { url: 'https://my-pbs.example.com/cache', - ignoreBidderCacheKey: true + ignoreBidderCacheKey: true } }); -{% endhighlight %} +``` As of Prebid.js 2.36, you can track client-side cached VAST XML. This functionality is useful for publishers who want to allow their analytics provider to measure video impressions. The prerequisite to using this feature is the availability of a Prebid Server that supports: -- the /vtrack endpoint -- an analytics module with connection to an analytics system that supports joining the impression event to the original auction request on the bidid -- the ability of a publisher to utilize the feature (if account-level permission is enabled) +* the /vtrack endpoint +* an analytics module with connection to an analytics system that supports joining the impression event to the original auction request on the bidid +* the ability of a publisher to utilize the feature (if account-level permission is enabled) Given those conditions, the `vasttrack` flag can be specified: -{% highlight js %} +```javascript pbjs.setConfig({ cache: { url: 'https://my-pbs.example.com/vtrack', vasttrack: true } }); -{% endhighlight %} +``` Setting the `vasttrack` parameter to `true` supplies the POST made to the `/vtrack` Prebid Server endpoint with a couple of additional parameters needed @@ -1254,7 +1258,7 @@ by the analytics system to join the event to the original auction request. Optionally, `batchSize` and `batchTimeout` can be utlilized as illustrated with the example below: -{% highlight js %} +```javascript pbjs.setConfig({ cache: { url: 'https://prebid.adnxs.com/pbc/v1/cache', @@ -1262,16 +1266,17 @@ pbjs.setConfig({ batchTimeout: 50 } }); -{% endhighlight %} +``` The example above states that a timer will be initialized and wait up to 50ms for 4 responses to have been collected and then will fire off one batch video cache request for all 4 responses. Note that the batch request will be made when the specified `batchSize` number is reached or with the number of responses that could be collected within the timeframe specified by the value for `batchTimeout`. If a batchSize is set to 2 and 5 video responses arrive (within the timeframe specified by `batchTimeout`), then three batch requests in total will be made: + 1. Batch 1 will contain cache requests for 2 videos 2. Batch 2 will contain cache requests for 2 videos 3. Batch 3 will contain cache requests for 1 video - + #### Instream tracking @@ -1289,26 +1294,26 @@ This configuration will allow Analytics Adapters and Bid Adapters to track `BID_ | `instreamTracking.pollingFreq` | Optional | Integer |The frequency of polling. Default: `500`ms | | `instreamTracking.urlPattern` | Optional | RegExp | Regex for cache url patterns, to avoid false positives. | -#### Example +#### Instream Tracking Example -{% highlight js %} +```javascript pbjs.setConfig({ 'instreamTracking': { enabled: true, } }); -{% endhighlight %} +``` More examples [here](/dev-docs/modules/instreamTracking.html#example-with-urlpattern). - + #### Site Configuration Adapters, including Prebid Server adapters, can support taking site parameters like language. Just set the `ortb2.site` object as First Party Data to make it available to client- and server-side adapters. -{% highlight js %} +```javascript pbjs.setConfig({ ortb2: { site: { @@ -1318,12 +1323,12 @@ pbjs.setConfig({ } } }); -{% endhighlight %} +``` {: .alert.alert-warning :} In PBJS 4.29 and earlier, don't add the `ortb2` level here -- just `site` directly. Oh, and please upgrade. 4.29 was a long time ago. - + #### Auction Options @@ -1336,47 +1341,51 @@ The `auctionOptions` object controls aspects related to auctions. | `suppressStaleRender` | Optional | Boolean | When true, prevents `banner` bids from being rendered more than once. It should only be enabled after auto-refreshing is implemented correctly. Default is false. ##### Examples -Exclude status of bidder _doNotWaitForMe_ when checking auction completion. -{% highlight js %} + +Exclude status of bidder *doNotWaitForMe* when checking auction completion. + +```javascript pbjs.setConfig({ 'auctionOptions': { 'secondaryBidders': ['doNotWaitForMe'] } }); -{% endhighlight %} +``` Render winning bids only once. -{% highlight js %} + +```javascript pbjs.setConfig({ 'auctionOptions': { 'suppressStaleRender': true } }); -{% endhighlight %} +``` ##### More on Stale Rendering + When auto-refreshing is done incorrectly, it could cause the same bids to be rendered repeatedly. For instance, when googletag.pubads.refresh() is called directly without removing the PBJS targeting, the same hb_ variables get re-sent to GAM, re-chosen, and re-rendered. Over and over without ever asking PBJS for updated targeting variables. PBJS performs following actions when stale rendering is detected. + * Log a warning in the browser console if pbjs_debug=true. * Emit a `STALE_RENDER` event before `BID_WON` event. Stale winning bids will continue to be rendered unless `suppressStaleRender` is set to true. Events including `STALE_RENDER` and `BID_WON` are unaffected by this option. - - + #### maxNestedIframes Prebid.js will loop upward through nested iframes to find the top-most referrer. This setting limits how many iterations it will attempt before giving up and not setting referrer. -``` +```javascript pbjs.setConfig({ maxNestedIframes: 5 // default is 10 }); ``` - + #### Real-Time Data Modules @@ -1386,22 +1395,22 @@ RTD modules, define an overall amount of time they're willing to wait for results, and even flag some of the modules as being more "important" than others. -``` +```javascript pbjs.setConfig({ - ..., + // ..., realTimeData: { auctionDelay: 100, // REQUIRED: applies to all RTD modules dataProviders: [{ name: "RTD-MODULE-1", waitForIt: true, // OPTIONAL: flag this module as important params: { - ... module-specific parameters ... + // ... module-specific parameters ... } },{ name: "RTD-MODULE-2", waitForIt: false, // OPTIONAL: flag this module as less important params: { - ... module-specific parameters ... + //... module-specific parameters ... } }] } @@ -1428,18 +1437,17 @@ Some publishers carefully manage these precious milliseconds, balancing impact of the real-time data with the revenue loss from auction delay. Notes: -- The only time `waitForIt` means anything is if some modules are flagged as true and others as false. If all modules are the same (true or false), it has no effect. -- Likewise, `waitForIt` doesn't mean anything without an auctionDelay specified. - +* The only time `waitForIt` means anything is if some modules are flagged as true and others as false. If all modules are the same (true or false), it has no effect. +* Likewise, `waitForIt` doesn't mean anything without an auctionDelay specified. - + #### Topics Iframe Configuration Topics iframe implementation is the enhancements of existing module under topicsFpdModule.js where different bidders will call the topic API under their domain to fetch the topics for respective domain and the segment data will be part of ORTB request under user.data object. Default config is maintained in the module itself. Below are the configuration which can be used to configure and override the default config maintained in the module. -``` +```javascript pbjs.setConfig({ userSync: { ..., @@ -1474,60 +1482,62 @@ pbjs.setConfig({ | topics.bidders[].iframeURL | yes | string | URL which is hosted on bidder/SSP/third-party domains which will call Topics API. | | topics.bidders[].expiry | no | integer | Max number of days where Topics data will be persist. If Data is stored for more than mentioned expiry day, it will be deleted from storage. Default is 21 days which is hardcoded in Module. | + - #### Disable performance metrics -Since version 7.17, Prebid collects fine-grained performance metrics and attaches them to several events for the purpose of analytics. If you find that this generates too much data for your analytics provider you may disable this feature with: +Since version 7.17, Prebid collects fine-grained performance metrics and attaches them to several events for the purpose of analytics. If you find that this generates too much data for your analytics provider you may disable this feature with: -``` +```javascript pbjs.setConfig({performanceMetrics: false}) ``` - + + #### Setting alias registry to private The alias registry is made public by default during an auction. It can be referenced in the following way: -``` +```javascript pbjs.aliasRegistry or pbjs.aliasRegistry[aliasName]; ``` -Inversely, if you wish for the alias registry to be private you can do so by using the option below (causing `pbjs.aliasRegistry` to return undefined): +Inversely, if you wish for the alias registry to be private you can do so by using the option below (causing `pbjs.aliasRegistry` to return undefined): -``` +```javascript pbjs.setConfig({aliasRegistry: 'private'}) ``` - + + #### Generic setConfig Configuration Some adapters may support other options, as defined in their documentation. To set arbitrary configuration values: -{% highlight js %} +```javascript pbjs.setConfig({ : }); -{% endhighlight %} +``` - + #### Troubleshooting your configuration Towards catching syntax errors, one tip is to call `pbjs.setConfig` without an object, e.g., -{% highlight js %} -pbjs.setConfig('debug', 'true')); -{% endhighlight %} +```javascript +pbjs.setConfig('debug', 'true'); +``` then Prebid.js will print an error to the console that says: -``` +```noformat ERROR: setConfig options must be an object ``` If you don't see that message, you can assume the config object is valid. -
    +
    ## Related Reading -- [Prebid.js and Ad Server Key Values](/features/adServerKvps.html) +* [Prebid.js and Ad Server Key Values](/features/adServerKvps.html) diff --git a/dev-docs/publisher-api-reference/setTargetingForAst.md b/dev-docs/publisher-api-reference/setTargetingForAst.md index 900624dfc3..5a58ec6ff9 100644 --- a/dev-docs/publisher-api-reference/setTargetingForAst.md +++ b/dev-docs/publisher-api-reference/setTargetingForAst.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.setTargetingForAst(adUnitCode) -description: +description: setTargetingForAst API sidebarType: 1 --- diff --git a/dev-docs/publisher-api-reference/setTargetingForGPTAsync.md b/dev-docs/publisher-api-reference/setTargetingForGPTAsync.md index 30a161b674..16d682dfe3 100644 --- a/dev-docs/publisher-api-reference/setTargetingForGPTAsync.md +++ b/dev-docs/publisher-api-reference/setTargetingForGPTAsync.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.setTargetingForGPTAsync([codeArr], customSlotMatching) -description: +description: setTargetingForGPTAsync API sidebarType: 1 --- @@ -20,6 +20,7 @@ This function matches AdUnits that have returned from the auction to a GPT ad sl targeting attributes to the slot so they get sent to GAM. Here's how it works: + 1. For each AdUnit code that's returned from auction or is specified in the `codeArr` parameter: 2. For each GPT ad slot on the page: 3. If the `customSlotMatching` function is defined, call it. Else, try to match the AdUnit `code` with the GPT slot name. Else try to match the AdUnit `code` with the ID of the HTML div containing the slot. @@ -34,7 +35,7 @@ the ad results should render into. This could be useful on long-scrolling pages. short to make sure they get good viewability, the logic can find an appropriate placement for the auction result depending on where the user is once the auction completes. -``` +```javascript // returns a filter function that matches either with the slot or the adUnitCode // this filter function is being invoked after the auction has completed // this means that it can be used in order to place this within viewport instead of a static div naming diff --git a/dev-docs/publisher-api-reference/triggerBilling.md b/dev-docs/publisher-api-reference/triggerBilling.md index bb84d585a9..8e5e314a32 100644 --- a/dev-docs/publisher-api-reference/triggerBilling.md +++ b/dev-docs/publisher-api-reference/triggerBilling.md @@ -1,7 +1,7 @@ --- layout: api_prebidjs title: pbjs.triggerBilling -description: +description: triggerBilling API sidebarType: 1 --- @@ -20,7 +20,7 @@ See below for an example of how triggerBilling can be used: {: .alert.alert-warning :} Note: The logic to decide when to invoke `pbjs.triggerBilling` is open-ended. One common use case could be to listen for an "on view" event emitted from your ad server.

    For instance, the example below listens for GPT's "impressionViewable" event to determine if a deferred ad unit has become visible and is therefore ready for billing. The utilized approach to determine when to invoke `pbjs.triggerBilling` should be customized to your specific needs (For more on GPT's "impressionViewable" event, see: [https://developers.google.com/publisher-tag/reference#googletag.events.impressionviewableevent](https://developers.google.com/publisher-tag/reference#googletag.events.impressionviewableevent)).

    Additionally, the example below takes into account the possibility of multiple deferred ad units being present on a page that could potentially invoke the triggerBilling function (see the "deferredAdUnitIds" variable in the snippet below). The amount of deferred ad units needed on a page are dependent on your needs and could vary. -{% highlight js %} +```javascript ... var adUnits = [ @@ -74,6 +74,6 @@ function sendAdserverRequest(bids, timedOut, auctionId) { ... -{% endhighlight %} +```
    diff --git a/dev-docs/release-notes.md b/dev-docs/release-notes.md index 108c7d80ad..f30b8b0ead 100644 --- a/dev-docs/release-notes.md +++ b/dev-docs/release-notes.md @@ -7,6 +7,7 @@ description: Release Notes
    # Release Notes + {:.no_toc} This page has links to release notes for each of the projects associated with Prebid.org. diff --git a/dev-docs/show-long-form-video-with-gam.md b/dev-docs/show-long-form-video-with-gam.md index b14d30180f..7f9d4ef178 100644 --- a/dev-docs/show-long-form-video-with-gam.md +++ b/dev-docs/show-long-form-video-with-gam.md @@ -16,16 +16,18 @@ In this tutorial, we'll detail how to set up Prebid.js to display a Programmatic ## Prerequisites -The code example below was built with Prebid.js and the following: -- At least one video-enabled bidder supporting `adpod`. -- The [`dfpAdServerVideo` module](/dev-docs/modules/dfp_video.html), which will provide the video ad support. -- The [`categoryTranslation` module](/dev-docs/modules/categoryTranslation.html), to enable competitive separation. +The code example below was built with Prebid.js and the following: + +* At least one video-enabled bidder supporting `adpod`. +* The [`dfpAdServerVideo` module](/dev-docs/modules/dfp_video.html), which will provide the video ad support. +* The [`categoryTranslation` module](/dev-docs/modules/categoryTranslation.html), to enable competitive separation. For example, to build with the AppNexus bidder adapter and GAM use the following command: ```bash gulp build --modules=appnexusBidAdapter,dfpAdServerVideo ``` + For more information about how to build with modules, see the [Prebid module documentation](/dev-docs/modules/). {% include alerts/alert_important.html content="If competitve separation is required the optional [`categoryTranslation` module](/dev-docs/modules/categoryTranslation.html) needs to be added to the build command." %} @@ -33,12 +35,14 @@ For more information about how to build with modules, see the [Prebid module doc {% include alerts/alert_important.html content="Ensure your ad ops team has set up line items in Google Ad Manager." %} ## Ad Pod Module + When the [`dfpAdServerVideo` module](/dev-docs/modules/dfp_video.html) is included in the Prebid.js build, the [Ad Pod module](/dev-docs/modules/adpod.html), for working with ad pods, is automatically included. This module enables developers to add support for an adserver, like Google Ad Manager or Freewheel, that handles ad unit types of adpod. Specifically, the module provides functions to validate, cache, and modify long-form video bids. ## Implementation + This section provides information on how to implement and configure Prebid.js to display ad unit types of adpod. -**1. Create an ad unit** +### 1. Create an ad unit Create an ad unit that contains a video `mediaType` object and set the `mediaTypes.video.context` to `adpod`. Set the other parameters to the specific properties for the publisher's inventory. @@ -46,30 +50,29 @@ Create an ad unit that contains a video `mediaType` object and set the `mediaTyp ```javascript var videoAdUnit = [{ - code: 'sample-code', - sizes: [640,480], - mediaTypes: { - video: { - context: 'adpod', - playerSize: [640, 480], - adPodDurationSec: 300, - durationRangeSec: [15, 30], - requireExactDuration: true - } - }, - bids: [ - { - bidder: 'appnexus', - params: { - placementId: 14542875 - } + code: 'sample-code', + sizes: [640,480], + mediaTypes: { + video: { + context: 'adpod', + playerSize: [640, 480], + adPodDurationSec: 300, + durationRangeSec: [15, 30], + requireExactDuration: true + } + }, + bids: [ + { + bidder: 'appnexus', + params: { + placementId: 14542875 } - ] - }]; -}; + } + ] +}] ``` -**2. Get ad pod targeting** +### 2. Get ad pod targeting If a publisher wants to retrieve ad pod targeting and create the master tag themselves they can use the getAdPodTargeting method of the `dfpAdServerVideo` module. The method requires an array of ad unit codes and returns targeting key values and the cache id as JSON. @@ -86,23 +89,23 @@ pbjs.adServers.dfp.getAdpodTargeting({ Sample return: -```JSON +```json { - 'adUnitCode-1': [ + "adUnitCode-1": [ { - 'hb_pb_cat_dur': '10.00_
    - + -{% highlight js %} +```javascript pbjs.addAdUnits({ code: slot.code, @@ -151,7 +152,7 @@ pbjs.addAdUnits({ }, ] }) -{% endhighlight %} +``` {: .alert.alert-danger :} For each native ad unit, all of the bidders within that ad unit must have declared native support in their adapter if you want ads to appear. If there are any bidders without native support in a native ad unit, requests will not be made to those bidders. For a list of bidders with native support, see [Bidders with Video and Native Demand]({{site.baseurl}}/dev-docs/bidders.html#bidders-with-video-and-native-demand). @@ -164,16 +165,16 @@ For now there is only the `image` type, but more will be added. The image native ad type implies the following required fields: -+ image -+ title -+ sponsoredBy -+ clickUrl +* image +* title +* sponsoredBy +* clickUrl And the following optional fields: -+ body -+ icon -+ cta +* body +* icon +* cta A native "image-type" ad unit can be set up as shown in the following example. @@ -196,9 +197,9 @@ const adUnits = [{ {% include dev-docs/native-image-asset-sizes.md %} -### 3. Add your native ad tag to the page body as usual: +### 3. Add your native ad tag to the page body as usual -{% highlight html %} +```html
    -{% endhighlight %} +``` ## Sending Asset Placeholders @@ -280,8 +281,8 @@ The `native-trk.js` script from `prebid-universal-creative` can replace native p ## Working Examples -+ [Prebid Native Examples](/dev-docs/examples/native-ad-example.html) +* [Prebid Native Examples](/dev-docs/examples/native-ad-example.html) ## Further Reading -+ [GAM Step by Step - Native Creatives](/adops/gam-native.html) (Ad Ops Setup Instructions) +* [GAM Step by Step - Native Creatives](/adops/gam-native.html) (Ad Ops Setup Instructions) diff --git a/dev-docs/show-outstream-video-ads.md b/dev-docs/show-outstream-video-ads.md index 3e551682fa..0f6c066454 100644 --- a/dev-docs/show-outstream-video-ads.md +++ b/dev-docs/show-outstream-video-ads.md @@ -9,6 +9,7 @@ sidebarType: 4
    # Show Outstream Video Ads + {: .no_toc} Unlike instream video ads, which require you to have your own video inventory, Outstream video ads can be shown on any web page, even pages that only have text content. @@ -24,7 +25,7 @@ There should be no changes required on the ad ops side, since the outstream unit ## Prerequisites -+ Inclusion of at least one demand adapter that supports the `"video"` media type +* Inclusion of at least one demand adapter that supports the `"video"` media type ## Step 1: Set up ad units with the video media type and outstream context @@ -32,8 +33,7 @@ Use the `adUnit.mediaTypes` object to set up your ad units with the `video` medi For full details on video ad unit parameters, see [Ad Unit Reference for Video]({{site.baseurl}}/dev-docs/adunit-reference.html#adunitmediatypesvideo) -{% highlight js %} - +```javascript var videoAdUnits = [{ code: 'video1', mediaTypes: { @@ -54,8 +54,7 @@ var videoAdUnits = [{ } }] }]; - -{% endhighlight %} +``` ### Renderers @@ -85,10 +84,9 @@ A renderer is an object containing these properties: 2. `render` -- A function that tells Prebid.js how to invoke the renderer script. 3. `backupOnly` -- Optional field, if set to true, buyer or adapter renderer will be preferred - In a multiFormat adUnit, you might want the renderer to only apply to only one of the mediaTypes. You can do this by defining the renderer on the media type itself. -{% highlight js %} +```javascript pbjs.addAdUnit({ code: 'video1', // This renderer would apply to all prebid creatives... @@ -120,12 +118,11 @@ pbjs.addAdUnit({ }, ... }); -{% endhighlight %} +``` Some demand partners that return a renderer with their video bid responses may support renderer configuration with the `adUnit.renderer.options` object. These configurations are bidder specific and may include options for skippability, player size, and ad text, for example. An example renderer configuration follows: -{% highlight js %} - +```javascript pbjs.addAdUnit({ code: 'video1', mediaTypes: { @@ -145,8 +142,7 @@ pbjs.addAdUnit({ }, ... }); - -{% endhighlight %} +``` For more technical information about renderers, see [the pull request originally adding the 'Renderer' type](https://github.com/prebid/Prebid.js/pull/1082) and [the pull request allowing the 'renderer' type in the mediaType](https://github.com/prebid/Prebid.js/pull/5760). @@ -158,8 +154,7 @@ Invoke your ad server for the outstream adUnit from the body of the page in the For a live example, see [Outstream with Google Ad Manager]({{site.github.url}}/examples/video/outstream/pb-ve-outstream-dfp.html). -{% highlight html %} - +```html

    Prebid Outstream Video Ad

    - -{% endhighlight %} +``` ### Option 2: Serving without an ad server @@ -185,8 +179,7 @@ In the Prebid.js event queue, you'll need to add a function that: 1. Selects the bid that will serve for the appropriate adUnit 2. Renders the ad -{% highlight js %} - +```javascript pbjs.que.push(function () { pbjs.addAdUnits(videoAdUnits); pbjs.requestBids({ @@ -197,20 +190,19 @@ pbjs.que.push(function () { } }); }); - -{% endhighlight %} +``` For more information, see the API documentation for: -+ [requestBids](/dev-docs/publisher-api-reference/requestBids.html) -+ [getHighestCpmBids](/dev-docs/publisher-api-reference/getHighestCpmBids.html) -+ [renderAd](/dev-docs/publisher-api-reference/renderAd.html) +* [requestBids](/dev-docs/publisher-api-reference/requestBids.html) +* [getHighestCpmBids](/dev-docs/publisher-api-reference/getHighestCpmBids.html) +* [renderAd](/dev-docs/publisher-api-reference/renderAd.html) ## Working Examples Below, find links to end-to-end "working examples" demonstrating Prebid Outstream: -+ [Outstream with Google Ad Manager]({{site.github.url}}/examples/video/outstream/pb-ve-outstream-dfp.html) -+ [Outstream without an Ad Server]({{site.github.url}}/examples/video/outstream/pb-ve-outstream-no-server.html) +* [Outstream with Google Ad Manager]({{site.github.url}}/examples/video/outstream/pb-ve-outstream-dfp.html) +* [Outstream without an Ad Server]({{site.github.url}}/examples/video/outstream/pb-ve-outstream-no-server.html)
    diff --git a/dev-docs/show-prebid-ads-on-amp-pages.md b/dev-docs/show-prebid-ads-on-amp-pages.md index f812053d81..555b42648b 100644 --- a/dev-docs/show-prebid-ads-on-amp-pages.md +++ b/dev-docs/show-prebid-ads-on-amp-pages.md @@ -6,6 +6,7 @@ sidebarType: 2 --- # Prebid AMP Implementation Guide + {: .no_toc} This page has instructions for showing ads on Accelerated Mobile Pages (AMP) using Prebid.js. @@ -14,11 +15,11 @@ Through this implementation, [Prebid Server][PBS] fetches demand and returns key For more information about AMP RTC, see: -+ [Prebid Server and AMP](/prebid-server/use-cases/pbs-amp.html) -+ [Prebid Server AMP Endpoint Technical Documentation](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html) -+ [Prebid Server Stored Bid Requests](https://github.com/prebid/prebid-server/blob/master/docs/developers/stored-requests.md#stored-bidrequests) -+ [AMP RTC Overview](https://github.com/ampproject/amphtml/blob/master/extensions/amp-a4a/rtc-documentation.md) -+ [AMP RTC Publisher Integration Guide](https://github.com/ampproject/amphtml/blob/master/extensions/amp-a4a/rtc-publisher-implementation-guide.md) +* [Prebid Server and AMP](/prebid-server/use-cases/pbs-amp.html) +* [Prebid Server AMP Endpoint Technical Documentation](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html) +* [Prebid Server Stored Bid Requests](https://github.com/prebid/prebid-server/blob/master/docs/developers/stored-requests.md#stored-bidrequests) +* [AMP RTC Overview](https://github.com/ampproject/amphtml/blob/master/extensions/amp-a4a/rtc-documentation.md) +* [AMP RTC Publisher Integration Guide](https://github.com/ampproject/amphtml/blob/master/extensions/amp-a4a/rtc-publisher-implementation-guide.md) {% capture tipNote %} For ad ops setup instructions, see [Google Ad Manager with Prebid Step by Step](/adops/step-by-step.html). @@ -33,18 +34,18 @@ For ad ops setup instructions, see [Google Ad Manager with Prebid Step by Step]( To set up Prebid to serve ads into your AMP pages, you'll need: -+ An account with a [Prebid Server][PBS] instance -+ One or more Prebid Server Stored Bid Requests. A Stored Bid Request is a partial OpenRTB JSON request which: - + Specifies properties like currency, schain, price granularity, etc. - + Contains a list of demand partners and their respective parameters -+ An AMP page containing at least one amp-ad element for an AMP ad network that supports Fast Fetch and AMP RTC +* An account with a [Prebid Server][PBS] instance +* One or more Prebid Server Stored Bid Requests. A Stored Bid Request is a partial OpenRTB JSON request which: + * Specifies properties like currency, schain, price granularity, etc. + * Contains a list of demand partners and their respective parameters +* An AMP page containing at least one amp-ad element for an AMP ad network that supports Fast Fetch and AMP RTC ## Implementation -+ [Prebid Server Stored Request](#prebid-server-stored-request): This is the Prebid Server Stored Bid Request. -+ [AMP content page](#amp-content-page): This is where your content lives. -+ [HTML Creative](#html-creative): This is the creative your Ad Ops team puts in your ad server. -+ [User Sync in AMP](#user-sync): This is the `amp-iframe` pixel that must be added to your AMP page to sync users with Prebid Server. +* [Prebid Server Stored Request](#prebid-server-stored-request): This is the Prebid Server Stored Bid Request. +* [AMP content page](#amp-content-page): This is where your content lives. +* [HTML Creative](#html-creative): This is the creative your Ad Ops team puts in your ad server. +* [User Sync in AMP](#user-sync): This is the `amp-iframe` pixel that must be added to your AMP page to sync users with Prebid Server. ### Prebid Server Stored Request @@ -53,15 +54,14 @@ You will have to create at least one Stored Request for Prebid Server. Valid St An example Stored Request is given below. You'll see that the Stored Request contains some important info that doesn't come from /amp parameters: -- cur -- schain -- ext.prebid.cache.bids - needed to let Prebid Server know that you want it to store the result in PBC -- ext.prebid.targeting.pricegranularity - needed to let Prebid Server know how to calculate the price bucket -- ext.prebid.aliases -- bidders and their parameters - -```html +* cur +* schain +* ext.prebid.cache.bids - needed to let Prebid Server know that you want it to store the result in PBC +* ext.prebid.targeting.pricegranularity - needed to let Prebid Server know how to calculate the price bucket +* ext.prebid.aliases +* bidders and their parameters +```json { "id": "some-request-id", "cur": ["USD"], @@ -114,25 +114,28 @@ that doesn't come from /amp parameters: }] } ``` + This basic OpenRTB record will be enhanced by the parameters from the call to the [/amp endpoint](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html). ### AMP content page First ensure that the amp-ad component is imported in the header. -``` +```html ``` + This script provides code libraries that will convert `` properties to the endpoint query parameters usint the [Real Time Config](https://github.com/ampproject/amphtml/blob/main/extensions/amp-a4a/rtc-documentation.md) (RTC) protocol. The `amp-ad` elements in the page body need to be set up as shown below, especially the following attributes: -+ `data-slot`: Identifies the ad slot for the auction. -+ `rtc-config`: Used to pass JSON configuration data to [Prebid Server][PBS], which handles the communication with AMP RTC. - + `vendors` is an object that defines any vendors that will be receiving RTC callouts (including Prebid Server) up to a maximum of five. The list of supported RTC vendors is maintained in [callout-vendors.js](https://github.com/ampproject/amphtml/blob/master/src/service/real-time-config/callout-vendors.js). We recommend working with your Prebid Server hosting company to set up which bidders and parameters should be involved for each AMP ad unit. - + `timeoutMillis` is an optional integer that defines the timeout in milliseconds for each individual RTC callout. The configured timeout must be greater than 0 and less than 1000ms. If omitted, the timeout value defaults to 1000ms. +* `data-slot`: Identifies the ad slot for the auction. +* `rtc-config`: Used to pass JSON configuration data to [Prebid Server][PBS], which handles the communication with AMP RTC. + * `vendors` is an object that defines any vendors that will be receiving RTC callouts (including Prebid Server) up to a maximum of five. The list of supported RTC vendors is maintained in [callout-vendors.js](https://github.com/ampproject/amphtml/blob/master/src/service/real-time-config/callout-vendors.js). We recommend working with your Prebid Server hosting company to set up which bidders and parameters should be involved for each AMP ad unit. + * `timeoutMillis` is an optional integer that defines the timeout in milliseconds for each individual RTC callout. The configured timeout must be greater than 0 and less than 1000ms. If omitted, the timeout value defaults to 1000ms. e.g. for the AppNexus cluster of Prebid Servers: + ```html - ``` Replace `MACRO` in the preceding example with the appropriate macro for the ad server. (Refer to your ad server's documentation or consult with a representative for specific details regarding the proper macros and how to use them.) @@ -225,11 +227,13 @@ To sync user IDs with Prebid Server, the `amp-iframe` below may be added to your Note that AMP constrains syncing as described in the [amp-iframe](https://amp.dev/documentation/components/amp-iframe) documentation. You may only have *one* amp-iframe on your page that is small, e.g. 1x1. Many publishers already have some kind of analytics or tracking frame on their page, so they may find it difficult to manage this. Several hacks are possible, including building a 'frankenstein' script that combines all of your required tracking into one or tying the sync to an image that's large enough to be visible. Notes: -- The following examples include a transparent image as a placeholder which will allow you to place the example 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://amp.dev/documentation/components/amp-iframe/) -- Note that the `sandbox` parameter to the amp-iframe must include both "allow-scripts" and "allow-same-origin". -- The load-cookie-with-consent.html file has the same argument syntax as load-cookie.html. It's a different file because it's larger and depends on the existence of an AMP Consent Management Platform. + +* The following examples include a transparent image as a placeholder which will allow you to place the example 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://amp.dev/documentation/components/amp-iframe/) +* Note that the `sandbox` parameter to the amp-iframe must include both "allow-scripts" and "allow-same-origin". +* The load-cookie-with-consent.html file has the same argument syntax as load-cookie.html. It's a different file because it's larger and depends on the existence of an AMP Consent Management Platform. If you're using AppNexus' managed service, you would enter something like this: + ```html diff --git a/dev-docs/show-video-with-a-dfp-video-tag.md b/dev-docs/show-video-with-a-dfp-video-tag.md index 37abf718e6..ce52dee301 100644 --- a/dev-docs/show-video-with-a-dfp-video-tag.md +++ b/dev-docs/show-video-with-a-dfp-video-tag.md @@ -8,6 +8,7 @@ sidebarType: 4
    # Show Video Ads with Google Ad Manager + {: .no_toc} In this tutorial, we'll show how to set up Prebid to show a video ad @@ -22,13 +23,13 @@ different video players and video-enabled bidders. The code example below was built using the following libraries: -+ [video.js](https://videojs.com/) version 5.9.2 -+ MailOnline's [videojs-vast-vpaid plugin](https://github.com/MailOnline/videojs-vast-vpaid) version 2.0.2 +* [video.js](https://videojs.com/) version 5.9.2 +* MailOnline's [videojs-vast-vpaid plugin](https://github.com/MailOnline/videojs-vast-vpaid) version 2.0.2 Also, you need to make sure to build Prebid.js with: -+ Support for at least one video-enabled bidder -+ Support for the `dfpAdServerVideo` ad server adapter, which will provide the video ad support +* Support for at least one video-enabled bidder +* Support for the `dfpAdServerVideo` ad server adapter, which will provide the video ad support For example, to build with the AppNexus bidder adapter and the Google Ad Manager Video ad server adapter, use the following command: @@ -121,12 +122,12 @@ pbjs.que.push(function() { The VAST XML has to be cached somewhere because most video players can only work with a URL that returns VAST XML, not VAST directly. Some bidders cache the VAST XML on the server side, while others depend on Prebid.js to perform the caching. -+ In general, video-enabled bidders must supply `bid.videoCacheKey`, `bid.vastXml`, or `bid.vastUrl` on their responses, and can provide any combination of the three. -+ If `pbjs.setConfig({cache: {URL}})` isn't set and the bidder supplies only `bid.vastXml` in its bid response, [`pbjs.adServers.dfp.buildVideoUrl`](/dev-docs/publisher-api-reference/adServers.dfp.buildVideoUrl.html) will not be able to generate a videoCacheKey, and it will be dropped from the auction. -+ If `pbjs.setConfig({cache: {URL}})` is defined and the bidder responds with `bid.videoCacheKey`, Prebid.js will not re-cache the VAST XML. -+ If `options.url` is passed as an argument to [`pbjs.adServers.dfp.buildVideoUrl`](/dev-docs/publisher-api-reference/adServers.dfp.buildVideoUrl.html): - + If Prebid Cache is disabled, Prebid sets `description_url` field to the bid response's `bid.vastUrl`. - + If Prebid Cache is enabled, Prebid sets `description_url` field to the cache URL. +* In general, video-enabled bidders must supply `bid.videoCacheKey`, `bid.vastXml`, or `bid.vastUrl` on their responses, and can provide any combination of the three. +* If `pbjs.setConfig({cache: {URL}})` isn't set and the bidder supplies only `bid.vastXml` in its bid response, [`pbjs.adServers.dfp.buildVideoUrl`](/dev-docs/publisher-api-reference/adServers.dfp.buildVideoUrl.html) will not be able to generate a videoCacheKey, and it will be dropped from the auction. +* If `pbjs.setConfig({cache: {URL}})` is defined and the bidder responds with `bid.videoCacheKey`, Prebid.js will not re-cache the VAST XML. +* If `options.url` is passed as an argument to [`pbjs.adServers.dfp.buildVideoUrl`](/dev-docs/publisher-api-reference/adServers.dfp.buildVideoUrl.html): + * If Prebid Cache is disabled, Prebid sets `description_url` field to the bid response's `bid.vastUrl`. + * If Prebid Cache is enabled, Prebid sets `description_url` field to the cache URL. #### Notes on multiple video advertisements on one page @@ -195,19 +196,20 @@ If you have [set up your ad server line items and creatives correctly]({{site.ba Below, find links to end-to-end "working examples" integrating Prebid.js demand with various video players: ### Using client-side adapters -+ [Akamai AMP]({{site.github.url}}/examples/video/instream/akamai/pb-ve-amp.html) -+ [Brid]({{site.github.url}}/examples/video/instream/brid/pb-ve-brid.html) -+ [Brightcove]({{site.github.url}}/examples/video/instream/brightcove/pb-ve-brightcove.html) -+ [Flowplayer]({{site.github.url}}/examples/video/instream/flowplayer/pb-ve-flowplayer.html) -+ [JWPlayer - Platform]({{site.github.url}}/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html) -+ [JWPlayer - Hosted]({{site.github.url}}/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html) -+ [Kaltura]({{site.github.url}}/examples/video/instream/kaltura/pb-ve-kaltura.html) -+ [Ooyala]({{site.github.url}}/examples/video/instream/ooyala/pb-ve-ooyala.html) -+ [VideoJS]({{site.github.url}}/examples/video/instream/videojs/pb-ve-videojs.html) -+ [Instream and Banner Mixed](/dev-docs/examples/instream-banner-mix.html) + +* [Akamai AMP]({{site.github.url}}/examples/video/instream/akamai/pb-ve-amp.html) +* [Brid]({{site.github.url}}/examples/video/instream/brid/pb-ve-brid.html) +* [Brightcove]({{site.github.url}}/examples/video/instream/brightcove/pb-ve-brightcove.html) +* [Flowplayer]({{site.github.url}}/examples/video/instream/flowplayer/pb-ve-flowplayer.html) +* [JWPlayer - Platform]({{site.github.url}}/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html) +* [JWPlayer - Hosted]({{site.github.url}}/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html) +* [Kaltura]({{site.github.url}}/examples/video/instream/kaltura/pb-ve-kaltura.html) +* [Ooyala]({{site.github.url}}/examples/video/instream/ooyala/pb-ve-ooyala.html) +* [VideoJS]({{site.github.url}}/examples/video/instream/videojs/pb-ve-videojs.html) +* [Instream and Banner Mixed](/dev-docs/examples/instream-banner-mix.html) ## Related Topics -+ [Setting up Prebid Video in Google Ad Manager]({{site.baseurl}}/adops/setting-up-prebid-video-in-dfp.html) +* [Setting up Prebid Video in Google Ad Manager]({{site.baseurl}}/adops/setting-up-prebid-video-in-dfp.html)
    diff --git a/dev-docs/testing-prebid.md b/dev-docs/testing-prebid.md index 9706a054cd..97168f7182 100644 --- a/dev-docs/testing-prebid.md +++ b/dev-docs/testing-prebid.md @@ -4,14 +4,13 @@ layout: page_v2 title: Testing Prebid.js description: How to write tests for the Prebid.js library pid: 199 - top_nav_section: dev_docs - ---
    # Testing Prebid.js + {: .no_toc} Starting on 21 June 2016, all pull requests to the Prebid.js library will need to include tests with greater than 80% code coverage for any changed/added code before they can be merged into master. @@ -27,68 +26,67 @@ This page describes how to test code in the Prebid.js repository to help prepare When you are adding code to Prebid.js, or modifying code that isn't covered by an existing test, test the code according to these guidelines: -- If the module you are working on is already partially tested by a file within the `test` directory, add tests to that file -- If the module does not have any tests, create a new test file -- Group tests in a `describe` block -- Test individual units of code within an `it` block -- Within an `it` block, it may be helpful to use the "Arrange-Act-Assert" pattern - - _Arrange_: set up necessary preconditions and inputs - - e.g., creating objects, spies, etc. - - _Act_: call or act on the unit under test - - e.g., call the function you are testing with the parameters you set up - - _Assert_: check that the expected results have occurred - - e.g., use Chai assertions to check that the expected output is equal to the actual output -- Test the public interface, not the internal implementation -- If using global `pbjs` data structures in your test, take care to not completely overwrite them with your own data as that may affect other tests relying on those structures, e.g.: - - **OK**: `pbjs._bidsRequested.push(bidderRequestObject);` - - **NOT OK**: `pbjs._bidsRequested = [bidderRequestObject];` -- If you need to check `adloader.loadScript` in a test, use a `stub` rather than a `spy`. `spy`s trigger a network call which can result in a `script error` and cause unrelated unit tests to fail. `stub`s will let you gather information about the `adloader.loadScript` call without affecting external resources - -- When writing tests you may use ES2015 syntax if desired +* If the module you are working on is already partially tested by a file within the `test` directory, add tests to that file +* If the module does not have any tests, create a new test file +* Group tests in a `describe` block +* Test individual units of code within an `it` block +** Within an `it` block, it may be helpful to use the "Arrange-Act-Assert" pattern + * _Arrange_: set up necessary preconditions and inputs + * e.g., creating objects, spies, etc. + * _Act_: call or act on the unit under test + * e.g., call the function you are testing with the parameters you set up + * _Assert_: check that the expected results have occurred + * e.g., use Chai assertions to check that the expected output is equal to the actual output +* Test the public interface, not the internal implementation +* If using global `pbjs` data structures in your test, take care to not completely overwrite them with your own data as that may affect other tests relying on those structures, e.g.: + * **OK**: `pbjs._bidsRequested.push(bidderRequestObject);` + * **NOT OK**: `pbjs._bidsRequested = [bidderRequestObject];` +* If you need to check `adloader.loadScript` in a test, use a `stub` rather than a `spy`. `spy`s trigger a network call which can result in a `script error` and cause unrelated unit tests to fail. `stub`s will let you gather information about the `adloader.loadScript` call without affecting external resources +* When writing tests you may use ES2015 syntax if desired ## Running tests After checking out the Prebid.js repository and installing dev dependencies with `npm install`, use the following commands to run tests as you are working on code: -- `gulp test` will run the test suite once (`npm test` is aliased to call `gulp test`) -- `gulp serve` will run tests once and stay open, re-running tests whenever a file in the `src` or `test` directory is modified +* `gulp test` will run the test suite once (`npm test` is aliased to call `gulp test`) +* `gulp serve` will run tests once and stay open, re-running tests whenever a file in the `src` or `test` directory is modified ## Checking results and code coverage Check the test results using these guidelines: -- Look at the total number of tests run, passed, and failed (shown below the rainbow Nyan Cat in the shell window). -- If all tests are passing, great. -- Otherwise look for errors printed in the console for a description of the failing test. -- You may need to iterate on your code or tests until all tests are passing. -- Make sure existing tests still pass. -- There is a table below the testing report that shows code coverage percentage, for each file under the `src` directory. -- Each time you run tests, a code coverage report is generated in `build/coverage/lcov/lcov-report/index.html`. -- This is a static HTML page that you can load in your browser. -- On that page, navigate to the file you are testing to see which lines are being tested. -- Red indicates that a line isn't covered by a test. -- Gray indicates a line that doesn't need coverage, such as a comment or blank line. -- Green indicates a line that is covered by tests. -- The code you have added or modified must have greater than 80% coverage to be accepted. +* Look at the total number of tests run, passed, and failed (shown below the rainbow Nyan Cat in the shell window). +* If all tests are passing, great. +* Otherwise look for errors printed in the console for a description of the failing test. +* You may need to iterate on your code or tests until all tests are passing. +* Make sure existing tests still pass. +* There is a table below the testing report that shows code coverage percentage, for each file under the `src` directory. +* Each time you run tests, a code coverage report is generated in `build/coverage/lcov/lcov-report/index.html`. +* This is a static HTML page that you can load in your browser. +* On that page, navigate to the file you are testing to see which lines are being tested. +* Red indicates that a line isn't covered by a test. +* Gray indicates a line that doesn't need coverage, such as a comment or blank line. +* Green indicates a line that is covered by tests. +* The code you have added or modified must have greater than 80% coverage to be accepted. ## Examples Prebid.js already has lots of tests. Read them to see how Prebid.js is tested, and for inspiration: -- Look in `test/spec` and its subdirectories -- Tests for bidder adaptors are located in `test/spec/adapters` +* Look in `test/spec` and its subdirectories +* Tests for bidder adaptors are located in `test/spec/adapters` A test module might have the following general structure: -{% highlight js %} +```javascript // Import or require modules necessary for the test, e.g.: import { expect } from 'chai'; // may prefer 'assert' in place of 'expect' -import adapter from 'src/adapters/'; +import adapter from 'src/adapters/[adapter]'; -describe('', () => { +describe('[Adapter]', () => { - it('', () => { + it('[description of unit or feature being tested]', () => { // Arrange - set up preconditions and inputs // Act - call or act on the code under test // Assert - use chai to check that expected results have occurred @@ -98,14 +96,14 @@ describe('', () => { }); -{% endhighlight %} +``` ## Resources The Prebid.js testing stack contains some of the following tools. It may be helpful to consult their documentation during the testing process. -- [Mocha - test framework](https://mochajs.org/) -- [Chai - BDD/TDD assertion library](https://chaijs.com/) -- [Sinon - spy, stub, and mock library](https://sinonjs.org/) +* [Mocha - test framework](https://mochajs.org/) +* [Chai - BDD/TDD assertion library](https://chaijs.com/) +* [Sinon - spy, stub, and mock library](https://sinonjs.org/)
    diff --git a/dev-docs/troubleshooting-tips.md b/dev-docs/troubleshooting-tips.md index 1b2375c9e1..45b47efd77 100644 --- a/dev-docs/troubleshooting-tips.md +++ b/dev-docs/troubleshooting-tips.md @@ -11,6 +11,7 @@ sidebarType: 1 # Tips for Troubleshooting + {:.no_toc} Moved to [the PBJS Troubleshooting Guide](/troubleshooting/troubleshooting-guide.html). diff --git a/dev-docs/vendor-billing.md b/dev-docs/vendor-billing.md index 9dc0bf9f7a..ce22b26d35 100644 --- a/dev-docs/vendor-billing.md +++ b/dev-docs/vendor-billing.md @@ -6,6 +6,7 @@ sidebarType: 1 --- # Vendor Billing in Prebid.js + {:.no_toc} Prebid.js now supports a new event type: **Billable Event**. Billable events allow **Real Time Data (RTD)** modules to signal that their system calculated that a billing event occurred. Billable events are trackable by analytics adapters as well as publishers to track and aggregate billing data. @@ -16,7 +17,7 @@ In order to emit events, **RTD** modules simply need to utilize the existing Eve At this time there are limited requirements about the contents of billable events. However, it should be expected that partners who choose to leverage billable events may have unique requirements or implementations that will be documented individually, including adding additional parameters to the events as they see fit. -**Event Payload Parameters** +### Event Payload Parameters There are two parameters that emitters of this event must supply. Other parameters may be supplied as desired by the application. @@ -28,28 +29,31 @@ There are two parameters that emitters of this event must supply. Other paramete For example, a RTD module could emit an event like this: +```javascript +events.emit(CONSTANTS.EVENTS.BILLABLE_EVENT, { + vendor: 'vendorA', + billingId: generateUUID(), + type: 'ad_request', + transactionId: transactionId, + auctionId: auctionId +}) ``` - events.emit(CONSTANTS.EVENTS.BILLABLE_EVENT, { - vendor: 'vendorA', - billingId: generateUUID(), - type: 'ad_request', - transactionId: transactionId, - auctionId: auctionId - }) It is expected that vendors will not emit duplicate events. ## Analytics Adapter Interface [Analytics Adapters](/dev-docs/integrate-with-the-prebid-analytics-api.html) just listen for the **BILLABLE_EVENT**. It is assumed that analytics adapters and their downstream reporting handles their own tracking of events any validation of the contract between vendors and publishers. -``` - switch (eventType) { - ... - case BILLABLE_EVENT: - ... + +```javascript +switch (eventType) { + // ... + case BILLABLE_EVENT: + // ... ``` ## Related Reading + - [pbjs.getEvents()](/dev-docs/publisher-api-reference/getEvents.html) - [Real Time Data modules](/dev-docs/add-rtd-submodule.html) - [Analytics Adapters](/dev-docs/integrate-with-the-prebid-analytics-api.html) diff --git a/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html b/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html index 9b5f087581..55d8d70b81 100644 --- a/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html +++ b/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html @@ -8,11 +8,11 @@ ---
    -
    -
    -

    {{ page.title }}

    -

    {{page.description }}

    -
    +
    +
    +

    {{ page.title }}

    +

    {{page.description }}

    +

    (Sorry, video code examples aren't available with your cookie privacy settings.)

    @@ -154,11 +154,11 @@

    Place this code in the page body.

    OneTrust.InsertHtml(exampleHTML, 'videoExample', null, {deleteSelectorContent: true}, 'C0003'); }) -
    +
    - + - + diff --git a/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html b/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html index 26fb0faa8d..936406e1f4 100644 --- a/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html +++ b/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html @@ -10,11 +10,11 @@
    -
    -
    -

    {{ page.title }}

    -

    {{page.description }}

    -
    +
    +
    +

    {{ page.title }}

    +

    {{page.description }}

    +

    (Sorry, video code examples aren't available with your cookie privacy settings.)

    @@ -151,7 +151,7 @@

    Place this code in the page body.

    `; -
    +
    -
    + - - + diff --git a/examples/video/long-form/long-form-video-with-freewheel.html b/examples/video/long-form/long-form-video-with-freewheel.html index 1917fd8d4f..5d9324187d 100644 --- a/examples/video/long-form/long-form-video-with-freewheel.html +++ b/examples/video/long-form/long-form-video-with-freewheel.html @@ -15,11 +15,11 @@ - - +