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 is being met.
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.
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 it’s 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 re-sizing.
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.
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
Your App should use ~190Mb in stable states. However, 220Mb is acceptable.
If your App is consuming more than 390Mb, then it will start seeing performance degradation and could ultimately crash due to the firmware needing to reclaim memory.
Your App should reduce memory consumption to below 120Mb while in the 'inactive' state.
Use RWI Memory Monitor to check. Please note that the tool itself adds more memory during monitoring.
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 LifecyclenavigateTo 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 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 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 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.
Pre-requisite 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.
Pre-requisite 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 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 due to a technical or network connectivity related issue, 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.
I.e.: 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 recognised") within 1 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 1 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 1 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.
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.
Pre-requisite •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.
Pre-requisite • 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.
Pre-requisites 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.
Pre-requisites • 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.
Pre-requisites • 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 re-load 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.
Pre-requisites • 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.
Pre-requisites • 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.
Pre-requisites • 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.
Pre-requisites • 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 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 content, 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 & 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. 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
Pre-requisite 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
Pre-requisite 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).
Pre-requisite • 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 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 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.
Continue Action -> Playback Intent
Show page displaying Hero Zone
Example of a merchandised tile.
Example of a show page once merchandised tile is clicked. User has started to watch content.
If 'Watch' is selected on X1 App Platform show page, the show is begins content playback.
Available Now
Example of Show page displaying "Available Now" tab.
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)
Example of Show page displaying Available now tab with content partially watched.
Continue Watching
Example of Show page displaying "Continue Watching" tab with content partially watched.
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/ 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 / 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/ 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 showpage 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 / subtitles using the subtitle menu. The closed captions and subtitles 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 closed captions / 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 / 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 / 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 localised 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.
E.g.: 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 . Notes The Privacy Policy needs to describe, amongst other things, the apps 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). Details
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 2 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 THEN the must contain the Impressum which indicates who is responsible for the content shown on a website or within 2 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/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
Playready 2.5 & 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.
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 1 GIVEN I am in the Gaming App AND I navigate to the menu > settings > controllers WHEN I select a listed 3rd party Bluetooth controller or “Other Bluetooth controller” THEN the system overlay message will display EntOS instructions AND an action button deep link to EntOS
Acceptance Criteria 2 GIVEN I am in the Gaming App AND I have not connected my controller WHEN I select a game and the play action THEN the App overlay message will appear with EntOS instructions WHEN I select a listed 3rd party Bluetooth controller or “Other Bluetooth controller” THEN the App overlay message will display EntOS instructions AND an action button deep link to EntOS
Acceptance Criteria 3 GIVEN I am in the Gaming App AND I have a paired & connected Bluetooth controller on EntOS WHEN the Gaming App connects to the connected devices(s) THEN an App overlay message confirms the device is connected to the App
Acceptance Criteria 4 GIVEN I am in the Gaming App AND I have a paired & connected Bluetooth controller on EntOS WHEN a paired & connected Bluetooth controller disconnects THEN an App overlay message confirms the device is disconnected
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. Appexperiences lower network speed or a loss of connectivity the 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 gameplay should have no noticeable latency
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 have no noticeable latency
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 deeplink 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, 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
Content Synopsis REQ_ID:UI02
You must have a clear description of your content up to 200 characters long. This appears alongside the the content hero image.
Sample image
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 moves 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
Pre-requisite 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
Pre-requisite
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
Pre-requisite
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 place the App 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
Pre-requisite 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
Pre-requisites • 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.
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.
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
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.
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.
Was this article helpful?
Thank you for your feedback! Our team will get back to you