Requisiti di accesso

Gli utenti preferiscono guardare o ascoltare contenuti a cui hanno già accesso, come i contenuti dell'abbonamento esistenti. Se Google conosce i contenuti a cui un utente può accedere nella tua app o nella tua piattaforma, può generare un risultato di ricerca o una risposta migliori per indirizzare l'utente a tali contenuti.

Figura 1. I requisiti di accesso consentono agli abbonati di accedere ai contenuti sulla tua app o piattaforma.

Identificare i requisiti di accesso ai contenuti

Devi identificare il requisito di accesso per ogni pacchetto di contenuti nel tuo catalogo. Nel farlo, prendi in considerazione le seguenti domande:

  • Gli utenti devono accedere alla tua app o alla tua piattaforma per accedere ai contenuti?
  • Gli utenti hanno bisogno di un abbonamento?

    Solo azioni smartwatch:

    • Gli utenti devono utilizzare un abbonamento da un fornitore di servizi esterno?
    • Offrite un abbonamento aggiuntivo, a più pacchetti o a componenti aggiuntivi?
  • Solo azioni Watch: gli utenti devono noleggiare o acquistare i contenuti?

  • Il requisito di accesso cambia nel tempo?

  • Il requisito di accesso dipende dalla posizione del dispositivo?

Tipi di limitazioni di accesso

Esistono due tipi di restrizioni di accesso:

Tipo di paywall

Puoi limitare l'accesso ai contenuti in base al tipo di paywall. La seguente tabella descrive i diversi tipi di paywall:

Tipo di paywall Esempio Categoria
Non è richiesto alcun acquisto o accesso. Scoppiettio nologinrequired
L'utente deve aver eseguito l'accesso, ma non ha bisogno di un abbonamento a pagamento. Vudu (AVOD) free
L'utente deve avere un abbonamento attivo. L'accesso è indipendente dal livello di abbonamento. Netflix

subscription

L'utente deve avere un abbonamento attivo. L'accesso dipende dal livello di abbonamento. Hulu (componenti aggiuntivi)

subscription

I contenuti sono disponibili per un periodo di tempo limitato dopo l'acquisto. Vudu rental
I contenuti sono disponibili per un periodo di tempo indefinito dopo l'acquisto. Vudu purchase
I contenuti sono disponibili tramite abbonamento via cavo. HBO Go externalSubscription

Tipo di paywall per Actions Actions

Per specificare il tipo di paywall dei contenuti per le azioni di visualizzazione, utilizza la proprietà category nella specifica per l'accesso alle azioni:

"potentialAction": {
  "@type":"WatchAction",
  "target": { … },
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "subscription",
    "availabilityStarts": "2018-06-01T10:35:29Z",
    "availabilityEnds": "2019-05-31T10:35:29Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  },
  ...
}

Tipo di paywall per le azioni di ascolto

Per specificare il tipo di paywall dei contenuti per le azioni di ascolto, utilizza la proprietà category nell'oggetto offerta:

"potentialAction": {
  "@type":"ListenAction",
  "target": { … },
  "expectsAcceptanceOf":{
    "@type":"Offer",
    "category":"subscription",
    "availabilityStarts": "2018-06-01T10:35:29Z",
    "availabilityEnds": "2019-05-31T10:35:29Z",
    "eligibleRegion": {
      "@type":"Country",
      "name":"US"
    }
  },
  ...
}

Area geografica

Devi specificare le aree geografiche in cui i contenuti sono disponibili. Utilizza una o entrambe le seguenti proprietà:

Un utente può accedere ai contenuti se la località del dispositivo si trova in un'area geografica specificata in eligibleRegion e non all'interno di una qualsiasi area geografica specificata in ineligibleRegion.

Le proprietà eligibleRegion e ineligibleRegion consentono i seguenti valori:

Se i contenuti sono disponibili a livello globale, utilizza il seguente valore speciale per eligibleRegion:

