Implementing Public Preview

This topic describes how to implement a public preview for the Smart Hub Preview feature. A public preview shows the same preview content to all users.


Related Info


Samples


Public preview content is defined by a remotely-hosted JSON file. You can configure the JSON file to expire and refresh at a specific time. The public preview generation process is shown in the following figure.

Figure 1. Public preview generation process

  1. The URL of the remote JSON file is defined in the application's "config.xml" file.
  2. The preview is generated and shown based on the JSON data.
  3. The user clicks a preview tile.
  4. The JSON action_data value corresponding to the selected tile is sent to the application.
  5. The application parses the action_data value and shows the detail page.

Prerequisites

To enable your application to use the public preview functionality:

  1. Define the remote JSON file URL in the "config.xml" file:

    <tizen:metadata key='http://samsung.com/tv/metadata/use.preview' value='endpoint_URL=http://yourServer/JSONfile.json'></tizen:metadata> 
    
  2. Disable reloading the application main page when it receives an application control request. This allows your application, if it is already running, to receive the action_data information without reloading.

    <tizen:app-control>
      <tizen:src name='index.html' reload='disable'></tizen:src>
      <tizen:operation name='http://samsung.com/appcontrol/operation/eden_resume'></tizen:operation> 
    </tizen:app-control>
    
  3. If you want the application to support 2015 TV models, set the required_version attribute to "2.3" and the development API version meta data attribute to "2.4" in the "config.xml" file:

    <tizen:application ... required_version='2.3'></tizen:application>
    <tizen:metadata key='http://samsung.com/tv/metadata/devel.api.version' value='2.4'></tizen:metadata> 
    

Configuring Public Preview Data

The preview content is defined in JSON format. The application can only use 1 preview content JSON file at a time.

The following table lists the structure and parameters for the preview content JSON data.

Parameter Type Mandatory Description
expires

UNIX timestamp false For public preview only
If specified, the time at which the preview content is updated. The time is at most 1 week into the future. By default, the preview content is updated every 10 minutes, whenever the TV is switched on, or the JSON file changes.

expires_only

Boolean For public preview only
If this value is "true", the preview content is updated only at the time specified by the expires parameter. The default value is "false". It is supported in 2018 TV models and newer.

sections

Array true Preview sections
title

String false Section title
position

Integer Section position
If specified, sections are shown in ascending position order.

title_display_mode

String The following three values are supported:
  • AlwaysOn
  • HighlightedOnly (default)
    Show the title while the tile is in focus.
  • AccessibilityOnly
    Title is hidden when tile is in focus, Voice Guide is provided when the accessibility setting is set to ON.
For more information, see the detailed description below the table.

subtitle_display_mode

String The following three values are supported:
  • AlwaysOn
  • HighlightedOnly (default)
    Show the subtitle while the tile is in focus.
  • AccessibilityOnly
    Subtitle is hidden when tile is in focus. Voice Guide is provided when the accessibility setting is set to ON.
For more information, see the detailed description below the table.

tiles

Array true Tiles within the section
title

String false Tile title
subtitle

Tile subtitle
image_url

true Thumbnail image URL
image_ratio

Thumbnail image aspect ratio:
  • "16by9"
  • "4by3"
  • "1by1" (default)
  • "2by3"
The thumbnail height is fixed at 250 px on presentation.

action_data

Data to send to the application when the tile is clicked
is_playable

If "true", a "Play" icon is shown over the thumbnail image
display_from

UNIX timestamp false Time to begin showing the tile
display_until

Time to stop showing the tile
position

Integer Section position
If specified, sections are shown in an ascending order by the position value.

Table 1. Preview JSON parameters

For an example of a preview content JSON file, see sampleJSON.

The JSON parameters title_display_mode and subtitle_display_mode for displaying title and subtitle of tiles, respectively, support the following options:

  • AlwaysOn - If this option is enabled, the title or subtitle is always displayed when the preview is visible.

    Figure 2. Title and Subtitle set as “AlwaysOn”
  • HighlightedOnly - This is the default option, which shows the title or subtitle when the tile is in focus.

    Figure 3. Title and Subtitle set as “HighlightedOnly”
  • AccessibilityOnly - If this option is enabled, the title or subtitle is not displayed. There is only a Voice Guide when the accessibility setting is set to ON and the preview tile is in focus.

    Figure 4. Title and Subtitle set as “AccessibilityOnly”

When the preview system requests JSON data from your server, TV information is sent in the HTTP header. You can serve different preview content depending on TV information, such as the language, and application version.

The following table lists the HTTP header fields that contain TV information.

Field Description
ACCEPT-LANGUAGE

TV language setting, such as 'en-US'
X-SAMSUNG-APP-VERSION

Application version
X-SAMSUNG-COUNTRY-CODE

TV Smarthub country setting, such as 'US' in ISO 3166-1 Alpha 2 Format

Table 2. HTTP header fields

When a tile is clicked, its associated action_data value is converted to an ApplicationControlData object with the PAYLOAD key:

{
  "key": "PAYLOAD", 
  "value": ["{\"values\": \"{\\\"videoIdx\\\": 1}\"}"] 
} 

For more information on ApplicationControlData objects, see the Application API.

To implement deep-linking:

  1. To receive action_data information when the application is already running, add an event listener for the appcontrol event to the onload property:

    window.addEventListener('appcontrol', deepLink); 
    
  2. In the onload property, receive and parse the PAYLOAD key value, using the getCurrentApplication().getRequestedAppControl() method:

    function deepLink() { 
      var requestedAppControl = tizen.application.getCurrentApplication().getRequestedAppControl(); 
      var appControlData;
      var actionData; 
    
      var videoIdx; 
      var pictureIdx; 
    
      if (requestedAppControl) {
        appControlData = requestedAppControl.appControl.data; 
    
        for (var i = 0; i < appControlData.length; i++) { 
          if (appControlData[i].key == 'PAYLOAD') { 
            actionData = JSON.parse(appControlData[i].value[0]).values; 
    
            if (JSON.parse(actionData).videoIdx) { 
              videoIdx = JSON.parse(actionData).videoIdx; 
              console.log(videoIdx); 
            } else if (JSON.parse(actionData).pictureIdx) { 
              pictureIdx = JSON.parse(actionData).pictureIdx; 
              console.log(pictureIdx); 
            } 
          } 
        } 
      } else { 
        console.log("no req app control"); 
      } 
    }