Content Discovery

    Content Discovery


    Article summary

    Content Discovery refers to all of the ways that users can discover your App's content on the X1 Platform.

    The X1 Platform is constantly improving the ways that content can be discovered, this includes:

    • Search: Aggregated Experience Voice

    • Seach: In-app Voice

    • Search: Traditional

    • Menu: Editorially cultivated

    • Menu: Continue Watching

    • Menu: Watch Next

    • And more...

    Integrating your App with the Content Discovery module is an easy way to give your users an experience they’ll want to engage in over and over.

    Full Content Discovery integration consists of the following:

    Feature

    Description

    Metadata Integration

    Ingesting your content catalog into distributor discovery services so that it can be presented to end users from outside of your App.

    Navigation Intents

    Responding to the X1 Platform's deep links, both before and after your App is loaded.

    Continue Watching

    Pushing user content progress so that the platforms can show a "Continue Watching" list that deep links back to your App.

    Entitlements Push

    Pushing any changes to your user's entitlements through a client-side Firebolt® API.

    Sign-in/out Push

    Pushing an update whenever the user does a sign-in/out.

    Metadata Integration

    Asset metadata is required to utilize many content discovery features. Asset metadata describes all the relevant, useful, and important information about a media asset. The metadata you provide is used to directly populate the presentation and discovery of your content on the X1 Platform.

    See Metadata Integration for more info.

    Navigation Intents

    In order to enable faster App launches, Firebolt® may keep your App loaded even while it's not in use. In order to support "deep links," (ie: opening your App to a specific piece of content that the user selected) your App will need to integrate with the Firebolt® Navigation Intents feature.

    This integrates your App with basic content discovery features for both deep links as well as in-App search.

    See Deep Linking and Navigation Intents for more info.

    Continue Watching

    The Continue Watching feature helps to drive traffic back into your App from an aggregated experience. By pushing viewing progress to the continue watching API, your App enables aggregated experiences to create prominent calls-to-action to resume that content, or watch the next piece of content in a grouping (ie: the next episode of a TV season).

    Enabling this feature is as simple as calling the Discovery.watched() method whenever a user is watching content in your App:

    import { Discovery } from '@firebolt-js/sdk'
    
    Discovery.watched(entityId, progress)
    

    You can also specify if the content should be considered fully watched, which prevents users from being relaunched into the credits of a movie, for example:

    Discovery.watched(entityId, progress, true)
    

    Lastly, you can specify the date/time at which the content was watched, in order to update the Firebolt® "Continue Watching" feature with viewings that have occurred on other platforms:

    Discovery.watched(entityId, progress, true, '1995-12-17T03:24:00')
    

    Note: Discovery.watched() is an optional feature for users and has a different purpose than Metrics.mediaProgress(). Metrics.mediaProgress() is designed to monitor the overall health and performance of your App while Discovery.watched() is used to enhance personalization and overall user experience.

    Users are able to:

    • see a log of previously watched content

    • able to see the next episode of a previously watched series

    • quickly jump back and forth to their recently watched content

    See the Discovery.watched() API documentation for a complete description of the parameters and how to use them.

    Metrics vs Discovery Calls

    Metrics Calls (via Metrics.mediaProgress()) monitor the overall health and performance of your App, while Discovery Calls (via Discovery.watched()) enhance personalization and user experience by logging watch history and enabling features like Continue Watching.

    Entitlements Push

    Entitlements Push allows aggregated experiences to promote your App's content to drive users back into your App.

    While your App may simply grant a single entitlement of your entire catalog to all of your users, aggregated experiences generally won't assume so.

    By providing a list of entitlements that the current user has, aggregated experiences can be sure to only promote content that won't be gated by a purchase once your App is launched.

    To push the current user's entitlements, call Discovery.entitlements():

    Discovery.entitlements([
                             {
                               "entitlementId": "partner.com/entitlement/123",
                               "startTime": "2021-04-23T18:25:43.511Z",
                               "endTime": "2021-04-23T18:25:43.511Z"
                             },
                             {
                               "entitlementId": "partner.com/entitlement/456",
                               "startTime": "2021-04-23T18:25:43.511Z",
                               "endTime": "2021-04-23T18:25:43.511Z"
                             }
                           ])
        .then(success => {
            console.log(success)
        })
    

    Sign-in/out Push

    Sign-in/out Push allows aggregated experiences to know when a user is signed in or out. This might seem like a minor detail, but in order to respect privacy concerns, it's very important that aggregated experiences no longer promote content to a user that is no longer logged in!

    Whenever your user signs in or out of the App, just call the corresponding Firebolt® API so that aggregated experiences can respect user privacy:

    Discovery.signIn()
    

    or

    Discovery.signOut()
    

    The signIn method also supports an array of entitlements, just like Discovery.entitlements, as a convenience, so your App can update entitlements whenever your user signs in:

    Discovery.signIn([
                        {
                        "entitlementId": "partner.com/entitlement/123",
                        "startTime": "2021-04-23T18:25:43.511Z",
                        "endTime": "2021-04-23T18:25:43.511Z"
                        },
                        {
                        "entitlementId": "partner.com/entitlement/456",
                        "startTime": "2021-04-23T18:25:43.511Z",
                        "endTime": "2021-04-23T18:25:43.511Z"
                        }
                    ])
        .then(success => {
            console.log(success)
        })
    


    Was this article helpful?