"eligibleRegion": "EARTH",

casi d'uso idonei per la regione

Di seguito sono riportati esempi di casi d'uso della proprietà eligibleRegion:

  • Esempio 1: eligibleRegion con un elenco di paesi.
  • Esempio 2: eligibleRegion con un oggetto GeoShape che contiene un elenco di codici postali.
  • Esempio 3: eligibleRegion con un oggetto GeoShape che contiene un elenco di codici di area di ordinazione diretta (FSA).
  • Esempio 4: eligibleRegion con un oggetto GeoShape che contiene un ID DMA.
  • Esempio 5: eligibleRegion con un elenco di oggetti GeoShape. Ciascuno contiene un ID DMA.
  • Esempio 6: ineligibleRegion con codici postali bloccati.

Esempio 1

eligibleRegion con l'elenco dei paesi:


"actionAccessibilityRequirement": {
  "@type": "ActionAccessSpecification",
  "category": "subscription",
  "requiresSubscription": {
    "@type": "MediaSubscription",
    "@id": "http://www.example.com/north_america_network/subscription",
    "name": "Example Subscription",
    "commonTier": true
  },
  "eligibleRegion": [
    {
      "@type": "Country",
      "name": "US"
    },
    {
      "@type": "Country",
      "name": "CA"
    }
  ]
}

Esempio 2

eligibleRegion con un oggetto GeoShape che contiene un elenco di codici postali:


"actionAccessibilityRequirement": {
  "@type": "ActionAccessSpecification",
  "category": "subscription",
  "requiresSubscription": {
    "@type": "MediaSubscription",
    "@id": "http://www.example.com/local_tv_network/subscription",
    "name": "Example Subscription",
    "commonTier": true
  },
  "eligibleRegion": {
    "@type": "GeoShape",
    "@id": "http://example.com/area1",
    "addressCountry": "US",
    "postalCode": [
      "94118",
      "94119"
    ]
  }
}

Esempio 3

eligibleRegion con un oggetto GeoShape che contiene un elenco di codici di area di inoltro (FSA):


"actionAccessibilityRequirement": {
  "@type": "ActionAccessSpecification",
  "category": "subscription",
  "requiresSubscription": {
    "@type": "MediaSubscription",
    "@id": "http://www.example.com/local_tv_network/subscription",
    "name": "Example Subscription",
    "commonTier": true
  },
  "eligibleRegion":{
    "@type": "GeoShape",
    "@id": "http://example.com/area2",
    "addressCountry": "CA",
    "postalCode": [
      "1A1",
      "K1A"
    ]
  }
}

Esempio 4

eligibleRegion con un oggetto GeoShape che contiene un ID DMA:


"actionAccessibilityRequirement": {
  "@type": "ActionAccessSpecification",
  "category": "subscription",
  "requiresSubscription": {
    "@type": "MediaSubscription",
    "@id": "http://www.example.com/abcd/subscription",
    "name": "Example Subscription",
    "commonTier": true
  },
  "eligibleRegion":{
    "@type": "GeoShape",
    "@id": "http://example.com/area3",
    "addressCountry": "US",
    "identifier": [
      {
        "@type": "PropertyValue",
        "propertyID": "DMA_ID",
        "value": "501"
      }
    ]
  }
}

Esempio 5

eligibleRegion con un elenco di oggetti GeoShape. Ciascuno contiene un ID DMA:


"actionAccessibilityRequirement" : {
   "@type" : "ActionAccessSpecification",
   "eligibleRegion" : [
      {
         "@id" : "http://example.com/dma/601",
         "@type" : "GeoShape",
         "addressCountry" : "US",
         "identifier" : {
            "@type" : "PropertyValue",
            "propertyID" : "DMA_ID",
            "value" : "601"
         }
      },
      {
         "@id" : "http://example.com/dma/602",
         "@type" : "GeoShape",
         "addressCountry" : "US",
         "identifier" : {
            "@type" : "PropertyValue",
            "propertyID" : "DMA_ID",
            "value" : "602"
         }
      }
   ]
}

