App Requirements

Prev Next

Below is a list of various App requirements which must be met. These requirements allow you to deliver the best App experience possible while also providing us with key information to ensure the quality your users expect.

User stories are included within the requirements to help aid in the development of your App. Expand the user story sections for the user-story details, prerequisites, acceptance criteria, and additional notes.

Operational requirements

We use these metrics to monitor reliability and performance to ensure your user-expected quality of performance is met.

Metric

Definition

Methodology

Requirement

Time To Minimally Useable (TTMU)
REQ_ID:OR01

The time from when your App starts loading into the WPE runtime until your App calls the Lifecycle.ready() method. (See Launch Completed metric below.)

User Story

As a user, I want the App to launch quickly so that I can start using it.

Acceptance Criteria
GIVEN I am using an X1 App Platform device connected to a controlled network speed of 20mbps, WHEN I launch the App from a cold start (i.e., it is in the “unloaded” state, not inactive state), THEN the App splash screen (displaying the App identification / logo) must appear within 5 seconds.

UK Only: On Sky Glass, the App splash screen must appear within 2 seconds after launching the App from a cold start.

GIVEN I am using an X1 App Platform device connected to a controlled network speed of 20mbps, WHEN I launch the App from a cold start (i.e., it is in the “unloaded” state, not inactive state), THEN the App UI must load within 10 seconds.

Notes

  • The App should always operate without issues if a user has at least 2.5mbps available. If the App experiences a lower network speed or loss of connectivity, then the App must handle this gracefully.

  • The App must always support the ability for it to be placed into an Inactive state in order to reduce load times.

  • Profile selection should be a function within the App; it should not be a barrier to content discovery or playback.

  • Loading times are dependent on the App and hardware on the set-top box (STB). Loading indicators are controlled by the App.

  • UK Only: On a Sky Q multiroom device, an extra 10% load time is allowed.

Lifecycle.ready()
-
When App is launched

95% of all launches must be less than 10s over a 24hr period, with a minimum of 1000 launches.

Error Free Session Rate (EFSR)
REQ_ID:OR02

The number of Error Free Sessions divided by the total number of sessions over a given 4hr time period.

An error free session is any App session in which there were zero user-detectable errors (inclusive of errors which do not display an error message), which are tracked via Metrics.error().

Error-free session count
÷
Total session count

Greater than 95% over a 4hr period (min 1000 launches)

Errors Per Content Minute (EPCM)
REQ_ID:OR03

The total number of user-detectable errors per minute of content viewed by users.

This is an aggregated metric and not measured on a per-session basis.

Metrics.error() count
÷
sum( Metrics.stopContent() - Metrics.startContent() )

Less than 0.05 over a 4hr period (min 1000 launches)

Reporting requirements

As a Content Partner, it is your responsibility to resolve all issues related to your App reported by us or your users. Your users exist all around the world, so you must provide 24/7 support 365 days per year with no exceptions.

Metric

Definition

Requirement

Launch completed
REQ_ID:RR01

When your App has loaded and is able to handle user inputs.

App must call Lifecycle.ready() method when App has become usable.

Error detected
REQ_ID:RR02

The moment your App detects an error occurred which a user can discover

App must call Metrics.error() method upon detecting an user-visible error.

User interaction
REQ_ID:RR03

Whenever one of your users starts or stops interacting with content (playing a game, listening to music, watching a video, etc.)

The corresponding Metrics.startContent() or Metrics.stopContent() method must be called to indicate that the interaction has started or stopped.

Incident response time
REQ_ID:RR04

The time it takes to communicate to us indicating you have allocated resource to investigate or resolve an issue after being made aware of it (internally or externally).

You must respond to any issues within the priority level requirement listed in the Incident Priority Levels section below.

Incident resolution time
REQ_ID:RR05

The time it takes to fully resolve the issue after initially being made aware of it (internally or externally).

You must resolve any issues within the priority level requirement listed in the Incident Priority Levels section below.

User Story

As a product lead, I want the App to provide various reporting metrics, so that I can monitor the App and provide relevant content in the UI.

Acceptance Criteria
GIVEN the App has onboarded onto the X1 App Platform, WHEN the App integrates as per the partner documentation, THEN the distributor can apply treatment accordingly in the X1 App Platform’s UI.

For example: GIVEN the App has onboarded onto the X1 App Platform, WHEN the App integrates its Consumption & Resume Point data, THEN this should reflect in the X1 App Platform UI (e.g. with content appearing in the “Play now” rail and resume points in X1 App Platform UI Show centres).

GIVEN the App has onboarded onto the X1 App Platform, WHEN the App integrates Entitlement data, THEN the App platform will be able to merchandise more accurately to users who are entitled to the App content.

GIVEN the has onboarded onto the X1 App Platform, WHEN the App integrates Quality of Service metrics (for monitoring and application reporting), THEN the distributor will be able to monitor the service and identify incidents.

Incident priority levels

Your users want to have the best experience possible, which is why you must respond and resolve issues quickly. The priority levels below outline the required response and resolution times based on the severity of the issue.

Priority

Response Time

Resolution Time

Priority Definition

P0 - Critical

30 minutes

4 hours

App is completely unusable or essential features/functionalities do not work.

P1 - Urgent

1 hour

8 hours

Non-essential features/functionalities are not fully functional, significantly hindering App usage; issues that could weaken system integrity over a period of time; problems that can be “worked” around in the short term but cause significant operational disruption in the long term.

P2 - Important

1 Business Day

2 Business Days

Assistance required for technical or functional features of your App. Problems that exist, that cause minor operational difficulties within the App.

P3 - Monitor

2 Business Days

One week

General queries. Undefined problems that may cause minor operational difficulties. Problems that require additional research and monitoring, collaborating with your team and the X1 App Program team to define and resolve the issue.

P4 - Information

One week

When commercially feasible

Comments or suggestions on services, technical features, design or other topics.

Functional requirements

These requirements are designed for your App to function properly on all devices and allow users to view your content.

Feature

Requirement

Response time
REQ_ID:FR01

The time it takes for your App to show a response to a user key-press must be less than 100ms. For example, the user selects “play” and it either starts playing or a “loading” icon appears within 100ms.

App navigation
REQ_ID:FR02

The current focus during navigation must be clearly identified on screen.

User Story

As a user, I want to be able to navigate through the App menu with ease and be certain which item is in focus.

Acceptance Criteria
GIVEN I am in the App UI, WHEN I navigate between content tiles or menu, THEN the current in focus must be clearly identified on screen.

GIVEN I am on the App landing/sign-in page, WHEN I navigate between options and through sign-up and/or sign-in, THEN the current in-focus state of the user selection must be clearly identifiable on screen.

Notes
Identification can be via a colored box, highlighted image or subtle re-sizing.

Search
REQ_ID:FR03

When a user submits a search, the correct list of content options is presented to the user.

User Story

As a user, I want to be able to search within the so that I can find what I’m looking for.

Acceptance Criteria
GIVEN I have entered the minimum number of search characters within the App, WHEN the search is submitted, THEN the correct asset list should be returned for the searched characters.

GIVEN I select a title from the returned asset list, WHEN I select the play option, THEN the asset should play successfully.

Notes
Identification can be via a colored box, highlighted image or subtle resizing.

Playback start
REQ_ID:FR04

The amount of time between a user requesting playback and the asset starting playback must be less than 3 seconds.

Device support
REQ_ID:FR05

Your App must support all X1 App Platform-compliant Remote Specifications.

User Story

As a user, I want to be able to use any compatible remote to control the App in line with the Button Mapping and Trickplay requirements, so that each of the relevant remotes I use to access the App works as expected.

Acceptance Criteria
GIVEN I have a supported remote, WHEN I interact with the App using the remote control, THEN the App should work as expected.

GIVEN I am using a remote control with a Touch Dish, WHEN I interact with the apps using swipe/swipe-and-hold/select commands, THEN the App should work as expected

GIVEN I am using a Touch remote control with a Touch functionality turned off ,WHEN I interact with the apps using click/click-and-hold/select commands, THEN the App should work as expected.

Memory usage
REQ_ID:FR06

Local storage
REQ_ID:FR07

Your App must be able to operate without local storage as a starting point.

IP stack
REQ_ID:FR08

All endpoints must be reachable by IPv4 & IPv6. Many X1 Devices are IPv6 only which means they cannot connect directly to any service that does not have an IPv6 address. Any services your App may use, including those used to monetize your advertising inventory, must be able to communicate with the X1 App Platform through both IPv6 & IPv4.

HTTPS
REQ_ID:FR09

HTTPS for all connections, including those related to data and content delivery.

Web standards
REQ_ID:FR10

Your App should follow W3C standards, see www.w3.org for more info

Deep linking
REQ_ID:FR11

Your App must support deep linking via the Lifecycle navigateTo event.

Screen saver
REQ_ID:FR12

Your App must develop its own App screen saver that deploys within 15 minutes of inactivity. The screen saver must not deploy during active video playback.

Search
REQ_ID:FR13

The search results should match the search query. The asset selected from the search should play successfully.

User Story

As a user, I want to be able to search within the App so that I can find what I’m looking for.

Acceptance Criteria
GIVEN I have entered the minimum number of search characters within the App, WHEN the search is submitted, THEN the correct asset list should be returned for the searched characters.

