Gli utenti preferiscono guardare o ascoltare contenuti a cui possono già accedere, ad esempio i contenuti del loro abbonamento esistente. Se Google sa a quali contenuti un utente può accedere sulla tua app o piattaforma, può creare un risultato di ricerca o una risposta migliore per indirizzare l'utente a questi contenuti.

Identificare i requisiti di accesso ai contenuti
Devi identificare il requisito di accesso per ogni pacchetto di contenuti nel tuo catalogo. Quando lo fai, prendi in considerazione le seguenti domande:
- Gli utenti devono accedere alla tua app o piattaforma per accedere ai contenuti?
Gli utenti hanno bisogno di un abbonamento?
Solo azioni di visualizzazione:
- Gli utenti hanno bisogno di un abbonamento da un fornitore di servizi esterno?
- Offri un abbonamento a più livelli, multi-pacchetto o aggiuntivo?
Solo azioni di visualizzazione: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 dell'accesso
Esistono due tipi di limitazioni di accesso:
Tipo di paywall
Puoi limitare l'accesso ai contenuti in base al tipo di paywall. La seguente tabella descrive in dettaglio i diversi tipi di paywall:
Tipo di paywall | Esempio | Categoria |
---|---|---|
Non è necessario effettuare acquisti o accedere. | Crackle | 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 |
|
L'utente deve avere un abbonamento attivo. L'accesso dipende dal livello di abbonamento. | Hulu (componenti aggiuntivi) |
|
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 con un abbonamento alla TV via cavo. | HBO Go | externalSubscription |
Tipo di paywall per le azioni relative alla visione
Per specificare il tipo di paywall dei contenuti per le azioni di visualizzazione, utilizza la proprietà
category
nella
specifica di accesso all'azione:
"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 relative all'ascolto
Per specificare il tipo di paywall dei contenuti per le Azioni di ascolto, utilizza la proprietà
category
nell'oggetto
offer:
"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à:
- La proprietà
eligibleRegion
di un oggetto Action access specification. Questa proprietà è obbligatoria. - La proprietà
ineligibleRegion
di un oggetto Action access specification.
Un utente può accedere ai contenuti se la posizione del dispositivo si trova in una regione specificata in eligibleRegion
e non in una regione specificata in ineligibleRegion
.
Le proprietà eligibleRegion
e ineligibleRegion
consentono i seguenti valori:
- Un elenco di
Country
,City
eState
. - Un oggetto
GeoShape
. Per i requisiti dettagliati, consulta la sezione ProprietàGeoShape
. - Un elenco di
GeoShape
oggetti.
Se i contenuti sono disponibili a livello globale, utilizza il seguente valore speciale per
eligibleRegion
:
"eligibleRegion": "EARTH",
Casi d'uso di eligibleRegion
Di seguito sono riportati alcuni esempi di casi d'uso della proprietà eligibleRegion
:
- Esempio 1:
eligibleRegion
con un elenco di paesi. - Esempio 2:
eligibleRegion
con un oggettoGeoShape
che contiene un elenco di codici postali. - Esempio 3:
eligibleRegion
con un oggettoGeoShape
che contiene un elenco di codici FSA (Forward Sortation Area). - Esempio 4:
eligibleRegion
con un oggettoGeoShape
che contiene un ID DMA. - Esempio 5:
eligibleRegion
con un elenco di oggettiGeoShape
. Ciascuno contiene un ID DMA. - Esempio 6:
ineligibleRegion
con codici postali oscurati.
Esempio 1
eligibleRegion
con un elenco di 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 FSA (Forward Sortation Area):
"actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "subscription", "requiresSubscription": { "@type": "MediaSubscription", "@id": "http://www.example.com/local_tv_network/subscription", "name": "Example Subscription", "commonTier": true }, "additionalProperty": { "@type": "PropertyValue", "name": "DisplaySubscriptionIdentifier", "value": "http://www.example.com/local_tv_network/subscription" }, "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 }, "additionalProperty": { "@type": "PropertyValue", "name": "DisplaySubscriptionIdentifier", "value": "http://www.example.com/abcd/subscription" }, "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 GeoShape
oggetti.
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 oscurati:
"actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "subscription", "requiresSubscription": { "@type": "MediaSubscription", "@id": "http://www.example.com/local_tv_network/subscription", "name": "Example Subscription", "commonTier": true }, "additionalProperty": { "@type": "PropertyValue", "name": "DisplaySubscriptionIdentifier", "value": "http://www.example.com/local_tv_network/subscription" }, "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 esegue i seguenti passaggi:
- Effettuiamo una chiamata API al tuo endpoint Entitlements per ricevere gli identificatori dei diritti dell'utente.
- Cerchiamo gli identificatori dei diritti richiesti per i contenuti nel tuo feed Azioni multimediali.
- Abbiamo associato l'
entitlementId
di un utente alla proprietàidentifier
dell'oggetto abbonamento ai contenuti multimediali nel tuo feed. Se viene trovata almeno unaentitlementId
, determiniamo che l'utente può accedere ai 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 del diritto
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 ... }, "additionalProperty": { "@type": "PropertyValue", "name": "DisplaySubscriptionIdentifier", "value": "http://www.example.com/basic_subscription" }, ... } }, ... }
Casi d'uso comuni per l'accesso
Di seguito sono riportati alcuni casi d'uso comuni per l'accesso:
- Senza costi (non è richiesto l'accesso): i contenuti sono disponibili senza accesso, abbonamento o acquisto.
- Senza costi (accesso richiesto): i contenuti richiedono l'accesso degli utenti, ma non un abbonamento.
- Abbonamento a un solo livello: I contenuti richiedono un abbonamento. Tutti gli abbonati possono accedere agli stessi contenuti, che si tratti di film o episodi, indipendentemente dal pacchetto di abbonamento.
- Abbonamento a più livelli: i contenuti richiedono un abbonamento. Gli abbonati possono accedere a contenuti diversi, che si tratti di film o episodi, in base al livello di abbonamento. Ad esempio, Argento rispetto a Oro.
- Abbonamento al componente aggiuntivo: i contenuti richiedono un abbonamento. Gli abbonati possono aggiungere contenuti premium al loro abbonamento standard.
- Acquisto una tantum:i contenuti possono essere acquistati e l'utente può accedervi per un periodo di tempo illimitato.
- TV in diretta: un abbonamento include l'accesso a canali locali, nazionali e premium.
- Abbonamento di terze parti:Per accedere ai contenuti, l'utente deve eseguire l'accesso con il proprio fornitore di servizi via cavo.
Senza costi (non è richiesto l'accesso)
Nessun accesso richiesto
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
category
sunologinrequired
. - Non includere
expectAcceptanceOf
.
Senza costi (è necessario eseguire l'accesso)
Accesso richiesto
I contenuti richiedono l'accesso degli utenti, ma non un abbonamento.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "free", "availabilityStarts": "2015-01-01T00:00Z", "availabilityEnds": "2015-12-31T00:00Z", "eligibleRegion": { "@type": "Country", "name": "US" } } }
- Imposta
category
sufree
. - Non includere
expectAcceptanceOf
.
Abbonamento a un solo livello
In un modello di abbonamento a un solo livello, un fornitore di servizi ha un solo livello di abbonamento. Tutti gli abbonati possono accedere agli stessi contenuti, che si tratti di film o episodi, indipendentemente dal 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" }, "additionalProperty": { "@type": "PropertyValue", "name": "DisplaySubscriptionIdentifier", "value": "http://www.example.com/example_package" }, "eligibleRegion": { "@type": "Country", "name": "US" } } }
Abbonamento multi-livello
In un modello di abbonamento a più livelli, un fornitore di servizi ha più livelli di abbonamento, ad esempio Gold, Silver e Bronze. Gli utenti che hanno l'abbonamento di livello superiore possono accedere a tutti i contenuti del livello inferiore. Tuttavia, gli utenti che hanno un abbonamento di livello inferiore non possono accedere ai contenuti del livello superiore.

Tieni presente il seguente scenario:
- Giulia si abbona al livello Oro. L'endpoint
dei tuoi 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:
- Film A richiede
example.com:bronze
. - Film B richiede
example.com:silver
.
- Film A richiede
In questo scenario, Google determina i seguenti livelli di accesso per Jane e John:
- Sia Maria che Giovanni hanno accesso al film A.
- Maria ha accesso al Film B, ma Giovanni no.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "subscription", "requiresSubscription": { "@type": "MediaSubscription", "@id": "http://www.example.com/basic_subscription", "name": "Bronze", "commonTier": true ... }, "additionalProperty": { "@type": "PropertyValue", "name": "DisplaySubscriptionIdentifier", "value": "http://www.example.com/basic_subscription" }, ... } }
Abbonamento aggiuntivo
In un modello di abbonamento ai componenti aggiuntivi, un fornitore di servizi consente agli utenti di ampliare i propri diritti e aggiungere canali a un abbonamento base. Gli utenti possono aggiungere tutti i canali che vogliono.

Tieni presente il seguente scenario:
- Maria 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
- Mario ha solo l'abbonamento Basic. L'endpoint dei diritti
restituisce il seguente
entitlementId
:example.com:basic
- Il feed Azioni multimediali descrive i seguenti requisiti:
- Film A richiede
example.com:basic
. - Film B richiede
example.com:pro
.
- Film A richiede
In questo scenario, Google determina i seguenti livelli di accesso per Jane e John:
- Sia Maria che Giovanni hanno accesso al film A.
- Maria ha accesso al Film B, ma Giovanni no.
{ "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 } ], "additionalProperty": { "@type": "PropertyValue", "name": "DisplaySubscriptionIdentifier", "value": "http://www.example.com/package/basic" }, } } }
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
category
supurchase
. - Includi
expectAcceptanceOf
inactionAccessibilityRequirement
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
category
surental
. - Includi
expectAcceptanceOf
inactionAccessibilityRequirement
per indicare il prezzo del noleggio.
TV in diretta
In un feed Azioni multimediali, puoi limitare l'accesso a un canale TV in diretta o a un evento in base alle due condizioni utente seguenti:
-
La posizione del dispositivo dell'utente
Per limitare l'accesso al canale TV, specifica l'area in cui gli utenti possono accedervi. Questa condizione si applica in genere ai canali TV di emittenti locali.
-
Stato dell'account dell'utente
Se l'accesso a un canale TV dipende da un'impostazione a livello di account dell'utente, utilizza identificatori di diritti per rappresentare la limitazione.
Questa condizione di solito si applica ai seguenti casi d'uso:
- Bundle:i canali nazionali sono spesso inclusi nei bundle e gli utenti scelgono a quale bundle abbonarsi.
- Componente aggiuntivo:alcuni canali premium richiedono agli utenti di aggiungere in modo selettivo canali extra al proprio abbonamento.
- Emittente sportiva regionale (RSN): le RSN sono in genere associate alla posizione "di casa" di un utente. Gli utenti possono guardare i contenuti sulla RSN anche quando viaggiano al di fuori della loro posizione "di casa".
Abbonamento di terze parti
Abbonamento di terze parti
I contenuti sono disponibili per gli abbonati di un altro servizio.
{ "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" } }, "additionalProperty": { "@type": "PropertyValue", "name": "DisplaySubscriptionIdentifier", "value": "http://www.example.com/faq" }, "eligibleRegion": { "@type": "Country", "name": "US" } } }
- Aggiungi
authenticator
per indicare che un altro servizio autentica gli abbonati. Ad esempio, HBO GO richiede un abbonamento con il fornitore di servizi via cavo.
Pacchetti di livello comuni
I contenuti del livello comune sono disponibili per tutti gli abbonati, indipendentemente dal pacchetto di abbonamento. Il livello comune si applica a tutti i contenuti con il category
di subscription
. Per ulteriori informazioni sulla proprietà category
, consulta la sezione
Tipo di paywall.
Perché è necessario un pacchetto di livello comune?
Diversi prodotti Google forniscono agli utenti consigli su TV e film, tra cui la Ricerca Google, Android TV e l'Assistente Google. Per impostare le aspettative degli utenti in merito ai costi, Google deve comprendere quali contenuti sono disponibili per tutti gli abbonati tramite l'utilizzo del livello comune. Google deve anche sapere quali contenuti sono disponibili per gli abbonati con pacchetti di abbonamento specifici.
Google consiglia i titoli disponibili nel livello comune, a meno che tu non supporti l'API Entitlements. L'API consente a Google di comprendere i titoli non di livello comune a cui ogni utente specifico può accedere.
Quando devo creare un pacchetto di livello comune?
È necessario un pacchetto di livelli comune quando il servizio offre contenuti disponibili per tutti gli abbonati. Sono inclusi i servizi che offrono un solo pacchetto e quelli che offrono più pacchetti o componenti aggiuntivi.
I fornitori 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 mutualmente esclusivi in tutti i loro pacchetti.
Esempi di livelli comuni
Di seguito sono riportati alcuni esempi del livello comune.
Abbonamento a più livelli
In un modello di abbonamento a più livelli, un fornitore di servizi ha più livelli di abbonamento, ad esempio 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 del livello superiore. L'immagine seguente è un esempio della struttura del pacchetto.