Esempio 6

ineligibleRegion con codici postali bloccati:


"actionAccessibilityRequirement": {
  "@type": "ActionAccessSpecification",
  "category": "subscription",
  "requiresSubscription": {
    "@type": "MediaSubscription",
    "@id": "http://www.example.com/local_tv_network/subscription",
    "name": "Example Subscription",
    "commonTier": true
  },
 "eligibleRegion":   {
      "@type": "Country",
      "name": "US"
    },
  "ineligibleRegion": {
    "@type": "GeoShape",
    "@id": "http://example.com/area1",
    "addressCountry": "US",
    "postalCode": [
      "94118",
      "94119"
    ]
  }
}

Identificatore del diritto

L'identificatore del diritto, entitlementId, si riferisce a una stringa che rappresenta l'accesso a un gruppo di contenuti nel tuo catalogo multimediale. Per determinare se un utente ha accesso ai tuoi contenuti, Google adotta le seguenti misure:

  1. Facciamo una chiamata API al tuo endpoint dei diritti per ricevere gli identificatori dell'utente.
  2. Cercamo gli identificatori dei diritti richiesti dal contenuto dal tuo feed Azioni multimediali.
  3. L'elemento entitlementId di un utente corrisponde alla identifier proprietà dell'oggetto abbonamento multimediale nel tuo feed. Se almeno una proprietà entitlementId corrisponde, l'utente può accedere ai contenuti.
Figura 2. Uno degli identificatori dei diritti dell'utente corrisponde all'identificatore dei diritti richiesto nei contenuti.

Google consiglia di utilizzare la seguente sintassi per entitlementId:

<domain name> + colon (:) + <access level to content>

Esempi di sintassi:

  • example.com:basic
  • example.com:premium
  • example.com:sports

Esempio di identificatore di diritti

Il feed di MediaExampleCompany specifica che Movie XYZ richiede example.com:basic entitlementId, come mostrato:

{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type": "Movie",
  "@id": "www.example.com/movie_xyz",
  "url": "www.example.com/movie_xyz",
  "name": "Movie XYZ",
  "potentialAction": {
    "@type": "WatchAction",
    "target": [ … ],
    "actionAccessibilityRequirement": {
      "@type": "ActionAccessSpecification",
      "category": "subscription",
      "requiresSubscription": {
        "@type": "MediaSubscription",
        "@id": "http://www.example.com/basic_subscription",
        "name": "Basic subscription",
        "commonTier": true
        ...
      },
      ...
    }
  },
  ...
}

Casi d'uso comuni dell'accesso

Di seguito sono riportati i casi d'uso comuni di accesso:

  • Senza costi (accesso non necessario): i contenuti sono disponibili senza accesso, abbonamento o acquisto.
  • Senza costi (è richiesto l'accesso). I contenuti richiedono l'accesso degli utenti, ma non richiedono un abbonamento.
  • Abbonamento a un livello: i contenuti richiedono un abbonamento. Tutti gli abbonati possono accedere agli stessi contenuti, che siano film o puntate, indipendentemente dal loro pacchetto di abbonamento.
  • Abbonamento a più livelli: i contenuti richiedono un abbonamento. Gli abbonati possono accedere a contenuti diversi, film o puntate, in base al livello di abbonamento. Ad esempio, Oro o Oro.
  • Abbonamento aggiuntivo: i contenuti richiedono un abbonamento. Gli abbonati possono aggiungere contenuti premium oltre all'abbonamento standard.
  • Acquisto una tantum: i contenuti possono essere acquistati dopodiché l'utente può accedervi a tempo indeterminato.
  • TV in diretta: un abbonamento include l'accesso ai canali locali, nazionali e premium.
  • Abbonamento di terze parti: i contenuti richiedono all'utente di eseguire l'accesso con il proprio fornitore di servizi via cavo.

Senza costi (accesso non necessario)

Accesso non necessario

I contenuti sono disponibili senza accesso o abbonamento.


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "nologinrequired",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}
  • Imposta il valore di category su nologinrequired.
  • Non includere expectAcceptanceOf.