GIVEN I select a title from the returned asset list, WHEN I select the play option, THEN the asset should play successfully.

Error messaging
REQ_ID:FR14

When error messages are displayed, they are clearly displayed in the user’s preferred language or local language. The error message must also include information on what the issue is and what the solution is.

User Story

As a user, I want to be provided with helpful error messages, so that in the event of a problem, I understand the issue and know the solution (if applicable).

Acceptance Criteria
GIVEN there is an issue (I.e. network disconnected), WHEN I navigate the App, THEN I will see an error message with clear information on what the issue is and what the solution is, if applicable.

GIVEN there is an issue, WHEN an error message is displayed, THEN it will be displayed in my local language.

GIVEN there is an issue, WHEN an error message is displayed, THEN it will present an error code.

Notes
List of error codes and meanings must be made available to distributors prior to launch.

Max no. of devices per account
REQ_ID:FR15

Users must be presented with a message indicating the maximum number of devices has been reached and be advised of action to take in order to use your App on their current device.

User Story

As a user, I want to be informed when I have reached my maximum numbers of devices for my account, so that I understand what my options are.

Acceptance Criteria
GIVEN I have launched the App under the same account on the maximum number of devices, WHEN I launch the App on an additional device under the same account , THEN I must be presented with a message indicating that the maximum number of devices has been reached and be advised of action I must take in order to use the App on the current device

GIVEN I am simultaneously streaming within the App under the same account on the maximum number of devices, WHEN I try to stream within the App on an additional device under the same account, THEN I must be presented with a message indicating that the maximum number of devices has been reached and be advised of action I must take in order to stream within the App on the current device

DIAL
REQ_ID:FR16

If DIAL is supported, then the App must launch, play the asset, and then push the App to the device using the cast function on the user’s mobile/tablet device.

User Story

As a user I want to be able to launch App on the SoIP device by using the cast function from the App on my mobile/tablet device.

Prerequisite
Launch the App on a companion mobile device, play an asset and then push the App to the device using DIAL protocol.

Acceptance Criteria
GIVEN I have launched the App on the device, WHEN I select to push the App to the device, THEN the asset must start playing on the device.

GIVEN I have not launched the App on the device, WHEN I select to push the App to the device, THEN the App must load on the device and the asset must start playing without further interaction required

App features
REQ_ID:FR17

All available functionalities within the App are working correctly.

This is only applicable for apps in the UK: Test teams must be provided with the full list of feature functionality in the App.

The Certification process will confirm the full functionality of these features and we would expect to resolve any issue with a feature that does not work prior to launch, based on discussions with us.

Button mapping
REQ_ID:FR18

Button mapping must not deviate from the X1 App Platform button map guide unless a rare exception is made with the X1 App Platform. It must remain intuitive to avoid user confusion.

Audio/Video quality requirements

Item

Requirement

Quality
REQ_ID:AV01

  • UI resolution must be a minimum of 1080p.

  • Video resolution must have capability of 1080p and use adaptive bitrate (ABR).

  • Audio bitrate on asset playback must be a minimum of 96Kbit/s.

  • The asset quality selected must play in the stated format (HD, UHD, HDR, etc)

User Story

As a user, I want the App to meet certain minimum requirements for quality so that I can enjoy the best experience in the App.

Prerequisite
Launch the App on a companion mobile device, play an asset and then push the App to the device using DIAL protocol.

Acceptance Criteria
User Interface
GIVEN I have launched the App, WHEN I am navigating the UI, THEN the UI resolution must be a minimum of 1080p

Video Content
GIVEN I have launched the App, WHEN I have started playback, THEN the video resolution must have capability of 1080p and use an adaptive bitrate (ABR)

Audio Content
GIVEN I have launched the App, WHEN I have started playback, THEN the minimum audio bitrate must be 96 Kbit/s

Video playback
GIVEN I have launched the App, WHEN I have started playback, THEN HD/UHD/HDR assets must play successfully in the stated format

Screen resolution
REQ_ID:AV02

Your App must support rendering at both 720p and 1080p screen resolutions.

Dolby Digital+ and Dolby Audio
REQ_ID:AV03

Your App must provide the best audio format when it exists and must not restrict this. If your App has Atmos Audio (or Dolby Digital+), it must be made available on the device.

User Story

As a user, I want audio to play in Dolby Atmos, Dolby Digital+ or Dolby Digital Audio when available so that I can enjoy the best experience in the App.

The App must provide the best audio format when it exists and must not restrict this. If the App has Dolby Atmos Audio (or Dolby Digital+); it must be made available on the X1 App Platform.

Acceptance Criteria
GIVEN I have set Dolby Digital+ in Settings and my audio device does support Dolby Atmos, WHEN I select content available in Dolby Atmos, THEN the content must play in Dolby Atmos

GIVEN I have set Dolby Digital+ in Settings and my audio device does not support Dolby Atmos but does support Dolby Digital+, WHEN I select content available in Dolby Atmos, THEN the content must play in Dolby Digital+

GIVEN I have set Dolby Digital+ in Settings, WHEN I select content available in Dolby Digital+, THEN the content must play in Dolby Digital+

GIVEN I have set Dolby Digital in Settings ,WHEN I select content available in Dolby Atmos, Dolby Digital+ or Dolby Digital ,THEN the content must play in Dolby Digital

Notes
A user can set their digital audio preference in the X1 App Platform UI by navigating to Settings>Setup>Audio visual> Digital audio output HDMI and selecting Normal, Dolby Digital, or Dolby Digital+

A user who sets Dolby Digital+ in their HDMI audio output settings, who is not connected to a Dolby Atmos or Dolby Digital+ compatible audio system, may hear no audio

Standard playback
REQ_ID:AV04

There must not be any AV issues on playbable assets including advertisements.

User Story

As a user, I want content including ads to be played with no issues, so that I can enjoy playback without unnecessary interruption to my experience.

Acceptance Criteria
GIVEN I am playing video within the App ,WHEN content commences playing, THEN there must be no AV issues experienced

GIVEN I am playing video within the App, WHEN an advert commences playing, THEN there must be no AV issues experienced

GIVEN I am playing video within the App, WHEN a streaming interruption is caused by a technical or network connectivity related issue, THEN graceful handling of the interruption to playback is expected

Playback issues
REQ_ID:AV05

If there is a streaming interuption due to technical or network connectivity, your App must gracefully handle the interruption and resume playback as expected.

Extended playback
REQ_ID:AV06

There may not be any playback issues when playing videos for an extended period of time.

User Story

As a user, I want to be able to play video for long periods of time (10+ hours) without issue, so that my experience is not interrupted.

Acceptance Criteria
GIVEN I am playing video within the App, WHEN the playback time exceeds 10 hours, THEN the audio must continue to play back without issue

GIVEN the user is playing video within the App, WHEN the playback time exceeds 10 hours ,THEN the video must continue to play back without issue

Sign In - authentication requirements

Item

Requirement

Sign in via pairing code or DIAL (via Casting)
REQ_ID:AR01

Customers with existing sign-in credentials should be able to sign in successfully using a pairing code or casting from an alternative device.

User Story

As a user that has existing App credentials, I want to sign in to App via pairing code using a browser on an alternative device or to cast from the App on a mobile or tablet device or use a QR code to speed up the sign-in flow.

Acceptance Criteria
GIVEN I have launched the App, WHEN I am required to sign in, THEN I must be given the option to sign in via a PIN-pairing journey.

This must be a friendly URL in the form partnerweb.com/subpage and be no longer than 30 characters.

It must have search engine optimization to cater for users who enter it in their search bar.

OR

GIVEN I have launched the App, WHEN I am required to sign in, THEN I must be presented with instructions for logging in via DIAL.

OR

GIVEN I have launched the App, WHEN I am required to sign in, THEN I must be given the option to sign-in via a QR Code journey

We recommend the QR code deep link passes the PIN-pairing code in the pay load directly.

Sign in via keyboard
REQ_ID:AR02

Users must be given the ability to enter their credentials (e.g. email address and password) using an on-screen keyboard.

User Story

As a user that has existing App credentials, I want to the ability to sign in to App via on-screen keyboard, so that I don’t have to switch devices.

In other words: the App should provide two sign-in methods.

Acceptance Criteria
GIVEN I have launched the App, WHEN I am required to sign in, THEN I must be given the ability to enter my credentials (e.g. email address and password) via an on-screen keyboard.

App Sign-in response: Success & Fail
REQ_ID:AR03

The app should successfully sign in quickly or present a relevant invalid response.

User Story

As a user, I want sign-in to be quick, so that I can start browsing and accessing content as soon as possible.

Acceptance Criteria
GIVEN the user has entered in valid sign-in credentials within the App, WHEN they select sign in, THEN the App must sign the user in within 1 second.

