From 0fac2c4031393536aa727c84f96c3e07f25453a7 Mon Sep 17 00:00:00 2001 From: bretg Date: Wed, 12 Feb 2025 08:58:19 -0500 Subject: [PATCH 01/20] add title to bidResponseFilter (#5875) --- dev-docs/modules/bidResponseFilter.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dev-docs/modules/bidResponseFilter.md b/dev-docs/modules/bidResponseFilter.md index 654ba6d49b..85f753c272 100644 --- a/dev-docs/modules/bidResponseFilter.md +++ b/dev-docs/modules/bidResponseFilter.md @@ -10,6 +10,8 @@ sidebarType : 1 --- +# Bid Response Filter + ## Overview This optional module will trigger validation of each bid on the bid response. Validation of a particular bid is based on its `ortb2` values compared to the values in the `bid.meta`. The module configuration allows you to specify whether to enforce validation of particular fields or not. It also lets to specify if the bid should be rejected if selected field metadata value is not present. From 0fdab76090a5344cabac38332221febbc6abec63 Mon Sep 17 00:00:00 2001 From: bretg Date: Fri, 14 Feb 2025 17:30:22 -0500 Subject: [PATCH 02/20] PBS USGen skiprate (#5887) * PBS USGen skiprate * Update pbs-usgen.md --- .../developers/add-a-privacy-module-java.md | 39 +++++++++++++++++++ prebid-server/features/pbs-usgen.md | 20 ++++++++++ 2 files changed, 59 insertions(+) diff --git a/prebid-server/developers/add-a-privacy-module-java.md b/prebid-server/developers/add-a-privacy-module-java.md index f09bca96f9..e8f7c46f39 100644 --- a/prebid-server/developers/add-a-privacy-module-java.md +++ b/prebid-server/developers/add-a-privacy-module-java.md @@ -280,3 +280,42 @@ public class MyPrivacyModule implements PrivacyModule, Loggable { } } ``` + +## Privacy Trace Log and Analytics + +The privacy module interface logs information that analytics adapters may want to consume. For example, if you're an analytics provider +and want to check whether there was a skipRate config present, you can read the log for `skipped:true` and log however your analytics requires. + +For example: + +``` + { + "description": "Invocation of Activity Infrastructure.", + "activity": "transmitUfpd", + "activity_invocation_payload": { + "component_type": "BIDDER", + "component_name": "bidderA" + } + }, + { + "description": "Setting the default invocation result.", + "allow_by_default": true + }, + { + "description": "Processing rule.", + "rule_configuration": { + "and": [ + { + "privacy_module": "iab.usgeneral", + "skipped": true, + "result": "ABSTAIN" + } + ] + }, + "result": "ABSTAIN" + }, +``` + +## Further Reading + +- [Building a privacy module](/prebid-server/developers/add-a-privacy-module.html) diff --git a/prebid-server/features/pbs-usgen.md b/prebid-server/features/pbs-usgen.md index ea5f13a09d..273699d1d6 100644 --- a/prebid-server/features/pbs-usgen.md +++ b/prebid-server/features/pbs-usgen.md @@ -148,6 +148,26 @@ Prebid approach, but they want to process SID 8 with this custom module. } ``` +### Testing + +Before turning on the USGen module 100%, some host companies may want to partially enable it in order to gague impact. This can be done using the privacy module `skipRate` parameter. Here's an example account config: + +```json5 +{ + "privacy": { + "modules": [{ + "code": "iab.usgeneral", + "skipRate": 95, // only run on 5% of requests. Default is to run on 100%, i.e. skipRate 0 + "config": { + "skipSids": [9] + } + }] + } +} +``` + +In order to utilize this test though, you will need an analytics adapter that can read the Activity Infrastructure log. See [privacy module analytics](/prebid-server/developers/add-a-privacy-module-java.html#privacy-trace-log-and-analytics) for more detail. + ### Troubleshooting Additional information about the outcoming of privacy module processing can be obtained by setting `ext.prebid.trace: "basic"`. From 6968e21f5ade0543ce8aae84771a6cbf01f56da6 Mon Sep 17 00:00:00 2001 From: bretg Date: Fri, 14 Feb 2025 17:36:41 -0500 Subject: [PATCH 03/20] PBS lint (#5888) --- prebid-server/developers/add-a-privacy-module-java.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/prebid-server/developers/add-a-privacy-module-java.md b/prebid-server/developers/add-a-privacy-module-java.md index e8f7c46f39..768345f9fa 100644 --- a/prebid-server/developers/add-a-privacy-module-java.md +++ b/prebid-server/developers/add-a-privacy-module-java.md @@ -288,7 +288,7 @@ and want to check whether there was a skipRate config present, you can read the For example: -``` +```json { "description": "Invocation of Activity Infrastructure.", "activity": "transmitUfpd", @@ -318,4 +318,4 @@ For example: ## Further Reading -- [Building a privacy module](/prebid-server/developers/add-a-privacy-module.html) +* [Building a privacy module](/prebid-server/developers/add-a-privacy-module.html) From 9bf23c4cf99752b73a331e056614b687b9b5e031 Mon Sep 17 00:00:00 2001 From: Leandro Marty Date: Mon, 17 Feb 2025 13:48:23 +0100 Subject: [PATCH 04/20] pbs set to true (#5811) --- dev-docs/bidders/smoot.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/smoot.md b/dev-docs/bidders/smoot.md index f155453e48..61cbde4c2f 100644 --- a/dev-docs/bidders/smoot.md +++ b/dev-docs/bidders/smoot.md @@ -16,7 +16,7 @@ media_types: banner, video, native multiformat_supported: will-bid-on-one userIds: all pbjs: true -pbs: false +pbs: true pbs_app_supported: false safeframes_ok: true sidebarType: 1 From 3e65e5ac12116f6c589e7e5cce95bd84691044c6 Mon Sep 17 00:00:00 2001 From: jsnellbaker <31102355+jsnellbaker@users.noreply.github.com> Date: Mon, 17 Feb 2025 07:55:35 -0500 Subject: [PATCH 05/20] update source URL for ast.js in examples (#5886) --- _includes/astjs.html | 2 +- _includes/code/web-example.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/_includes/astjs.html b/_includes/astjs.html index 7cdc9c9d9e..f850b09ec6 100644 --- a/_includes/astjs.html +++ b/_includes/astjs.html @@ -3,4 +3,4 @@ type="text/plain" class="cmplazyload" data-cmp-purpose="c51" - data-cmp-src="https://acdn.adnxs.com/ast/ast.js"> + data-cmp-src="https://adsdk.microsoft.com/ast/ast.js"> diff --git a/_includes/code/web-example.html b/_includes/code/web-example.html index d2264b48e7..f552bf8fe7 100644 --- a/_includes/code/web-example.html +++ b/_includes/code/web-example.html @@ -64,7 +64,7 @@ <!-- required scripts --> {% assign scripts = include.scripts | split: "," %}{% for script in scripts %}{% if script == "pbjs" %}<script async src="https://cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script> {% elsif script == "gpt" %}<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script> - {% elsif script == "astjs" %}<script async src="https://acdn.adnxs.com/ast/ast.js"></script>{% else %}<!-- unknown script tag '{{ script }}' required -->{% endif %}{% else %}<script async src="//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script> + {% elsif script == "astjs" %}<script async src="https://adsdk.microsoft.com/ast/ast.js"></script>{% else %}<!-- unknown script tag '{{ script }}' required -->{% endif %}{% else %}<script async src="//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script> <script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>{% endfor %} </head> <body> From 9a92dcbf3359bb706f305e1f0d235d84ac6c596b Mon Sep 17 00:00:00 2001 From: ss-toshihide-tajima <89903823+ss-toshihide-tajima@users.noreply.github.com> Date: Wed, 19 Feb 2025 00:14:54 +0900 Subject: [PATCH 06/20] update AdGeneration Doc: delete novatiq (#5882) --- dev-docs/bidders/adgeneration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/adgeneration.md b/dev-docs/bidders/adgeneration.md index b998883a3f..23b49e1e67 100644 --- a/dev-docs/bidders/adgeneration.md +++ b/dev-docs/bidders/adgeneration.md @@ -5,7 +5,7 @@ description: Prebid Ad Generation Bidder Adaptor pbjs: true pbs: true biddercode: adgeneration -userIds: novatiq, criteo, id5Id +userIds: criteo, id5Id media_types: native sidebarType: 1 --- From 92c6cfff3f5f82a2f595dc257da75b49c0ebcc6c Mon Sep 17 00:00:00 2001 From: Piotr Jaworski <109736938+piotrj-rtbh@users.noreply.github.com> Date: Tue, 18 Feb 2025 16:18:58 +0100 Subject: [PATCH 07/20] RTB House: updated feature list (#5884) --- dev-docs/bidders/rtbhouse.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dev-docs/bidders/rtbhouse.md b/dev-docs/bidders/rtbhouse.md index a1abc7d5d7..2d85327c7d 100644 --- a/dev-docs/bidders/rtbhouse.md +++ b/dev-docs/bidders/rtbhouse.md @@ -4,18 +4,24 @@ title: RTBHouse description: Prebid RTB House Bidder Adapter gvl_id: 16 tcfeu_supported: true +usp_supported: false +coppa_supported: false +gpp_sids: none dsa_supported: true pbjs: true pbs: true biddercode: rtbhouse prebid_member: true floors_supported: true +fpd_supported: true safeframes_ok: true media_types: banner, native schain_supported: true userIds: id5Id, identityLink, pubProvidedId pbs_app_supported: true ortb_blocking_supported: partial +multiformat_supported: will-bid-on-any +privacy_sandbox: paapi, topics sidebarType: 1 --- From 89f92a5d950e83a162f81c54ce94152a010bf51f Mon Sep 17 00:00:00 2001 From: Viktor Dreiling <34981284+3link@users.noreply.github.com> Date: Tue, 18 Feb 2025 16:46:33 +0100 Subject: [PATCH 08/20] Add docs for zetassp and triplelift (#5885) --- dev-docs/modules/userid-submodules/liveintent.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dev-docs/modules/userid-submodules/liveintent.md b/dev-docs/modules/userid-submodules/liveintent.md index f9379cdb45..842cdb94fb 100644 --- a/dev-docs/modules/userid-submodules/liveintent.md +++ b/dev-docs/modules/userid-submodules/liveintent.md @@ -101,7 +101,7 @@ pbjs.setConfig({ ### Multiple user IDs -The attributes `uid2`, `medianet`, `magnite`, `bidswitch`, `pubmatic`, `openx`, `sovrn`, `index`, `thetradedesk`, `sharethrough`, `sonobi`, `vidazoo` and `fpid` are treated specially by LiveIntent's user ID sub-module. Each of these attributes will result in a separate ID returned by the sub-module. Note: `thetradedesk` will be exposed as `tdid` because of historical reasons. +The attributes `uid2`, `medianet`, `magnite`, `bidswitch`, `pubmatic`, `openx`, `sovrn`, `index`, `thetradedesk`, `sharethrough`, `sonobi`, `vidazoo`, `zetassp`, `triplelift` and `fpid` are treated specially by LiveIntent's user ID sub-module. Each of these attributes will result in a separate ID returned by the sub-module. Note: `thetradedesk` will be exposed as `tdid` because of historical reasons. #### Note @@ -124,9 +124,9 @@ For example, in case `uid2` is configured to be requested in addition to the `no } ``` -NOTE: `uid2` is exposed as part of `lipb` as well as separately as `uid2`. `medianet`, `magnite`, `bidswitch`, `pubmatic`, `openx`, `sovrn`, `index`, `thetradedesk` (as `tdid`), `sharethrough`, `vidazoo` and `fpid` behave the same way. +NOTE: `uid2` is exposed as part of `lipb` as well as separately as `uid2`. `medianet`, `magnite`, `bidswitch`, `pubmatic`, `openx`, `sovrn`, `index`, `thetradedesk` (as `tdid`), `sharethrough`, `vidazoo`, `zetassp`, `triplelift` and `fpid` behave the same way. -For the attributes `lipbid` (nonID), `uid2`, `medianet`, `magnite`, `bidswitch`, `pubmatic`, `openx`, `sovrn`, `index`, `thetradedesk` (`tdid`), `sharethrough`, `vidazoo` and `fpid` there is also support for their conversion into OpenRTB EIDS format. Please refer to [User ID Module](../userId.md) documentation for more information on conversion, and [Example of eids array generated by UserId Module](https://github.com/prebid/Prebid.js/blob/master/modules/userId/eids.md) for output format examples. +For the attributes `lipbid` (nonID), `uid2`, `medianet`, `magnite`, `bidswitch`, `pubmatic`, `openx`, `sovrn`, `index`, `thetradedesk` (`tdid`), `sharethrough`, `vidazoo`, `zetassp`, `triplelift` and `fpid` there is also support for their conversion into OpenRTB EIDS format. Please refer to [User ID Module](../userId.md) documentation for more information on conversion, and [Example of eids array generated by UserId Module](https://github.com/prebid/Prebid.js/blob/master/modules/userId/eids.md) for output format examples. ### FPID @@ -209,7 +209,7 @@ NOTE: For optimal performance, the LiveIntent ID sub-module should be called at | params.ajaxTimeout |Optional| Number |This configuration parameter defines the maximum duration of a call to the `IdentityResolution` endpoint. By default, 5000 milliseconds.|`5000`| | 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 and additional attributes.|`['my-id']`| -| params.requestedAttributesOverrides | Optional | Object | Object containing booleans used to override the default resolution. Attributes set to `true` will be added to the resolved list, while attributes set to `false` will be removed. Valid attributes are `nonId`, `uid2`, `medianet`, `magnite`, `bidswitch`, `pubmatic`, `openx`, `sovrn`, `index`, `thetradedesk` (`tdid`), `sharethrough`, `vidazoo`, `segments` and `fpid`. | `{'uid2': true}` | +| params.requestedAttributesOverrides | Optional | Object | Object containing booleans used to override the default resolution. Attributes set to `true` will be added to the resolved list, while attributes set to `false` will be removed. Valid attributes are `nonId`, `uid2`, `medianet`, `magnite`, `bidswitch`, `pubmatic`, `openx`, `sovrn`, `index`, `thetradedesk` (`tdid`), `sharethrough`, `vidazoo`, `zetassp`, `triplelift`, `segments` and `fpid`. | `{'uid2': true}` | | params.emailHash |Optional| String |The hashed email address of a user. We can accept the hashes, which use the following hashing algorithms: md5, sha1, sha2.|`1a79a4d60de6718e8e5b326e338ae533`| | params.ipv4 |Optional| String |The IPv4 address of a user. |`1.2.3.4`| | params.ipv6 |Optional| String |The IPv6 address of a user. |`2001:db8:3333:4444:5555:6666:7777:8888`| From 2eca481b3cbf7a9732ea5a1a2b55887fb479bff6 Mon Sep 17 00:00:00 2001 From: Olivier Date: Wed, 19 Feb 2025 09:26:44 +0100 Subject: [PATCH 09/20] Chore: fix bidder-data.csv generation (#5872) Thanks a lot - I'll checkout the two adapters and fix it directly --- dev-docs/bidder-data.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidder-data.csv b/dev-docs/bidder-data.csv index c660fb9750..89d8941325 100644 --- a/dev-docs/bidder-data.csv +++ b/dev-docs/bidder-data.csv @@ -4,5 +4,5 @@ search: exclude --- bidder-code,bidder-name,banner,video,native,schain,dchain,tcfeu,coppa,gpp,usp,safeframes,deals,client-adapter,server-adapter,user-ids,mobile-apps,floors,fpd,prebid-member,ortb-blocking,multiformat,aliasOf,adapterFilename {% assign bidder_pages = site.pages | where: "layout", -"bidder" %}{% for page in bidder_pages %}{{ page.biddercode }},{{ page.title }},{% unless page.media_types contains 'no-display' %}yes{% else %}no{% endunless %},{% if page.media_types contains 'video' %}yes{% else %}no{% endif %},{% if page.media_types contains 'native' %}yes{% else %}no{% endif %},{% if page.schain_supported == true %}yes{% elsif page.schain_supported == false %}no{% else %}check with bidder{% endif %},{% if page.dchain_supported == true %}yes{% elsif page.dchain_supported == false %}no{% else %}check with bidder{% endif %},{% if page.tcfeu_supported == true %}yes{% else %}no{% endif %},{% if page.coppa_supported == true %}yes{% elsif page.coppa_supported == false %}no{% else %}check with bidder{% endif %},{% if page.gpp_sids and page.gpp_sids != '' %}{{page.gpp_sids | split: ',' | join: ' '}}{% elsif page.gpp_supported == true and page.gpp_sids == nil %}some (check with bidder){% elsif page.gpp_supported == false and gpp_sids == nil %}None{% else %}check with bidder{% endif %},{% if page.usp_supported == true %}yes{% elsif page.usp_supported == false %}no{% else %}check with bidder{% 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 == false %}no{% elsif page.deals_supported == true %}yes{% else %}check with bidder{% 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 | split: ',' | join: ' '}}{% else %}none{% endif %},{% if page.pbs_app_supported == false %}no{% elsif page.pbs_app_supported == true %}yes{% else %}check with bidder{% endif %},{% if page.floors_supported == true %}yes{% elsif page.floors_supported == false %}no{% else %}check with bidder{% 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 %},{% if page.multiformat_supported %}{{page.multiformat_supported}}{% else %}check with bidder{% endif %},{{ page.aliasCode }},{% if page.filename %}{{ page.filename }}{% elsif page.aliasCode %}{{ page.aliasCode }}BidAdapter{% else %}{{ page.biddercode }}BidAdapter{% endif %} +"bidder" %}{% for page in bidder_pages %}{{ page.biddercode }},{{ page.title }},{% unless page.media_types contains 'no-display' %}yes{% else %}no{% endunless %},{% if page.media_types contains 'video' %}yes{% else %}no{% endif %},{% if page.media_types contains 'native' %}yes{% else %}no{% endif %},{% if page.schain_supported == true %}yes{% elsif page.schain_supported == false %}no{% else %}check with bidder{% endif %},{% if page.dchain_supported == true %}yes{% elsif page.dchain_supported == false %}no{% else %}check with bidder{% endif %},{% if page.tcfeu_supported == true %}yes{% else %}no{% endif %},{% if page.coppa_supported == true %}yes{% elsif page.coppa_supported == false %}no{% else %}check with bidder{% endif %},{% if page.gpp_sids and page.gpp_sids != '' %}{{page.gpp_sids | split: ',' | join: ' '}}{% elsif page.gpp_supported == true and page.gpp_sids == nil %}some (check with bidder){% elsif page.gpp_supported == false and gpp_sids == nil %}None{% else %}check with bidder{% endif %},{% if page.usp_supported == true %}yes{% elsif page.usp_supported == false %}no{% else %}check with bidder{% 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 == false %}no{% elsif page.deals_supported == true %}yes{% else %}check with bidder{% 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 | split: ',' | join: ' '}}{% else %}none{% endif %},{% if page.pbs_app_supported == false %}no{% elsif page.pbs_app_supported == true %}yes{% else %}check with bidder{% endif %},{% if page.floors_supported == true %}yes{% elsif page.floors_supported == false %}no{% else %}check with bidder{% 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 %},{% if page.multiformat_supported %}"{{ page.multiformat_supported }}"{% else %}check with bidder{% endif %},{{ page.aliasCode }},{% if page.filename %}{{ page.filename }}{% elsif page.aliasCode %}{{ page.aliasCode }}BidAdapter{% else %}{{ page.biddercode }}BidAdapter{% endif %} {% endfor %} From 883b9ed9caff92692cc652024e04f2f363c07e78 Mon Sep 17 00:00:00 2001 From: Muki Seiler Date: Wed, 19 Feb 2025 09:34:32 +0100 Subject: [PATCH 10/20] Remove invalid multiformat support declaration (#5894) Followup to #5872 --- dev-docs/bidders/caroda.md | 2 +- dev-docs/bidders/freedomadnetwork.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-docs/bidders/caroda.md b/dev-docs/bidders/caroda.md index 2b20b41273..9580de1bd6 100644 --- a/dev-docs/bidders/caroda.md +++ b/dev-docs/bidders/caroda.md @@ -14,7 +14,6 @@ schain_supported: true userIds: all gvl_id: 954 floors_supported: true -multiformat_supported: will-bid-on-any, will-bid-on-one fpd_supported: true safeframes_ok: true ortb_blocking_supported: false @@ -27,6 +26,7 @@ sidebarType: 1 The Caroda Bidding adapter requires setup before beginning. Please contact us on {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |---------------|----------------------------|-----------------------------------------------------------------|-------------------|-----------| | `ctok` | required | id unique to a customer | `"abcdef"` | `string` | diff --git a/dev-docs/bidders/freedomadnetwork.md b/dev-docs/bidders/freedomadnetwork.md index 7184bb0476..f1e82c370d 100644 --- a/dev-docs/bidders/freedomadnetwork.md +++ b/dev-docs/bidders/freedomadnetwork.md @@ -7,7 +7,6 @@ filename: fanAdapter gvl_id: none coppa_supported: true media_types: banner, native -multiformat_supported: will-bid-on-any, will-bid-on-one, will-not-bid safeframes_ok: false deals_supported: false floors_supported: false @@ -32,6 +31,7 @@ The Freedom Ad Network Adapter requires setup before beginning. Please contact u ### Bid Params {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |---------------|----------|-----------------------|-----------|-----------| | `placementId` | required | Placement ID | `'e6203f1e-bd6d-4f42-9895-d1a19cdb83c8'` | `string` | From 81869aec88b33f855b893c472a8f846947df7f9a Mon Sep 17 00:00:00 2001 From: Kai Miyamoto <157671757+hogekai@users.noreply.github.com> Date: Wed, 19 Feb 2025 21:57:25 +0900 Subject: [PATCH 11/20] Add in-renderer integration example (#5859) * Add in-renderer integration example * Fix markdown linting issue in in-renderer integration example * Remove markdown linting directive from in-renderer integration example * Update link format in in-renderer integration documentation * Fix URL formatting in in-renderer integration example * Update InRenderer.js documentation link to use HTML anchor tag * Update multi-format example * Fix example html title in multi format example * Enhance outstream example * Update dev-docs/examples/multi-format-example.md Co-authored-by: Muki Seiler * Update examples/video/outstream/pb-ve-outstream-no-server.html Co-authored-by: Muki Seiler * Fix broken tab layout in outstream no ad server example * Remove deprecated Prebid.js script from multi-format and in-renderer and out-stream examples --------- Co-authored-by: Muki Seiler --- dev-docs/examples/in-renderer-integration.md | 67 ++++++ dev-docs/examples/multi-format-example.md | 198 ++++++------------ .../outstream/pb-ve-outstream-no-server.html | 160 +++++--------- 3 files changed, 189 insertions(+), 236 deletions(-) create mode 100644 dev-docs/examples/in-renderer-integration.md diff --git a/dev-docs/examples/in-renderer-integration.md b/dev-docs/examples/in-renderer-integration.md new file mode 100644 index 0000000000..4810f8633a --- /dev/null +++ b/dev-docs/examples/in-renderer-integration.md @@ -0,0 +1,67 @@ +--- +layout: example +title: in-renderer Integration Example +description: in-renderer Integration (formerly known as “outstream”) Example + +sidebarType: 1 + +about: + - in-renderer Integration is one of the integration methods for Prebid Video + - In this example, to keep it simple, ad rendering is performed using `pbjs.renderAd` + - InRenderer.js, an open-source renderer optimized for in-renderer integration, is used as the renderer for in-renderer integration. For more information, see InRenderer.js documentation +--- + +## Example + +{% capture htmlCodePrebid %} +

in-renderer Integration Example

+ +
+{% endcapture %} + +{% capture jsCode %}var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; + +var adUnit = { + code: "ad-unit-1", + mediaTypes: { + video: { + context: "outstream", + playerSize: [640, 360], + mimes: ["video/mp4", "video/webm", "video/ogg"], + protocols: [2, 3, 5, 6, 7, 8], + api: [2], + } + }, + bids: [ + { + bidder: "michao", + params: { + placement: "inbanner", + site: 1, + test: true + }, + }, + ], + renderer: { + url: `https://cdn.jsdelivr.net/npm/in-renderer-js@1/dist/in-renderer.umd.min.js`, + render: (bid) => { + var inRenderer = new window.InRenderer(); + inRenderer.render("ad-unit-1", bid); + }, + }, +}; + +pbjs.que.push(function() { + pbjs.addAdUnits(adUnit); + pbjs.requestBids({ + timeout: 5000, + bidsBackHandler: function () { + const highestCpmBids = pbjs.getHighestCpmBids("ad-unit-1"); + pbjs.renderAd('ad-unit-1', highestCpmBids[0].adId); + }, + }); +}) +{% endcapture %} + +{% include code/web-example.html id="basic-prebid-example" html=htmlCodePrebid js=jsCode %} diff --git a/dev-docs/examples/multi-format-example.md b/dev-docs/examples/multi-format-example.md index 099211aa33..7bc75ad2e8 100644 --- a/dev-docs/examples/multi-format-example.md +++ b/dev-docs/examples/multi-format-example.md @@ -7,152 +7,84 @@ sidebarType: 1 about: - A multi-format ad unit allows you to receive any combination of banner, video, or native demand +- A multi-format ad unit has two methods - a simple setup with in-renderer integration that does not require complex configuration on the ad server side, and format switching on the ad server side - 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 +- In this example, to keep it simple, ad rendering is performed using `pbjs.renderAd` +- InRenderer.js, an open-source renderer optimized for in-renderer integration, is used as the renderer for in-renderer integration. For more information, see [InRenderer.js documentation on Github](https://github.com/hogekai/in-renderer-js) --- -## Basic Prebid.js Example +## Example -{% capture htmlCodePrebid %}

div-banner-native-1

-
-

No response

- -
- -

div-banner-native-2

-
-

No response

- -
+
{% endcapture %} -{% capture jsCode %}var PREBID_TIMEOUT = 1000; -var FAILSAFE_TIMEOUT = 3000; - -var googletag = googletag || {}; -googletag.cmd = googletag.cmd || []; - -var pbjs = pbjs || {}; +{% capture jsCode %}var pbjs = pbjs || {}; pbjs.que = pbjs.que || []; -function initAdserver() { - if (pbjs.initAdserverSet) return; - - googletag.cmd.push(function() { - pbjs.que.push(function() { - pbjs.setTargetingForGPTAsync(); - googletag.pubads().refresh(); - }); - }); - - pbjs.initAdserverSet = true; -} - -pbjs.que.push(function() { - var adUnits = [{ - code: 'div-banner-native-1', - mediaTypes: { - banner: { - sizes: [ - [300, 250] - ] - }, - native: { - type: 'image' - }, +var adUnit = { + code: "ad-unit-1", + mediaTypes: { + banner: { + sizes: [[300, 250]] + }, + video: { + context: "outstream", + playerSize: [320, 180], + mimes: ["video/mp4", "video/webm", "video/ogg"], + protocols: [2, 3, 5, 6, 7, 8], + api: [2], + }, + native: { + adTemplate: `
`, + ortb: { + assets: [ + { + id: 1, + required: 1, + img: { + type: 3, + w: 300, + h: 250, }, - bids: [{ - bidder: 'appnexus', - params: { - placementId: 13232392, - } - }] - }, - { - code: 'div-banner-native-2', - mediaTypes: { - banner: { - sizes: [ - [300, 250] - ] - }, - native: { - title: { - required: true - }, - image: { - required: true - }, - sponsoredBy: { - required: true - } - } - }, - bids: [{ - bidder: 'appnexus', - params: { - placementId: 13232392, - } - }] - } - ]; - - pbjs.setConfig({ - debug: true, - cache: { - url: false - }, - }); - - pbjs.addAdUnits(adUnits); - pbjs.requestBids({ - timeout: PREBID_TIMEOUT, - bidsBackHandler: function(bidResponses) { - initAdserver(); - } - }); -}); - -// in case PBJS doesn't load -setTimeout(initAdserver, FAILSAFE_TIMEOUT); + }, + ], + }, + }, + }, + bids: [ + { + bidder: "michao", + params: { + placement: "inbanner", + site: 1, + test: true + }, + }, + ], + renderer: { + url: `https://cdn.jsdelivr.net/npm/in-renderer-js@1/dist/in-renderer.umd.min.js`, + render: (bid) => { + var inRenderer = new window.InRenderer(); + inRenderer.render("ad-unit-1", bid); + }, + }, +}; -googletag.cmd.push(function() { - googletag - .defineSlot( - '/19968336/prebid_multiformat_test', [ - [300, 250], - [360, 360] - ], - 'div-banner-native-1' - ) - .addService(googletag.pubads()); - - googletag - .defineSlot( - '/19968336/prebid_multiformat_test', [ - [300, 250], - [360, 360] - ], - 'div-banner-native-2' - ) - .addService(googletag.pubads()); - - googletag.pubads().disableInitialLoad(); - googletag.pubads().enableSingleRequest(); - googletag.enableServices(); -}); +pbjs.que.push(function() { + pbjs.addAdUnits(adUnit); + pbjs.requestBids({ + timeout: 5000, + bidsBackHandler: function () { + const highestCpmBids = pbjs.getHighestCpmBids("ad-unit-1"); + pbjs.renderAd('ad-unit-1', highestCpmBids[0].adId); + }, + }); +}) {% endcapture %} {% include code/web-example.html id="basic-prebid-example" html=htmlCodePrebid js=jsCode %} diff --git a/examples/video/outstream/pb-ve-outstream-no-server.html b/examples/video/outstream/pb-ve-outstream-no-server.html index f33601f3d3..79dc2ed304 100644 --- a/examples/video/outstream/pb-ve-outstream-no-server.html +++ b/examples/video/outstream/pb-ve-outstream-no-server.html @@ -12,9 +12,8 @@

{{ page.title }}

{{page.description }}

-
+
-

Important: This example uses a test version of Prebid.js hosted @@ -24,106 +23,61 @@

{{ page.title }}

necessary bidder adapters are included.

+ +
+ {% capture htmlCodePrebid %} +

Out-stream Example

+ +
+ {% endcapture %} + + {% capture jsCode %}var pbjs = pbjs || {}; + pbjs.que = pbjs.que || []; + + var adUnit = { + code: "ad-unit-1", + mediaTypes: { + video: { + context: "outstream", + playerSize: [640, 360], + mimes: ["video/mp4", "video/webm", "video/ogg"], + protocols: [2, 3, 5, 6, 7, 8], + api: [2], + } + }, + bids: [ + { + bidder: "michao", + params: { + placement: "inbanner", + site: 1, + test: true + }, + }, + ], + renderer: { + url: `https://cdn.jsdelivr.net/npm/in-renderer-js@1/dist/in-renderer.umd.min.js`, + render: (bid) => { + var inRenderer = new window.InRenderer(); + inRenderer.render("ad-unit-1", bid); + }, + }, + }; + + pbjs.que.push(function() { + pbjs.addAdUnits(adUnit); + pbjs.requestBids({ + timeout: 5000, + bidsBackHandler: function () { + const highestCpmBids = pbjs.getHighestCpmBids("ad-unit-1"); + pbjs.renderAd('ad-unit-1', highestCpmBids[0].adId); + }, + }); + }) + {% endcapture %} + + {% include code/web-example.html id="basic-prebid-example" html=htmlCodePrebid js=jsCode %} +
-
-
-

- 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>
-      var pbjs = pbjs || {};
-      pbjs.que = pbjs.que || [];
-
-      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({
-              timeout: 1000,
-              bidsBackHandler: function(bids) {
-                  var highestCpmBids = pbjs.getHighestCpmBids('video1');
-                  pbjs.renderAd(document, highestCpmBids[0].adId);
-              }
-          });
-      });
-
-  </script>
-
-        
-
- -

Place this code in the page body.

-
- -
-  
-  <div id='video1'>
-    <p>Prebid Outstream Video Ad</p>
-  </div>
-          
-
- + \ No newline at end of file From b11cbd4bc817b699ea6c9fb5946ed82c5e84edb8 Mon Sep 17 00:00:00 2001 From: bretg Date: Thu, 20 Feb 2025 09:36:20 -0500 Subject: [PATCH 12/20] added storageAllowed disclaimer (#5898) * added storageAllowed disclaimer * lint * lint --- _includes/disclaimers/storageAllowed.md | 2 ++ dev-docs/bidders/adagio.md | 2 ++ dev-docs/bidders/amx.md | 4 +++- dev-docs/bidders/bitmedia.md | 2 ++ dev-docs/bidders/consumable.md | 2 ++ dev-docs/bidders/contxtful.md | 2 ++ dev-docs/bidders/equativ.md | 4 +++- dev-docs/bidders/impactify.md | 2 ++ dev-docs/bidders/ix-server.md | 8 ++++---- dev-docs/bidders/ix.md | 2 ++ dev-docs/bidders/kargo.md | 2 ++ dev-docs/bidders/mediaConsortium.md | 2 ++ dev-docs/bidders/nexx360.md | 3 ++- dev-docs/bidders/taboola.md | 2 ++ dev-docs/bidders/triplelift.md | 6 ++++-- dev-docs/bidders/visx.md | 6 ++++-- dev-docs/modules/userid-submodules/merkle.md | 2 +- prebid-mobile/pbm-api/android/pbm-targeting-android.md | 4 ++-- 18 files changed, 43 insertions(+), 14 deletions(-) create mode 100644 _includes/disclaimers/storageAllowed.md diff --git a/_includes/disclaimers/storageAllowed.md b/_includes/disclaimers/storageAllowed.md new file mode 100644 index 0000000000..ad0de11d01 --- /dev/null +++ b/_includes/disclaimers/storageAllowed.md @@ -0,0 +1,2 @@ +{: .alert.alert-info :} +Prebid note: please review with your legal counsel before enabling storageAllowed. Bidders utilizing browser storage may trigger the need for additional disclosures in your privacy policy and may imply that the bid adapter is performing an activity redundant with user ID systems like SharedID. See the ePrivacy Directive article 5(3) reference to 'comprehensive information'. diff --git a/dev-docs/bidders/adagio.md b/dev-docs/bidders/adagio.md index 1aa7b00cf4..87e44777e2 100644 --- a/dev-docs/bidders/adagio.md +++ b/dev-docs/bidders/adagio.md @@ -47,6 +47,8 @@ pbjs.setConfig({ The Adagio bid adapter uses browser local storage. Since Prebid.js 7.x, the access to it must be explicitly set. +{% include disclaimers/storageAllowed.md %} + ```js // https://docs.prebid.org/dev-docs/publisher-api-reference/bidderSettings.html pbjs.bidderSettings = { diff --git a/dev-docs/bidders/amx.md b/dev-docs/bidders/amx.md index b19d3bdce9..f2d59092ab 100644 --- a/dev-docs/bidders/amx.md +++ b/dev-docs/bidders/amx.md @@ -33,7 +33,9 @@ sidebarType: 1 ### Bidder Settings -The AMX RTB bid adapter uses local storage. Please add `storageAllowed` in your bidder settings: +The AMX RTB bid adapter uses local storage. Please add `storageAllowed` in your bidder settings. + +{% include disclaimers/storageAllowed.md %} ```js // https://docs.prebid.org/dev-docs/publisher-api-reference/bidderSettings.html diff --git a/dev-docs/bidders/bitmedia.md b/dev-docs/bidders/bitmedia.md index 24ed5e6cc3..dcc6c248da 100644 --- a/dev-docs/bidders/bitmedia.md +++ b/dev-docs/bidders/bitmedia.md @@ -93,6 +93,8 @@ The HTML file below can be used to test the integration of the Bitmedia Bid Adap ### Simple Test HTML +{% include disclaimers/storageAllowed.md %} + ```html