Senza costi (è richiesto l'accesso)

Accesso richiesto

I contenuti richiedono che l'utente abbia eseguito l'accesso, ma non richiede un abbonamento.


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "free",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}
  • Imposta il valore di category su free.
  • Non includere expectAcceptanceOf.

Abbonamento a un livello

In un modello di abbonamento a un livello, un provider di servizi ha un livello di abbonamento. Tutti gli abbonati possono accedere agli stessi contenuti, che si tratti di film o puntate, indipendentemente dal loro pacchetto di abbonamento.


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "subscription",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "requiresSubscription": {
        "@type": "MediaSubscription",
        "name": "Example Package",
        "commonTier": true,
        "@id": "http://www.example.com/example_package"
    },
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}

Abbonamento multilivello

In un modello di abbonamento a più livelli, un fornitore di servizi dispone di più livelli di abbonamento, come Oro, Argento e Bronzo. Gli utenti che hanno l'abbonamento di livello superiore possono accedere a tutti i contenuti di livello inferiore. Tuttavia, gli utenti che hanno l'abbonamento dal livello inferiore non potranno accedere ai contenuti del livello superiore.

Figura 3. Un modello di abbonamento a più livelli e la rappresentazione dei diritti.

Considera il seguente scenario:

  • Jane si abbona al livello Oro. L'endpoint dei diritti restituisce i seguenti identificatori entitlementId:
    • example.com:bronze
    • example.com:silver
    • example.com:gold
  • Giovanni si abbona al livello Bronzo. L'endpoint dei diritti restituisce il seguente entitlementId:
    • example.com:bronze
  • Il feed Azioni multimediali descrive i seguenti requisiti:
    • Il film A richiede example.com:bronze.
    • Il film B richiede example.com:silver.

In questo scenario, Google determina i seguenti livelli di accesso per Jane e John:

  • Sia Jane che John hanno accesso al film A.
  • Jane ha accesso al Film B, ma non a John.
{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "subscription",
    "requiresSubscription": {
      "@type": "MediaSubscription",
      "@id": "http://www.example.com/basic_subscription",
      "name": "Bronze",
      "commonTier": true
      ...
    },
    ...
  }
}

Abbonamento aggiuntivo

In un modello di abbonamento aggiuntivo, un fornitore di servizi consente agli utenti di espandere i propri diritti e aggiungere canali a un abbonamento di base. Gli utenti possono aggiungere tutti i canali che vogliono.

Figura 4. Un modello di abbonamento per i componenti aggiuntivi e la rappresentazione dei diritti.

Considera il seguente scenario:

  • Jane ha PRO e Sportz oltre all'abbonamento Basic. L'endpoint dei diritti restituisce i seguenti identificatori entitlementId:
    • example.com:basic
    • example.com:pro
    • example.com:sportz
  • Giovanni dispone solo dell'abbonamento a Basic. L'endpoint dei diritti restituisce il seguente entitlementId:
    • example.com:basic
  • Il feed Azioni multimediali descrive i seguenti requisiti:
    • Il film A richiede example.com:basic.
    • Il film B richiede example.com:pro.