GIVEN the user has entered in invalid sign-in credentials within the App, WHEN they select sign-in, THEN the App must not sign the user in and display a relevant error message (e.g., “username / password not recognized") within one second.

GIVEN the user has entered in a valid PIN Pair Code on a browser, WHEN they select pair on that browser, THEN the App must sign the user within one second on the device.

GIVEN the user has scanned a QR code on a mobile then entered valid credentials ,WHEN they select sign in, THEN the App must sign the user within one second on the device.

Notes
This requirement does not depend on whether the user has subscribed to the App via the X1 App Platform or directly with the App partner themselves.

Deep linking requirements

The App Platform uses key intents when deep links are selected from the App Platform experience and passed to an App to determine the right behavior for the user. Below are the intents used on the App Platform:

  • The Entity intent goes to an entity or Show page. When a user has yet to engage with a show, we pass the entity intent.

  • The Playback intent goes straight into the playback of the selected asset. When a user has engaged with a single asset or episode from a series, we pass the Playback intent for that asset.

Item

Requirement

Direct playback deep linking from cold start
REQ_ID:DL01

When your App is in the unloaded state and a user selects to watch content from a show center or a content tile, then your App needs to load first before the content starts playing.

When a user selects a deep link and your App has loaded, then the user should be placed in the correct place within your App.

User Story

As a new user, when I select a specific piece of App content from the App Platform UI, I want to access that piece of content within the App, so that I can start watching the content I desired.

Prerequisites

  • I’m signed in if applicable.

  • Metadata ingested or editorial direct playback deep links are being used (Playback Intent).

Acceptance Criteria
GIVEN I am in the App Platform UI and the App is in the unloaded state, WHEN I select the Watch button from the App content show center or the App content tile if direct playback deep links have been used or via DIAL, THEN the App will need to load first before the content starts playing

GIVEN I have selected the deep link and the App has loaded, the user will be placed in the correct place in the App

Show page deep linking from cold start
REQ_ID:DL02

When your App is in the unloaded state, and a user selects your App content tile, then your App needs to load first before your App content show page displays within your App.

User Story

As a new user, when I select a specific piece of App content from the App Platform UI, I want to access that piece of content within the App, so that I can start watching the content I desired.

Prerequisites

  • I’m signed in if applicable

  • Editorial show page deep link used or Watch action from ingested metadata (Entity Intent)

Acceptance Criteria
GIVEN I am in the App Platform UI and the App is in the unloaded state, WHEN I select the App content tile, THEN the App will need to load first before the App content show page displays (within the App)

Notes
For Apps we ingest metadata, the only instance where this might be possible is if we have not ingested metadata for a particular title yet, but we still want to merchandise it.

Direct playback deep linking from Inactive state
REQ_ID:DL03

When your App is in the inactive state, and a user selects the “watch” button from your App titles show center or your App content tile, then your App needs to start full screen playing. Your app should not reload.

User Story

As a user, when I am in an App and dismiss out of the App via the back button to the App Platform UI, I want to be able to access back into the App from where I left off, so that I can continue my journey within the App.

Prerequisites

  • The App must support Firebolt Lifecycle States (see requirements REQ_ID:QS01-REQ_ID:QS07).

  • I’m signed in if applicable.

  • The App is in Inactive state.

  • Metadata ingested or editorial direct playback deep links are being used (Playback Intent).

Acceptance Criteria
GIVEN I am within the App Platform UI and the App is in the inactive state, WHEN I select the watch button from an App titles show center or the App content tile if direct playback deep links have been scheduled or via DIAL, THEN the App will be made visible in full screen and the title will start playing; the App does not reload.

Show page deep linking from Inactive state
REQ_ID:DL04

When your App is in the inactive state, and a user selects your App’s content tile, then your App needs to full-screen display the show page within your App. Your app should not reload.

User Story

As a user, when I am in an App and dismiss out of the App via the back button to the App Platform UI, I want to be able to access back into the App from where I left off so that I can continue my journey within the App.

Prerequisites

  • App must support Firebolt Lifecycle States (see requirements REQ_ID:QS01-REQ_ID:QS07).

  • I’m signed in if applicable.

  • The App is in Inactive state.

  • Editorial show page deep link used or Watch action from ingested metadata (Entity Intent).

Acceptance Criteria
GIVEN I am within the App Platform UI and the App is in the inactive state, WHEN I select the App content tile, THEN the App content show page displays in full screen within the App; the App does not reload.

Direct playback deep linking from Background Active state (mini-tv)
REQ_ID:DL05

When your App is in the Background Active state and the “watch” button is selected from your App’s show center or content tile, then your App must be made visible in full screen and start playing the selected content.

User Story

As a user, when I am in an App in mini-tv, I want to be able to access back into the App from where I left off so that I can continue my journey within the App.

Prerequisites

  • I’m signed in if applicable.

  • The App is in Background Active state (mini-tv).

  • Metadata ingested or editorial direct playback deep links are being used (Playback Intent).

Acceptance Criteria
GIVEN I am within the App Platform UI with the App in Background Active state and the App supports Firebolt Lifecycle States, WHEN I select the watch button from an titles show center or the App content tile if direct playback deep links have been scheduled or via DIAL, THEN the App will be made visible in full screen and the title will start playing; the App does not reload.

GIVEN I am within the App Platform UI with the App in Background Active state and the App does not support Firebolt Lifecycle States, WHEN I select the watch button from an App’s titles show center or the App content tile if direct playback deep links have been scheduled or via DIAL, THEN the App will be made visible in full screen and the title will start playing; the App will reload first.

Show page deep linking from Background Active state (mini-tv)
REQ_ID:DL06

When your App is in the Background Active state and the user selects your App content tile, then your App content displays in full screen.

User Story

As a user, when I am in an App in mini-tv, I want to be able to access back into the App from where I left off so that I can continue my journey within the App.

prerequisites

  • I’m signed in if applicable.

  • The App is in Background Active state (mini-tv).

  • Editorial show page deep link used or Watch action from ingested metadata (Entity Intent).

Acceptance Criteria
GIVEN I am within the App Platform UI with the App in Background Active state and the App supports Firebolt Lifecycle States, WHEN I select the App content tile, THEN the App content in-App show page displays in full screen; the App does not reload.

GIVEN I am within the App Platform UI with the App in Background Active state and the App does not support Firebolt Lifecycle States, WHEN I select the App content tile, THEN the App content in-App show page displays in full screen; the App will re-load first.

Direct playback deep linking from Foreground Active state
REQ_ID:DL07

When your App is in Foreground Active state and the user selects your App content tile, then your App content will remain in full screen and the content will start playing.

User Story

As a user, when I am in an App in Foreground Active state, I want to be able to access back into the App from where I left off so that I can continue my journey within the App.

Prerequisites

  • I’m signed in if applicable.

  • The App is in Foreground Active state (full screen).

  • Metadata ingested or editorial direct playback deep links are being used (Playback Intent).

Acceptance Criteria
GIVEN I am within the Platform UI with the App in Foreground Active state and the App supports Firebolt Lifecycle States, WHEN I select an App content tile to play via DIAL or via voice, THEN the App will be remain visible in full screen and the title will start playing; the App does not reload.

GIVEN I am within the Platform UI with the App in Background Active state and the App does not support Firebolt Lifecycle States, WHEN I select an App content tile to play via DIAL or via voice, THEN the App will be made visible in full screen and the title will start playing; the App will re-load first.

Show page deep linking from Foreground Active state
REQ_ID:DL08

When your app is in the Foreground Active state and the user uses voice search for an App title, then your App will display the App content in-App in full screen.

User Story

As a user, when I am in an App in full screen, I want to be able to access back into the App from where I left off, so that I can continue my journey within the App.

Prerequisites

  • I’m signed in if applicable.

  • The App is in Foreground Active state (full screen).

  • Editorial show page deep link used or Watch action from ingested metadata (Entity Intent).

Acceptance Criteria
GIVEN I am within the App Platform UI with the App in Foreground Active state and the App supports Firebolt Lifecycle States ,WHEN I voice search for an App title, THEN the App content in-App show page displays in full screen; the App does not reload

GIVEN I am within the App Platform UI with the App in Foreground Active state and the App does not support Firebolt Lifecycle States, WHEN I voice search for an App title, THEN the App content in-App show page displays in full screen; the App will re-load first

App Launch
REQ_ID:DL09

When a user selects your App’s launch point, then your App should load and the intended screen should become visible.

User Story

As a user, when I am in the App Platform UI, I want to be able to select the App launch point so I can browse the App and/or engage with content in the App.

Prerequisites

  • The App is available on the Platform device .

  • I’m signed in if applicable.

Acceptance Criteria
GIVEN I am in the App Platform UI and the App is in the unloaded state, WHEN I select the App tile, THEN the App must load before displaying the in App Homepage.

GIVEN I am within the App Platform UI and the App is in the inactive state and the supports Firebolt Lifecycle States, WHEN I select the App tile, THEN the App will be made visible in full screen and the homepage will show; the App does not reload.

GIVEN I am within the App Platform UI with the App in Background Active state and the App supports Firebolt Lifecycle States ,WHEN I select the App launch tile, THEN the App will be made visible in full screen; the App does not reload.

GIVEN I am within the App Platform UI with the App in Foreground Active state and the App supports Firebolt Lifecycle States, WHEN I voice search for the same App, THEN the App remains displays in full screen; the App does not reload.

Trickplay behavior requirements

Item

Requirement

Play
REQ_ID:TP01

Your content should play or resume as expected when the user selects to play content. This includes playing from the content tile, fast-forwarding / rewinding content, or when the content is paused.

User Story

As a user, I want to be able to forward or rewind so that I can control my playback in the App consistently.

Prerequisite
The user is watching content in the App – applicable to FFWD/RW-able adverts as well.

Acceptance Criteria
GIVEN I am watching content and it is paused, WHEN I play content, THEN the content must play within 0.5 seconds.

GIVEN I am on a content tile in the App UI, WHEN I press play, THEN the content must play within 2 seconds.

GIVEN I am on a content tile or on pause, WHEN I press play, THEN the video content and audio content must play in-sync.

GIVEN I am fast forwarding/rewinding content, WHEN I play/resume content, THEN the content must play within 2 seconds.

Pause
REQ_ID:TP02

Your content should pause when the user selects to pause content. This includes pausing while watching, fast forwarding, or rewinding content.

User Story

As a user, I want to be able to forward or rewind so that I can control my playback in the App consistently.

Prerequisite
The user is watching content in the App – applicable to FFWD/RW-able adverts as well.

Acceptance Criteria
GIVEN I am watching content, WHEN I pause content, THEN the content must be paused within 0.5 seconds.

GIVEN I am fast forwarding/rewinding content, WHEN I pause content, THEN the content must be paused within 2 seconds.

Fast-forward
REQ_ID:TP03

Your content should fast-forward when the user selects to fast-forward content and present a visual indication of timeline progress. This includes increasing speed while fast forwarding (x2, x6, x12, and x30).

User Story

As a user, I want to be able to forward or rewind so that I can control my playback in the App consistently.

Prerequisite
The user is watching content in the App – applicable to FFWD/RW-able adverts as well.

Acceptance Criteria
GIVEN I am watching content, WHEN I fast-forward content, THEN the content must fast-forward within 0.5 seconds.

GIVEN I am watching content, WHEN I fast-forward content, THEN the content must fast-forward at the following multiple speeds x2, x6, x12, x30.

GIVEN I am watching content, WHEN I fast-forward content, THEN fast forward should be enabled on one-button click (either single press or held down).

GIVEN I am watching content, WHEN fast-forward content, THEN I should get a visual indication of progress in time via the Player UI elements.

GIVEN I am watching content, WHEN I fast-forward content, THEN trickplay UI elements should display until the user aborts FFWD.

Rewind
REQ_ID:TP04

Your content should rewind when the user selects to rewind content and present a visual indication of timeline progress. This includes increasing speed while rewinding (x2, x6, x12, and x30).

User Story

As a user, I want to be able to forward or rewind so that I can control my playback in the App consistently.

Prerequisite
The user is watching content in the App – applicable to FFWD/RW-able adverts as well.

Acceptance Criteria
GIVEN I am watching content, WHEN I rewind content, THEN the content must rewind within 0.5 seconds.

GIVEN I am watching content, WHEN I rewind content, THEN the content must rewind at the following multiple speeds x2, x6, x12, x30.

GIVEN I am watching content, WHEN I rewind content, THEN rewind should be enabled on one button click (either single press or held down)

GIVEN I am watching content, WHEN I rewind content, THEN I should get a visual indication of progress in time via the Player UI elements.

GIVEN I am watching content, WHEN I fast-forward content, THEN trickplay UI elements should display until the user aborts FFWD.

Scrubbing
REQ_ID:TP05

When a user presses and holds the left or right button, a visual audio/video selector must slide across a visual timeline within the player UI of your App.

User Story

As a user, I want to be able to scrub forward or backwards so that I can control my playback.

Prerequisite
The user is watching content in the App – applicable to FFWD/RW-able adverts as well.

Acceptance Criteria
When navigating within a piece of video or audio to a specific time, for example forwarding from position 00:00 to 3:00

GIVEN I am watching content, WHEN I press and hold the left or right button, THEN I should be able to move the audio or video selector to a specific time.

GIVEN I am watching content, WHEN I move the audio track or video selector to a specific time, THEN the content must move to that point within 2 seconds.

GIVEN I am watching content, WHEN I move the audio track or video selector to a specific time, THEN I should get a visual indication of progress in time via the Player UI elements .

GIVEN I am watching content, WHEN I move the audio track or video selector to a specific time, THEN trickplay UI elements should display until the user aborts scrubbing.

Playback requirements

Item

Requirement

Initiating Playback from the Show Center UI - Hero zone
REQ_ID:PB01

Your app content should play and resume as expected from the content tile, fast-forwarding, rewinding, or when content was previously paused.

User Story

As a user, when I press select the watch call to action on a piece of content from the Show Page UI (hero zone), I want the to load that piece of content, so that I can start watching it.

Acceptance Criteria
GIVEN I am in the X1 App Platform UI and the App does not require the user to sign-in to view content, WHEN I have selected a piece of content to play from the X1 App Platform UI Show Center that has a resume point (UI Example: Continue -> Playback Intent), THEN the App must load and the content must start playing. There must be no information screens or interstitials that require user interaction.

GIVEN I am in the X1 App Platform UI and the App does not require the user to sign-in to view content, WHEN I have selected a piece of content to play from the X1 App Platform UI Show Center that does not have a resume point (UI Example: Watch action -> Entity Intent), THEN the App must load and take me to the show page.

GIVEN I am in the X1 App Platform UI and I am signed into an App where sign-in is required to view content, WHEN have selected a piece of content to play from the X1 App Platform UI Show Center that has a resume point (UI Example: Continue -> Playback Intent), THEN the App must load and the content must start playing. There must be no information screens or interstitials that require user interaction.

GIVEN I am in the X1 App Platform UI and I am signed into an App where sign-in is required to view content, WHEN have selected a piece of content to play from the X1 App Platform UI Show Center that does not have a resume point (UI Example: Watch action -> Entity Intent), THEN the App must load and take me to the show page.

GIVEN I am in the X1 App Platform UI and I am not signed into an App where sign-in is required to view content, WHEN have selected a piece of content to play from the X1 App Platform UI Show Center, that has a resume point (UI Example: Continue -> Playback Intent), THEN the App must load, and I must be presented with the sign-in screen. Once signed in, the content must start playing. There must be no further information screens or interstitials that require user interaction after the sign-in journey.

GIVEN I am in the X1 App Platform UI and I am not signed into an App where sign-in is required to view content, WHEN have selected a piece of content to play from the X1 App Platform UI Show Center, that does not have a resume point (UI Example: Watch action -> Entity Intent), THEN the App must load, and I must be presented with the sign-in screen. Once signed in, the App must take me to the show page.

Notes
Requires both metadata integration and consumption data integration.

Initiating Playback from the Show Center UI - Available Now zone
REQ_ID:PB02

Your App content should load and play the correct episode when the user presses “Play” on a specific piece of content in the Show Center UI.

User Story

As a user, when I browse down the X1 App Platform UI Show Center to the “Available Now” zone and press “Play” on a specific piece of content, I want the App to load that specific piece of content, so that I can start watching it.

Acceptance Criteria
GIVEN I am in the X1 App Platform UI and the App does not require the user to sign-in to view content, WHEN I have selected an episode to play from the X1 App Platform UI Show Center “Available Now” zone, THEN the App must load the correct episode and the content must start playing. There must be no information screens or interstitials that require user interaction. (UI Example: Specific asset selection -> Playback Intent)

GIVEN I am in the X1 App Platform UI and I am signed into an App where sign-in is required to view content, WHEN have selected an episode to play from the X1 App Platform UI Show Center “Available Now” zone, THEN the App must load the correct episode and the content must start playing. There must be no information screens or interstitials that require user interaction. (Specific asset selection -> Playback Intent)

GIVEN I am in the X1 App Platform UI and I am not signed into an where sign-in is required to view content, WHEN have selected an episode to play from the X1 App Platform UI Show Center “Available Now” zone, THEN the App must load, and I must be presented with the sign-in screen. Once signed in, the correct episode / content must start playing. There must be no further information screens or interstitials that require user interaction after the sign-in journey. (UI Example: Specific asset selection -> Playback Intent)

Notes
Requires both metadata integration and consumption data integration. Without metadata integration, the X1 App Platform will not be able to include your App in the X1 App Platform UI Show Center.

Initiating Playback a merchandised title (via show page)
REQ_ID:PB03

When a user selects a piece of merchandised App content, then the X1 App Platform UI should display the correct editorialized App content within the UI show page.

User Story

Initiating Playback from an X1 App Platform show page (no consumption data)
REQ_ID:PB04

The CTA must say “Watch” within the hero zone if the user has not yet watched any content from your App.

User Story


Prerequisite
User has landed on the show page for an App which they have not engaged with and there is no resume point.

Acceptance Criteria
GIVEN the user hasn’t started to watch any content for this particular App, WHEN the user is on the hero zone, THEN the CTA button will say “Watch” (UI Example: Watch action -> Entity Intent).

GIVEN the user selected “Watch” (UI Example: Watch action -> Entity Intent) from the Hero zone, WHEN the App is launched, THEN the user will be directed to content show page within the App.

Initiating Playback from an X1 App Platform show page (consumption data available)
REQ_ID:PB05

The CTA must say “Continue” within the hero zone if the user had previously started watching content from your App. The “Continue” action must be based on the resume point of the content.

User Story


Prerequisite
User has landed on the show page for an which they do have a resume point and have started to engage with.

Acceptance Criteria
GIVEN the user has started to watch any content for this particular App on the X1 App Platform, AND the App has provided consumption data, WHEN the user is on the hero zone, THEN the CTA button will display a Continue action based on the resume point (UI Example: Continue -> Playback Intent).

GIVEN the user selects the continue watching resume point (UI Example: Continue -> Playback Intent), WHEN the App is launched, THEN the user will be directed to content playback within the App.

Resuming playback from X1 App Platform UI
REQ_ID:PB06

Your app content should display the correct piece of content or episode in the X1 App Platform’s Continue Watching rail or Show Page.

User Story

As a user, when I surface a piece of content from within the App in the X1 App Platform UI (either via a Continue Watching rail or from a Show Page), I want the X1 App Platform UI to surface the current episode I’m watching or the next episode to play (UI Example: Continue -> Playback Intent).

Prerequisite

  • GIVEN I am in the X1 App Platform UI AND I have part-watched an episode from a series in the App, WHEN I surface a Show page that series AND the App has provided resume points, THEN the X1 App Platform UI will be able to indicate to me the part-watched episode to view, the amount watched and allow me to continue watching.

  • GIVEN I am in the X1 App Platform UI AND I have fully watched an episode from a series in the App, WHEN I surface a Show Page for that series AND the App has provided resume points, THEN the X1 App Platform UI will be able to indicate to me the next episode to view and allow me to continue watching.

  • GIVEN I am in the X1 App Platform UI AND I have part-watched a show in the App AND the App has provided resume points, WHEN I browse a Continue Watching rail, THEN the X1 App Platform UI will be able to indicate to me the partly-watched episode to view, indicate the amount watched, and allow me to continue watching.

  • GIVEN I am in the X1 App Platform UI AND the App has provided resume points, WHEN I browse a Continue Watching rail, THEN the X1 App Platform UI will be able to indicate to me the next episode to view and allow me to continue watching.

  • GIVEN I am in the X1 App Platform UI, WHEN I resume playback of a piece of App content I had been watching, THEN the App must playback from where the user has most recently left off.

Notes
Resuming playback requires the App to have integrated both metadata and consumption data.

Initiating Playback from the X1 App Platform UI - Play Now / Continue Watching
REQ_ID:PB07

Your app content should play the correct piece of content or episode from the X1 App Platform’s Continue Watching or Play Now rail without additional user action when the user presses “Play.”

User Story

As a user, when I select “Play” on a piece of content from the “Play Now”/ “Continue Watching” rail I want the App to load and the content to start playing straightaway without any information screens and without the need for further button presses. (UI Example: Continue -> Playback Intent).

Acceptance Criteria
GIVEN I am in the X1 App Platform UI and the App does not require the user to sign-in to view content, WHEN I have selected a piece of content to play from the “Play now” / “Continue Watching” rail (Playback Intent), THEN the App must load and the content must start playing. There must be no information screens or interstitials that require user interaction.

GIVEN I am in the X1 App Platform UI and I am signed into an App where sign-in is required to view content, WHEN have selected a piece of content to play from the “Play now” / “Continue Watching” rail (Playback Intent), THEN the App must load and the content must start playing. There must be no information screens or interstitials that require user interaction.

GIVEN I am in the X1 App Platform UI and I am not signed into an where sign-in is required to view content, WHEN have selected a pieceof content to play from the “Play now” / “Continue Watching” rail (Playback Intent), THEN the App must load, and I must be presented with the sign-in screen. Once signed in, the content must start playing. There must be no further information screens or interstitials that require user interaction after the sign-in journey.

Notes

  • Requires both metadata integration and consumption data integration.

  • The App loading time is subject to the App Load Times requirements [REQ_ID:OR01] . Where the content is subject to pre-roll advertising, idents, etc. the playing of these assets will fulfil this requirement.

UI Examples

Watch action -> Entity Intent


Show page displaying Hero Zone.
watch-entity.png

Continue Action -> Playback Intent


Show page displaying Hero Zone
continueplayback.png

Example of a merchandised tile.
cont-watching-1.png

Example of a show page once merchandised tile is clicked. User has started to watch content.
cont-watching-2.png

If “Watch” is selected on X1 App Platform show page, the show is begins content playback.
cont-watching-3.png

Available Now


Example of Show page displaying “Available Now” tab.
continueplayback.png

Interacting with tab allows users to scroll through series & episodes as well as choose alternative ways to watch. Selecting an episode will initiate playback in the App. (Playback entity)
continueplayback.png

Example of Show page displaying Available now tab with content partially watched.
continueplayback.png

Continue Watching


Example of Show page displaying “Continue Watching” tab with content partially watched.
continueplayback.png

Ad break requirements

Item

Requirement

Trickplay during advertisements
REQ_ID:AB01

If a user initiates FFWD, RWD, scrub, or skip during an ad break, then your App must present a notification indicating which functions are unavailable during the ad break.

User Story

Applies to Users in an ad break

Acceptance Criteria
GIVEN a user has initiated FFWD, RWD, scrub and/or Skip in an ad break, THEN:

  • The App must gracefully handle on-screen notifications for non-functioning trickplay options.

  • Black screens, error screens or other visible transitions or inconsistencies should not be presented at any point using trickplay between ads and content playback.

  • Trickplay UI elements displayed should be consistent with the user interface for trickplay during content.

  • User should get a visual indication of progress (time) for ads via the Player UI elements (e.g., a timeline, countdown clock or an equivalent).

GIVEN that a user has not attempted trickplay or attempted to control playback in any way, THEN the Ad Trickplay UI should not be invoked.

Notes
This is to avoid the Trickplay UI displaying at the start of every ad break in normal viewing mode and impacting the viewing experience.

Visual timeline
REQ_ID:AB02

When the user attempts to initiate trickplay, a visual timeline within the player’s UI elements must be presented to indicate the progress for ads.

Transitions
REQ_ID:AB03

Black screens, error screens, or other visible transitions or inconsistencies should not be presented at any point using trickplay between ads and content playback.

Dismiss button requirements

Item

Requirement

Note

App exit behavior
REQ_ID:DB01

When a user is on your App’s homepage and the Dismiss button is pressed, then your App must exit and return the user back to the same point they launched your App from within the X1 App Platform UI. Confirmation dialogues are not permitted for this action.

User Story

As a user, I want the App to exit quickly so that I can get back to the X1 App Platform UI.

Acceptance Criteria
GIVEN I am on the App homepage, WHEN I press “Dismiss”, THEN the App must exit back to the distribution X1 App Platform’s UI.

GIVEN I am within an App, WHEN I press “Dismiss,” THEN the App must exit hierarchically back through via the App homepage and then dismiss back into the X1 App Platform’s UI.

  • A confirmation dialogue on App exit is not permitted.

  • On exit, the current UI behavior will place the user back to the same point at which they launched the App.

  • If the hierarchical back is not the best solution, then historical back can be used on the basis that:

    • Dismissing no more than 3 times will return back to the X1 App Platform’s UI.

    • On the dismiss journey, the App should exit via a show page and the in-App homepage.

Some remotes have a back button instead of dismiss, the same requirement applies to the back button on these remotes.

Dismiss button during playback
REQ_ID:DB02

If on-screen UI is visible, the dismiss button first applies to going back to full-screen playback.

User Story

As a user, I want the App to be intuitive when dismissing during playback.

Acceptance Criteria
GIVEN I am within the App during playback of content, AND the trickplay bar is open, WHEN I press “Dismiss", THEN the App should close the trickplay bar.

GIVEN I am within the during playback of content AND the trickplay bar is closed, WHEN I press ”Dismiss’, THEN the App should follow Ending Content during playback requirements below.

GIVEN I am within the App during playback of content AND the user is trickplaying content, WHEN I press “Dismiss”, THEN the App content should stop trickplaying.


Some remotes have a back button instead of dismiss, the same requirement applies to the back button on these remotes.

Ending content during playback
REQ_ID:DB03

When a user is watching content, no on-screen UI is present, and the Dismiss button is pressed, then your App must take the user to the in-App Show page for that show. Confirmation dialogues are not permitted for this action.

User Story

As a user, I want the App to stop playback quickly.

Acceptance Criteria
GIVEN I am in the App watching content, WHEN I press “Dismiss", THEN the App must stop playback and take me to the in App Showpage for that show.

Some remotes have a back button instead of dismiss, the same requirement applies to the back button on these remotes.

Remote capability
REQ_ID:DB04

A confirmation dialogue on App playback ending is not permitted. Your App should respond as expected when interacting with supported remotes (including touch dish and touch remotes).

Accessibility requirements

Item

Requirement

Accessibility
REQ_ID:AC01

Your App must meet WCAG AAA compliance standards, as well as the legal requirements for closed captioning, see Accessibility documentation for more info.

Audio description
REQ_ID:AC02

While watching video content, users must be able to turn on available audio description using the audio description menu. The audio description feature must be turned on/off respectively and activate immediately in the video playback.

User Story

As a user, I expect all video content within the App to have audio description where available.

Acceptance Criteria
GIVEN I am watching video content within the App, WHEN I navigate to the audio description menu, THEN I should be able to turn on audio description and have it immediately activated in the video playback.

GIVEN I am watching video content within the App, WHEN I navigate to the subtitles menu, THEN I should be able to turn off audio description and have it immediately deactivated in the video playback.

Closed Captions / Subtitles
REQ_ID:AC03

While watching video content, users must be able to turn on available closed captions or subtitles using the subtitle menu. The closed captions and subtitles must be turned on or off respectively and activate immediately in the video playback.

User Story

As a user, I expect all video content within the App to have closed captions or subtitles where available.

Acceptance Criteria
GIVEN I am watching video content within the App, WHEN I navigate to the subtitles menu, THEN I should be able to turn on closed captions or subtitles and have them immediately activated in the video playback.

GIVEN I am watching video content within the App ,WHEN I navigate to the subtitles menu, THEN I should be able to turn off closed captions or subtitles and have them immediately deactivated in the video playback.

Localization requirements

Item

Requirement

Price listing
REQ_ID:LR01

All pricing must display in the user’s local currency.

User Story

As a user, I expect to see any prices displayed in my local currency.

Acceptance Criteria
GIVEN I am using the App in Territory, WHEN the App displays any prices, THEN those prices should appear in the local currency.

Language
REQ_ID:LR02

All text including error messages, on-screen keyboard, and navigation must be displayed in the official language of the user’s territory unless the user has changed their preferred language settings.

User Story

As a user, I expect to see an App appear in my local language.

Acceptance Criteria
GIVEN I am using the App in Territory,WHEN the App displays any text (including branding, error messages and on-screen keyboards), THEN the text must be displayed the official language of Territory (or any other indigenous language as appropriate).

Notes
Where an App is designed to serve the audience of a specific language other than the official language then this should be flagged to the distributor.

Localized advertising
REQ_ID:LR03

All advertising displayed must be localized and relevant to the user.

User Story

As a user, I expect to see advertising relevant to my territory.

Acceptance Criteria
GIVEN I am using the App in Territory, WHEN the App displays any advertising, THEN the advertising must be localized and relevant to users in Territory.

Localized content
REQ_ID:LR04

Content displayed within the App must be relevant to the user and users must not be able to view content outside of their regional licensing.

User Story

As a user, I expect to see the relevant content to my region or territory.

Acceptance Criteria
GIVEN I am using the App in Territory, WHEN the App displays content, THEN the content must be relevant to users in Territory.

GIVEN I am using the App, WHEN the App displays content, THEN the content must be relevant to users in that region.

Audio Language
REQ_ID:LR05

The content audio must default to the local language or the preferred language set by the user.

User Story

As a user, when I am in playback, I expect the app audio to default to my local language.

Acceptance Criteria
GIVEN I am using the App in Territory, WHEN the App displays content, THEN the audio must be the official language of Territory.

Localization content error
REQ_ID:LR06

Users must be given an error message when trying to view content restricted by their territory.

User Story

As a user, I expect to see a relevant error message if I try to view content that is not available in my country or territory.

Acceptance Criteria
GIVEN I am using the App in Territory, WHEN the App displays content that is not available in my region/territory, THEN the App must display a user friendly error message.

For example: I am in Scotland, but trying to play content only available in England. The App should notify me that the content isn’t available in my region.

Notes
If you have a regional App with shared content on another regional App, we recommend showing an error message explaining how to view selected content in the other App.

Parental safety requirements

Item

Requirement

App for everyone
REQ_ID:PS01

If your App is accessible to children, then content within it should be appropriate or have the option to filter out or PIN protect adult content.

User Story

As a parent, I want a mechanism to protect against age-rated content, so that my child does not watch inappropriate content.

Acceptance Criteria
GIVEN that children are one of the target audiences of an App, WHEN using the App, THEN the content within the App must be appropriate for children.
GIVEN that the App contains contents adult content, WHEN using the App, THEN there must be an option to filter out or PIN protect this content.

Notes

  • In this context “Adult Content” means material that contains images of a sexual nature and/or strong language.

  • There is the option to Block or require a PIN for specific Apps (as chosen by the user) in the settings menu of the distributor UI.

  • Should your App be accessible to children and/or contain kids content, it must have a protection mechanism such as PIN or content filters to protect younger audiences from accessing unsuitable content (which may be additional content beyond the “Adult Content” described above). It is also desirable to have profiles so users can keep their content separated. In addition, there should be other features such as a Walled Garden, which either requires a PIN to exit or a confirmation when trying to exit from the kid’s area of the App.

  • Should your App be targeted towards children (e.g. YouTube Kids), there must only be content suitable for children.

  • (COPPA), E.U. General Data Protection Regulation (GDPR), and any other applicable laws or regulations.

  • For apps in the US, user profiles for Kids should only be created by the parent, as per COPPA (Children’s Online Privacy Protection Rule).

Apps for kids
REQ_ID:PS02

If your App is targeted towards children, then all content must be suitable for children.

Advertising
REQ_ID:PS03

  • If your App is aimed towards children or users of unknown age, then all advertisements displayed on your App must only contain content that is appropriate for children.

  • All advertisements must also comply with all legal regulations and industry standards related to advertising to children.

User Story

As a parent, I want a mechanism to protect against inappropriate content.

Acceptance Criteria
GIVEN the App contains advertising aimed at children or to users of an unknown age. WHEN an advertisement is shown within the App. THEN the advertisement displayed must only contain content that is appropriate for children.

GIVEN the App contains advertising aimed at children or to users of an unknown age, WHEN an advertisement is shown within the App, THEN the advertisement displayed must comply with all applicable legal regulations and industry standards relating to advertising to children.

Data collection
REQ_ID:PS04

If your App collects personal information from children (including APIs and SDKs), then the user must be aware of such data collection.

User Story

As a parent, I want an awareness of data collection within the App

Acceptance Criteria
GIVEN the App collects any personal information from children, including through APIs and SDKs. WHEN I, as a parent, am using the App, THEN I must be made aware of such data collection.

Explicit filtering
REQ_ID:PS05

If your App has music or audio content that is tagged as “explicit,” then your App must provide a tool for a user to filter out explicit content.

Note: Ideally, a user should be able to configure this filter within your App on the App Platform. However, a global setting via an off-platform website or mobile device will suffice.

User Story

As a parent, I want a mechanism to protect against explicit content, so that my child does not watch inappropriate content.

Acceptance Criteria
GIVEN that the user is in a music / audio App or any App that has any content tagged as “explicit” (e.g. Fitness apps), THEN the App must provide a tool to filter out explicit content.

Notes
Ideally, the user should be able configure this filter within the . Alternatively, a global setting will suffice, i.e., through a website or mobile that applies to all devices.

Parental PIN
REQ_ID:PS06

It is important that your App only allows authorized users to make purchases or watch mature content. When the device’s Parental PIN setting is active, then your App should adhere to it and trigger a Parental PIN prompt when inappropriate content is accessed or a purchase is attempted. See the Parental Controls documentation for additional information regarding Content Ratings Approvals & Purchase Approvals.

Youth protection
REQ_ID:PS07

This is only applicable for apps in Germany & Austria: Your App must meet German Youth Protection regulations by having an approved Youth Protection Program.

User Story

As a parent, I want a mechanism to protect against age rated content, so that my child does not watch inappropriate content.

Acceptance Criteria
GIVEN that the content is visible on the screen, WHEN the user focuses on the content tile ,THEN there should be a visible age rating on screen.

GIVEN the user is on a content showpage (e.g. for TV shows or Movies), THEN there should be a visible age rating for the relevant episode or movie title in the hero zone.

Notes
DE apps must meet German Youth Protection regulations by having an approved Youth Protection Programme. For any content that is merchandised, an age rating must be visible on screen, which should be provided through metadata ingest. If not ingested, then this should be part of the editorial process.

Legal requirements

Item

Requirement

Terms & Conditions
REQ_ID:LR01

The Terms & Conditions must be available and relevant for each user’s territory. Terms & Conditions can be a single T&Cs covering all applicable territories or can be territory-specific.

User Story

As a user, I expect to be able to see the Terms & Conditions for the App.

Notes
If you are providing a link to the T&Cs then this link must be maintained at all times while the App is available.

Where an App is being provided to multiple territories, there must be T&Cs available that are relevant for each territory (either as single T&Cs covering all applicable territories or specific T&Cs for each).Details

Privacy Policy
REQ_ID:LR02

The Privacy Policy needs to describe, at a minimum, data collection and use of data. It must be available and relevant for each user’s territory. The Privacy Policy can be a single Privacy Policy covering all applicable territories, or can be territory-specific.

User Story

As a user, I expect to be able to see the Privacy Policy for the App.

Notes: The Privacy Policy needs to describe, amongst other things, the App’s data collection and use of data. If you are providing a link to the Privacy Policy, then this link must be maintained at all times while the App is available. Where an App is being provided to multiple territories, there must be a Privacy Policy available that are relevant for each territory (either as a single Privacy Policy covering all applicable territories or specific Privacy Policies for each).

Impressum
REQ_ID:LR03

This is only applicable for users in Germany. Your App must contain the full text of Impressum indicating who is responsible for the content displayed. A user must be able to access the Impressum within two clicks of your App’s landing page.

User Story

As a user in Germany, I must be able to see who is responsible for the content shown within the App.

Acceptance Criteria
GIVEN that I am using the in Germany, WHEN I launch the App, THEN the App must contain the Impressum which indicates who is responsible for the content shown on a website or within the clicks of the landing page. The text must be provided in full.

Notes
An Impressum is the term given to a legally mandated statement of the ownership and authorship of a document, which must be included in books, newspapers, magazines and websites published in Germany and certain other German-speaking countries, such as Austria and Switzerland.

Open Source Software
REQ_ID:LR04

If your App uses open source software, then your App must contain the Open Source software license information.

User Story

As a user, if an App uses any source code licensed under Free or Open Source Software licenses, I must be able to view the relevant licenses within the App.

Acceptance Criteria
GIVEN that I am using an App that uses open source software, WHEN I use the App, THEN the App must contain the open source software license information.

Player compatibility

These are the supported formats for multimedia content on all App Platform-compliant devices. The devices will not be able to play incompatible content.

Feature

Supported Formats

DRM

Widevine 1.16 Service level 1

Audio codecs

mpeg, eac3, & mp3

Video codecs

AC3, E-AC3, MPEG1, MP3, AAC, & LPCM

Search and discovery integration

In order to have your App’s content fully surfaced in aggregated experiences, Firebolt Search and Discovery APIs must be integrated.

Feature

Description

Full Specifications

Enables your App’s content to have a deeper and more prominent exposure in search and discovery experiences.

Deep Linking

Enables your App to be launched or brought to the foreground with a specific entity, search, player, or other section already loaded.

Voice Commands

Allows your users to speak to their remotes to navigate, search, and control their experience via voice.

User Story

As a user, I want to be able to launch the app using my voice, so that I can access the app quickly.

Acceptance Criteria
GIVEN that the user has pressed the voice input on the remote, WHEN they say “App”, “Launch App”, “Open App", “Start App” among others (as per other apps), THEN the App application shall launch.

Gaming requirements

To provide customers playing games a good experience, the following requirements

Item

Requirement

Bluetooth pairing - Settings
REQ_ID:F10

Customers can pair a Bluetooth device.

User Story

As a user, I want to be able to pair my Bluetooth controller through the Settings menu with ease, so my controller will navigate cloud gaming Cloud Gaming Apps.

Acceptance Criteria
GIVEN I am in the Gaming App, AND I navigate to the Settings CTA, OR I have not connected my controller, AND I select a game, THEN a warning message will inform me I need to connect a controller, AND the Settings option loads, AND the Pair Bluetooth device option will be surfaced.

WHEN I select the Pair Bluetooth devices, THEN the Gaming App will deep link to Ent OS settings page -> Pair devices screen.

Cloud Gaming App Navigation - Game controller
REQ_ID:F13

Customers can use a Bluetooth game controller.

User Story

As a user, I want to use my paired Bluetooth controller within the Gaming App, so that I can navigate the UI with ease

Acceptance Criteria
See Button mappings tab.

Cloud Saves
REQ_ID:F15

Customers can save and resume progress within a game

User Story

As a user, I want my saves to be stored in the cloud, So that I can resume my game.

Acceptance Criteria
GIVEN I am subscribed to a Cloud Gaming App, AND I played a game on the Gaming App service, WHEN I re-enter the game from the service, THEN I will be presented with the option to resume from my last save point.

GIVEN I am subscribed to a Cloud Gaming App, WHEN I continue to be subscribed, THEN my save games will be retained indefinitely.

GIVEN I am no longer subscribed to the Cloud Gaming App where my cloud save is stored, WHEN I do not re-subscribe to the Cloud Gaming App where my save is stored, THEN my saves will be stored for a minimum of 2 years in line with data protection rules.

Cloud Gaming App Responsiveness
REQ_ID:NF2

Interactions by the customer with the Gaming App must not be delayed.

User Story

As a user, I want the to respond quickly when I am using it so that I do not have to wait while navigating.

Acceptance Criteria
GIVEN I am using an EntOS device connected to a controlled network speed of at least 20mbps, WHEN navigating the UI, THEN it must feel smooth and intuitive.

GIVEN I am navigating the UI, WHEN conducting a tile-to-tile transition, THEN it must occur within 100ms.

GIVEN I am navigating the UI, WHEN I playback an asset within the UI, THEN it must play within 3 seconds.

Notes

  • The Gaming App should always operate without issues if a user has at least 10mbps available. If the Gaming App experiences lower network speed or a loss of connectivity it must handle this gracefully.

  • Loading times are dependent on the and hardware on the STB. Loading indicators are controlled by the Gaming App.

Visual Playback Latency
REQ_ID:NF4

The visual element of gaming content must not have lag.

User Story

As a user, I want a visually responsive gaming experience when I am cloud gaming, so that I can immerse myself in the experience.

Acceptance Criteria
GIVEN I am in the Gaming App, AND I selected a game to begin playing, AND the game loads, WHEN in-game, THEN the end to end latency should be less than 150ms.

Audio Playback Latency
REQ_ID:NF5

The audio element of gaming content must not lag behind the visual element.

User Story

As a user, I want an audibly responsive gaming experience when I am cloud gaming, So that the visual and audible experience are in sync

Acceptance Criteria
GIVEN I am in the Gaming App, AND I selected a game to begin playing AND the game loads, WHEN in-game, THEN the Audio latency should be less than 250ms.

Resuming games from EntOS UI
REQ_ID:PB1

Customers can quickly resume playback directly from EntOS.

User Story

As a user, when I play a game from within the Gaming App in EntOS UI (either via a Continue Playing rail or from a Game entity/destination Page), I want EntOS UI to surface the current game I’m playing (Continue -> Cloud game resume Intent).

Acceptance Criteria
GIVEN I am in EntOS UI, AND I have started playing a game and generated a cloud save point within the Gaming App, WHEN I surface a Game entity page ,AND the Gaming App has provided cloud save points, THEN EntOS UI will be able to indicate to me the cloud save / resume point to view, and allow me to continue playing.

GIVEN I am in EntOS UI, WHEN I select a game to resume, THEN the Gaming App must deep link to the game entity page within the Gaming App.

App UI requirements

Item

Requirement

App Synopsis
REQ_ID:UI01

You must have a clear description of your App up to 180 characters long.

User Story

As a user, I want a synopsis for an App, so that I understand what the App is and what content it offers.

Acceptance Criteria
GIVEN the user is browsing the X1 App Platform UI, WHEN they navigate to the App launch point and the App synopsis is visible, THEN the synopsis must be fully visible.

Notes

  • We recommend up to 180 characters but can go up to a maximum of 200 pending review on the X1 App Platform.

  • See image guidelines for additional asset specifications.

Sample image

art5.png

Content Synopsis
REQ_ID:UI02

You must have a clear description of your content up to 200 characters long. This appears alongside the content hero image.

Sample image

art8.png

App artwork requirements

Please view the Art Guidelines documentation for more information on each asset type.

Asset Type

Ratio

Resolution

Format

Mode

File Size Limit

App: tile small

1:1

260 x 260

.jpg, .png, .ai, .svg

RGB

500k

App: tile medium

1:1

800 x 800

.jpg

RGB

500k

App: tile large

16:9

1920 x 1080

.jpg

RGB

500k

App: tile extra large

1:1

3840 x 3840

.jpg, .png, .ai, .svg

RGB

500k

App: tile alternate

107:69

214 x 138

.jpg, .png, .ai, .svg

RGB

500k

App: background hero

16:9

1920 x 1080

.jpg

RGB

500k

App: title art

1800:1013

1800 x 1013

Transparent .png, .ai, or .svg

RGB

500k

Content: background hero

16:9

1920 x 1080

.jpg

RGB

-

Content: brand logo

1:1

2000 x 2000

Transparent .png, .ai, or .svg

RGB

-

Content: landscape show

16:9

1920 x 1080

.jpg

RGB

500k

Content: landscape episode

16:9

1920 x 1080

.jpg

RGB

500k

Content: portrait

3:4

600 x 800

.jpg

RGB

500k

Firebolt Lifecycle requirements

Firebolt Lifecycle State Definitions

State

Description

Unloaded or not running

Application is not running or loaded in memory.

Inactive

Application is loaded but it not visible, does not receive any input events and cannot play any A/V content. It is considered to be in a low resource state and so should free any unrequired memory (e.g. A/V buffers) and minimize network and CPU usage (e.g. by disabling or reducing frequency of any timers, disabling any animations and closing any Web Sockets). If the app has been used within 60 seconds, where the user was must remain. If more than 60 seconds has passed, the app should transition to the in app homepage. This supports fast transitions into the Active state.

Foreground Active

Application is visible full screen, receives input events and can play A/V content.

Background Active

Application is visible and can play A/V content, but it will not receive input events except for Play/Pause commands. These commands apply when the mini-tv is in or out of focus. This happens in the switcher rail.

Quick start feature requirements

Item

Requirement

Foreground Active to Background Active (when pressing “home” on remote)
REQ_ID:QS01

Your app must transition from the Foreground Active state to the Background Active state appropriately without issue when the user presses “home” on the remote.

User Story


Acceptance Criteria

  • Pressing home on the remote will bring the X1 App Platform UI into the foreground and move the App into the Background Active state.

  • The App will be visible in the mini-TV (currently playing tile).

  • The App will remain in the Background Active state until user either plays a content from another provider or selects the App via App launch point, App content tile or the mini-TV itself, which transitions the App back into full screen (Foreground Active).

  • Currently, when the App is in the Background Active state, the App will not be able to receive trickplay commands from the remote except for Play/Pause commands. These commands apply when the mini-tv is in or out of focus.

Notes
This transition does not require the App to support Firebolt Lifecycle states; this is a platform level capability.

Background Active to Foreground Active
REQ_ID:QS02

Your app must transition from the Background Active state to the Foreground Active state appropriately, without issue.

User Story

Acceptance Criteria

  • Pressing select when the mini-TV is in focus will navigate to full screen for the App and therefore place it back into the Foreground Active state from the Background Active state.

  • The App can also move from the Background Active to Foreground Active state if the user selects a piece of content from the particular App when browsing the X1 App Platform UI. The App will be brought into the foreground either immediately into playback or onto the show page, depending on the deep link type. The App should not relaunch.

  • If the App has been placed in the Background Active state without any A/V content playing, then navigation will be to the point in the App’s UI in full screen.

  • If the App has been placed in the Background Active state with A/V content playing or paused, then the App will continue with the same piece of content playing or paused in full screen when moved back to Foreground Active state.

Notes
This transition does not require the App to support Firebolt Lifecycle states; this is a platform level capability.

Background Active to Inactive
REQ_ID:QS03

Your app must transition from the Background Active state to the Inactive state appropriately without issue.

User Story

prerequisite
The app must support the applicable Firebolt Lifecycle states.

Acceptance Criteria

  • When the App is in the Background Active state, and the user selects a different piece of content (e.g. – ingested VOD, a different App), then the App will be moved to the Inactive state.

  • The App should immediately stop any A/V content playing and free up resources to enter the low resource Inactive state.

Inactive to Foreground Active (Quick start launch)
REQ_ID:QS04

Your app must transition from the Inactive state to the Foreground Active state appropriately without issue.

User Story

prerequisite
The app must support the applicable Firebolt Lifecycle states.

Acceptance Criteria

  • GIVEN I am using a SoIP device connected to a controlled network speed of 20mbps, WHEN I launch the App from an Inactive state, THEN the App UI must load within 1 second.

  • If the App had transitioned into the Inactive state from an Active state within the last 60 seconds, the App must reopen at the same place within the App UI that the user was in previously. The exception is if the App is being launched via a deep link, in which case it will transition to Foreground Active to the content playback or showpage the link relates to.

  • If the App supports in-App profiles, then the App should keep the same profile logged in.

  • If the App had transitioned into the Inactive state from an Active state after 60 seconds, the App must transition to the App homepage.

  • If the App supports in-App profiles, then the App should take you to a Profile Selection screen. The exception is if the App is being launched via a deep link, in which case it should transition to Foreground Active to the content playback or showpage the link relates to, using the most recently used app profile.

Unloaded to Foreground Active (cold start launch)
REQ_ID:QS05

Your app must transition from the Inactive state to the Foreground Active state appropriately without issue.

User Story

Acceptance Criteria
GIVEN I am using a SoIP device connected to a controlled network speed of 20mbps, WHEN I launch the App from a cold start (i.e., it is in Unloaded state), THEN the App UI must load within 10 seconds.

Note
The App does not need to have integrated with Firebolt Lifecycle States to support this transition.

Foreground Active to Inactive (when pressing “dismiss” on remote)
REQ_ID:QS06

Your app must transition from the Foreground Active state to the Inactive state appropriately, without issue when the user presses “dismiss” on the remote.

User Story

Prerequisite
The app must support the applicable Firebolt Lifecycle states.

Acceptance Criteria

  • When I exit out of the App using the “dismiss” button on the remote, the App should stop playing any A/V content, the X1 App Platform UI will be brought into the foreground, and the App should be placed into the inactive state.

  • The App shall remain in the same place within the App UI for 60 seconds before transitioning the App’s home page.

  • After 60 seconds, the App must revert to the in-App homepage

There are two methods of exiting the App and placing it into the Inactive state from the Foreground Active state:

  1. Pressing “dismiss” on the remote.

  2. Launching content that exists outside of the App via voice command or DIAL.

Note
Pressing the “dismiss” button on the remote will exit the App, placing it into the Inactive state. Pressing “home” on the remote does not exit the App completely, despite the App not being in the foreground. This instead places the App into the Background Active state (see Foreground to Background Active transition REQ_ID:QS01).

Full System Reboot
REQ_ID:QS07

Prerequisite
The app must support the applicable Firebolt Lifecycle states.

Requirement
Your app must begin in the Inactive state after a reboot if your App was the last App launched prior to the reboot. Your app must also follow the same acceptance criteria as the “inactive to foreground” (REQ_ID:QS04) transition.

If your App requires authentication, and the user has successfully authenticated prior to a full system reboot, the user must remain authenticated so that the next time your App is launched they can access your App without being asked to sign in again.

App Crash from Active Foreground / Background
REQ_ID:QS08

Prerequisites

  • Your app must support the applicable Firebolt Lifecycle states.

  • Your App must be able to detect an App crash.

Requirement
If your App is in an Active Foreground/Background state and detects a crash, then your App should issue a lifecycle.close() with reason as Error. The App should launch from a cold start state when it launches next (see REQ_ID:QS05 for cold start launch requirements).

UK only:
Glance mode while App is in Foreground Active
REQ_ID:QS09

If your App has been running with no activity from the user after 3 minutes while in the Foreground Active state, then Glance mode should not trigger.

UK only:
Glance mode while App is in Unloaded, Inactive, or Background Active
REQ_ID:QS10

If your App has been running with no activity from the user after 3 minutes while in the Unloaded, Inactive or Background Active state, then Glance mode should trigger.

Germany/Italy (DE/IT) only:
Lifecycle on XiOne (DE & IT) devices
REQ_ID:QS11

If your app is on a XiOne device (DE/IT), then the lifecycle behavior must match the requirements outlined in REQ_ID:QS04-07, & REQ_ID:Q08. However, the following changes will apply:

  1. There will be no Background Active state. The states for Q will either be Unloaded, Active, or Inactive.

  2. There is no Switcher rail in the UI.

Lifecycle requirements REQ_ID:QS01-REQ_ID:QS03 will not apply to these devices.

Required API Implementations

API

Description

Lifecycle.ready()

  • Part of the App’s mandatory Lifecycle Management implementation

  • A minimum requirement for your App to function, run, and be considered a Firebolt App

  • Required to dismiss loading screen

  • Automatically triggers Metrics.ready() contributing to the Time To Minimally Useable (TTMU) SLA metrics

Lifecycle.close()

  • Part of the App’s mandatory Lifecycle Management implementation

  • A minimum requirement for your App to function, run, and be considered a Firebolt App

  • Does not terminate the App session immediately

  • Notifies the OS that your app is ready to be closed but does not terminate the App session immediately.

  • App to listen to the OS unloading event

  • Clear listeners

  • Send Lifecycle.finished() for OS to close the App

Note: There are use cases, such as during testing, where your app returns to the foreground before your app session is terminated, landing the user on the last seen UI (i.e., exit dialog). For better UX, your app should return to either your app’s homepage or the last screen prior to the exit dialog.

Parameter.initialization()

  • Part of the App’s mandatory Lifecycle Management implementation

  • A minimum requirement for your App to function, run, and be considered a Firebolt App

  • Required for deep linking and App launch

  • Payload includes ad tracking and privacy opt-in/out flags

  • It is one of the places where your App can get the Ad tracking opt-in/out status

Metrics.error()

  • A component of the Error Free Session Rate (EFSR) SLA metrics

  • A minimum requirement for all Apps on the App Platform
    Shares the list of errors and troubleshooting guidelines with the platform, which will help with testing and production support.

  • Correct implementation includes:

    • Calling Metrics.error() for all errors which occur from app launch to exit

    • The errors need to be tagged correctly as “visible” or not to the customer

Metrics.startContent()

  • A minimum requirement for all Apps on the App Platform

  • A component of the Errors Per Content Minute (EPCM) SLA metrics

Metrics.stopContent()

  • A minimum requirement for all Apps on the App Platform

  • A component of the Errors Per Content Minute (EPCM) SLA metrics

Note: The Firebolt metrics calls startContent() and stopContent() are not expected to capture every pause/unpause. The these API’s are designed to estimate how much time a user is spending consuming content in the App (vs how much time is spend navigating/browsing an App). While an asset is paused, the media is still considered as being consumed.

For capturing pause/unpause, use mediaPlay() and mediaPause() which are to specifically count the actual playback interactions a user takes within an App.

Manage App while in Inactive state

Your app is required to close video/audio playback session when going into the Inactive state. Playback continuing while your app is out of focus is both disruptive to the customer experience and other apps subsequently launched.

  • Part of your app’s mandatory Lifecycle Management implementation.

  • On device platforms which do not support the “Inactive” state, your app session will be terminated on exit.

  • App to:

    • Stop playback and clear player instance

    • Stop UI loading

    • Reduce memory footprint to below 120Mb

  • For the best UX, it is recommended to prepare your app to return to the foreground and land on the UI closely related to the last experience prior to going into the inactive state. For example:

    • Same page, if it was on a stable UI

    • Content detail page, if playback was in progress

Inactive State Device Support

The Inactive state is currently supported on the following device platforms:

  • Xumo TV (formerly XClass TV)

  • Xumo Stream Box on Charter, Xfinity, and Mediacom.

    • Currently, this feature is only turned on for the primary video service of the distribution (i.e., Spectrum TV for Charter), but it is planned to expand to all apps in the future.

    • Support for the Inactive state is expanding to cover other devices in the future.