diff --git a/_data/sidebar.yml b/_data/sidebar.yml index a193c37130..98a4e60a74 100644 --- a/_data/sidebar.yml +++ b/_data/sidebar.yml @@ -399,6 +399,14 @@ sectionTitle: subgroup: 3 +- sbSecId: 1 + title: Renderer + link: /dev-docs/renderer.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 3 + - sbSecId: 1 title: Bidder Params link: /dev-docs/bidders.html diff --git a/_includes/mobile/rewarded-server-side-configuration.md b/_includes/mobile/rewarded-server-side-configuration.md new file mode 100644 index 0000000000..12ce47d281 --- /dev/null +++ b/_includes/mobile/rewarded-server-side-configuration.md @@ -0,0 +1,72 @@ +##### Server-side Rewarded Ad Unit Configuration + +The Rewarded Ad Unit assumes special behavior that should be configurable by the platform or publisher according to the application or ad experience guides. + +Configuration of rewarded ad unit can be done by defining the Prebid Server [passthrough extension](https://docs.prebid.org/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#request-passthrough) or by using a stored impression-level request on the server. + +Prebid SDK will search for a particular `rwdd` object in `$.seatbid.bid.ext.prebid.passthrough` of bid response to configure the behavior and rendering of the Rewarded Ad Unit. The following table describes the structure and usage purpose of `rwdd` configuration parameters. + +{: .table .table-bordered .table-striped } +| Attribute | Type | Description | Example | +|-----------|------|-------------|---------| +| `reward` | object
(optional) | Metadata provided by the publisher to describe the reward. |{
 "type": "SuperDollars",
 "count": 10
}
| +| `reward.type` | string | Type of the reward in the app's coins. | `"SuperDollars"` | +| `reward.count` | integer | Amount of coins. | `10` | +| `reward.ext` | object | For future extensions. | {
 "ext": {}
}
| +| `completion` | object
(optional) | Describes the condition when the SDK should send a signal to the app that the user has earned the reward. |{
 "video": {
  "endcard": {
   "time": 5
   }
  }
}
| +| `completion.banner` | object | Details for banner ad completion. |{
 "time": 5,
 "event": "custom_event_url"
}
| +| `completion.banner.time` | integer | Period of time the banner ad is on screen. | `5` | +| `completion.banner.event` | string | URL with custom schema sent by the creative to indicate that the user did earn a reward. | `"rwdd://userDidEarnReward"` | +| `completion.video` | object | Details for video ad completion. |{
 "endcard": {
  "time": 5
 }
}
| +| `completion.video.time` | integer | Period of time the video ad is on screen. | `10` | +| `completion.video.playbackevent` | string | The playback event stage in the video. | `"start"`, `"firstquartile"`, `"midpoint"`, `"thirdquartile"`, `"complete"` | +| `completion.video.endcard` | object | Properties for the end card. |{
 "time": 5
}
| +| `completion.video.endcard.time` | integer | Period of time the end card is on screen. | `5` | +| `completion.video.endcard.event` | string | URL with custom schema sent by the creative for end card. | `"rwdd://userDidEarnReward"` | +| `close` | object
(optional) | Describes the ad close behavior after the reward is earned. |{
 "postrewardtime": 3,
 "action": "autoclose"
}
| +| `close.postrewardtime` | integer | Time interval (seconds) after reward event when SDK should close interstitial. | `3` | +| `close.action` | string | Action SDK should make: `"autoclose"` (close interstitial) or `"closebutton"` (show close button) | `"autoclose"` | + + +An example of an impression-level stored request: + +```json +{ + "video": { + "h": 480, + "w": 320, + "mimes": ["video/mp4"], + "linearity": 1, + "placement": 2, + "playbackmethod": [2] + }, + "ext": { + "prebid": { + "passthrough": [ + { + "type": "prebidmobilesdk", + "rwdd": { + "reward": { + "type": "SuperDollars", + "count": 10 + }, + "completion": { + "video": { + "endcard": { + "time": 5 + } + } + }, + "close": { + "postrewardtime": 3, + "action": "autoclose" + } + } + } + ] + } + } +} +``` + +More details about the SDK behavior according to the `rwdd` configuration you can find in the [GitHub Proposal](https://github.com/prebid/prebid-mobile-ios/pull/1058). diff --git a/adops/gam-native.md b/adops/gam-native.md index ca76f3a1e0..e9e8b17610 100644 --- a/adops/gam-native.md +++ b/adops/gam-native.md @@ -71,9 +71,8 @@ If this creative is served, it will fire impression trackers on load. Clicking t The creative template HTML will depend on which of the three scenarios you're implementing. You can choose to manage the native template in one of these ways: - in GAM ([Managing the Native Template in GAM](#managing-the-native-template-in-gam) below) -- in the Prebid.js AdUnit - this is handled as a 3rd party HTML creative using the Prebud Universal Creative. -- in a separate JavaScript file - this is handled as a 3rd party HTML creative using the Prebud Univer -sal Creative. +- in the Prebid.js AdUnit - this is handled as a 3rd party HTML creative using the Prebid Universal Creative. +- in a separate JavaScript file - this is handled as a 3rd party HTML creative using the Prebid Universal Creative. {: .alert.alert-info :} For engineering instructions, see [Native Implementation Guide](/prebid/native-implementation.html). diff --git a/dev-docs/adunit-reference.md b/dev-docs/adunit-reference.md index 5a6967b77a..9f3c4af33b 100644 --- a/dev-docs/adunit-reference.md +++ b/dev-docs/adunit-reference.md @@ -27,64 +27,64 @@ This page describes the properties of the `adUnit` object. ## AdUnit -See the table below for the list of properties on the ad unit. For example ad units, see the [Examples](#adUnit-examples) below. +See the table below for the list of properties on the ad unit. For example ad units, see the [Examples](#adUnit-examples) below. {: .table .table-bordered .table-striped } -| Name | Scope | Type | Description | +| Name | Scope | Type | Description | |--------------+----------+---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `code` | Required | String | An identifier you create and assign to this ad unit. Generally this is set to the ad slot name or the div element ID. Used by [setTargetingForGPTAsync()](/dev-docs/publisher-api-reference/setTargetingForGPTAsync.html) to match which auction is for which ad slot. | -| `bids` | Optional | Array[Object] | Array of bid objects representing demand partners and associated parameters for a given ad unit. See [Bids](#adUnit.bids) below. | -| `mediaTypes` | Optional | Object | Defines one or more media types that can serve into the ad unit. For a list of properties, see [`adUnit.mediaTypes`](#adUnit.mediaTypes) below. | -| `labelAny` | Optional | Array[String] | Used for [conditional ads][conditionalAds]. Works with `sizeConfig` argument to [pbjs.setConfig][configureResponsive]. | -| `labelAll` | Optional | Array[String] | Used for [conditional ads][conditionalAds]. Works with `sizeConfig` argument to [pbjs.setConfig][configureResponsive]. | -| `ortb2Imp` | Optional | Object | ortb2Imp is used to signal OpenRTB Imp objects at the adUnit grain. Similar to the global ortb2 field used for [global first party data configuration](/dev-docs/publisher-api-reference/setConfig.html#setConfig-fpd), but specific to this adunit.| -| `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](#adunitvideo). | +| `code` | Required | String | An identifier you create and assign to this ad unit. Generally this is set to the ad slot name or the div element ID. Used by [setTargetingForGPTAsync()](/dev-docs/publisher-api-reference/setTargetingForGPTAsync.html) to match which auction is for which ad slot. | +| `bids` | Optional | Array[Object] | Array of bid objects representing demand partners and associated parameters for a given ad unit. See [Bids](#adUnit.bids) below. | +| `mediaTypes` | Optional | Object | Defines one or more media types that can serve into the ad unit. For a list of properties, see [`adUnit.mediaTypes`](#adUnit.mediaTypes) below. | +| `labelAny` | Optional | Array[String] | Used for [conditional ads][conditionalAds]. Works with `sizeConfig` argument to [pbjs.setConfig][configureResponsive]. | +| `labelAll` | Optional | Array[String] | Used for [conditional ads][conditionalAds]. Works with `sizeConfig` argument to [pbjs.setConfig][configureResponsive]. | +| `ortb2Imp` | Optional | Object | ortb2Imp is used to signal OpenRTB Imp objects at the adUnit grain. Similar to the global ortb2 field used for [global first party data configuration](/dev-docs/publisher-api-reference/setConfig.html#setConfig-fpd), but specific to this adunit.| +| `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](#adunitvideo). | | `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 -See the table below for the list of properties in the `bids` array of the ad unit. For example ad units, see the [Examples](#adUnit-examples) below. +See the table below for the list of properties in the `bids` array of the ad unit. For example ad units, see the [Examples](#adUnit-examples) below. Note that `bids` is optional only for [Prebid Server stored impressions](#stored-imp), and required in all other cases. {: .table .table-bordered .table-striped } -| Name | Scope | Type | Description | +| Name | Scope | Type | Description | |------------+----------+---------------+------------------------------------------------------------------------------------------------------------------------------------------| -| `bidder` | Optional | String | Unique code identifying the bidder. For bidder codes, see the [bidder param reference]({{site.baseurl}}/dev-docs/bidders.html). | -| `module` | Optional | String | Module code - for requesting bids from modules that are not bid adapters. See [Prebid Server stored impressions](#stored-imp). | -| `params` | Required | Object | Bid request parameters for a given bidder. For allowed params, see the [bidder param reference]({{site.baseurl}}/dev-docs/bidders.html). | -| `labelAny` | Optional | Array[String] | Used for [conditional ads][conditionalAds]. Works with `sizeConfig` argument to [pbjs.setConfig][configureResponsive]. | -| `labelAll` | Optional | Array[String] | Used for [conditional ads][conditionalAds]. Works with `sizeConfig` argument to [pbjs.setConfig][configureResponsive]. | -| `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. | +| `bidder` | Optional | String | Unique code identifying the bidder. For bidder codes, see the [bidder param reference]({{site.baseurl}}/dev-docs/bidders.html). | +| `module` | Optional | String | Module code - for requesting bids from modules that are not bid adapters. See [Prebid Server stored impressions](#stored-imp). | +| `params` | Required | Object | Bid request parameters for a given bidder. For allowed params, see the [bidder param reference]({{site.baseurl}}/dev-docs/bidders.html). | +| `labelAny` | Optional | Array[String] | Used for [conditional ads][conditionalAds]. Works with `sizeConfig` argument to [pbjs.setConfig][configureResponsive]. | +| `labelAll` | Optional | Array[String] | Used for [conditional ads][conditionalAds]. Works with `sizeConfig` argument to [pbjs.setConfig][configureResponsive]. | +| `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 -See the table below for the list of properties in the `mediaTypes` object of the ad unit. For example ad units showing the different media types, see the [Examples](#adUnit-examples) below. +See the table below for the list of properties in the `mediaTypes` object of the ad unit. For example ad units showing the different media types, see the [Examples](#adUnit-examples) below. {: .table .table-bordered .table-striped } -| Name | Scope | Type | Description | +| Name | Scope | Type | Description | |---------------------------------------+--------------------------------------------------------------------------+--------+------------------------------------------------------------------------------------------------------------------| -| [`banner`](#adUnit.mediaTypes.banner) | At least one of the `banner`, `native`, or `video` objects are required. | Object | Defines properties of a banner ad. For examples, see [`adUnit.mediaTypes.banner`](#adUnit.mediaTypes.banner). | -| [`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). | +| [`banner`](#adUnit.mediaTypes.banner) | At least one of the `banner`, `native`, or `video` objects are required. | Object | Defines properties of a banner ad. For examples, see [`adUnit.mediaTypes.banner`](#adUnit.mediaTypes.banner). | +| [`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 {: .table .table-bordered .table-striped } -| Name | Scope | Type | Description | +| Name | Scope | Type | Description | |---------+----------+---------------------------------------+-----------------------------------------------------------------------------------------| -| `sizes` | Required | Array[Number] or Array[Array[Number]] | All sizes this ad unit can accept. Examples: `[400, 600]`, `[[300, 250], [300, 600]]`. Prebid recommends that the sizes auctioned by Prebid should be the same auctioned by AdX and GAM OpenBidding, which means AdUnit sizes should match the GPT sizes. | -| `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. | +| `sizes` | Required | Array[Number] or Array[Array[Number]] | All sizes this ad unit can accept. Examples: `[400, 600]`, `[[300, 250], [300, 600]]`. Prebid recommends that the sizes auctioned by Prebid should be the same auctioned by AdX and GAM OpenBidding, which means AdUnit sizes should match the GPT sizes. | +| `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. | @@ -99,46 +99,46 @@ See [Prebid Native Implementation](/prebid/native-implementation.html) for detai #### adUnit.mediaTypes.video {: .table .table-bordered .table-striped } -| Name | Scope | Type | Description | +| Name | Scope | Type | Description | |------------------+-------------+------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `pos` | Optional | Integer | Ad position on screen, see [OpenRTB 2.5 spec][openRTB]. OpenRTB page position value: 0=unknown, 1=above-the-fold, 3=below-the-fold, 4=header, 5=footer, 6=sidebar, 7=full-screen | -| `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]**. | -| `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]. | -| `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]. | -| `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. +| `pos` | Optional | Integer | Ad position on screen, see [OpenRTB 2.5 spec][openRTB]. OpenRTB page position value: 0=unknown, 1=above-the-fold, 3=below-the-fold, 4=header, 5=footer, 6=sidebar, 7=full-screen | +| `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]**. | +| `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]. | +| `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]. | +| `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. {: .table .table-bordered .table-striped } -| Name | Scope | Type | Description | +| Name | Scope | Type | Description | |------------------+-------------+------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `adPodDurationSec` | Required | Number | The length of the adpod in seconds. Example: `adPodDurationSec = 120` | -| `durationRangeSec` | Required | Array[Number] | An array of numbers represents a list of the potential/accepted duration values that the creatives can be in the adpod block. Example: `durationRangeSec = [30, 60, 90]` | -| `requireExactDuration` | Optional | Boolean | Whether the returned creatives running time must match the value of `adPodDurationSec`. Example: `requireExactDuration = true` | -| `tvSeriesName` | Optional | String | The name of the television series video the adpod will appear in. Example: `tvSeriesName = 'Once Upon A Time'` | -| `tvEpisodeName` | Optional | String | The name of the episode of the television series video the adpod will appear in. Example: `tvEpisodeName = 'Pilot'` | -| `tvSeasonNumber` | Optional | Number | A number representing the season number of the television series video the adpod will appear in. Example: `tvSeasonNumber = 1` | -| `tvEpisodeNumber` | Optional | Number | A number representing the episode number of the television series video the adpod will appear in. Example: `tvEpisodeNumber = 1` | -| `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'` | +| `adPodDurationSec` | Required | Number | The length of the adpod in seconds. Example: `adPodDurationSec = 120` | +| `durationRangeSec` | Required | Array[Number] | An array of numbers represents a list of the potential/accepted duration values that the creatives can be in the adpod block. Example: `durationRangeSec = [30, 60, 90]` | +| `requireExactDuration` | Optional | Boolean | Whether the returned creatives running time must match the value of `adPodDurationSec`. Example: `requireExactDuration = true` | +| `tvSeriesName` | Optional | String | The name of the television series video the adpod will appear in. Example: `tvSeriesName = 'Once Upon A Time'` | +| `tvEpisodeName` | Optional | String | The name of the episode of the television series video the adpod will appear in. Example: `tvEpisodeName = 'Pilot'` | +| `tvSeasonNumber` | Optional | Number | A number representing the season number of the television series video the adpod will appear in. Example: `tvSeasonNumber = 1` | +| `tvEpisodeNumber` | Optional | Number | A number representing the episode number of the television series video the adpod will appear in. Example: `tvEpisodeNumber = 1` | +| `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'` | @@ -152,9 +152,9 @@ See the table below for the list of properties in the `video` object of the ad u When using the Video Module, the mediaTypes.video properties get filled out automatically. Any values already set by the Publisher will not be replaced by the Video Module. {: .table .table-bordered .table-striped } -| Field | Scope | Type | Description | +| Field | Scope | Type | Description | |----------+--------------------------------------------------------------+--------+--------------------------------------------------------------------------------------------------------------------| -| `divId` | required | string | Unique identifier of the player provider, used to specify which player should be used to render the ad. Equivalent to the HTML Div Id of the player. | +| `divId` | required | string | Unique identifier of the player provider, used to specify which player should be used to render the ad. Equivalent to the HTML Div Id of the player. | | `adServer` | optional | object | Configuration for ad server integration. Supersedes `video.adServer` configurations defined in the Prebid Config. | | `adServer.vendorCode` | required if `adServer` is defined | string | The identifier of the AdServer vendor (i.e. gam, etc). | | `adServer.baseAdTagUrl` | required if `adServer.params` is not defined | string | Your AdServer Ad Tag. The targeting params of the winning bid will be appended. | @@ -163,7 +163,7 @@ When using the Video Module, the mediaTypes.video properties get filled out auto ## Examples * [Banner](#adUnit-banner-example) -* [Video](#adUnit-video-example) +* [Video](#adUnit-video-example) * [With the Video Module](#adUnit-video-module-example) * [Instream Sound-On](#adUnit-video-example-instream) * [Accompanying Content](#adUnit-video-example-accompanying) @@ -178,24 +178,24 @@ When using the Video Module, the mediaTypes.video properties get filled out auto ### 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). +For an example of a banner ad unit, see below. For more detailed instructions, see [Getting Started]({{site.baseurl}}/dev-docs/getting-started.html). ```javascript pbjs.addAdUnits({ - code: slot.code, - mediaTypes: { - banner: { - sizes: [[300, 250]] - } + code: slot.code, + mediaTypes: { + banner: { + sizes: [[300, 250]], }, - bids: [ - { - bidder: 'appnexus', - params: { - placementId: 13144370 - } - } - ] + }, + bids: [ + { + bidder: "appnexus", + params: { + placementId: 13144370, + }, + }, + ], }); ``` @@ -211,23 +211,25 @@ For an example of a video ad unit linked to the Video Module, see below. For mor ```javascript pbjs.addAdUnits({ - code: slot.code, - mediaTypes: { - video: {}, + code: slot.code, + mediaTypes: { + video: {}, + }, + video: { + divId: "playerDiv", + adServer: { + vendorCode: "gam", // constant variable is GAM_VENDOR - see vendorCodes.js in the video library + baseAdTagUrl: "https://pubads.g.doubleclick.net/gampad/ads?iu=/12345/", }, - video: { - divId: 'playerDiv', - adServer: { - vendorCode: 'gam', // constant variable is GAM_VENDOR - see vendorCodes.js in the video library - baseAdTagUrl: 'https://pubads.g.doubleclick.net/gampad/ads?iu=/12345/' - } + }, + bids: [ + { + bidder: "appnexus", + params: { + placementId: 13232361, + }, }, - bids: [{ - bidder: 'appnexus', - params: { - placementId: 13232361 - } - }] + ], }); ``` @@ -239,24 +241,26 @@ For an example of an instream video ad unit that you handle on your own, see bel ```javascript pbjs.addAdUnits({ - code: slot.code, - mediaTypes: { - video: { - context: 'instream', - plcmt: 1, - playerSize: [640, 480], - mimes: ['video/mp4'], - protocols: [1, 2, 3, 4, 5, 6, 7, 8], - playbackmethod: [5], - skip: 1 - }, + code: slot.code, + mediaTypes: { + video: { + context: "instream", + plcmt: 1, + playerSize: [640, 480], + mimes: ["video/mp4"], + protocols: [1, 2, 3, 4, 5, 6, 7, 8], + playbackmethod: [5], + skip: 1, }, - bids: [{ - bidder: 'appnexus', - params: { - placementId: 13232361 - } - }] + }, + bids: [ + { + bidder: "appnexus", + params: { + placementId: 13232361, + }, + }, + ], }); ``` @@ -268,24 +272,26 @@ The IAB calls this scenario "Accompanying Content". Previously, this might have ```javascript pbjs.addAdUnits({ - code: slot.code, - mediaTypes: { - video: { - context: 'instream', - plcmt: 2, - playerSize: [640, 480], - mimes: ['video/mp4'], - protocols: [1, 2, 3, 4, 5, 6, 7, 8], - playbackmethod: [6], - skip: 1 - }, + code: slot.code, + mediaTypes: { + video: { + context: "instream", + plcmt: 2, + playerSize: [640, 480], + mimes: ["video/mp4"], + protocols: [1, 2, 3, 4, 5, 6, 7, 8], + playbackmethod: [6], + skip: 1, }, - bids: [{ - bidder: 'appnexus', - params: { - placementId: 13232361 - } - }] + }, + bids: [ + { + bidder: "appnexus", + params: { + placementId: 13232361, + }, + }, + ], }); ``` @@ -295,7 +301,7 @@ pbjs.addAdUnits({ This is the scenario formerly known as Outstream. As of April 2023, the IAB now calls this scenario "No Content/Standalone". -For an example of an outstream video ad unit that you handle on your own, see below. For more detailed instructions, see [Show Outstream Video Ads]({{site.baseurl}}/dev-docs/show-outstream-video-ads.html). +For an example of an outstream video ad unit that you handle on your own, see below. For more detailed instructions, see [Show Outstream Video Ads]({{site.baseurl}}/dev-docs/show-outstream-video-ads.html). ```javascript pbjs.addAdUnits({ @@ -357,7 +363,7 @@ pbjs.addAdUnits({ #### Adpod (Long-Form) -For an example of an adpod video ad unit that you handle on your own, see below. For more detailed instructions, see [Show Long-Form Video Ads]({{site.baseurl}}/prebid-video/video-long-form.html). +For an example of an adpod video ad unit that you handle on your own, see below. For more detailed instructions, see [Show Long-Form Video Ads]({{site.baseurl}}/prebid-video/video-long-form.html). ```javascript var longFormatAdUnit = { @@ -391,57 +397,63 @@ var longFormatAdUnit = { ### 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). +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). ```javascript pbjs.addAdUnits({ - code: slot.code, - mediaTypes: { - native: { - 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 - } - }] - } - } + code: slot.code, + mediaTypes: { + native: { + 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: [ - { - bidder: 'appnexus', - params: { - placementId: 13232354 - } - } - ] + }, + bids: [ + { + bidder: "appnexus", + params: { + placementId: 13232354, + }, + }, + ], }); ``` @@ -449,94 +461,97 @@ 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). +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). ```javascript - -pbjs.addAdUnits([{ - code: 'div-banner-native', - mediaTypes: { - banner: { - sizes: [ - [300, 250] - ] - }, - native: { +pbjs.addAdUnits([ + { + code: "div-banner-native", + mediaTypes: { + banner: { + sizes: [[300, 250]], + }, + native: { ortb: { - ver: "1.2", - assets: [{ - required: 1, - img: { + ver: "1.2", + assets: [ + { + required: 1, + img: { type: 1, - hmin: 50 - } - }] - } + hmin: 50, + }, }, + ], }, - bids: [{ - bidder: 'appnexus', - params: { - placementId: 13232392, - } - }] + }, }, - - { - code: 'div-banner-outstream', - mediaTypes: { - banner: { - sizes: [ - [300, 250] - ] - }, - video: { - context: 'outstream', - playerSize: [300, 250] - }, + bids: [ + { + bidder: "appnexus", + params: { + placementId: 13232392, }, - bids: [{ - bidder: 'appnexus', - params: { - placementId: 13232392, - } - }, ] + }, + ], + }, + + { + code: "div-banner-outstream", + mediaTypes: { + banner: { + sizes: [[300, 250]], + }, + video: { + context: "outstream", + playerSize: [300, 250], + }, }, + bids: [ + { + bidder: "appnexus", + params: { + placementId: 13232392, + }, + }, + ], + }, - { - code: 'div-banner-outstream-native', - mediaTypes: { - banner: { - sizes: [ - [300, 250] - ] - }, - native: { + { + code: "div-banner-outstream-native", + mediaTypes: { + banner: { + sizes: [[300, 250]], + }, + native: { ortb: { - ver: "1.2", - assets: [{ - required: 1, - img: { + ver: "1.2", + assets: [ + { + required: 1, + img: { type: 1, - hmin: 50 - } - }] - } - }, - video: { - context: 'outstream', - playerSize: [300, 250] + hmin: 50, + }, }, + ], }, - bids: [{ - bidder: 'appnexus', - params: { - placementId: 13232392, - } - }, ] - } + }, + video: { + context: "outstream", + playerSize: [300, 250], + }, + }, + bids: [ + { + bidder: "appnexus", + params: { + placementId: 13232392, + }, + }, + ], + }, ]); - ``` @@ -605,23 +620,21 @@ Example of an adunit-specific block of first party data and a static floor: ```javascript pbjs.addAdUnits({ - code: "test-div", - mediaTypes: { - banner: { - sizes: [[300,250]] - } + code: "test-div", + mediaTypes: { + banner: { + sizes: [[300, 250]], }, - ortb2Imp: { - bidfloor: 1.00, - bidfloorcur: "EUR", - ext: { - data: { - pbadslot: "homepage-top-rect", - adUnitSpecificContextAttribute: "123" - } - } + }, + ortb2Imp: { + ext: { + data: { + pbadslot: "homepage-top-rect", + adUnitSpecificContextAttribute: "123", + }, }, - // ... + }, + // ... }); ``` @@ -638,16 +651,16 @@ Example of an adunit-specific interstitial signal: ```javascript pbjs.addAdUnits({ - code: "test-div", - mediaTypes: { - banner: { - sizes: [[300,250]] - } - }, - ortb2Imp: { - instl:1 + code: "test-div", + mediaTypes: { + banner: { + sizes: [[300, 250]], }, - // ... + }, + ortb2Imp: { + instl: 1, + }, + // ... }); ``` @@ -661,60 +674,60 @@ When using [PBS stored impressions](/dev-docs/modules/prebidServer.html#stored-i ```javascript pbjs.addAdUnits({ - code: "test-div", - ortb2Imp: { - ext: { - prebid: { - storedrequest: { - id: 'stored-request-id' - } - } - } - } -}) + code: "test-div", + ortb2Imp: { + ext: { + prebid: { + storedrequest: { + id: "stored-request-id", + }, + }, + }, + }, +}); ``` To use stored impressions together with client-side bidders - or stored impressions from other instances of Prebid Server - use `bids[].module`: ```javascript pbjs.addAdUnits({ - code: "test-div", - bids: [ - { - module: "pbsBidAdapter", - params: { - configName: "server-1" + code: "test-div", + bids: [ + { + module: "pbsBidAdapter", + params: { + configName: "server-1", + }, + ortb2Imp: { + ext: { + prebid: { + storedrequest: { + id: "stored-request-server-1", }, - ortb2Imp: { - ext: { - prebid: { - storedrequest: { - id: 'stored-request-server-1' - } - } - } - } + }, }, - { - module: "pbsBidAdapter", - params: { - configName: "server-2" + }, + }, + { + module: "pbsBidAdapter", + params: { + configName: "server-2", + }, + ortb2Imp: { + ext: { + prebid: { + storedrequest: { + id: "stored-request-server-2", }, - ortb2Imp: { - ext: { - prebid: { - storedrequest: { - id: 'stored-request-server-2' - } - } - } - } + }, }, - { - bidder: 'client-bidder', - // ... - } - ] + }, + }, + { + bidder: "client-bidder", + // ... + }, + ], }); ``` diff --git a/dev-docs/analytics/uniquest.md b/dev-docs/analytics/uniquest.md index c25bdb1c0f..e3cc26ed90 100644 --- a/dev-docs/analytics/uniquest.md +++ b/dev-docs/analytics/uniquest.md @@ -3,7 +3,6 @@ layout: analytics title: UNIQUEST description: UNIQUEST Prebid Analytics Adapter modulecode: uniquest -enable_download: false --- #### Analytics Options diff --git a/dev-docs/bidder-adaptor.md b/dev-docs/bidder-adaptor.md index f3c6e5ebcd..bfa42399c3 100644 --- a/dev-docs/bidder-adaptor.md +++ b/dev-docs/bidder-adaptor.md @@ -1362,6 +1362,12 @@ Once the inspection passes, the code will be merged and included with the next r The Prebid.org [download page](/download.html) will automatically be updated with your adapter once everything's been merged. +## Optional Code Update Notification + +The core Prebid engineering team sometimes makes changes to bid adapter files for various reasons: general refactoring, internal API changes, bug fixes, etc. If you want to receive an email alert about any changes made to your codebase, you can update the [codepath notification file](https://github.com/prebid/Prebid.js/blob/master/.github/workflows/scripts/codepath-notification). Please read the instructions in the file. In many cases, the regex will just be your biddercode, but if you have a short biddercode, you might need to be more precise or you'll get false notifications. + +Likewise, your bidder documentation can receive alerts by updating the [docs codepath notification file](https://github.com/prebid/prebid.github.io/blob/master/.github/workflows/scripts/codepath-notification). + ## Further Reading * [Prebid.js Repo - Bidder Adapter Sources](https://github.com/prebid/Prebid.js/tree/master/modules) diff --git a/dev-docs/bidders/adgrid.md b/dev-docs/bidders/adgrid.md index 014b75d921..ac72fc9cfb 100644 --- a/dev-docs/bidders/adgrid.md +++ b/dev-docs/bidders/adgrid.md @@ -34,6 +34,7 @@ The AdGrid Bidding Adapter requires setup and approval before beginning. Please | Name | Scope | Description | Example | Type | |------------|----------|--------------|---------|-----------| | `domainId` | required | Publisher Id | `30164` | `integer` | +| `placement`| required | Placement | `test` | `string` | ### Test Parameters @@ -50,7 +51,8 @@ var adUnits = [ bids: [{ bidder: 'adgrid', params: { - domainId: 12345 + domainId: 12345, + placement: 'leaderboard' } }] }, @@ -64,7 +66,8 @@ var adUnits = [ bids: [{ bidder: 'adgrid', params: { - domainId: 67890 + domainId: 67890, + placement: 'adhesion' } }] }, diff --git a/dev-docs/bidders/consumable-server.md b/dev-docs/bidders/consumable-server.md index c9663b2432..cca8613e45 100644 --- a/dev-docs/bidders/consumable-server.md +++ b/dev-docs/bidders/consumable-server.md @@ -66,7 +66,7 @@ Publishers can use Prebid Server in any of the following ways with Consumable. C ### Supported media types -The following table lists the media types that Consumable supports. For information about the the Time-To-Live (TTL) for each media type, see [How Consumable counts impressions](https://kb.Consumableexchange.com/publishers/billing/how_Consumable_counts_impressions.htm) in our Knowledge Base. +The following table lists the media types that Consumable supports. {: .table .table-bordered .table-striped } @@ -156,7 +156,7 @@ To add Consumable as a bidder: ### Bid request parameters -For a list of the OpenRTB fields that Consumable supports in bid requests, see [List of supported OpenRTB bid request fields for sellers](https://kb.Consumableexchange.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. +For a list of the OpenRTB fields that Consumable supports in bid requests, see [List of supported OpenRTB bid request fields for sellers](https://iabtechlab.com/wp-content/uploads/2022/04/OpenRTB-2-6_FINAL.pdf). The following are the required fields for the various supported media types. ### Site (Banner, Video, Audio) You must include these parameters at the bidder level. diff --git a/dev-docs/bidders/epsilon.md b/dev-docs/bidders/epsilon.md index 1970221e85..aca745d176 100644 --- a/dev-docs/bidders/epsilon.md +++ b/dev-docs/bidders/epsilon.md @@ -5,7 +5,7 @@ description: Epsilon Prebid Bidder Adaptor (formerly Conversant) pbjs: true pbs: true biddercode: conversant -media_types: banner, video, audio +media_types: banner, video, audio, native tcfeu_supported: true userIds: criteo, id5Id, identityLink, liveIntentId, parrableId, pubCommonId, unifiedId, publinkId prebid_member: true diff --git a/dev-docs/bidders/equativ.md b/dev-docs/bidders/equativ.md index b7d550a2c1..c126fe867a 100644 --- a/dev-docs/bidders/equativ.md +++ b/dev-docs/bidders/equativ.md @@ -8,19 +8,19 @@ dsa_supported: true gvl_id: 45 usp_supported: true coppa_supported: true -gpp_sids: tcfeu, usp +gpp_sids: tcfca, tcfeu, usnat, usstate_all, usp schain_supported: true dchain_support: false userIds: all -media_types: banner +media_types: banner, video, native safeframes_ok: true deals_supported: false floors_supported: true -fpd_supported: false +fpd_supported: true pbjs: true -pbs: true +pbs: false prebid_member: false -multiformat_supported: will-bid-on-one +multiformat_supported: will-bid-on-any ortb_blocking_supported: true privacy_sandbox: no sidebarType: 1 @@ -348,6 +348,10 @@ pbjs.que.push(function () { {: .alert.alert-warning :} **Note**: If a demand partner of Equativ is not capable of reading an audio object, the audio object will be converted into a video object with audio mime types. There is, as of this writing, no built-in/default support for serving audio assets in Prebid, so publishers that wish to do so will need to ensure their ad server setups can process whatever hand-offs are necessary. +### First Party Data + +Publishers should use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html). + ### Additional Resources Information about how Equativ supports the oRTB specification, along with additional examples, can be found [on our OpenRTB API support site](https://help.smartadserver.com/s/article/OpenRTB-API-for-suppliers-Bid-request-specification-Part-1). diff --git a/dev-docs/bidders/illumin.md b/dev-docs/bidders/illumin.md index d8d7bfe70b..fc00073828 100644 --- a/dev-docs/bidders/illumin.md +++ b/dev-docs/bidders/illumin.md @@ -19,6 +19,7 @@ pbs_app_supported: false fpd_supported: false ortb_blocking_supported: false multiformat_supported: will-bid-on-one +enable_download: false pbjs: true sidebarType: 1 --- diff --git a/dev-docs/bidders/loglylift.md b/dev-docs/bidders/loglylift.md deleted file mode 100644 index f15ce42f93..0000000000 --- a/dev-docs/bidders/loglylift.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -layout: bidder -title: LOGLY lift -description: Prebid LOGLY lift Bidder Adaptor -biddercode: loglylift -tcfeu_supported: false -usp_supported: false -coppa_supported: false -schain_supported: false -dchain_supported: false -media_types: banner, native -safeframes_ok: false -deals_supported: false -floors_supported: false -fpd_supported: false -pbjs: true -pbs: false -prebid_member: false -sidebarType: 1 ---- - - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|--------|----------|----------------------------------------------------------|----------|-----------| -| `adspotId` | required | adspot id managed by LOGLY lift | `4302078` | `integer` | diff --git a/dev-docs/bidders/madsense.md b/dev-docs/bidders/madsense.md index cacbcbbd09..c042e96032 100644 --- a/dev-docs/bidders/madsense.md +++ b/dev-docs/bidders/madsense.md @@ -3,7 +3,7 @@ layout: bidder title: MadSense description: Prebid MadSense Bidder Adapter pbjs: true -pbs: false +pbs: true biddercode: madsense tcfeu_supported: false gdpr_supported: true diff --git a/dev-docs/bidders/newspassid.md b/dev-docs/bidders/newspassid.md index 1cddd2f8a3..e09b22a326 100644 --- a/dev-docs/bidders/newspassid.md +++ b/dev-docs/bidders/newspassid.md @@ -1,22 +1,18 @@ --- -Module Name: NewspassId Bidder Adapter -Module Type: Bidder Adapter -Maintainer: techsupport@newspassid.com layout: bidder -title: Newspass ID -description: LMC Newspass ID Prebid JS Bidder Adapter +title: NewsPassID +description: Local Media Consortium's NewsPassID Prebid JS Bidder Adapter biddercode: newspassid -tcfeu_supported: false -gvl_id: none +media_types: banner, video, native +gvl_id: 1317 +tcfeu_supported: true usp_supported: true -coppa_supported: false +coppa_supported: true schain_supported: true -dchain_supported: false -userIds: criteo, id5Id, tdid, identityLink, liveIntentId, parrableId, pubCommonId, lotamePanoramaId, sharedId, fabrickId -media_types: banner +userIds: all safeframes_ok: true -deals_supported: true -floors_supported: false +deals_supported: false +floors_supported: true fpd_supported: false pbjs: true pbs: false @@ -27,10 +23,9 @@ sidebarType: 1 ### Description -LMC Newspass ID Prebid JS Bidder Adapter that connects to the NewspassId demand source(s). +LMC NewsPassID Prebid JS Bidder Adapter that connects to the NewsPassID demand source(s). Learn more about the NewsPassID initiative [here](https://www.newspassid.com). -The Newspass bid adapter supports Banner mediaTypes ONLY. -This is intended for USA audiences only, and does not support GDPR +This requires setup on the NewsPassID provider's end before beginning. Don't hesitate to reach out at . ### Bid Params @@ -38,37 +33,46 @@ This is intended for USA audiences only, and does not support GDPR | Name | Scope | Description | Example | Type | |-----------|----------|---------------------------|------------|----------| -| `siteId` | required | The site ID. | `"NPID0000001"` | `string` | -| `publisherId` | required | The publisher ID. | `"4204204201"` | `string` | -| `placementId` | required | The placement ID. | `"0420420421"` | `string` | -| `customData` | optional | publisher key-values used for targeting | `[{"settings":{},"targeting":{"key1": "value1", "key2": "value2"}}],` | `array` | +| `publisherId` | required | The publisher ID in the NewsPassID backend. | `"test-publisher"` | `string` | +| `placementId` | required | The placement ID in the NewsPassID backend. | `"test-group1"` | `string` | -### Test Parameters +### Integration -A test ad unit that will consistently return test creatives: +#### Step 1: Add your NewsPassID accountId to the Prebid.js bidder config before users syncs and initial ads are requested (Recommended) ```javascript -//Banner adUnit - -const adUnits = [{ - code: 'id-of-your-banner-div', - mediaTypes: { - banner: { - sizes: [[300, 250], [300,600]] - } - }, - bids: [{ - bidder: 'newspassid', - params: { - publisherId: 'NEWSPASS0001', /* an ID to identify the publisher account - required */ - siteId: '4204204201', /* An ID used to identify a site within a publisher account - required */ - placementId: '8000000015', /* an ID used to identify the piece of inventory - required - for appnexus test use 13144370. */ - customData: [{"settings": {}, "targeting": {"key": "value", "key2": ["value1", "value2"]}}],/* optional array with 'targeting' placeholder for passing publisher specific key-values for targeting. */ - } - }] - }]; +window.pbjs = window.pbjs || { que: [] }; +window.pbjs.que.push(function() { + window.pbjs.setConfig({ + newspassid: { + publisherId: 'test-publisher' + } + }); +}); ``` -### Note +#### Step 2: Add the `newspassid` bidder and params to your ad unit(s) + +```javascript +const adUnits = [ + { + code: 'id-of-your-banner-div', + mediaTypes: { + banner: { + sizes: [[300, 250]] + } + }, + bids: [ + { + bidder: 'newspassid', + params: { + publisherId: 'test-publisher', /* an ID to identify the publisher account - required if you skip step 1 */ + placementId: 'test-group1' /* An ID used to identify the ad placement configuration within a publisher account - required */ + } + } + ] + } +]; +``` -Please contact us at for any assistance testing your implementation before going live into production. +The `publisherId` and `placementId` are the only params needed for all media types we support. These values are setup by the LMC partnership before you begin. diff --git a/dev-docs/bidders/stackadapt.md b/dev-docs/bidders/stackadapt.md new file mode 100644 index 0000000000..08c57e01fa --- /dev/null +++ b/dev-docs/bidders/stackadapt.md @@ -0,0 +1,157 @@ +--- +layout: bidder +title: StackAdapt +description: StackAdapt Prebid Bidder Adapter +biddercode: stackadapt +pbjs: true +pbs: false +gvl_id: 238 +tcfeu_supported: true +usp_supported: true +userId: all +media_types: banner, video +coppa_supported: true +gpp_sids: tcfeu, tcfca, usnat, usstate_all, usp +gpp_supported: true +schain_supported: true +dchain_supported: false +deals_supported: true +floors_supported: true +fpd_supported: true +ortb_blocking_supported: true +multiformat_supported: will-bid-on-any +privacy_sandbox: no +prebid_member: false +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------------|--------------------|----------| +| `publisherId` | required | StackAdapt provided id | `'4cd53a92ra91'` | `string` | +| `placementId` | optional | StackAdapt provided id | `'e95365f397a7'` | `string` | +| `banner` | optional | banner supporting expdir | `{expdir: [1, 3]}` | `object` | +| `bidfloor` | optional | bid floor price | `1.01` | `float` | + +The following banner parameters are supported: + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-----------------------------------|----------|------------------| +| `expdir` | optional | Directions the banner may expand. | `[1, 3]` | `Array[integer]` | + +### Banner + +#### `mediaTypes.banner` Parameters + +The StackAdapt bid adapter requires `sizes` to be defined in valid format. +See [mediaTypes.banner](https://docs.prebid.org/dev-docs/adunit-reference.html#adUnit.mediaTypes.banner) for defining mediaTypes parameters. + +Below are banner ad unit examples with required and optional parameters: + +```js + var adUnits = [ + // Banner adUnit - required parameters + { + code: 'div-test-ad-1', + mediaTypes: { + banner: { + sizes: [[300, 250]] + } + }, + bids: [{ + bidder: 'stackadapt', + params: { + publisherId: '4cd53a92ra91', + } + }] + }, + // Banner adUnit - including optional parameters + { + code: 'div-test-ad-2', + mediaTypes: { + banner: { + sizes: [[300, 250]], + pos: 1 + } + }, + bids: [{ + bidder: 'stackadapt', + params: { + publisherId: '4cd53a92ra91', + placementId: 'e95365f397a7', + bidfloor: 1.01, + banner: { + expdir: [1, 3] + } + } + }] + } + ]; +``` + +### Video + +#### `mediaTypes.video` Parameters + +The StackAdapt bid adapter requires `mimes`, `protocols`, `maxduration`, `api`, and `plcmt` to be defined in valid format. +See [mediaTypes.video](https://docs.prebid.org/dev-docs/adunit-reference.html#adUnit.mediaTypes.video) for defining mediaTypes parameters. + +Below are video ad unit examples with required and optional parameters: + +```js + var adUnits = [ + // Video adUnit - required parameters + { + code: 'div-test-ad-3', + mediaTypes: { + video: { + mimes: ['video/mp4'], + protocols: [2, 3, 5, 6], + maxduration: 60, + api: [1, 2], + plcmt: 1 + } + }, + bids: [{ + bidder: 'stackadapt', + params: { + publisherId: '4cd53a92ra91', + } + }] + }, + // Video adUnit - including optional parameters + { + code: 'div-test-ad-4', + mediaTypes: { + video: { + playerSize: [640, 360], + mimes: ['video/mp4'], + protocols: [2, 3, 5, 6], + minduration: 1, + maxduration: 60, + api: [1, 2], + playback_method: [1], + plcmt: 1, + startdelay: 1, + pos: 1, + minbitrate: 300, + maxbitrate: 1500, + skip: 1, + skipmin: 5, + skipafter: 15 + } + }, + bids: [{ + bidder: 'stackadapt', + params: { + publisherId: '4cd53a92ra91', + placementId: 'e95365f397a7', + bidfloor: 1.01, + } + }] + } + ]; +``` diff --git a/dev-docs/bidmatic.md b/dev-docs/bidmatic.md index d16387e291..a999757c99 100644 --- a/dev-docs/bidmatic.md +++ b/dev-docs/bidmatic.md @@ -13,12 +13,14 @@ schain_supported: true dchain_supported: false userId: all (with commercial activation) media_types: banner, video +userIds: all safeframes_ok: true deals_supported: false floors_supported: true fpd_supported: true pbjs: true pbs: true +pbs_app_supported: true prebid_member: false multiformat_supported: will-bid-on-one ortb_blocking_supported: true diff --git a/dev-docs/modules/gppControl_usnat.md b/dev-docs/modules/gppControl_usnat.md index 95bfbb68f4..df2853e3c4 100644 --- a/dev-docs/modules/gppControl_usnat.md +++ b/dev-docs/modules/gppControl_usnat.md @@ -21,7 +21,7 @@ sidebarType : 1 ## Overview -This consent management control module is designed to support the [Global Privacy Platform](https://iabtechlab.com/gpp/) Section 7 string, USNat. For more Prebid-related background, see [Prebid US Compliance Support](/features/mspa-usnat.html). In sum, the USNat string is intended to unify various state laws into a single privacy string, with participants' behavior governed by the IAB's ([MSPA](https://www.iabprivacy.com/#)). It is intended to complement, not replace, the GPP consent management module, which gathers GPP consent strings and makes them available to vendor integrations. The goal is to gather sensible and conservative [activity controls](/dev-docs/activity-controls.html) for elements of Prebid.js given various expressions of the [USNat consent string](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/US-National/IAB%20Privacy%E2%80%99s%20National%20Privacy%20Technical%20Specification.md). +This consent management control module is designed to support the [Global Privacy Platform](https://iabtechlab.com/gpp/) Section 7 string, USNat. For more Prebid-related background, see [Prebid US Compliance Support](/features/mspa-usnat.html). In sum, the USNat string is intended to unify various state laws into a single privacy string, with participants' behavior governed by the IAB's ([MSPA](https://www.iabprivacy.com/#)). It is intended to complement, not replace, the GPP consent management module, which gathers GPP consent strings and makes them available to vendor integrations. The goal is to gather sensible and conservative [activity controls](/dev-docs/activity-controls.html) for elements of Prebid.js given various expressions of the [USNat consent string](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/US-National/IAB%20Privacy%E2%80%99s%20Multi-State%20Privacy%20Agreement%20(MSPA)%20US%20National%20Technical%20Specification.md). This module does not support any other GPP section id or local GPP api. For US state section see the [GPP Control - US State module](/dev-docs/modules/gppControl_usstates.html), Prebid.js encourages publishers to consider with their legal counsel use of the national string over state strings. New state strings are being released, yet national string support is mature and less error prone. In order to control activities in a section without a control module, publishers can express their controls directly in the syntax of the [activity control infrastructure](/dev-docs/activity-controls.html). If a publisher wants finer control over section 7 implications on Prebid.js behavior than this module provides (eg not invalidating certain strings), they are able to achieve that using the activity control syntax as an alternative to this module. @@ -46,7 +46,7 @@ You can also use the [Prebid.js Download](/download.html) page. - [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) -- [IAB Global Privacy Platform USNat string Specification](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/US-National/IAB%20Privacy%E2%80%99s%20National%20Privacy%20Technical%20Specification.md) +- [IAB Global Privacy Platform USNat string Specification](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/US-National/IAB%20Privacy%E2%80%99s%20Multi-State%20Privacy%20Agreement%20(MSPA)%20US%20National%20Technical%20Specification.md) - [Prebid US Compliance Support](/features/mspa-usnat.html) - [Prebid Activity Controls](/dev-docs/activity-controls.html) - [Prebid Consent Management - US Privacy Module](/dev-docs/modules/consentManagementUsp.html) diff --git a/dev-docs/modules/gppControl_usstates.md b/dev-docs/modules/gppControl_usstates.md index 7a434886d8..d15c603fd7 100644 --- a/dev-docs/modules/gppControl_usstates.md +++ b/dev-docs/modules/gppControl_usstates.md @@ -117,7 +117,7 @@ You can also use the [Prebid.js Download](/download.html) page. - [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) -- [IAB Global Privacy Platform USNat string Specification](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/US-National/IAB%20Privacy%E2%80%99s%20National%20Privacy%20Technical%20Specification.md) +- [IAB Global Privacy Platform USNat string Specification](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/US-National/IAB%20Privacy%E2%80%99s%20Multi-State%20Privacy%20Agreement%20(MSPA)%20US%20National%20Technical%20Specification.md - [Prebid US Compliance Support](/features/mspa-usnat.html) - [Prebid Activity Controls](/dev-docs/activity-controls.html) - [Prebid Consent Management - US Privacy Module](/dev-docs/modules/consentManagementUsp.html) diff --git a/dev-docs/modules/optableRtdProvider.md b/dev-docs/modules/optableRtdProvider.md new file mode 100644 index 0000000000..f65daa1809 --- /dev/null +++ b/dev-docs/modules/optableRtdProvider.md @@ -0,0 +1,156 @@ +--- +layout: page_v2 +title: Optable RTD Provider Module +display_name: Optable RTD Module +description: Optable Real Time Data Module +page_type: module +module_type: rtd +module_code : optable +enable_download : true +vendor_specific: true +sidebarType : 1 +--- + +{: .alert.alert-warning :} +This module may load a publisher-specific JavaScript bundle. The external resource provides flexibility in ID handling without the need to modify the RTD submodule source code. + +# Optable RTD Submodule +{:.no_toc} + +* TOC +{:toc} + +## Description + +Optable RTD submodule enriches the OpenRTB request by populating `user.ext.eids` and `user.data` using an identity graph and audience segmentation service hosted by Optable on behalf of the publisher. This RTD submodule primarily relies on the Optable bundle loaded on the page, which leverages the Optable-specific Visitor ID and other PPIDs to interact with the identity graph, enriching the bid request with additional user IDs and audience data. + +## Usage + +### Integration + +Compile the Optable RTD Module with other modules and adapters into your Prebid.js build: + +```bash +gulp build --modules="rtdModule,optableRtdProvider,appnexusBidAdapter,..." +``` + +> Note that Optable RTD module is dependent on the global real-time data module, `rtdModule`. + +### Preloading Optable SDK bundle + +In order to use the module you first need to register with Optable and obtain a bundle URL. The bundle URL may be specified as a `bundleUrl` parameter to the script, or otherwise it can be added directly to the page source as: + +```html + +``` + +In this case bundleUrl parameter is not needed and the script will await bundle loading before delegating to it. + +### Configuration + +This module is configured as part of the `realTimeData.dataProviders`. We recommend setting `auctionDelay` to 1000 ms and make sure `waitForIt` is set to `true` for the `Optable` RTD provider. + +```javascript +pbjs.setConfig({ + debug: true, // we recommend turning this on for testing as it adds more logging + realTimeData: { + auctionDelay: 1000, + dataProviders: [ + { + name: 'optable', + waitForIt: true, // should be true, otherwise the auctionDelay will be ignored + params: { + bundleUrl: '', + adserverTargeting: '', + }, + }, + ], + }, +}); +``` + +### Additional input to the module + +Optable bundle may use PPIDs (publisher provided IDs) from the `user.ext.eids` as input. +In addition, other arbitrary keys can be used as input, f.e. the following: + +* `optableRtdConfig.email` - a SHA256-hashed user email +* `optableRtdConfig.phone` - a SHA256-hashed [E.164 normalized phone](https://unifiedid.com/docs/getting-started/gs-normalization-encoding#phone-number-normalization) (meaning a phone number consisting of digits and leading plus sign without spaces or any additional characters, f.e. a US number would be: `+12345678999`) +* `optableRtdConfig.postal_code` - a ZIP postal code string + +Each of these identifiers is completely optional and can be provided through `pbjs.mergeConfig(...)` like so: + +```javascript +pbjs.mergeConfig({ + optableRtdConfig: { + email: await sha256("test@example.com"), + phone: await sha256("12345678999"), + postal_code: "61054" + } +}) +``` + +Where `sha256` function can be defined as: + +```javascript +async function sha256(input) { + return [...new Uint8Array( + await crypto.subtle.digest("SHA-256", new TextEncoder().encode(input)) + )].map(b => b.toString(16).padStart(2, "0")).join(""); +} +``` + +To handle PPIDs and the above input - a custom `handleRtd` function may need to be provided. + +### Parameters + +{: .table .table-bordered .table-striped } + +| Name | Type | Description | Default | Notes | +|--------------------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------|----------| +| name | String | Real time data module name | Always `optable` | | +| waitForIt | Boolean | Should be set `true` together with `auctionDelay: 1000` | `false` | | +| params | Object | | | | +| params.bundleUrl | String | Optable bundle URL | `null` | Optional | +| params.adserverTargeting | Boolean | If set to `true`, targeting keywords will be passed to the ad server upon auction completion | `true` | Optional | +| params.handleRtd | Function | An optional function that uses Optable data to enrich `reqBidsConfigObj` with the real-time data. If not provided, the module will do a default call to Optable bundle. The function signature is `[async] (reqBidsConfigObj, optableExtraData, mergeFn) => {}` | `null` | Optional | + +## Publisher Customized RTD Handler Function + +When there is more pre-processing or post-processing needed prior/post calling Optable bundle - a custom `handleRtd` +function can be supplied to do that. +This function will also be responsible for the `reqBidsConfigObj` enrichment. +It will also receive the `optableExtraData` object, which can contain the extra data required for the enrichment and +shouldn't be shared with other RTD providers/bidders. +`mergeFn` parameter taken by `handleRtd` is a standard Prebid.js utility function that take an object to be enriched and +an object to enrich with: the second object's fields will be merged into the first one (also see the code of an example +mentioned below): + +```javascript +mergeFn( + reqBidsConfigObj.ortb2Fragments.global, // or other nested object as needed + rtdData, +); +``` + +A `handleRtd` function implementation has access to its surrounding context including capturing a `pbjs` object, calling `pbjs.getConfig()` and f.e. reading off the `consentManagement` config to make the appropriate decision based on it. + +## Example + +If you want to see an example of how the optable RTD module works, run the following command: + +```bash +gulp serve --modules=optableRtdProvider,consentManagementGpp,consentManagementTcf,appnexusBidAdapter +``` + +and then open the following URL in your browser: + +[`http://localhost:9999/integrationExamples/gpt/optableRtdProvider_example.html`](http://localhost:9999/integrationExamples/gpt/optableRtdProvider_example.html) + +Open the browser console to see the logs. + +## Maintainer contacts + +Any suggestions or questions can be directed to [prebid@optable.co](mailto:prebid@optable.co). + +Alternatively please open a new [issue](https://github.com/prebid/prebid-server-java/issues/new) or [pull request](https://github.com/prebid/prebid-server-java/pulls) in this repository. diff --git a/dev-docs/modules/pubmaticRtdProvider.md b/dev-docs/modules/pubmaticRtdProvider.md new file mode 100644 index 0000000000..f02ef2e190 --- /dev/null +++ b/dev-docs/modules/pubmaticRtdProvider.md @@ -0,0 +1,81 @@ +--- +layout: page_v2 +page_type: module +title: PubMatic RTD Provider +display_name: PubMatic RTD Module +description: RTD module for Prebid provided by PubMatic to set dynamic floors +module_type: rtd +module_code: pubmaticRtdProvider +enable_download: true +vendor_specific: true +sidebarType: 1 +--- + +# PubMatic RTD Module +{:.no_toc} + +* TOC +{:toc} + +## Overview + +The PubMatic RTD module fetches pricing floor data and updates the Price Floors Module based on user's context in real-time as per Price Floors Modules Floor Data Provider Interface guidelines [Dynamic Floor Data Provider](https://docs.prebid.org/dev-docs/modules/floors.html#floor-data-provider-interface). + +## Integration + +Step 1: Contact PubMatic to get a publisher ID and create your first profile. + +Step 2: Integrate the PubMatic Analytics Adapter (see Prebid Analytics modules) as well as the Price Floors module. + +Step 3: Prepare the base Prebid file. + +For example: + +To compile the Price Floors, PubMatic RTD module and PubMatic Analytics Adapter into your Prebid build: + +```shell +gulp build --modules=priceFloors,rtdModule,pubmaticRtdProvider,pubmaticAnalyticsAdapter +``` + +{: .alert.alert-info :} +Note: The PubMatic RTD module is dependent on the global real-time data module : `rtdModule`, price floor module : `priceFloors` and PubMatic Analytics Adapter : `pubmaticAnalyticsAdapter`. + +Step 4: Set configuration and enable PubMatic RTD Module using pbjs.setConfig. + +## Configuration + +This module is configured as part of the `realTimeData.dataProviders`. We recommend setting `auctionDelay` to at least 250 ms and make sure `waitForIt` is set to `true` for the `pubmatic` RTD provider. + +```js +const AUCTION_DELAY = 250; +pbjs.setConfig({ + // rest of the config + ..., + realTimeData: { + auctionDelay: AUCTION_DELAY, + dataProviders: [ + { + name: "pubmatic", + waitForIt: true, + params: { + publisherId: ``, // please contact PubMatic to get a publisherId for yourself + profileId: ``, // please contact PubMatic to get a profileId for yourself + }, + }, + ], + }, + // rest of the config + ..., +}); +``` + +## Parameters + +{: .table .table-bordered .table-striped } +| Name | Type | Description | Default | +| :----------------- | :------ | :------------------------------------------------------------- | :------------------------- | +| name | String | Name of the real-time data module | Always `pubmatic` | +| waitForIt | Boolean | Should be `true` if an `auctionDelay` is defined (mandatory) | `false` | +| params | Object | | | +| params.publisherId | String | Publisher ID | | +| params.profileId | String | Profile ID | | diff --git a/dev-docs/modules/symitriDapRtdProvider.md b/dev-docs/modules/symitriDapRtdProvider.md index de52b94551..66211f6908 100644 --- a/dev-docs/modules/symitriDapRtdProvider.md +++ b/dev-docs/modules/symitriDapRtdProvider.md @@ -68,7 +68,7 @@ Please reach out to your Symitri account representative() to | apiVersion | String | This holds the API version | Please reach out to your Symitri account representative() for this value | | domain | String | The domain name of your webpage | | | identityType | String | 'simpleid' or 'compositeid' or 'hashedid' | See the section below labelled "identityType" for more details. | -| identityValue | String | This is optional field to pass user hid. Will be used only if identityType is hid | | +| identityValue | String | This is a required field to pass HEM and/or EIDs | See the "identity" section below for more details. | | segtax | Integer | The taxonomy for Symitri | The value should be 708 | | pixelUrl | String | Pixel URL provided by Symitri which will be triggered when bid matching with Symitri dealid wins and creative gets rendered | | @@ -89,6 +89,19 @@ Use 'compositeid' to pass in multiple identifiers as key-value pairs as shown be "identityValue": "", ``` +### Identity + +In the event there is no identity, the ""identityType" and "identityValue" can be set to: + +```javascript +pbjs.setConfig({ + ... + identityType: 'compositeid', + identityValue: 'HEM:', + ... +}); +``` + ### Testing To view an example of available segments returned by dap: diff --git a/dev-docs/modules/userid-submodules/intentiq.md b/dev-docs/modules/userid-submodules/intentiq.md index 60d3447c62..e36289ccae 100644 --- a/dev-docs/modules/userid-submodules/intentiq.md +++ b/dev-docs/modules/userid-submodules/intentiq.md @@ -43,12 +43,19 @@ Please find below list of parameters that could be used in configuring Intent IQ | params.pai | Optional | String | This is the partner customer ID / advertiser ID, it is a dynamic value attached to the request. | `"advertiser1"` | | params.callback | Optional | Function | This is a callback which is trigered with data and AB group | `(data, group) => console.log({ data, group })` | | params.timeoutInMillis | Optional | Number | This is the timeout in milliseconds, which defines the maximum duration before the callback is triggered. The default value is 500. | `450` | -| params.browserBlackList | Optional |  String | This is the name of a browser that can be added to a blacklist. | `"chrome"` | -| params.manualWinReportEnabled | Optional | Boolean | This variable determines whether the bidWon event is triggered automatically. If set to false, the event will occur automatically, and manual reporting with reportExternalWin will be disabled. If set to true, the event will not occur automatically, allowing manual reporting through reportExternalWin. The default value is false. | `true`| +| params.browserBlackList | Optional | String | This is the name of a browser that can be added to a blacklist. | `"chrome"` | +| params.manualWinReportEnabled | Optional | Boolean | This variable determines whether the bidWon event is triggered automatically. If set to false, the event will occur automatically, and manual reporting with reportExternalWin will be disabled. If set to true, the event will not occur automatically, allowing manual reporting through reportExternalWin. The default value is false. | `true` | | params.domainName | Optional | String | Specifies the domain of the page in which the IntentIQ object is currently running and serving the impression. This domain will be used later in the revenue reporting breakdown by domain. For example, cnn.com. It identifies the primary source of requests to the IntentIQ servers, even within nested web pages. | `"currentDomain.com"` | -| params.gamObjectReference | Optional | Object | This is a reference to the Google Ad Manager (GAM) object, which will be used to set targeting. If this parameter is not provided, the group reporting will not be configured. | `googletag` | +| params.gamObjectReference | Optional | Object | This is a reference to the Google Ad Manager (GAM) object, which will be used to set targeting. If this parameter is not provided, the group reporting will not be configured. | `googletag` | | params.gamParameterName | Optional | String | The name of the targeting parameter that will be used to pass the group. If not specified, the default value is `intent_iq_group`. | `"intent_iq_group"` | -| params.adUnitConfig | Optional | Number | Determines how the `placementId` parameter is extracted in the report (default is 1). Possible values: 1 – adUnitCode first, 2 – placementId first, 3 – only adUnitCode, 4 – only placementId | `1` | +| params.adUnitConfig | Optional | Number | Determines how the `placementId` parameter is extracted in the report (default is 1). Possible values: 1 – adUnitCode first, 2 – placementId first, 3 – only adUnitCode, 4 – only placementId | `1` | +| params.sourceMetaData | Optional | String | This metadata can be provided by the partner and will be included in the requests URL as a query parameter | `"123.123.123.123"` | +| params.sourceMetaDataExternal | Optional | Number | This metadata can be provided by the partner and will be included in the requests URL as a query parameter | `123456` | +| params.iiqServerAddress | Optional | String | The base URL for the IntentIQ API server. If parameter is provided in `configParams`, it will be used. | `"https://domain.com"` | +| params.iiqPixelServerAddress | Optional | String | The base URL for the IntentIQ pixel synchronization server. If parameter is provided in `configParams`, it will be used. | `"https://domain.com"` | +| params.reportingServerAddress | Optional | String | The base URL for the IntentIQ reporting server. If parameter is provided in `configParams`, it will be used. | `"https://domain.com"` | +| params.reportMethod | Optional | String | Defines the HTTP method used to send the analytics report. If set to `"POST"`, the report payload will be sent in the body of the request. If set to `"GET"` (default), the payload will be included as a query parameter in the request URL. |`"GET"` | +| params.siloEnabled | Optional | Boolean | Determines if first-party data is stored in a siloed storage key. When set to `true`, first-party data is stored under a modified key that appends `_p_` plus the partner value rather than using the default storage key. The default value is `false`. | `true` |`1` | ### Configuration example @@ -66,7 +73,10 @@ pbjs.setConfig({ domainName: "currentDomain.com", gamObjectReference: googletag, gamParameterName: "intent_iq_group", - adUnitConfig: 1 // Extracting placementId strategy (adUnitCode or placementId order of priorities) + adUnitConfig: 1, // Extracting placementId strategy (adUnitCode or placementId order of priorities) + sourceMetaData: "123.123.123.123", // Optional parameter + sourceMetaDataExternal: 123456, // Optional parameter + reportMethod: "GET" // Optional parameter }, storage: { type: "html5", @@ -77,4 +87,4 @@ pbjs.setConfig({ }] } }); -``` +``` \ No newline at end of file diff --git a/dev-docs/modules/userid-submodules/onekey.md b/dev-docs/modules/userid-submodules/onekey.md index f371228764..5577abfe23 100644 --- a/dev-docs/modules/userid-submodules/onekey.md +++ b/dev-docs/modules/userid-submodules/onekey.md @@ -28,7 +28,7 @@ gulp build –modules=userId,oneKeyIdSystem ## OneKey Registration OneKey is a community based Framework with a decentralized approach. -Go to [onekey.community](https://onekey.community/) for more details. +Go to onekey.community for more details. ## OneKey Configuration diff --git a/dev-docs/modules/userid-submodules/open-pair.md b/dev-docs/modules/userid-submodules/open-pair.md new file mode 100644 index 0000000000..29b5f7e96d --- /dev/null +++ b/dev-docs/modules/userid-submodules/open-pair.md @@ -0,0 +1,91 @@ +--- +layout: userid +title: Open PAIR ID +description: Open PairId User ID sub-module +useridmodule: openPairIdSystem +bidRequestUserId: openPairId +eidsource: pair-protocol.com +example: '"nnjbddb46374634mndjhd78jh"' +--- + +Originally developed by Google and subsequently donated to the industry. +This version supports single and two Data Clean Room setups, in which the advertiser and publisher use different clean rooms. + +(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 [page](https://iabtechlab.com/pair/) for more information about the PAIR protocol. + +Add it to your Prebid.js package with: + +```bash +gulp build --modules=openPairIdSystem +``` + +## 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. | `"openPairId"` | +| params | Optional | Object | Container of all module params. Each entry can be used to configured a specific clean room. | | + +## 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`. + +```javascript + +// should have byte64 value ready in 'pairId' local storage/cookie entry + +pbjs.setConfig({ + userSync: { + userIds: [{ + name: 'openPairId' + }] + } +}); +``` + +Clean rooms may use specific storage keys, this version supports specifying the storage key for any clean room such as the following example. + +```javascript + +// value in 'pairId' local storage/cookie entry will be combined with ids provided by cleanroom liveramp +pbjs.setConfig({ + userSync: { + userIds: [ + { + name: 'openPairId', + params: { + cleanRoomVendor: { + storageKey: '_storage_key' + } + } + } + ] + } +}); +``` + +As per the PAIR specification, you can define the inserter and matcher. + +```javascript +pbjs.setConfig({ + userSync: { + userIds: [ + { + name: 'openPairId', + params: { + inserter: 'some-domain.com', + matcher: 'another-domain.com' + } + } + ] + } +}); +``` diff --git a/dev-docs/modules/userid-submodules/yahoo.md b/dev-docs/modules/userid-submodules/yahoo.md index acf31747a9..34a983de36 100644 --- a/dev-docs/modules/userid-submodules/yahoo.md +++ b/dev-docs/modules/userid-submodules/yahoo.md @@ -101,7 +101,7 @@ Follow the steps below to check that ConnectIDs are being successfully retrieved 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. +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 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. diff --git a/dev-docs/modules/wurflRtdProvider.md b/dev-docs/modules/wurflRtdProvider.md index a146b3efdb..603127aa90 100644 --- a/dev-docs/modules/wurflRtdProvider.md +++ b/dev-docs/modules/wurflRtdProvider.md @@ -95,3 +95,68 @@ To test how the WURFL RTD module works, run the following command: Then, point your browser to: `http://localhost:9999/integrationExamples/gpt/wurflRtdProvider_example.html` + +## Expected Behavior + +WURFL RTD adds device information to the bidderRequest's `ortb2.device.ext.wurfl` object (enabled SSPs have access to an extended capability set). + +```json +{ + "id": "1edd88d3-12c6-40b2-a80b-138e276b4553", + "at": 1, + "site": {...}, + "device": { + "w": 375, + "h": 667, + "dnt": 0, + "ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.3 Mobile/15E148 Safari/604.1", + "language": "it", + "make": "Apple", + "model": "iPhone", + "devicetype": 1, + "os": "iOS", + "osv": "18.3.1", + "hwv": "iPhone", + "ppi": 324, + "pxratio": 2, + "js": 1, + "ext": { + "vpw": 980, + "vph": 1429, + "wurfl": { + "wurfl_id": "apple_iphone_ver18_3", + "advertised_browser": "Mobile Safari", + "advertised_browser_version": "18.3", + "advertised_device_os": "iOS", + "advertised_device_os_version": "18.3.1", + "ajax_support_javascript": true, + "brand_name": "Apple", + "complete_device_name": "Apple iPhone", + "density_class": "2.0", + "form_factor": "Smartphone", + "is_app_webview": false, + "is_connected_tv": false, + "is_full_desktop": false, + "is_mobile": true, + "is_ott": false, + "is_phone": true, + "is_robot": false, + "is_smartphone": true, + "is_smarttv": false, + "is_tablet": false, + "manufacturer_name": "", + "marketing_name": "", + "max_image_height": 568, + "max_image_width": 320, + "model_name": "iPhone", + "physical_screen_height": 89, + "physical_screen_width": 50, + "pixel_density": 324, + "pointing_method": "touchscreen", + "resolution_height": 1136, + "resolution_width": 640 + } + } + } +} +``` diff --git a/dev-docs/modules/zeusPrimeRtdProvider.md b/dev-docs/modules/zeusPrimeRtdProvider.md index 338bcee32a..ada1fb6bd8 100644 --- a/dev-docs/modules/zeusPrimeRtdProvider.md +++ b/dev-docs/modules/zeusPrimeRtdProvider.md @@ -69,4 +69,4 @@ Zeus Prime requires the gamId parameter, or the Google Ad Manager Network Code, ## Troubleshooting -For troubleshooting steps and guides to assist with verifying your Zeus Prime installation, see our [installation documentation](https://zeustechnology.com/docs/installation). +For troubleshooting steps and guides to assist with verifying your Zeus Prime installation, see our [installation documentation](https://zeustechnology.com/). diff --git a/dev-docs/publisher-api-reference/setConfig.md b/dev-docs/publisher-api-reference/setConfig.md index c85ac06772..6b39588bb2 100644 --- a/dev-docs/publisher-api-reference/setConfig.md +++ b/dev-docs/publisher-api-reference/setConfig.md @@ -1137,7 +1137,7 @@ If a batchSize is set to 2 and 5 video responses arrive (within the timeframe sp -As of Prebid.js 10, you can save VAST XML as blob in browser's memory. Here's how to leverage local caching to reduce network traffic while working with an ad server. Using Google Ad Manager (GAM) as an example, no additional configuration of VAST creatives is required within GAM. The existing process of building the GAM VAST ad tag URL and retrieving the VAST wrapper from GAM remains unchanged - except for one key difference. +As of Prebid.js 9.37.0, you can save VAST XML as blob in browser's memory. Here's how to leverage local caching to reduce network traffic while working with an ad server. Using Google Ad Manager (GAM) as an example, no additional configuration of VAST creatives is required within GAM. The existing process of building the GAM VAST ad tag URL and retrieving the VAST wrapper from GAM remains unchanged - except for one key difference. Consider the following Prebid configuration: diff --git a/dev-docs/renderer.md b/dev-docs/renderer.md new file mode 100644 index 0000000000..879e624eea --- /dev/null +++ b/dev-docs/renderer.md @@ -0,0 +1,203 @@ +--- +layout: page_v2 +title: Renderer +description: Renderer Reference +sidebarType: 1 +--- + +# Renderer + +## What is a Renderer? + +A renderer provides publishers with precise control over how ads are displayed on their pages. It's especially valuable for video ads in non-video placements (such as outstream/in-renderer), but can be used with any media type. + +In simple terms, a renderer offers publishers: + +- The ability to customize how ads appear and behave +- A way to introduce new ad formats without disrupting user experience +- Control over maintaining design consistency between ads and site content + +## Renderer Object + +{: .table .table-bordered .table-striped } +| Name | Scope | Type | Description | +|--------------+----------+---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `url` | Required | String | URL to the renderer script that will be loaded. This script should create a renderer object in the global scope. | +| `render` | Required | Function | Function that tells Prebid.js how to invoke the renderer script to render a bid. The function receives the bid object as a parameter. | +| `backupOnly` | Optional | Boolean | if set to true, buyer or adapter renderer will be preferred | + +## Renderer Implementation Levels + +Renderers can be specified at multiple levels: + +1. MediaType Level (adUnit.mediaTypes.video|banner|native.renderer): If a renderer is associated with a specific mediaType (video, banner, or native), it will be used to display any demand associated with that mediaType. This is the preferred method for all ad types. +2. AdUnit Level (adUnit.renderer): Applied to all bids for this ad unit that don't override it. This is a legacy approach; using the mediaType-level renderer is preferred. +3. Bidder Level (adUnit.bids[].renderer): Applied only to this bidder, overriding adUnit renderer if both exist. +4. Default: If no renderer is specified at any level, Prebid will use the default renderer for the media type, if one exists. For banner and native ads, Prebid.js has built-in default rendering capabilities. + +### Priority Order + +When multiple renderers are defined, the following priority is used: + +1. MediaType Level renderer +2. AdUnit Level renderer +3. Bidder Level renderer +4. Default renderer + +## Special Cases + +### Banner with Custom Renderer + +Although renderers are commonly associated with video ads, they can also be used with banner ads to create custom rendering experiences: + +```javascript +pbjs.addAdUnits({ + code: "custom-banner-container", + mediaTypes: { + banner: { + sizes: [[300, 250]], + renderer: { + url: "https://cdn.example.com/banner-renderer.js", + render: function (bid) { + // Create an enhanced banner experience + const bannerRenderer = new window.BannerRenderer({ + adUnitCode: bid.adUnitCode, + adHtml: bid.ad, + width: bid.width, + height: bid.height, + // Add animation effects + effects: { + fadeIn: true, + duration: 300, + onViewable: true, + }, + }); + bannerRenderer.render(); + }, + }, + }, + }, + bids: [ + { + bidder: "appnexus", + params: { + placementId: 13144370, + }, + }, + ], +}); +``` + +A banner renderer might be used to: + +1. Add entrance/exit animations to standard banner ads +2. Implement viewability-triggered rendering +3. Create interactive enhancements to standard banner creatives +4. Apply custom styling or containers to maintain site design aesthetics +5. Implement fallback scenarios for different devices or browsers + +## Renderer Implementation Example + +```javascript +// Example of a secure custom banner renderer implementation +window.BannerRenderer = function (config) { + return { + render: function (bid) { + // Get the container element + const container = document.getElementById(config.adUnitCode); + if (!container) return; + + // Create iframe to provide a secure environment + const iframe = document.createElement("iframe"); + iframe.width = `${config.width}px`; + iframe.height = `${config.height}px`; + iframe.style.border = "none"; + iframe.style.transition = `opacity ${config.effects.duration}ms ease-in-out`; + iframe.style.opacity = "0"; + iframe.title = "Advertisement"; + iframe.setAttribute("scrolling", "no"); + + // Add iframe to container + container.appendChild(iframe); + + // Set iframe content + const iframeDoc = iframe.contentWindow.document; + iframeDoc.open(); + iframeDoc.write(` + + + + + + + + +
${bid.ad || ""}
+ + + `); + iframeDoc.close(); + + if (config.effects.onViewable) { + // Set up IntersectionObserver for viewability-triggered effects + const observer = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + // Apply fade-in when ad comes into view + iframe.style.opacity = "1"; + observer.disconnect(); // Only need to trigger once + } + }); + }, + { threshold: 0.5 } + ); + + observer.observe(container); + } else { + // Immediate fade-in + setTimeout(() => { + iframe.style.opacity = "1"; + }, 10); + } + + // Cleanup function + return { + destroy: function () { + if (container && iframe) { + container.removeChild(iframe); + } + }, + }; + }, + }; +}; +``` + +## Common Renderer Properties + +Here are commonly used properties from the bid object that can be accessed in the renderer: + +{: .table .table-bordered .table-striped } +| Property | Description | +|--------------+------------------------------------------------------- | +| `adId` | Unique identifier for the bid | +| `adUnitCode` | The code for the ad unit | +| `vastUrl` | URL to the VAST XML for video ads | +| `vastXml` | The VAST XML content (if available instead of vastUrl) | +| `width` | Width of the creative | +| `height` | Height of the creative | +| `playerWidth` | Width of the video player | +| `playerHeight` | Height of the video player | +| `mediaType` | Type of media ('video', 'banner', etc.) | +| `cpm` | The bid's CPM | +| `ad` | Ad markup | +| `adUrl` | Ad markup url | diff --git a/features/mspa-usnat.md b/features/mspa-usnat.md index 635783088d..aec0269dac 100644 --- a/features/mspa-usnat.md +++ b/features/mspa-usnat.md @@ -193,7 +193,7 @@ This table documents the default blocks of boolean logic that indicate whether a | transmitPreciseGeo | MspaServiceProviderMode=1 OR
GPC=1 OR
SensitiveDataProcessingOptOutNotice=2 OR
SensitiveDataLimitUseNotice=2 OR
((SensitiveDataProcessingOptOutNotice=0 OR SensitiveDataLimitUseNotice=0) AND SensitiveDataProcessing[8]=2)
SensitiveDataProcessing[8]=1 OR
KnownChildSensitiveDataConsents[2]==1 OR
KnownChildSensitiveDataConsents[2]==2 OR
KnownChildSensitiveDataConsents[1]=1 OR
PersonalDataConsents=2 | Round IP address and lat/long in both device.geo and user.geo when the activity is not allowed.

The difference in this logic is that it includes "sensitive data 8" (geo) and does not include the UFPD- and ID-related fields. | | transmitTid | n/a | Sending transaction IDs is not an aspect of USNat. | -NOTE -- Here's what the numbers in the logic above indicate in the [IAB GPP USNat specification](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/US-National/IAB%20Privacy%E2%80%99s%20National%20Privacy%20Technical%20Specification.md): +NOTE -- Here's what the numbers in the logic above indicate in the [IAB GPP USNat specification](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/US-National/IAB%20Privacy%E2%80%99s%20Multi-State%20Privacy%20Agreement%20(MSPA)%20US%20National%20Technical%20Specification.md: MspaServiceProviderMode: diff --git a/overview/analytics.md b/overview/analytics.md index 27240f2bb3..39b940802e 100644 --- a/overview/analytics.md +++ b/overview/analytics.md @@ -50,30 +50,112 @@ pbjs.que.push(function() { {% assign analytics_pages = site.pages | where: "layout", "analytics" %} -
    +## Search for analytics adapters + + + + + +
    + +## Full List + +### #-A +
      +{% for page in analytics_pages %} + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "0" or firstletter == "1" or firstletter == "2" or firstletter == "3" or firstletter == "4" or firstletter == "5" or firstletter == "6" or firstletter == "7" or firstletter == "8" or firstletter == "9" or firstletter == "a" %}{% continue %}{% endunless %} +
    • + {{ page.title }} +
    • +{% endfor %} +
    + +### B-C + +
      +{% for page in analytics_pages %} + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "b" or firstletter == "c" %}{% continue %}{% endunless %} +
    • + {{ page.title }} +
    • +{% endfor %} +
    + +### D-G + +
      +{% for page in analytics_pages %} + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "d" or firstletter == "e" or firstletter == "f" or firstletter == "g" %}{% continue %}{% endunless %} +
    • + {{ page.title }} +
    • +{% endfor %} +
    + +### H-L + +
      {% for page in analytics_pages %} -
    • -{{ page.title }} -
    • + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "h" or firstletter == "i" or firstletter == "j" or firstletter == "k" or firstletter == "l" %}{% continue %}{% endunless %} +
    • + {{ page.title }} +
    • {% endfor %}
    -## Analytics Adapter Documentation +### M-O +
      {% for page in analytics_pages %} -
      - -

      {{ page.title }}

      -

      Features

      - -{: .table .table-bordered .table-striped } -| **Module Code** | {{ page.modulecode }} | **Prebid.org Member** | {% if page.prebid_member == true %}yes{% else %}no{% endif %} | -| **GDPR Support** | {% if page.tcfeu_supported == true %}yes{% elsif page.tcfeu_supported == false %}no{% else %}Check with vendor{% endif %} | **USP/CCPA Support** | {% if page.usp_supported == true %}yes{% elsif page.usp_supported == false %}no{% else %}Check with vendor{% endif %} | -| **IAB GVL ID** | {% if page.gvl_id %}{{page.gvl_id}}{% else %}Check with vendor{% endif %} | **COPPA Support** | {% if page.coppa_supported == true %}yes{% elsif page.coppa_supported == false %}no{% else %}Check with vendor{% endif %} | - -{{ page.content }} -
      + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "m" or firstletter == "n" or firstletter == "o" %}{% continue %}{% endunless %} +
    • + {{ page.title }} +
    • {% endfor %} +
    + +### P-R + +
      +{% for page in analytics_pages %} + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "p" or firstletter == "q" or firstletter == "r" %}{% continue %}{% endunless %} +
    • + {{ page.title }} +
    • +{% endfor %} +
    + +### S-T + +
      +{% for page in analytics_pages %} + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "s" or firstletter == "t" %}{% continue %}{% endunless %} +
    • + {{ page.title }} +
    • +{% endfor %} +
    + +### U-Z + +
      +{% for page in analytics_pages %} + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "u" or firstletter == "v" or firstletter == "w" or firstletter == "x" or firstletter == "y" or firstletter == "z" %}{% continue %}{% endunless %} +
    • + {{ page.title }} +
    • +{% endfor %} +
    ## Related Topics diff --git a/prebid-mobile/modules/rendering/android-sdk-integration-admob.md b/prebid-mobile/modules/rendering/android-sdk-integration-admob.md index cca7f118a0..b5f360f20e 100644 --- a/prebid-mobile/modules/rendering/android-sdk-integration-admob.md +++ b/prebid-mobile/modules/rendering/android-sdk-integration-admob.md @@ -186,9 +186,11 @@ Now you should just make a regular AdMob's ad request. Evetything else will be h Once you receive the ad it will be ready for display. You can show interstitial right in the listener or later according to the app logic. -### Rewarded Video +### Rewarded -Integration example: +{% include mobile/rewarded-server-side-configuration.md %} + +#### Integration example ```kotlin // 1. Create AsRequest @@ -230,32 +232,32 @@ adUnit?.fetchDemand { result -> } ``` -#### Step 1: Create AdRequest +##### Step 1: Create AdRequest {:.no_toc} This step is the same as for the original [AdMob integration](https://developers.google.com/admob/android/rewarded). You don't have to make any modifications here. -#### Step 2: Create AdMobRewardedMediationUtils +##### Step 2: Create AdMobRewardedMediationUtils {:.no_toc} The `AdMobRewardedMediationUtils` is a helper class, which performs certain utilty work for the `MediationInterstitialAdUnit`, like passing the targeting keywords to adapters. -#### Step 3: Create MediationRewardedVideoAdUnit +##### Step 3: Create MediationRewardedVideoAdUnit {:.no_toc} The `MediationRewardedVideoAdUnit` is part of the prebid mediation API. This class is responsible for making bid request and managing the winning bid. -#### Step 4: Make a bid request +##### Step 4: Make a bid request {:.no_toc} The `fetchDemand` method makes a bid request to the prebid server and provides a result in a completion handler. -#### Step 5: Make an ad request +##### Step 5: Make an ad request {:.no_toc} Now you should just make a regular AdMob's ad request. Evetything else will be handled by GMA SDK and prebid adapters. -#### Step 6: Display an ad +##### Step 6: Display an ad {:.no_toc} Once you receive the ad it will be ready for display. You can show interstitial right in the listener or later according to the app logic. diff --git a/prebid-mobile/modules/rendering/android-sdk-integration-gam.md b/prebid-mobile/modules/rendering/android-sdk-integration-gam.md index 502a9d6629..72600a491d 100644 --- a/prebid-mobile/modules/rendering/android-sdk-integration-gam.md +++ b/prebid-mobile/modules/rendering/android-sdk-integration-gam.md @@ -215,9 +215,13 @@ Integration: 4. Remove the original `InterstitialAdUnit`. 5. Follow the instructions to integrate [Interstitial API](#interstitials). -### Rewarded Video +### Rewarded -To display a Rewarded Ad follow these steps: +{% include mobile/rewarded-server-side-configuration.md %} + +#### Integration example + +Displaying the **Rewarded Ad** is the same as displaying an Interstitial Ad, but it adds ability to handle reward. To display a Rewarded Ad follow these steps: ```kotlin // 1. Create a rewarded custom event handler for GAM ad server. @@ -243,21 +247,7 @@ Pay attention that the `loadAd()` should be called on the main thread. {% endcapture %} {% include /alerts/alert_warning.html content=warning_note %} -Displaying the **Rewarded Ad** is the same as displaying an Interstitial Ad. The type of ad can be customized to: - -Be notified when user earns a reward - implement `RewardedAdUnitListener` interface: - -```kotlin - fun onUserEarnedReward(rewardedAdUnit: RewardedAdUnit) -``` - -When the actual reward object is stored in the `RewardedAdUnit`: - -```kotlin -val reward = rewardedAdUnit.getUserReward() -``` - -#### Step 1: Create Event Handler +##### Step 1: Create Event Handler {:.no_toc} GAM's event handlers are special containers that wrap the GAM Ad Views and help to manage collaboration between GAM and Prebid views. @@ -266,7 +256,7 @@ GAM's event handlers are special containers that wrap the GAM Ad Views and help To create an event handler you should provide a GAM Ad Unit. -#### Step 2: Create Rewarded Ad Unit +##### Step 2: Create Rewarded Ad Unit {:.no_toc} **RewardedAdUnit** - is an object that will load and display the particular ad. To create it you should provide @@ -276,12 +266,12 @@ To create an event handler you should provide a GAM Ad Unit. You can also assign the listener for processing ad events. -#### Step 3: Load the Ad +##### Step 3: Load the Ad {:.no_toc} Call the `loadAd()` method to make a bid request. The ad unit will load an ad and will wait for explicit instructions to display the Rewarded Ad. -#### Step 4: Display the Ad when it is ready +##### Step 4: Display the Ad when it is ready {:.no_toc} The most convenient way to determine if the ad is ready for displaying is to listen for the listener method: @@ -292,7 +282,23 @@ override fun onAdLoaded(rewardedAdUnit: RewardedAdUnit) { } ``` -### Migrating rewarded video from a Bidding-Only integration +##### Step 5: Handle a reward +{:.no_toc} + +Handle earning the reward in the appropriate method. Important: a reward can be null. + +```kotlin +override fun onUserEarnedReward(rewardedAdUnit: RewardedAdUnit?, reward: Reward?) { + if (reward != null) { + val rewardType = reward.type + val rewardCount = reward.count + val rewardExt = reward.ext + // Process the reward + } +} +``` + +#### Migrating rewarded video from a Bidding-Only integration {:.no_toc} GAM setup: @@ -306,7 +312,7 @@ Integration: 1. Replace the `RewardedAd` with `RewardedAdUnit`. 2. Implement the interface for `RewardedAdUnitListener`. 3. Remove the original `RewardedVideoAdUnit`. -4. Follow the instructions to integrate [Rewarded API](#rewarded-video). +4. Follow the instructions to integrate [Rewarded API](#rewarded). ## Additional Ad Unit Configuration diff --git a/prebid-mobile/modules/rendering/android-sdk-integration-max.md b/prebid-mobile/modules/rendering/android-sdk-integration-max.md index 715d7830a2..a8fa703109 100644 --- a/prebid-mobile/modules/rendering/android-sdk-integration-max.md +++ b/prebid-mobile/modules/rendering/android-sdk-integration-max.md @@ -161,9 +161,11 @@ Now you should make a regular MAX's ad request. Everything else will be handled Once you receive the ad it will be ready for display. Folow the [MAX instructions](https://dash.applovin.com/documentation/mediation/android/getting-started/interstitials#showing-an-interstitial-ad) about how to do it. -### Rewarded Video +### Rewarded -Integration example: +{% include mobile/rewarded-server-side-configuration.md %} + +#### Integration example ```kotlin // 1. Get an instance of MaxRewardedAd @@ -192,35 +194,36 @@ The way of displaying the rewarded ad is the same as for the Interstitial Ad. To be notified when user earns a reward follow the [MAX intructions](https://dash.applovin.com/documentation/mediation/android/getting-started/rewarded-ads#accessing-the-amount-and-currency-for-a-rewarded-ad). -#### Step 1: Get an instance of MaxRewardedAd +##### Step 1: Get an instance of MaxRewardedAd {:.no_toc} This step is totally the same as for original [MAX integration](https://dash.applovin.com/documentation/mediation/android/getting-started/rewarded-ads). You don't have to make any modifications here. -#### Step 2: Create MaxMediationRewardedUtils +##### Step 2: Create MaxMediationRewardedUtils {:.no_toc} The `MaxMediationRewardedUtils` is a helper class, which performs certain utilty work for the `MediationRewardedVideoAdUnit`, like passing the targeting keywords to the adapters. -#### Step 3: Create MediationRewardedVideoAdUnit +##### Step 3: Create MediationRewardedVideoAdUnit {:.no_toc} The `MediationRewardeVideoAdUnit` is part of the prebid mediation API. This class is responsible for making a bid request and providing a winning bid and targeting keywords to the adapters. -#### Step 4: Make bid request +##### Step 4: Make bid request {:.no_toc} The `fetchDemand` method makes a bid request to the prebid server and provides a result in a completion handler. -#### Step 5: Make an Ad Reuest +##### Step 5: Make an Ad Reuest {:.no_toc} Now you should make a regular MAX's ad request. Everything else will be handled by GMA SDK and prebid adapters. -#### Steps 6: Display an ad +##### Steps 6: Display an ad {:.no_toc} Once the rewarded ad is received you can display it. Folow the [MAX instructions](https://dash.applovin.com/documentation/mediation/android/getting-started/rewarded-ads#showing-a-rewarded-ad) for the details. + ### Native Ads Integration example: diff --git a/prebid-mobile/modules/rendering/android-sdk-integration-pb.md b/prebid-mobile/modules/rendering/android-sdk-integration-pb.md index 6d6334cc88..9d4ac0ca65 100644 --- a/prebid-mobile/modules/rendering/android-sdk-integration-pb.md +++ b/prebid-mobile/modules/rendering/android-sdk-integration-pb.md @@ -192,9 +192,11 @@ override fun onAdLoaded(interstitialAdUnit: InterstitialAdUnit) { } ``` -#### Rewarded Video +#### Rewarded -Integration example: +{% include mobile/rewarded-server-side-configuration.md %} + +##### Integration example ``` kotlin // 1. Create an Ad Unit @@ -215,19 +217,19 @@ Pay attention that the `loadAd()` should be called on the main thread. {% endcapture %} {% include /alerts/alert_warning.html content=warning_note %} -##### Step 1: Create a Rewarded Ad Unit +###### Step 1: Create a Rewarded Ad Unit {:.no_toc} Create the `RewardedAdUnit` object with parameters: - `adUnitId` - an ID of Stored Impression on the Prebid server. -##### Step 2: Load the Ad +###### Step 2: Load the Ad {:.no_toc} Call the `loadAd()` to make a bid request. -##### Step 3: Show the Ad when it is ready +###### Step 3: Show the Ad when it is ready {:.no_toc} Wait until the ad is loaded and present it to the user in any suitable time. @@ -238,6 +240,22 @@ override fun onAdLoaded(rewardedAdUnit: RewardedAdUnit) { } ``` +##### Step 4: Handle a reward +{:.no_toc} + +Handle earning a reward in the appropriate method. Important: a reward can be null. + +```kotlin +override fun onUserEarnedReward(rewardedAdUnit: RewardedAdUnit?, reward: Reward?) { + if (reward != null) { + val rewardType = reward.type + val rewardCount = reward.count + val rewardExt = reward.ext + // Process the reward + } +} +``` + ## Additional Ad Unit Configuration {% include mobile/rendering-adunit-config-android.md %} diff --git a/prebid-mobile/modules/rendering/ios-sdk-integration-admob.md b/prebid-mobile/modules/rendering/ios-sdk-integration-admob.md index cc899357b9..4d0cab980d 100644 --- a/prebid-mobile/modules/rendering/ios-sdk-integration-admob.md +++ b/prebid-mobile/modules/rendering/ios-sdk-integration-admob.md @@ -235,7 +235,9 @@ Make a regular AdMob's ad request. Everything else will be handled by GMA SDK an Once you receive the ad it will be ready for display. Follow the [AdMob instructions](https://developers.google.com/admob/ios/interstitial#swift) for displaying an ad. -### Rewarded Video +### Rewarded + +{% include mobile/rewarded-server-side-configuration.md %} **Integration example(Swift)**: diff --git a/prebid-mobile/modules/rendering/ios-sdk-integration-gam.md b/prebid-mobile/modules/rendering/ios-sdk-integration-gam.md index d6198673c1..1075aa4747 100644 --- a/prebid-mobile/modules/rendering/ios-sdk-integration-gam.md +++ b/prebid-mobile/modules/rendering/ios-sdk-integration-gam.md @@ -185,7 +185,7 @@ Call the method `loadAd()` which will make a bid request to Prebid Server. Wait for the Prebid Server to return an ad and show it to the user in any suitable time. ```swift -// MARK: InterstitialRenderingAdUnitDelegate +// MARK: InterstitialAdUnitDelegate func interstitialDidReceiveAd(_ interstitial: InterstitialAdUnit) { // Now the ad is ready for display @@ -208,9 +208,11 @@ Integration: 4. Remove original `InterstitialAdUnit`. 5. Follow the instructions to integrate [Interstitial API](#interstitials). -### Rewarded Video +### Rewarded -Integration example: +{% include mobile/rewarded-server-side-configuration.md %} + +#### Integration example ```swift // 1. Create an Event Handler @@ -238,9 +240,12 @@ The proccess for displaying the Rewarded Ad is the same as for the Interstitial To be notified when a user earns a reward - implement the method of `RewardedAdUnitDelegate`: ```swift -- (void)rewardedAdUserDidEarnReward:(RewardedAdUnit *)rewardedAd; +func rewardedAdUserDidEarnReward(_ rewardedAd: RewardedAdUnit, reward: PrebidReward) {} ``` +##### Step 1: Create Event Handler +{:.no_toc} + The reward object is stored in the `RewardedAdUnit`: {% capture gma12 %}if let reward = rewardedAd.reward as? GoogleMobileAds.AdReward { @@ -254,12 +259,9 @@ The reward object is stored in the `RewardedAdUnit`: {% include code/gma-versions-tabs.html id="gam-reward" gma11=gma11 gma12=gma12 %} -#### Step 1: Create Event Handler -{:.no_toc} - To create an event handler you should provide a **GAM Ad Unit ID**. -#### Step 2: Create Rewarded Ad Unit +##### Step 2: Create Rewarded Ad Unit {:.no_toc} Create the `RewardedAdUnit` object with parameters: @@ -267,12 +269,12 @@ Create the `RewardedAdUnit` object with parameters: - `configID` - an ID of Stored Impression on the Prebid server - `eventHandler` - the instance of rewarded event handler -#### Step 3: Load the Ad +##### Step 3: Load the Ad {:.no_toc} Call the `loadAd()` method which will make a bid request to Prebid server. -#### Step 4: Show the Ad when it is ready +##### Step 4: Show the Ad when it is ready {:.no_toc} Wait for the ad to load and display it to the user in any suitable time. @@ -285,6 +287,23 @@ func rewardedAdDidReceiveAd(_ rewardedAd: RewardedAdUnit) { } ``` +###### Step 4: Handle the reward +{:.no_toc} + +Handle the reward in the appropriate method. + +``` swift +// MARK: RewardedAdUnitDelegate + +func rewardedAdUserDidEarnReward(_ rewardedAd: RewardedAdUnit, reward: PrebidReward) { + let type = reward.type + let count = reward.count + let ext = reward.ext + + // Process the reward +} +``` + #### Migrating Rewarded Video from a Bidding-Only integration GAM setup: @@ -299,7 +318,7 @@ Integration: 2. Implement the protocol `RewardedAdUnitDelegate` in the View Controller. 3. Remove usage of `AdManagerRequest`. 4. Remove original `RewardedVideoAdUnit`. -5. Follow the instructions to integrate [Rewarded API](#rewarded-video). +5. Follow the instructions to integrate [Rewarded API](#rewarded). ## Additional Ad Unit Configuration diff --git a/prebid-mobile/modules/rendering/ios-sdk-integration-max.md b/prebid-mobile/modules/rendering/ios-sdk-integration-max.md index 746d660e17..cd3a541f55 100644 --- a/prebid-mobile/modules/rendering/ios-sdk-integration-max.md +++ b/prebid-mobile/modules/rendering/ios-sdk-integration-max.md @@ -148,9 +148,11 @@ Now you should make a regular MAX's ad request. Everything else will be handled Once you receive the ad it will be ready for display. Follow the [MAX instructions](https://dash.applovin.com/documentation/mediation/ios/getting-started/interstitials#showing-an-interstitial-ad) for displaying an ad. -### Rewarded Video +### Rewarded -Integration example: +{% include mobile/rewarded-server-side-configuration.md %} + +#### Integration example ```swift // 1. Get an instance of MARewardedAd @@ -176,32 +178,32 @@ The process for displaying the rewarded ad is the same as for displaying the Int To be notified when a user earns a reward follow the [MAX intructions](https://dash.applovin.com/documentation/mediation/ios/getting-started/rewarded-ads#loading-a-rewarded-ad). -#### Step 1: Get an instance of MARewardedAd +##### Step 1: Get an instance of MARewardedAd {:.no_toc} This step is the same as for the original [MAX integration](https://dash.applovin.com/documentation/mediation/ios/getting-started/rewarded-ads). You don't have to make any modifications here. -#### Step 2: Create MAXMediationRewardedUtils +##### Step 2: Create MAXMediationRewardedUtils {:.no_toc} The `MAXMediationRewardedUtils` is a helper class, which performs certain utilty work for the `MediationRewardedAdUnit`, like passing the targeting keywords to the adapters. -#### Step 3: Create MediationRewardedAdUnit +##### Step 3: Create MediationRewardedAdUnit {:.no_toc} The `MediationRewardedAdUnit` is a part of the Prebid Mediation API. This class is responsible for making a bid request and providing a winning bid and targeting keywords to the adapters. -#### Step 4: Make bid request +##### Step 4: Make bid request {:.no_toc} The `fetchDemand` method makes a bid request to the Prebid Server and provides a result in a completion handler. -#### Step 5: Make an Ad Reuest +##### Step 5: Make an Ad Reuest {:.no_toc} Make a regular MAX's ad request. Everything else will be handled by GMA SDK and prebid adapters. -#### Steps 6: Display an ad +##### Steps 6: Display an ad {:.no_toc} Once the rewarded ad is received you can display it. Follow the [MAX instructions](https://dash.applovin.com/documentation/mediation/ios/getting-started/rewarded-ads#showing-a-rewarded-ad) for the details. diff --git a/prebid-mobile/modules/rendering/ios-sdk-integration-pb.md b/prebid-mobile/modules/rendering/ios-sdk-integration-pb.md index d41ceb0386..fb6b7e5e55 100644 --- a/prebid-mobile/modules/rendering/ios-sdk-integration-pb.md +++ b/prebid-mobile/modules/rendering/ios-sdk-integration-pb.md @@ -150,16 +150,16 @@ if interstitial.isReady { ``` -The **default** ad format for interstitial is **.banner**. In order to make a `multiformat bid request`, set the respective values into the `adFormats` property. +The **default** ad formats for interstitial are **.banner** and **video**. In order to make a banner-only or video-only 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 and banner ads +// Make bid request for both video and banner ads (default behaviour) adUnit?.adFormats = [.video, .banner] -// Make bid request for banner ad (default behaviour) +// Make bid request for banner ad adUnit?.adFormats = [.banner] ``` @@ -192,9 +192,11 @@ func interstitialDidReceiveAd(_ interstitial: InterstitialRenderingAdUnit) { } ``` -#### Rewarded Video +#### Rewarded -Integration example: +{% include mobile/rewarded-server-side-configuration.md %} + +##### Integration example ``` swift // 1. Create an Ad Unit @@ -212,28 +214,54 @@ if rewardedAd.isReady { } ``` -##### Step 1: Create Rewarded Ad Unit +###### Step 1: Create Rewarded Ad Unit {:.no_toc} -Create the `RewardedAdUnit` object with parameter: +Create the `RewardedAdUnit` object with the parameter: - `configID` - an ID of Stored Impression on the Prebid Server -##### Step 2: Load the Ad +You can also customize ad unit by setting additional properties: + +- `adFormats` - the set of ad formats supported by the ad unit(the default value is `[.banner, .video]` formats); +- `bannerParameters` - the banner parameters used for configuring ad unit; +- `videoParameters` - the video parameters used for configuring ad unit. + +###### Step 2: Load the Ad {:.no_toc} Call the `loadAd()` method which will make a bid request to Prebid server. -##### Step 3: Show the Ad when it is ready +###### Step 3: Show the Ad when it is ready {:.no_toc} -Wait until the ad will be loaded and present it to the user in any suitable time. +Wait until the ad is loaded and present it to the user at any suitable time. ``` swift // MARK: RewardedAdUnitDelegate func rewardedAdDidReceiveAd(_ rewardedAd: RewardedAdUnit) { - // Now the ad is ready for display + // Now the ad is ready for display - call `show` method. + if rewardedAd.isReady { + rewardedAd.show(from: self) + } +} +``` + +###### Step 4: Handle the reward +{:.no_toc} + +Handle the reward in the appropriate method. + +``` swift +// MARK: RewardedAdUnitDelegate + +func rewardedAdUserDidEarnReward(_ rewardedAd: RewardedAdUnit, reward: PrebidReward) { + let type = reward.type + let count = reward.count + let ext = reward.ext + + // Process the reward } ``` diff --git a/prebid-mobile/modules/rendering/modules-rendering.md b/prebid-mobile/modules/rendering/modules-rendering.md index 9d82a5efd6..6b1f2cab98 100644 --- a/prebid-mobile/modules/rendering/modules-rendering.md +++ b/prebid-mobile/modules/rendering/modules-rendering.md @@ -17,7 +17,6 @@ Starting with `1.14.0-beta1` Prebid mobile supports integration with **AdMob**. Starting with `2.0.0` Prebid mobile supports integration with **AppLovin MAX**. - ## Supported Ad Formats Prebid Mobile rendering supports the following ad formats: @@ -26,7 +25,5 @@ Prebid Mobile rendering supports the following ad formats: * Video Banner * Display Interstitial * Video Interstitial -* Rewarded Video - - - +* Display Rewarded +* Video Rewarded diff --git a/prebid-mobile/pbm-api/android/code-integration-android.md b/prebid-mobile/pbm-api/android/code-integration-android.md index 01adcdc33b..4791cf1ac5 100644 --- a/prebid-mobile/pbm-api/android/code-integration-android.md +++ b/prebid-mobile/pbm-api/android/code-integration-android.md @@ -383,7 +383,8 @@ In the table below, you can find Prebid's test IDs that are used in the Demo App |`prebid-demo-video-interstitial-320-480-original-api`|**Video Interstitial** (Original API)|Returns a stored response that contains a Video Interstitial 320x480 winning bid.| |`prebid-demo-video-interstitial-320-480`|**Video Interstitial** (Rendering API)|Returns a stored response that contains a Video Interstitial 320x480 winning bid.| |`prebid-demo-video-rewarded-320-480-original-api`|**Rewarded Video** (Original API)|Returns a stored response that contains a Rewarded Video 320x480 winning bid.| -|`prebid-demo-video-rewarded-320-480`|**Rewarded Video** (Original API)|Returns a stored response that contains a Rewarded Video 320x480 winning bid.| +|`prebid-demo-banner-rewarded-time`|**Rewarded HTML** Returns a stored response that contains a Rewarded HTML 320x480 winning bid with rewarded configuration.|| +|`prebid-demo-video-rewarded-endcard-time`|**Rewarded Video** Returns a stored response that contains a Rewarded Video 320x480 winning bid with rewarded configuration.|| |`sample_video_response`|**Instream Video**|Returns a stored response that contains a Video 320x480 winning bid. Note: on Android we have an [issue](https://github.com/prebid/prebid-mobile-android/issues/517) with Instream Video demo example. When it is fixed the config id will be updated to the new one.| |`prebid-demo-banner-native-styles`|**Native Styles**|Returns a stored response that contains a Native winning bid.| |`prebid-demo-banner-native-styles`|**In-App Native**|Returns a stored response that contains a Native winning bid.| diff --git a/prebid-mobile/pbm-api/ios/code-integration-ios.md b/prebid-mobile/pbm-api/ios/code-integration-ios.md index 84b9f03fe7..c0a7f1c192 100644 --- a/prebid-mobile/pbm-api/ios/code-integration-ios.md +++ b/prebid-mobile/pbm-api/ios/code-integration-ios.md @@ -384,7 +384,8 @@ In the table below, you can find Prebid's test IDs that are used in the Demo App |`prebid-demo-video-interstitial-320-480-original-api`|**Video Interstitial** (Original API)|Returns a stored response that contains a Video Interstitial 320x480 winning bid.| |`prebid-demo-video-interstitial-320-480`|**Video Interstitial** (Rendering API)|Returns a stored response that contains a Video Interstitial 320x480 winning bid.| |`prebid-demo-video-rewarded-320-480-original-api`|**Rewarded Video** (Original API)|Returns a stored response that contains a Rewarded Video 320x480 winning bid.| -|`prebid-demo-video-rewarded-320-480`|**Rewarded Video** (Original API)|Returns a stored response that contains a Rewarded Video 320x480 winning bid.| +|`prebid-demo-banner-rewarded-time`|**Rewarded HTML** Returns a stored response that contains a Rewarded HTML 320x480 winning bid with rewarded configuration.|| +|`prebid-demo-video-rewarded-endcard-time`|**Rewarded Video** Returns a stored response that contains a Rewarded Video 320x480 winning bid with rewarded configuration.|| |`prebid-demo-video-interstitial-320-480`|**Instream Video**|Returns a stored response that contains a Video 320x480 winning bid.| |`prebid-demo-banner-native-styles`|**Native Styles**|Returns a stored response that contains a Native winning bid.| |`prebid-demo-banner-native-styles`|**In-App Native**|Returns a stored response that contains a Native winning bid.| diff --git a/prebid-server/developers/add-a-module-go.md b/prebid-server/developers/add-a-module-go.md index e76374d6a5..1b31e12647 100644 --- a/prebid-server/developers/add-a-module-go.md +++ b/prebid-server/developers/add-a-module-go.md @@ -268,6 +268,10 @@ In the `BidderRequest` or `RawBidderResponse` stage: {:start="5"} 5. More test implementations for each hook can be found in unit-tests at [github.com/prebid/prebid-server/tree/master/modules/prebid/ortb2blocking](https://github.com/prebid/prebid-server/tree/master/modules/prebid/ortb2blocking) folder. +### Optional Code Update Notification + +The core Prebid engineering team sometimes makes changes to module files for various reasons: general refactoring, internal API changes, bug fixes, etc. If you want to receive an email alert about any changes made to your codebase, you can update the [codepath notification file](https://github.com/prebid/prebid-server/blob/master/.github/workflows/scripts/codepath-notification). Please read the instructions in the file. In many cases, the regex will just be your modulecode, but if you have a short modulecode, you might need to be more precise or you'll get false notifications. + ### Configuration It's possible to define default module configuration which can be read by the module at PBS startup. An example configuration for hooks might look like this: diff --git a/prebid-server/developers/add-a-module-java.md b/prebid-server/developers/add-a-module-java.md index cdb00f8815..b457c5241b 100644 --- a/prebid-server/developers/add-a-module-java.md +++ b/prebid-server/developers/add-a-module-java.md @@ -93,6 +93,10 @@ The structure of your module source code inside the modules directory must have +- README.md <- documentation ``` +### Optional Code Update Notification + +The core Prebid engineering team sometimes makes changes to module files for various reasons: general refactoring, internal API changes, bug fixes, etc. If you want to receive an email alert about any changes made to your codebase, you can update the [codepath notification file](https://github.com/prebid/prebid-server-java/blob/master/.github/workflows/scripts/codepath-notification). Please read the instructions in the file. In many cases, the regex will just be your modulecode, but if you have a short modulecode, you might need to be more precise or you'll get false notifications. + ## Module Configuration There are several places to configure a module: diff --git a/prebid-server/developers/add-new-bidder-go.md b/prebid-server/developers/add-new-bidder-go.md index b1c8b618b7..b4c708d370 100644 --- a/prebid-server/developers/add-new-bidder-go.md +++ b/prebid-server/developers/add-new-bidder-go.md @@ -357,6 +357,11 @@ We request you do not duplicate information already present in the [OpenRTB 2.x {: .alert.alert-warning :} You may not try to set the full endpoint domain from a publisher-specified bidder parameter. Prebid Server is not an open proxy. If absolutely necessary, you may specify a *portion* of the domain as a parameter to support geo regions or account specific servers. However, this is discouraged and may degrade the performance of your adapter since the server needs to maintain more outgoing connections. Host companies may choose to disable your adapter if it uses a dynamically configured domain. +{: .alert.alert-info :} +Prebid publishers and managed services often require test responses from bid adapters. Please plan to provide a method for obtaining test bids for each mediatype you support. This can be done in response to the OpenRTB `test:1` flag, or with a documented set of bidder parameters. + +#### Defining the Parameters + Create a file with the path `static/bidder-params/{bidder}.json` and use [JSON Schema](https://json-schema.org/understanding-json-schema/) to define your bidder parameters. Prebid Server requires this file for every adapter, even if yours doesn't require bidder parameters (see the 'no parameters' example at the end of this section). Let's start with this example which defines one required `placementId` string parameter: @@ -1418,6 +1423,12 @@ Notes on the metadata fields: - `openrtb_ext/bidders.go` - `exchange/adapter_builders.go` +### Optional Code Update Notification + +The core Prebid engineering team sometimes makes changes to bid adapter files for various reasons: general refactoring, internal API changes, bug fixes, etc. If you want to receive an email alert about any changes made to your codebase, you can update the [codepath notification file](https://github.com/prebid/prebid-server/blob/master/.github/workflows/scripts/codepath-notification). Please read the instructions in the file. In many cases, the regex will just be your biddercode, but if you have a short biddercode, you might need to be more precise or you'll get false notifications. + +Likewise, your bidder documentation can receive alerts by updating the [docs codepath notification file](https://github.com/prebid/prebid.github.io/blob/master/.github/workflows/scripts/codepath-notification). + ## Contribute Thank you for taking the time to develop a Prebid Server bid adapter. When you're ready, [contribute](https://github.com/prebid/prebid-server/blob/master/docs/developers/contributing.md) your new bid adapter by opening a PR to the [PBS-Go GitHub repository](https://github.com/prebid/prebid-server) with the name "New Adapter: {Bidder}". diff --git a/prebid-server/developers/add-new-bidder-java.md b/prebid-server/developers/add-new-bidder-java.md index 5971683b0b..833d37d071 100644 --- a/prebid-server/developers/add-new-bidder-java.md +++ b/prebid-server/developers/add-new-bidder-java.md @@ -269,6 +269,11 @@ We request that you do not duplicate information that is already present in the {: .alert.alert-warning :} You may not try to set the full endpoint domain from a publisher-specified bidder parameter. Prebid Server is not an open proxy. If absolutely necessary, you may specify a *portion* of the domain as a parameter to support geo regions or account specific servers. However, this is discouraged and may degrade the performance of your adapter since the server needs to maintain more outgoing connections. Host companies may choose to disable your adapter if it uses a dynamically configured domain. +{: .alert.alert-info :} +Prebid publishers and managed services often require test responses from bid adapters. Please plan to provide a method for obtaining test bids for each mediatype you support. This can be done in response to the OpenRTB `test:1` flag, or with a documented set of bidder parameters. + +#### Defining the Parameters + Create a file with the path `static/bidder-params/{bidder}.json` using [JSON Schema](https://json-schema.org/understanding-json-schema/) to define your bidder parameters. Prebid Server requires this file for every adapter, even if yours doesn't require bidder parameters (see the 'no parameters' example at the end of this section). Let's start with this example which defines one required `placementId` string parameter: @@ -1431,6 +1436,12 @@ Notes on the metadata fields: - Register With The Core - `org/prebid/server/spring/config/bidder/{bidder}Configuration.java` +### Optional Code Update Notification + +The core Prebid engineering team sometimes makes changes to bid adapter files for various reasons: general refactoring, internal API changes, bug fixes, etc. If you want to receive an email alert about any changes made to your codebase, you can update the [codepath notification file](https://github.com/prebid/prebid-server-java/blob/master/.github/workflows/scripts/codepath-notification). Please read the instructions in the file. In many cases, the regex will just be your biddercode, but if you have a short biddercode, you might need to be more precise or you'll get false notifications. + +Likewise, your bidder documentation can receive alerts by updating the [docs codepath notification file](https://github.com/prebid/prebid.github.io/blob/master/.github/workflows/scripts/codepath-notification). + ## Contribute Whew! You're almost done. Thank you for taking the time to develop a Prebid Server bid adapter. When you're ready, [contribute](https://github.com/prebid/prebid-server-java/blob/master/docs/developers/contributing.md) your new bid adapter by opening a PR to the [PBS-Java GitHub repository](https://github.com/prebid/prebid-server-java) with the name "New Adapter: {Bidder}". diff --git a/prebid-server/developers/pbs-cookie-sync.md b/prebid-server/developers/pbs-cookie-sync.md index 04bf2856dd..b97d7e3b02 100644 --- a/prebid-server/developers/pbs-cookie-sync.md +++ b/prebid-server/developers/pbs-cookie-sync.md @@ -33,7 +33,7 @@ Here's how these IDs get placed in the cookie from Prebid.js: ![Prebid Server Cookie Sync](/assets/images/prebid-server/pbs-cookie-sync.png){:class="pb-lg-img"} -1. When the [s2sConfig](/dev-docs/modules/prebidServer.html) is set, Prebid.js initiates a call to the Prebid Server [`/cookie_sync`](/prebid-server/endpoints/pbs-endpoint-cookieSync.html), letting it know which server-side bidders will be participating in the header bidding auction. +1. When the [s2sConfig](/dev-docs/modules/prebidServer.html) is set, Prebid.js initiates a call to the Prebid Server [`/cookie_sync`](../endpoints/pbs-endpoint-cookieSync.html), letting it know which server-side bidders will be participating in the header bidding auction. ```text POST https://prebid-server.example.com/cookie_sync @@ -78,10 +78,10 @@ This is how to control the coop syncing behavior from Prebid.js: ### Manually initiating a sync -Where Prebid.js isn't present, like on [AMP](/prebid-server/use-cases/pbs-amp.html) pages, the call to [/cookie_sync](prebid-server/endpoints/pbs-endpoint-cookieSync.html) doesn't happen automatically. +Where Prebid.js isn't present, like on [AMP](/prebid-server/use-cases/pbs-amp.html) pages, the call to [/cookie_sync](../endpoints/pbs-endpoint-cookieSync.html) doesn't happen automatically. If there are scenarios where Prebid.js isn't around to initiate the /cookie_sync call, publishers can choose to put an iframe on their page. -This approach works in a way quite similar to Prebid.js except that the [/cookie_sync endpoint](/prebid-server/endpoints/pbs-endpoint-cookieSync.html) is initiated by a separate script that's part of `load-cookie.html'. This file must be placed on a CDN by the publisher's Prebid Server host company. Up until July 2024, the script existed in the [Prebid Universal Creative](https://github.com/prebid/prebid-universal-creative) repository, but has since been moved to the [user-sync](https://github.com/prebid/user-sync) repo. +This approach works in a way quite similar to Prebid.js except that the [/cookie_sync endpoint](../endpoints/pbs-endpoint-cookieSync.html) is initiated by a separate script that's part of `load-cookie.html'. This file must be placed on a CDN by the publisher's Prebid Server host company. Up until July 2024, the script existed in the [Prebid Universal Creative](https://github.com/prebid/prebid-universal-creative) repository, but has since been moved to the [user-sync](https://github.com/prebid/user-sync) repo. 1. The Prebid Server hosting company places the [load-cookie.html](#manually-initiating-a-sync) file onto a CDN. diff --git a/prebid-server/features/pbs-usgen.md b/prebid-server/features/pbs-usgen.md index bfe61d2481..5273f9ddce 100644 --- a/prebid-server/features/pbs-usgen.md +++ b/prebid-server/features/pbs-usgen.md @@ -178,4 +178,4 @@ Additional information about the outcoming of privacy module processing can be o * [Prebid US Compliance Support](/features/mspa-usnat.html) * [US Custom Logic Privacy Module](/prebid-server/features/pbs-uscustomlogic.html) * [Activity Control system](/prebid-server/features/pbs-activitycontrols.html) -* [IAB US National Privacy Specification](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/US-National/IAB%20Privacy%E2%80%99s%20National%20Privacy%20Technical%20Specification.md) +* [IAB US National Privacy Specification](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/US-National/IAB%20Privacy%E2%80%99s%20Multi-State%20Privacy%20Agreement%20(MSPA)%20US%20National%20Technical%20Specification.md)