In questo scenario, Google determina i seguenti livelli di accesso per Jane e John:

  • Sia Jane che John hanno accesso al film A.
  • Jane ha accesso al Film B, ma non a John.
{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "subscription",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    "requiresSubscription": [
      {
          "@type": "MediaSubscription",
          "@id": "https://www.example.com/package/basic",
          "name": "Basic",
          "sameAs": "https://www.example.com/package/basic",
          "commonTier": true
        },
        {
          "@type": "MediaSubscription",
          "@id": "https://www.example.com/packages/basic/pro",
          "name": "PRO",
          "sameAs": "https://www.example.com/package/pro",
          "identifier": "example.com:pro",
          "commonTier": false
        },
        {
          "@type": "MediaSubscription",
          "@id": "https://www.example.com/package/sportz",
          "name": "Sportz",
          "sameAs": "https://www.example.com/package/sports",
          "identifier": "example.com:sportz",
          "commonTier": false
        }
    }
  }
}

Acquisto una tantum

Acquisto

I contenuti sono disponibili per un periodo di tempo indefinito dopo l'acquisto.


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "purchase",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    },
    "expectsAcceptanceOf": {
      "@type": "Offer",
      "price": 7.99,
      "priceCurrency": "USD",
      "seller": {
        "@type": "Organization",
        "name": "Example",
        "sameAs": "http://www.example.com/"
      }
    }
  }
}
  • Imposta il valore di category su purchase.
  • Includi expectAcceptanceOf in actionAccessibilityRequirement per indicare il prezzo dell'acquisto.

Noleggio

I contenuti sono disponibili per un periodo di tempo limitato dopo l'acquisto.


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "rental",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    },
    "expectsAcceptanceOf": {
      "@type": "Offer",
      "price": 7.99,
      "priceCurrency": "USD",
      "seller": {
        "@type": "Organization",
        "name": "Example",
        "sameAs": "http://www.example.com/"
      }
    }
  }
}
  • Imposta il valore di category su rental.
  • Includi expectAcceptanceOf in actionAccessibilityRequirement per indicare il prezzo del noleggio.

TV in diretta

In un feed Azioni multimediali, puoi limitare l'accesso a un canale o a un evento TV in diretta in base alle due condizioni utente seguenti:

  • Posizione del dispositivo dell'utente

    Per limitare l'accesso al canale TV, specifica l'area in cui gli utenti hanno accesso. Questa condizione si applica in genere ai canali TV di trasmissione locale.

  • Stato dell'account dell'utente

    Se l'accesso a un canale TV dipende dall'impostazione a livello di account di un utente, utilizza gli identificatori di diritti per rappresentare la limitazione.

    Questa condizione si applica in genere ai seguenti casi d'uso:

    • Pacchetto: i canali nazionali sono spesso inclusi nei pacchetti e gli utenti scelgono a quale bundle vogliono iscriversi.
    • Componente aggiuntivo: alcuni canali premium richiedono agli utenti di aggiungere altri canali in modo selettivo al proprio abbonamento.
    • Regione sportiva regionale (RSN): le RSN sono generalmente associate alla posizione "a casa" di un utente. Gli utenti possono guardare i contenuti dell'RSN anche quando si trovano al di fuori del luogo in cui si trovano.

Abbonamento di terze parti

Abbonamento di terze parti

I contenuti sono disponibili per gli abbonati tramite un servizio diverso.


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "externalsubscription"
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "requiresSubscription":{
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/faq",
      "name": "Example",
      "sameAs": "https://www.example.com/faq",
      "authenticator": {
        "@type": "Organization",
        "name": "TVE"
      }
    },
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}
  • Aggiungi authenticator per indicare che un servizio diverso autentica gli abbonati. Ad esempio, HBO GO richiede un abbonamento al fornitore del cavo.

Pacchetti di livello comune

I contenuti di livello comune sono disponibili per tutti gli abbonati, indipendentemente dal loro pacchetto di abbonamento. Il livello comune si applica a tutti i contenuti con category di subscription. Per ulteriori informazioni sulla proprietà category, consulta la sezione Tipo di paywall.

Perché è richiesto un pacchetto di livello comune?

