Roku Advertising Watermark

Publishers can send ad measurement beacons with the Roku Advertising Watermark to verify that they were generated by a Roku device. This helps protect publishers from device spoofing, which increases the value of their ad inventory. The Roku Advertising Watermark is a signed JSON web token (JWT) that is generated by an API that is only available on authentic Roku devices. It is then automatically appended in the HTTP header of ad measurement beacons sent by the Roku Advertising Framework (RAF) to bot mitigation platform HUMAN and 3rd-party ad measurement platforms. This enables publishers to attest that the ad measurement beacons came from a genuine Roku device.

Apps must fire all measurement beacons client-side via RAF to pass certification. This automatically applies the Roku Advertising Watermark to the measurement beacons, which attests that the beacons originated from authentic Roku devices.

Prerequisites

Publishers must do the following to send ad measurement beacons with the Roku Advertising Watermark:

  1. Integrate the Roku Advertising Framework (RAF) in their app.
  2. Verify that their app meets all advertising-related certification requirements.

Getting started

To get started with the Roku Advertising Watermark integration, follow these steps:

  1. Verify that your app meets the listed prerequisites.
  2. Program your app to fire all ad measurement beacons through RAF using one of the client-side or server-side implementations in this document.

Implementing the Roku Advertising Watermark

Publishers can use one of the following client-side or server-side integrations to send ad measurement beacons with the Roku Advertising Watermark:

  • Client-side ad insertion.
  • Client-side ad stitching.
  • Server-side ad request via the stitchedAdsInit() function (recommended for server-side integrations).
  • Server-side ad request via the fireTrackingEvents() function.

Client-side ad insertion

The app does the following:

  1. Calls the setAdUrl() to specify the publisher's 1st or 3rd-party ad server URL.
  2. Calls the getAds() function to send an ad request and get back a parsed ad response with the ads to be rendered before or during playback of the selected content.
  3. Calls the showAds() function to render the ads. This method automatically fires the appropriate ad measurement beacons at the times specified in the ad response.

For more information: RAF integration guide

Client-side ad stitching

The app does the following:

  1. Calls the setAdUrl() to specify the publisher's 1st or 3rd-party ad server URL.
  2. Calls the getAds() function to send an ad request and get back a parsed ad response with the ads to be rendered before or during playback of the selected content.
  3. Calls the constructStitchedStream() function to create a single playlist containing the ads returned by the getAds() function and the content to be played.
  4. Calls the renderStitchedStream() method to render the constructed playlist, which contains the ads. This method automatically fires the appropriate ad measurement beacons at the times specified in the ad response.

For more information: RAF integration guide

Server-side ad request via stitchedAdsInit() function

Recommended for server-side integrations

The app passes the entire ads payload to RAF and allows it to render the app UI and dispatch the ad measurement beacons at the appropriate time. This implementation function ensures that the required Roku ad experience is used and interactive ads can be shown.

For more information:

Server-side ad request via fireTrackingEvents

The app passes the ad measurement beacons directly to RAF and specifies when RAF should fire them.

For more information: