Certification testing
These tests describe the specific behavior and attributes an app must demonstrate to pass Roku's certification process. Use this list to create tests for your app during development. See Certification for more information on policies and processes as you prepare for certification.
To help developers test their apps, Roku provides a suite of tools to ensure your app complies with the certification criteria. The test suite includes the following tools:
- Static Analysis tool: Checks the app's code for certification-related errors.
- App Behavior Analysis tool: For SVOD, AVOD, and free apps, verifies app performance and deep linking meets certification requirements.
- Test automation software: Enables developers to write and execute automated test cases, including app purchasing, performance, deep linking, and other certification criteria.
Developers are expected to use these tools, the certification criteria, and the list of certification tests in this document to guide internal quality assurance testing before submitting an app to Roku for review.
1. Advertising
1.1 Apps that include video advertising must comply with all the integration requirements listed in Roku advertising requirements document.
Tests: App is meeting the criteria specified in 1.1.
Expected Result: All ads are served via the Roku Advertising Framework (RAF) whether the app is using the Roku default ad server or a third-party ad server (for example, Google DoubleClick for Publishers [DFP]. Freewheel, and so on). Ads render as expected on all Roku devices.
RAF 1.1 Apps must integrate the Roku Advertising Framework (RAF) for all ads without modifying, obstructing, or disabling RAF functionality in any way. Replays of live broadcast streams are exempt from this requirement, unless dynamic ad insertion is used to insert new ads.
RAF 1.2 All measurement beacons must be fired client-side via RAF. See the Roku Advertising Watermark integration guide for more information.
RAF 1.3 Apps in the U.S. Roku Streaming Store only that are not child-directed must support Roku ad tracking by calling the enableAdMeasurements() method and passing the required content metadata within the following methods: setContentGenre(), setContentId(), and setContentLength(). Optionally, apps may use the setNielsenGenre API to pass specific Nielsen Genre granularity and the setNielsenChannelId API for those who specify a custom Nielsen Channel ID. The enableAdMeasurements method deprecates the enableNielsenDAR API; therefore, do not use the enableNielsenDAR API.
Tests:
- Get a test ad that contains trackers for Nielsen DAR and Comscore vCE. The method for getting the test ad varies based on whether you are implementing ads client-side via RAF or server-side:
- Client-side: Call the setAdUrl method with no parameters.
- Server-side: Email [email protected] with a request for an ad request URL, and then traffic the ad request URL on your ad server.
- Generate a debug console log as described in Debugging Your application.
- Confirm the correct word appears in the log.
Expected Result:
-
Nielsen DAR contains imrworldwide in the subdomain, and the following content metadata and Nielsen data that you passed:
- c45 = <Content Duration>
- c13 = <Nielsen Channel ID>
- c43 = <Nielsen Program ID>
- c44 = <Nielsen Genre>
-
Comscore vCE Contains scorecardresearch in the subdomain and the following content metadata that you passed**:**
- ns_st_ge = <Content Genre>
- ns_st_pr = <Content ID>
- ns_st_cd = <Content Length>
RAF 1.4 Apps must display the number of ads during ad breaks using the standard Roku-branded label applied by RAF for all ads inserted client-side.
Tests:
- Play any video from the beginning to invoke the pre-roll ads.
- When an ad break appears, verify that the number of ads in the ad break is displayed in the upper left/right corner of the screen.
- Play the same video until the mid-roll ads are invoked. Verify again that the number of ads in the ad break are displayed on the screen.
Expected Result: The number of ads in the ad break are displayed during the ad break using the standard Roku-branded label applied by RAF.
ADS 1.1 Apps must disclose integration/use of all non-Roku SDKs, libraries, or other software systems and external advertising partners (e.g., DSPs) that enable video, audio, or banner ad insertion. Roku has the right to approve or deny such non-Roku SDKs, libraries, or other software systems.
Tests: App is meeting the criteria specified in 1.2.
Expected Result: App does not contain any undisclosed third-party SDKs, libraries, or other software systems that enable video, audio, or banner ad insertion.
ADS 1.2 Apps that have an inventory relationship with Roku must meet the advertising terms specified in all applicable agreements. See Video Advertisements for more information.
Tests: App is meeting the criteria specified in 1.3.
Expected Result: App is meeting the contactually-specified terms for ad requests and performance. You can review your contract with [email protected] to ensure the app is meeting the specified terms.
ADS 1.3 Apps selling ads must comply with Roku's ad load, ad frequency, and acceptable ad requirements. See Roku Advertising Guidelines for more information.
Tests: Apps can obtain the user agent from the client-side call made to their ad stitcher or ad server, and then pass it into the User-Agent header in the server-side ad request, without any modifications.
Expected Result: Per the Roku Advertising Guidelines, ad breaks are at least 7 minutes apart and contain no more than 2 minutes of ads. This helps ensure a positive viewing experience of content that is being monetized with ads (regardless if the ads are supplied by Roku or a third-party provider).
ADS 1.4 Apps in the U.S. Roku Streaming Store that have both streamed more than an average of 100,000 hours per month and averaged more than 10,000 new installs per month over the last three months may be required to implement the Demand API as part of their integration (this requirement may also be applicable to new apps projected to reach the specified thresholds shortly after launch).
Apps outside the U.S. Roku Streaming Store that have streamed more than an average of 200,000 hours per month over the last three months, and new apps outside the U.S. Roku Streaming Store that are projected to reach this threshold, may also be required to implement the Demand API. See Implementing the Demand API.
Tests: App is meeting the criteria specified in ADS 1.1.
Expected Result: Apps meeting the streaming hours threshold have integrated the Demand API.
ADS 1.5 Authenticated ad-monetized apps must use the getUserData command to display a Request For Information (RFI) screen during the sign-up and sign-in workflows to enable customers to share their Roku account information with the app. Only if the user declines the request may apps require the customer to manually enter their information.
Tests:
- Follow the instructions within the app on how to sign up and sign in.
- Verify whether the Request For Information (RFI) screen appears during the sign-up and sign-in flows.
Expected Result: The RFI screen is displayed on the app, prompting the user to grant Roku access to share their information with the app. A form for customers to manually enter their information is only displayed if the user declines to share their information.
ADS 2.1 App must pass Roku's ID for Advertisers (RIDA) and "limit ad tracking" (LAT) value on ad server requests. If the user has opted out, apps must still pass the temporary ID returned by the rodeviceInfo.GetRida() function to support frequency capping (this temporary ID is different than the UUID returned if the user has not opted out; it expires after 30 days). See GetRida(), IsRIDADisabled()asBoolean, and the URL parameter macros populated by RAF
Tests: RIDA and LAT values may be passed on ad server requests client-side via RAF or server-side. Use one of the following tests corresponding to how you pass RIDA and LAT values in ad server requests:
- Client-side via RAF:
- Place the URL parameter macros populated by RAF in ad request urls to populate the RIDA and LAT in the appropriate spot.
- Sideload the app, Telnet into the Roku device, and then enable RAF debug mode.
- Observe that RAF requests a test url and dispatches trackers on sideloaded apps when setAdUrl is passed an empty value.
- Server-side: For server-side ad requests, the ad server's runtime macros are typically used to pass the RIDA and LAT values in the ad requests instead of the RAF macros. In this case, the RIDA and LAT values are usually passed to the ad server via Roku API calls.
- Check your ad server for the runtime macros to be used to pass the RIDA and LAT values. Email [email protected] for help with this process.
- Call the GetRida() and IsRidaDisabled() methods to pass the RIDA and LAT values to your ad server, respectively.
Expected Result: The RIDA and LAT are passed on all client-side and server-side ad requests.
The RIDA is Roku's Identifier for Advertising (IFA), similar to the Google Advertising ID (ADID) or Apple Identifier for Advertising (IDFA).
LAT is often referred to as the Do Not Track (DNT) or the User Opt Out (UOO).
The RIDA and LAT are used together to ensure that the users' privacy settings are respected.
ADS 2.2 Apps with child-directed content must make ad requests that indicate that content is child-directed when serving ads during child-directed content. See the kidsContent parameter in the setContentGenre() method and the ROKU_ADS_KIDS_CONTENT URL parameter macro.
Tests: App is meeting the criteria specified in ADS 2.2.
Expected Result: Ad requests include flag indicating whether content is child-directed.
ADS 3.1 Apps must pass their Roku channel ID in ad server requests to Roku. See the roChannelInfo.getId() function and the ROKU_ADS_APP_ID URL parameter macro populated by RAF.
Tests: The Roku channel ID may be passed on ad server requests client-side via RAF or server-side. Use one of the following tests corresponding to how you pass Roku channel ID values in ad server requests:
- Client-side via RAF:
- Place the ROKU_ADS_APP_ID URL parameter macro populated by RAF in ad request urls to populate the Roku channel ID in the appropriate spot.
- Sideload the app, Telnet into the roku device, and then enable RAF debug mode.
- Observe that RAF requests a test url and dispatches trackers on sideloaded apps when setAdUrl is passed an empty value.
- Server-side: For server-side ad requests, the ad server's runtime macros are typically used to pass the Roku channel ID in the ad requests instead of the RAF macros. In this case, the Roku channel ID is usually passed to the ad server via Roku API calls.
- Check your ad server for the runtime macros to be used to pass the Roku channel ID. Email [email protected] for help with this process.
- Call the roChannelInfo.getId() method methods to pass the Roku channel ID to your ad server.
Expected Result: The Roku channel ID ("dev") is passed on all client-side and server-side ad requests to Roku when testing your sideloaded app.
ADS 3.2 Apps must use the Roku-generated device user agent in all server-side ad requests. See the RAF integration guide for more details.
Tests:
- Obtain the user agent from a client-side call made to your ad stitcher or ad server.
- Pass the user agent into the User-Agent header in the server-side ad request, without any modifications.
- Verify that the User-Agent header in the server-side ad request includes the same Roku-generated device user agent obtained via the client-side call made to your ad stitcher or ad server.
Expected Result: All server-side ad requests include the Roku-generated device user agent, without any modification.
ADS 4.1 All apps (except those streaming live content or replaying live broadcast streams) must return to the previous screen when the back button is pressed during an ad break (if the app can't return to the previous screen, the app displays an exit confirmation dialog). Apps must attempt to initiate an ad break to preserve the previously exited ad experience when playback resumes (with the same or different content).
Tests: Verify ads in the app cannot be skipped by any mechanism, such as pressing the back button to exit a video and then resuming it.
Expected Result: Ads may not be skipped by pressing the back button or any other mechanism.
ADS 4.2 All apps (except those streaming live content or replaying live broadcast streams) must ignore FF/REW commands received during an ad break (via either key presses or voice commands).
Tests: Verify ads in the app cannot be skipped by any mechanism, such as pressing the FF/REW buttons or sending a FF/REW voice command.
Expected Result: Ads may not be skipped by pressing the FF/REW buttons, sending a FF/REW voice command, or any other mechansim.
2. Accounts and purchases
2.1 Apps offering transactional content or services must integrate and enable Roku Pay services including, but not limited to, signup/sign-in, payment, and entitlements/transactions within their app. Apps must comply with all requirements listed in the Roku Pay integration requirements document.
Tests
To verify the monetization model for the app:
- If the app has been monetized for in-app purchasing, login to the app with a valid account that allows you to make purchases.
- From within the app, purchase any form of content.
- Verify the billing flow works properly for the entire purchase.
- From the app, rent any form of content.
- Wait until rental expires.
- Verify that the content is no longer available for playing, but can be re-rented or bought.
Expected Result Roku Pay works properly for in-app purchases, such as subscriptions and rentals.
2.2 Apps must integrate On-device authentication. Sign-up/sign-in workflows are prohibited from using external webpages, links to off-device promotional or marketing materials, or any other 1st or 3rd-party off-device sign-up/sign-in/authentication/activation mechanism.
Apps must complete upgrades and downgrades on the device using On-device upgrade and downgrade. The upgrade/downgrade workflows are prohibited from including external webpages.
Tests:
- Confirm you can successfully log in to your app on your device, without visiting an external webpage.
- Confirm you can successfully complete a purchase in your app on the device, without visiting an external webpage.
- Confirm you can successfully upgrade and downgrade product on the device, without visiting an external webpage.
Expected Result: A purchase is successfully made and content can be played.
2.3 SVOD apps that have streamed more than an average of 10 million hours per month over the last three months must implement Roku's Instant Signup (ISU) feature. This requirement is also applicable to new SVOD apps projected to reach the specified streaming hours threshold shortly after launch. Apps offering Premium Subscriptions on The Roku Channel are exempt from this requirement.
Apps' ISU integration must include offers for lapsed and canceled subscribers. This requirement is applicable to apps with existing ISU integrations.
Apps must return a product offer to Roku for all current non-subscribers. This ensures that all non-subscribed customers receive a product offer on all touchpoints. This helps drive subscription sign-ups, particularly for lapsed and cancelled customers.
Tests: App is meeting the criteria specified in 2.3.
Expected Result: Apps that have integrated Instant Signup are performing in accordance with the implementation document.
2.4 Apps are prohibited from including nested content or applications, additional content via browsers or embedded screens, deep links to other applications, or any cross-app functionality.
Tests:
- Navigate through the menus within the app.
- Verify no content is being made available to outside apps.
- Verify no outside, third-party app's content is available within the app.
Expected Result:
- You have not shared access to your app with outside parties.
- Your app offers no 3rd-party app, content, applications or browsers.
2.5 Apps must disclose integration/use of all non-Roku SDKs, libraries, and/or app features that enable, facilitate, or link to monetary transactions or external webpages related to such transactions. Roku has the right to approve or deny such non-Roku SDKs, libraries, and/or app features. Apps may not facilitate or direct customers to use any method of payment and/or method of payment interface in connection with their app other than Roku Pay.
Tests: App is meeting the criteria specified in 2.5.
RP1.1 Apps must provide a name, description, and poster (a 540x405 JPEG or PNG image) in each language supported by the app. The app name must clearly identify the company associated with the service, and the publisher must have full legal rights or consent for their app names and the rights to all trademarks and copyright expressions associated with the name. The app name may not include the name "Roku", and it may not contain any profanity, or derogatory or misleading language.
Expected Result: App is meeting the criteria specified in RP1.1.
RP2.1 All authenticated transactional apps (SVOD, TVOD, and other subscription services) must use the getUserData command to display a Request For Information (RFI) screen during the sign-up and sign-in workflows to enable customers to share their Roku account information with the app. Only if the user declines the request, may apps require the customer to manually enter information other than a password.
Tests:
- Follow the instructions within the app on how to sign in.
- Verify whether the Request For Information (RFI) screen appears during sign-in flow.
Expected Result: The RFI screen is displayed on the app, prompting the user to grant Roku access to share their information with the app. A form for customers to manually enter their information is only displayed if the user declines to share their information.
RP3.1 Subscription services must create product groups in the Developer Dashboard for any set of subscription products that the consumer should not be able to be subscribed to simultaneously. For example, if an app has two in-app products for the same monthly subscription but with different free trial durations, these two products must be added to the same product group to prevent the customer from paying for two separate monthly subscriptions.
Tests:
- Create a test Roku customer account.
- Activate and link Roku device to the account.
- Create a product group with at least two mutually exclusive subscription products.
- Purchase one product in the product group with your test user.
- Attempt to purchase a second product in the product group.
- Roku Pay displays a "You're already subscribed to the app" dialog.
Expected Result:
- You cannot purchase an in-app product when another product in the same product group has already been purchased.
RP3.2 Apps must protect against multiple purchases of content or subscriptions through Roku Pay before passing new orders to the Roku Streaming Store service. The Roku Streaming Store service inherently protects against purchasing the same subscription code multiple times, but preventing, for example, the purchase of a free trial subscription and a non-free trial subscription must be done in the app.
Tests:
- Create a test Roku customer account.
- Activate and link Roku device to the account.
- Install and sign up to the app
- Purchase a subscription using test account and verify it works.
- Attempt to make several purchases and verify it does not work.
Expected Result: The app handles multiple purchases properly.
RP3.3 SVOD apps must provide 15-days notice to existing customers before changing the price of their service.
Expected Result: App is meeting the criteria specified in RP3.3.
RP3.4 Apps must name in-app products so that the service being offered is clearly identifiable. The publisher must have full legal rights or consent for their in-app product names and the rights to all trademarks and copyright expressions associated with the names. The in-app product names may not include the name "Roku", text related to a trial or discount offer**,** or any profane, derogatory, or misleading language.
Expected Result: App is meeting the criteria specified in RP3.4.
RP4.3 Apps must automatically entitle content or subscriptions purchased through Roku Pay across all devices tied to the purchasing Roku account. Apps can use the getPurchases API can upon launch to return the transactionID for an active subscription, and they can use an entitlement server to look up an account via a call to the validate-transaction API.
Tests:
- Select 'Subscribe' button or navigate to content that requires subscription.
- Select 'Share'/'Don't share' option (if applicable).
- Navigate through email and password screens (if applicable) to purchase.
- Purchase available subscriptions.
- Verify the purchase worked immediately on the Roku device.
- Verify the subscription status of the app on https://my.roku.com/account/subscriptions web page shows the purchase.
- Verification on app's web site:
- Open app's/provider's website.
- Observe if any type of subscription is available.
- Verify if the same subscription can be purchased on your Roku device.
Expected Result: On app launch a transactionID is returned for an active subscription.
RP4.4 All subscription services that have streamed more than an average of 5 million hours per month over the last three months (and new subscription services projected to reach the specified streaming hour threshold shortly after launch) must implement Roku Event Dispatcher (RED) in the signup workflow.
Apps must fire a RED event upon loading each page within the signup flow and submission of the final page to help track where users are abandoning the process. This includes, but is not limited to, the following pages: landing, sign up, registration, device activation, subscription selection, payment, purchase confirmation, and cancellation.
If the app's sign-up flow is contained within a form that covers one or more pages, Apps must fire a RED event when each element in the form is completed. Streaming hours per month information is available in the Developer Dashboard.
Tests:
- Go through purchase and authentication process by opening every available pre-sign up pages (e.g. landing, sign in, registration, device activation)
- Check port 8085 that you have a print statement that shows a successful firing of a RED event on every visited page.
Expected Result: RED events are fired upon each page load and the submission of the final page, or RED events are fired upon each field in the form being completed.
RP4.5 Apps using Roku Pay that have streamed more than an average of 5 million hours per month over the last three months must implement Roku's Enhanced Subscription Recovery feature to reduce involuntary churn. This requirement is also applicable to new apps projected to reach the specified streaming hours threshold shortly after launch.
Tests: App is meeting the criteria specified in RP4.5.
Expected Result:
App has properly implemented the Enhanced Subscription Recovery feature per the integration guide.
3. Performance
3.1 Apps must be available on all Roku devices that receive the current Roku OS; responsive to user launch, navigation, browse, and playback of content at a reasonable speed on all supported Roku devices; and be free of frequent crashes, rebuffering, or other material performance that negatively impacts or limits the consumer experience.
Apps must meet requirements 3.2–3.6 when measured specifically on the Roku Streaming Stick+ (Amarillo-2019 3810X) or the Roku Premiere+ (Gilbert 4K 3921X). If the performance requirement is not met on these specified devices, Roku reserves the right to block launch on all other Roku device types.
Tests:
- Add the app in testing to your Roku player.
- Navigate to the app on the home screen and launch it.
Expected Result: App is responsive to user navigation, find, and playback of content at a reasonable speed.
3.2 Apps must launch to a fully rendered home screen within 15 seconds. A signal beacon must be added to the app to measure launch times. The debug console can then be used to verify that the app's launch time is meeting this requirement. See Measuring app performance on how to measure app launch times.
Tests:
- Select your app from the Roku home screen.
- Use the BrightScript console (port 8085) to check the app launch time.
- To retest, reboot your device and wait 30 seconds before testing again.
Expected Result: App is launched within 15 seconds of being selected from the Roku home screen. If you need to modify your application to meet this requirement, you can retest it by uninstalling your app, rebooting your Roku device, and reinstalling the app.
3.3 Apps must have screen-to-screen (scene-to-scene) transitions that are within 3 seconds.
Tests:
- Run metrics to identify transition time is within 3 seconds.
Expected Result: Transition time is within 3 seconds.
3.4 Apps must display a loading indicator during any process visible to users that takes longer than 3 seconds. Apps must respond to user requests within 10 seconds.
Tests:
- Make a user request that requires longer than 3 seconds.
- Verify the appropriate "notification" is displayed.
- Make user requests to determine how long response takes.
Expected Result:
- appropriate notifications are displayed when needed.
- User requests are completed in 10 seconds or less.
3.5 Apps must respond to remote button presses and navigate between tiles within 250 milliseconds.
Tests:
- Navigate app UI with Roku remote button presses and time the response.
- Navigate app UI tile-to-tile and time the response.
Expected Results: A response to a remote button press or tile-to-tile navigation do not exceed 250 milliseconds.
3.6 Apps must start playing content within 8 seconds of initiation.
Apps with custom video players must fire video start beacons to measure video start times (if the app is using the Roku video player, the Roku OS automatically fires beacons to measure and record the video start time).
The debug console can be used to verify that video start times are compliant. See Measuring app performance for more information.
Roku's Fast Video Start is available to pre-buffer content and help improve playback performance.
Tests:
- Start any content playback.
- Use the BrightScript console (port 8085) to check the VOD launch time.
Expected Result: Content will start playing within 8 seconds of initiation. If you need to modify your application to meet this requirement, you can retest it by uninstalling your app, rebooting your Roku device, and reinstalling the app.
3.7 The app's file size must be 4 MB or less.
Tests
- The file size of your app is 4MB or less.
Expected Result: File size of the app is no larger than 4MB.
4. App operation
4.1 App updates are prohibited from requiring reactivation/re-linking/re-login, and must persist saved data.
Tests:
- Remove all versions of the app from the Roku player.
- Reboot Roku device.
- Install the currently published version of the app from the Roku Streaming Store.
- Launch the app and link to a valid production account.
- Exit the app.
- Install the version of the app under test using the app code specified in the tracking ticket.
- Launch the version of the app under test.
- After relaunching the app and rebooting the device, verify the linking to the app persists.
- Verify this error is not present: "dev_id of submitted package does not match dev_id of previously submitted package".
Expected Result:
- If you are updating an existing app, it will use existing data without requiring any re-activation or re-linking.
- The dev_id of the app under test matches the dev_id of the existing published version of the app.
4.2 Apps that require a user to log in and that have streamed more than an average of 1 million hours per month over the last three months must integrate Automatic Account Link. This requirement is also applicable to new apps projected to reach the specified streaming hours threshold shortly after launch.
Tests:
- Create a test user Roku customer account.
- Activate and link Roku device to the account.
- Install and sign up to the app.
- Link another Roku device to the account.
- Try to load the app. It should sign the test user in automatically.
Expected Result: User can be authenticated and sign in successfully from other devices.
4.3 Apps that require authentication (SVOD, TVE, and other subscription services) must use the Roku Event Dispatcher to communicate authentication status.
Tests:
- Go through purchase and authentication process.
- Check port 8085 that you have a print statement that shows a successful firing of the Event Dispatcher pixel on successful entitlement.
Expected Result:
The debug console displays a print statement showing a successful firing of the Event Dispatcher pixel upon entitlement.
4.4 Roku reserves use of the Options ("*") button during video playback for the sole purpose of Roku system displays. Apps may use the Options button for additional in-app options while UI components are displayed on top of the video.
Tests:
- Start playing a video.
- Press "*" key on your remote control during playback.
Expected Result: During video playback with no obscuring UI components, the "*" button is not used for any additional in-app options.
4.5 Apps are prohibited from overriding or interfering with Roku's system screensaver. See Roku’s Screensaver Policy.
Tests:
- Launch the app.
- Do not use the Roku device until the duration of the screensaver time is met.
- Verify the screensaver behaves properly.
Expected Result Screensaver works properly.
4.6 Apps must directly return the user to the previous screen and/or state when the back button on the Roku remote is pressed. When the back button is pressed on the app's home screen, apps must exit the app and return the user to the Roku home screen. Apps may display a single confirmation dialog immediately before the user exits the app—and then return the user to the Roku home screen upon receiving confirmation that they want to leave the app.
Tests:
- Launch the app and navigate to content and menus.
- Press back button on your remote.
- Navigate to app homescreen.
- Press back button on your remote until you land on Roku's Home screen.
Expected Result: All back buttons behave properly.
4.7 Apps must display thumbnails during trick play for VOD content longer than 15 minutes.
Tests:
- Begin playing a video that is at least 15 minutes long.
- Trick play video and verify that thumbnails appear in accordance with playback.
Expected Result: Thumbnails are displayed during VOD trick play.
4.8 Apps must comply with all applicable accessibility laws and global settings related to accessibility and user experience. Apps must provide closed captions and audio descriptions for content where required by law. If including closed captions, the app must follow the user global settings for closed captioning, and support the following closed captioning settings in the Options menu: On, Off, On instant replay, and On mute (Roku TVs only). For VOD content, apps must synchronize the captions with the audio.
Apps must adhere to Roku’s autoplay policy.
Tests:
- Start playing any video with closed captions.
- Press * button to invoke Closed caption/audio configuration pop-up/sidebar.
- Select captions mode On/Off/On instant Reply/On mute.
- Close the pop-up/sidebar.
- Press On Instant Replay/On mute for invoking the appropriate options.
Expected Result:
- Closed Captions are shown during video playback when set to On.
- Closed Captions are not shown during video playback when set to Off.
- Closed Captions are shown for 20 seconds after pressing Instant Replay.
- Closed Captions are shown during video playback when set to On mute after pressing Mute.
4.9 Apps must rewind between 10 to 25 seconds when the instant replay button on the Roku remote is pressed.
Tests: Instant replay should rewind between 10 to 25 seconds.
Expected Result: Video rewinds between 10 to 25 seconds.
4.10 Apps must implement bookmarking for all VOD content longer than 15 minutes. Apps must store bookmarks for a minimum of 30 days.
Tests:
- Begin playing a video. Let it play for a few minutes, or fast forward to a new position in the video.
- Press Back to exit playback. Verify that resume option appears.
- Press the Home button on the remote to return to the Roku Home screen.
- Navigate to the app on the Home screen and launch it.
- Navigate back to the video that was played in step #1.
- Select the resume option. Verify that the clip begins to play at a close approximation of where it last played.
Expected Result:
- Longer form content (15 minutes or over) have bookmark functionality.
- Apps with video bookmarks functionality behave as expected and allow user to resume playback from a specific location.
- The resume option should work before and after relaunching the app.
4.11 Apps that have streamed more than an average of 5 million hours per month over the last three months must implement all voice controls that are supported on the Roku platform. Apps must implement proper error handling for unsupported voice commands. These requirements are also applicable to new apps projected to reach the specified streaming hours threshold shortly after launch.
Tests:
- Launch the app
- Log in into the app (if needed)
- Verify that the app can handle the following voice commands (transport events):
- Skip/Fast Forward/Rewind
- Play/Pause/OK
- Replay
- Start Over
- Seek
- Next
- Nowplaying
- Like/Dislike
- Shuffle/Loop
Expected Result: App successfully handles all voice commands.
4.12 Apps must use Roku voice keyboards for email, PIN, and password entry.
Tests:
- Launch the app
- If app sign-in is required, a dynamic voice keyboard or dynamic custom voice keyboard is used for entering an email address and password.
- If PIN entry is required (for example, when entering a parental access code), a dynamic voice PinPad or dynamic custom voice keyboard is used.
Expected Result:
App displays a voice keyboard when customers need to enter an email address, PIN, or password.
4.13 Apps in the U.S. Roku Streaming Store that have streamed more than an average of 5 million hours per month over the last three months and apps outside the U.S. Streaming Store that have streamed more than an average of 1million hours per month over the last three months (effective October 1, 2026) must implement Roku’s Continue Watching feature. This requirement is also applicable to new apps projected to reach the specified streaming hours threshold shortly after launch. TVOD, live linear, and made-for-kids apps are excluded from this requirement.
Tests: App is meeting the criteria specified in 4.13.
Expected Result: App has properly implemented the Continue Watching feature per the integration guide.
4.14 Apps in the U.S. Roku Streaming Store that have streamed more than an average of 5 million hours per month over the last three months must implement Roku’s Instant Resume feature (effective October 1, 2026).
Tests: App is meeting the criteria specified in 4.14.
Expected Result: App has properly implemented the Instant Resume feature per the integration guide.
5. Deep linking
5.1 Apps must support deep linking for all media types, per Roku's deep linking policy.
Tests:
- Your Roku device and PC must be connected to the same sub-network.
- Do not login to the app.
- In your browser, launch Roku Deep linking Tester tool. Follow the instructions to select the channel ID and app name.
- Do not enter any parameters and click "Send".
- Verify content can be launched properly as defined in Roku's deep linking policy.
Expected Result: Content can be launched through deep links properly based on mediaType.
5.2 Apps must implement Direct to Play to support direct voice playback commands for launching and playing content.
Tests:
- Verify that the manifest includes the roInput flag (supports_input_launch=1).
- Connect your Roku device and computer to the same sub-network.
- Launch the app.
- Send an External Control Protocol (ECP) input command via cURL to your Roku device using the following syntax: curl -d '' 'http://<Roku Device IP Address>:8060/input?contentId=<contentIdValue>&mediaType=<mediaTypeValue>'
- Repeat test for unauthenticated and authenticated users.
Expected Result: Content is launched as specified for the following conditions:
- App Running: The video content item is launched, without re-launching the app.
- Unauthenticated: The video content item is launched after authentication has been completed.
- Authenticated: The video content item is launched.
5.3 Apps are prohibited from deep linking into other apps or directing users to exit the app to purchase content, goods or other services.
Tests:
- Navigate through the menus within the app.
- Ensure that within the app there is no option to deep link into any third-party apps.
Expected Result: Your app does not deep link into any third-party apps.
6. UI and graphics
6.1 Apps must have a non-zero version number. This number must be incremented for each build submitted and updated in the manifest.
Tests:
- Navigate to the app on the Roku device's Home screen and focus it.
- Select * (star) key on your remote to invoke the pop-up with app information.
- Verify the version number is not zero.
Expected Result: Version number is greater than zero.
6.2 Apps in the Kids & Family category must only include content that is appropriate for children. Apps are prohibited from including ads that are targeted based on user activity (behavioral advertising) and may only include ads that are appropriate for children (for example, no graphic violence, no adult situations, and so on).
Tests:
- Navigate through the app and examine for inappropriate content.
Expected Result: The Kids & Family category displays no inappropriate content.
6.3 Public apps are prohibited from containing content deemed to be pornographic. With respect to app information that may appear outside of the application (for example, in search results, in the platform user interface, or on Roku’s website), content and descriptions must be appropriate for all ages. This includes the app name, artwork, and descriptions appearing in the Roku Streaming Store and web. This also pertains to content titles, artwork, and descriptions appearing in Roku Search.
Tests:
- Navigate through the app and examine content for pornography.
Expected Result: Your public app does not contain pornographic content.
6.4 The Roku Streaming Store artwork and splash screen must clearly represent the name or identity of the app using only broadcast-safe colors with proper sizing. The app splash screen must support FHD (1920x1080p) and HD (1280x720p) resolutions. In addition, artwork must not be transparent. The splash screen's URI must be listed in the package manifest file.
Tests:
- Verify splash screen resolutions are: FHD: 1920x1080px and HD: 1280x720px.
- Verify none of the Roku Streaming Store artwork or splash screen is transparent.
- Check that in the manifest the splash screen URI is present and correct.
Expected Result: All Roku Streaming Store artwork and splash screens display correctly.
6.5 Apps that are pre-checked for installation during the device activation flow must be CVAA compliant.
Tests:
- Device activation pre-check is CVAA compliant.
Expected Result: Your app complies with CVAA, if required.
Updated 27 days ago