Più prodotti Google offrono agli utenti consigli su TV e film, tra cui la Ricerca Google, Android TV e l'Assistente Google. Per impostare le aspettative degli utenti sul costo, Google deve comprendere quali contenuti sono disponibili per tutti gli abbonati utilizzando il livello comune. Google deve anche comprendere quali sono i contenuti disponibili per gli abbonati con pacchetti di abbonamento specifici.

Google consiglia i titoli disponibili sul livello comune a meno che non supporti l'API Entitlement. L'API consente a Google di comprendere i titoli non comuni a cui può accedere ogni utente specifico.

Quando dovrei creare un pacchetto di livello comune?

È richiesto un pacchetto di livello comune quando il servizio offre contenuti disponibili per tutti gli abbonati. Sono inclusi i servizi che offrono un solo pacchetto e i servizi che offrono più pacchetti o componenti aggiuntivi.

I provider che non hanno contenuti disponibili per tutti gli abbonati non devono creare un pacchetto di livello comune. Un esempio sono i fornitori di servizi che forniscono contenuti in comune tra loro per tutti i loro pacchetti.

Esempi di livello comune

Di seguito sono riportati alcuni esempi del livello comune.

Abbonamento a più livelli

In un modello di abbonamento a livelli, un fornitore di servizi dispone di più livelli di abbonamento, come Oro, Argento e Bronzo. Gli utenti con l'abbonamento di livello superiore hanno accesso a tutti i contenuti dei livelli inferiori. Gli utenti con l'abbonamento di livello inferiore non hanno accesso ai contenuti nel livello superiore. L'immagine seguente è un esempio della struttura del pacchetto.

Il livello Oro include tutti i contenuti del livello Argento, che a sua volta contiene tutto il livello Bronzo.
Figura 5. Struttura di pacchetti di abbonamento a più livelli.

Nell'esempio di codice riportato di seguito, il pacchetto bronzo è il livello comune perché tutti gli utenti hanno accesso a tutti i contenuti del livello in questione.

"requiresSubscription": [
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/bronze",
      "name": "Bronze",
      "sameAs": "https://www.example.com/package/bronze",
      "commonTier": true
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/silver",
      "name": "Silver",
      "sameAs": "https://www.example.com/package/silver",
      "identifier": "example.com:silver",
      "commonTier": false
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/gold",
      "name": "Gold",
      "sameAs": "https://www.example.com/package/gold",
      "identifier": "example.com:gold",
      "commonTier": false
    }
  ],

Componenti aggiuntivi

In un modello di abbonamento aggiuntivo, un fornitore di servizi consente agli utenti di espandere i propri diritti e aggiungere canali a un abbonamento di base. Gli utenti possono aggiungere tutti i canali che vogliono. L'immagine seguente è un esempio della struttura del pacchetto.

Ogni utente inizia con il canale di base e può scegliere di aggiungere qualsiasi combinazione dei canali PRO, Sportz e Moviemax.
Figura 6. Struttura del pacchetto di abbonamenti aggiuntivi.

Se hai un canale disponibile per tutti gli utenti e non sono previsti costi per il canale, puoi unire il pacchetto con il pacchetto di livello comune.

Nell'esempio di codice seguente, il pacchetto base è il livello comune perché tutti gli utenti hanno accesso a tutti i contenuti del pacchetto.

"requiresSubscription": [
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/basic",
      "name": "Basic",
      "sameAs": "https://www.example.com/package/basic",
      "commonTier": true
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/packages/basic/pro",
      "name": "PRO",
      "sameAs": "https://www.example.com/package/pro",
      "identifier": "example.com:pro",
      "commonTier": false
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/sportz",
      "name": "Sportz",
      "sameAs": "https://www.example.com/package/sports",
      "identifier": "example.com:sportz",
      "commonTier": false
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/moviemax",
      "name": "Moviemax",
      "sameAs": "https://www.example.com/package/moviemax",
      "identifier": "example.com:moviemax",
      "commonTier": false
    }
  ],