Nell'esempio di codice seguente, il pacchetto Bronze è il livello comune perché tutti gli utenti hanno accesso a tutti i contenuti di quel livello.
"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 ai componenti aggiuntivi, 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.

Se hai un canale disponibile per tutti gli utenti e non ci sono costi per il canale, puoi unire il pacchetto al pacchetto di livello comune.
Nell'esempio di codice seguente, il pacchetto di base è il livello comune perché tutti gli utenti hanno accesso a tutti i contenuti di questo 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 hanno 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.

Nel seguente esempio di codice, il fornitore offre tre pacchetti in cui alcuni contenuti si intersecano in tutti i pacchetti. In questo caso, è necessario un quarto pacchetto che rappresenti 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.

Nell'esempio seguente, il fornitore offre tre pacchetti senza contenuti che si intersecano tra tutti i pacchetti. Non è richiesto alcun pacchetto di livello 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 di 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.
Richiesta
Per ricevere i diritti di un utente, Google invia una richiesta contenente il token OAuth dell'utente. L'endpoint deve identificare l'utente in base a questo 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 Questo è un campo all'interno della risposta principale. |
subscription.type |
Obbligatorio Questa proprietà può avere i seguenti valori:
|
subscription.expiration_date |
Facoltativo La data di scadenza di questo diritto, nel formato ISO 8601, che include il fuso orario. Per maggiori dettagli, vedi Date di scadenza. |
entitlements |
Facoltativo Questa proprietà principale contiene i valori di |
entitlements.entitlement |
Obbligatorio se l'accesso al catalogo di streaming varia in base al tipo di abbonamento. Questa proprietà contiene |
entitlements.expiration_date |
Facoltativo La data di scadenza di questo abbonamento, nel formato ISO 8601, che include il fuso orario. Per maggiori dettagli, vedi Date di scadenza. |
Date di scadenza
In una risposta dell'endpoint sono presenti due proprietà che riguardano le date di scadenza: subscription.expiration_date
e entitlements.expiration_date
. Puoi includerne uno o nessuno, ma non entrambi. Quale utilizzare dipende
dal modello di abbonamento.
Modello di abbonamento | |
---|---|
L'accesso al catalogo di streaming è lo stesso per tutti gli abbonati. | Poiché non è necessario specificare la proprietà entitlements , specifica subscription.expiration_date . |
L'accesso al catalogo di streaming varia in base ai dettagli dell'abbonamento di un utente. |
Se il tuo modello di abbonamento prevede più livelli o componenti aggiuntivi che scadono nel tempo, procedi in uno dei seguenti modi:
|
Risposte di esempio
Di seguito sono riportati esempi di risposte di diversi stati dell'abbonamento:
- Abbonamento attivo
- Abbonamento attivo con una 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 una data di scadenza
Abbonamento attivo con una 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 di abbonamento.
{ "subscription" : { "type": "ActiveSubscription", "expiration_date": "2019-11-10T10:00:00Z" } }
Nessun abbonamento
Nessun abbonamento
Un utente non ha un 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 di un utente fino a ogni sei ore. Per uniformare il numero massimo di query al secondo (QPS), Google distribuisce le query al tuo endpoint in modo uniforme nel tempo. Pertanto, puoi stimare la QPS media prevista per l'endpoint con la seguente formula:
QPS media prevista = <numero totale di utenti> / 21.600 secondi (6 ore x 60 minuti x 60 secondi)
Se supporti un numero elevato di utenti, Google può modificare l'intervallo di 6 ore. Se necessario, contatta Google per discutere della configurazione.
Contatta Google
Quando l'endpoint è pronto, contatta Google per comunicare l'URL dell'endpoint.
Proprietà delle specifiche di accesso all'azione
Per informazioni di riferimento, consulta la sezione Proprietà della specifica di accesso all'azione.