Pacchetti con contenuti che si intersecano

In un modello di contenuti in cui i pacchetti includono contenuti che si intersecano, un fornitore di servizi vende pacchetti che includono alcuni contenuti di altri pacchetti. L'immagine seguente è un esempio della struttura del pacchetto.

Un diagramma di Venn in cui la sovrapposizione tra i pacchetti 1, 2 e 3 è etichettata &quot;Livello comune&quot;.
Figura 7. Struttura del pacchetto con contenuti che si intersecano.

Nell'esempio di codice seguente, il provider offre tre pacchetti in cui alcuni contenuti si intersecano con tutti i pacchetti. In questo caso, è necessario un quarto pacchetto che rappresenta il livello comune. Deve includere tutti i contenuti disponibili in tutti e tre i pacchetti.

"requiresSubscription": [
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/1",
      "name": "Package 1",
      "sameAs": "https://www.example.com/package/1",
      "identifier": "example.com:package1",
      "commonTier": false
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/2",
      "name": "Package 2",
      "sameAs": "https://www.example.com/package/2",
      "identifier": "example.com:package2",
      "commonTier": false
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/3",
      "name": "Package 3",
      "sameAs": "https://www.example.com/package/3",
      "identifier": "example.com:package3",
      "commonTier": false
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/common",
      "name": "Common Tier Package",
      "sameAs": "https://www.example.com/package/common",
      "commonTier": true
    }
  ],

Pacchetti senza contenuti che si intersecano

In un modello di contenuti in cui tutti i pacchetti di contenuti non si intersecano, un fornitore di servizi vende pacchetti che non includono contenuti di altri pacchetti. L'immagine seguente è un esempio della struttura del pacchetto.

I pacchetti 1, 2 e 3 sono completamente separati.
Figura 8. Struttura del pacchetto senza contenuti che si intersecano.

Nell'esempio seguente, il provider offre tre pacchetti senza contenuti che si intersecano con tutti i pacchetti. Non è richiesto un pacchetto di livelli comune.

"requiresSubscription": [
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/1",
      "name": "Package 1",
      "sameAs": "https://www.example.com/package/1",
      "identifier": "example.com:package1",
      "commonTier": false
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/2",
      "name": "Package 2",
      "sameAs": "https://www.example.com/package/2",
      "identifier": "example.com:package2",
      "commonTier": false
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/3",
      "name": "Package 3",
      "sameAs": "https://www.example.com/package/3",
      "identifier": "example.com:package3",
      "commonTier": false
    }
  ],

Endpoint dei diritti

Utilizza le informazioni contenute in questa sezione per ospitare un endpoint HTTPS che restituisce i diritti associati a un utente.

Prerequisito

Prima di iniziare, verifica che il tuo servizio supporti il flusso OAuth 2.0 con Google.

Risorse richieste:

Per ricevere i diritti di un utente, Google invia una richiesta che contiene il token OAuth dell'utente. L'endpoint deve identificare l'utente in base al token OAuth. Vedi l'esempio di seguito:

GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer <OAuthToken>

Risposta

L'endpoint deve restituire una risposta con le seguenti proprietà:

Proprietà
subscription

Obbligatorio

Si tratta di un campo all'interno della risposta principale.

subscription.type

Obbligatorio

Questa proprietà può avere i seguenti valori:

  • ActiveSubscription: l'utente ha un abbonamento attivo al provider.
  • ActiveTrial: l'utente ha una prova attiva per il provider.
  • InactiveSubscription: l'utente non ha un abbonamento attivo o una prova attiva.
subscription.expiration_date

Facoltativo

La data di scadenza di questo diritto, in formato ISO 8601, che include il fuso orario. Per maggiori dettagli, consulta la sezione Date di scadenza.

entitlements

Facoltativo

Questa proprietà radice contiene i valori entitlementId che l'utente contiene.

entitlements.entitlement

Obbligatorio se l'accesso al tuo catalogo di streaming varia in base al tipo di abbonamento.

Questa proprietà contiene il entitlementId. Per ulteriori informazioni, consulta la pagina Identificatore del diritto.

entitlements.expiration_date

Facoltativo

La data di scadenza dell'abbonamento, in formato ISO 8601, che include il fuso orario. Per maggiori dettagli, consulta la sezione Date di scadenza.

Date di scadenza

Nella risposta di un endpoint esistono due proprietà che riguardano le date di scadenza: subscription.expiration_date e entitlements.expiration_date. Puoi includerne uno o nessuno dei due, ma non entrambi. La scelta dipende dal modello di abbonamento.

Modello di abbonamento
L'accesso al tuo catalogo di streaming è lo stesso per tutti gli iscritti. Poiché non è necessario specificare la proprietà entitlements, specifica subscription.expiration_date.

L'accesso al tuo catalogo di streaming varia in base ai dettagli dell'abbonamento di un utente.

Se il modello di abbonamento ha più livelli o componenti aggiuntivi che scadono nel tempo, procedi in uno dei seguenti modi:

  • Se tutti i valori entitlements.entitlement scadono contemporaneamente, specifica subscription.expiration_date.
  • Se alcuni valori di entitlements.entitlement scadono in momenti diversi, specifica entitlements.expiration_date.

Risposte di esempio

Di seguito sono riportate alcune risposte di esempio dei diversi stati delle iscrizioni:

  • Abbonamento attivo
  • Abbonamento attivo con data di scadenza
  • Nessun abbonamento
  • Abbonamenti attivi a più livelli o componenti aggiuntivi

Abbonamento attivo

Abbonamento attivo

Un utente ha un abbonamento attivo a example.com. In questo caso, tutti gli abbonati hanno accesso all'intero catalogo di streaming, indipendentemente dal tipo di abbonamento.


{
  "subscription" : {
    "type": "ActiveSubscription",
  }
}

Abbonamento attivo con data di scadenza

Abbonamento attivo con data di scadenza

Un utente ha un abbonamento attivo a example.com e l'abbonamento ha una data di scadenza. In questo caso, tutti gli abbonati hanno accesso all'intero catalogo di streaming, indipendentemente dal tipo.


{
  "subscription" : {
    "type": "ActiveSubscription",
    "expiration_date": "2019-11-10T10:00:00Z"
  }
}

Nessun abbonamento

Nessun abbonamento

Un utente non ha alcun abbonamento a example.com.


{
  "subscription" : {
    "type": "InactiveSubscription"
  }
}

Abbonamenti attivi a più livelli o componenti aggiuntivi

Abbonamenti attivi a più livelli o componenti aggiuntivi

Un utente ha un abbonamento a example.com:premium fino a una determinata data.


{
  "subscription" : {
    "type": "ActiveSubscription",
  }
  "entitlements": [
    {
      "entitlement": "example.com:premium",
      "expiration": "2019-11-10T10:00:00Z"
    }
  ]
}

Limite di frequenza

Google aggiorna le informazioni sui diritti dell'utente ogni sei ore. Per ridurre il numero massimo di query al secondo (QPS), Google distribuisce le query nel tuo endpoint in modo uniforme nel tempo. Pertanto, puoi stimare il QPS medio previsto per il tuo endpoint con la seguente formula:

QPS medio previsto = <numero totale di utenti> / 21.600 secondi (6 ore x 60 minuti x 60 secondi)

Se supporti un numero elevato di utenti, Google può regolare l'intervallo di 6 ore. Se necessario, contatta Google per discutere della configurazione.

Contattare Google

Quando l'endpoint è pronto, contatta Google per comunicare l'URL dell'endpoint.

Proprietà specifiche di accesso azioni

Per informazioni di riferimento, consulta la sezione sulle proprietà della specifica di accesso alle azioni.