Requisiti di accesso

Gli utenti preferiscono guardare o ascoltare i contenuti a cui possono già accedere, ad esempio i contenuti dell'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 indirizzarlo a questi contenuti.

Figura 1. I requisiti di accesso aiutano gli abbonati ad accedere ai contenuti della 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. Quando lo fai, poniti 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 relative alla visione:

    • Gli utenti devono avere un abbonamento di un fornitore di servizi esterno?
    • Offri un abbonamento a più livelli, con più pacchetti o con contenuti aggiuntivi?
  • 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 di accesso

Esistono due tipi di limitazioni di accesso:

Tipo di paywall

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

Tipo di paywall Esempio Categoria
Non è richiesto alcun acquisto o accesso. Crackle nologinrequired
L'utente deve aver eseguito l'accesso, ma non è necessario 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 con un abbonamento alla TV via cavo. HBO Go externalSubscription

Tipo di paywall per le azioni di visualizzazione

Per specificare il tipo di paywall dei contenuti per le azioni di visualizzazione, utilizza la proprietà category nella specifica di 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 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à:

Un utente può accedere ai contenuti se la posizione del dispositivo si trova all'interno di una regione specificata in eligibleRegion e non in una regione 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 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 oggetto GeoShape che contiene un elenco di codici postali.
  • Esempio 3: eligibleRegion con un oggetto GeoShape che contiene un elenco di codici FSA (Forward Sortation Area).
  • 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 i 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
  },
  "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 i 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
  },
 "eligibleRegion":   {
      "@type": "Country",
      "name": "US"
    },
  "ineligibleRegion": {
    "@type": "GeoShape",
    "@id": "http://example.com/area1",
    "addressCountry": "US",
    "postalCode": [
      "94118",
      "94119"
    ]
  }
}

Identificatore diritto

L'identificatore del diritto, entitlementId, fa riferimento a una stringa che rappresenta l'accesso a un gruppo di contenuti nel tuo catalogo multimediale. Per stabilire se un utente ha accesso ai tuoi contenuti, Google esegue i seguenti passaggi:

  1. Eseguiamo una chiamata API al tuo endpoint Diritti per ricevere gli identificativi dei diritti dell'utente.
  2. Cerchiamo gli identificatori dei diritti richiesti per i contenuti nel tuo feed Media Actions.
  3. Associamo il entitlementId di un utente alla proprietà identifier dell'oggetto abbonamento ai contenuti multimediali nel tuo feed. Se almeno un entitlementId corrisponde, stabiliamo che l'utente può accedere ai contenuti.
Figura 2. Uno degli identificatori dei diritti dell'utente corrisponde all'identificatore dei diritti richiesto per i 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 dei diritti

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

{
  "@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 alcuni casi d'uso comuni dell'accesso:

  • Senza costi (non è richiesto l'accesso): i contenuti sono disponibili senza accesso, abbonamento o acquisto.
  • Senza costi (è necessario accedere): per accedere ai contenuti è necessario che gli utenti abbiano eseguito l'accesso, ma non è necessario un abbonamento.
  • Abbonamento a un livello: per i contenuti è richiesto un abbonamento. Tutti gli abbonati possono accedere agli stessi contenuti, che si tratti di film o puntate, indipendentemente dal pacchetto di abbonamento.
  • Abbonamento a più livelli: i contenuti richiedono un abbonamento. Gli abbonati possono accedere a diversi contenuti, che si tratti di film o puntate, in base al livello di abbonamento. Ad esempio, Silver rispetto a Gold.
  • Abbonamento a componenti aggiuntivi: i contenuti necessitano di un abbonamento. Gli abbonati possono aggiungere contenuti premium al loro abbonamento normale.
  • Acquisto una tantum:i contenuti possono essere acquistati e, in seguito, l'utente può accedervi a tempo indeterminato.
  • 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 accedere con il proprio provider 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 su nologinrequired.
  • Non includere expectAcceptanceOf.

Senza costi (è necessario eseguire l'accesso)

Accesso richiesto

I contenuti richiedono che gli utenti abbiano eseguito l'accesso, ma non richiedono un abbonamento.


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

Abbonamento a un livello

In un modello di abbonamento a un livello, un fornitore di servizi ha un livello di abbonamento. Tutti gli abbonati possono accedere agli stessi contenuti, che si tratti di film o puntate, 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"
    },
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}

Abbonamento a più livelli

In un modello di abbonamento a più livelli, un fornitore di servizi offre più livelli di abbonamento, ad esempio Oro, Argento e Bronzo. Gli utenti che dispongono dell'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.

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

Tieni presente il seguente scenario:

  • Giulia 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 Media Actions 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 Anna e Giovanni:

  • Sia Maria che Giovanni hanno accesso a 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
      ...
    },
    ...
  }
}

Abbonamento aggiuntivo

In un modello di abbonamento con 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.

Figura 4. Un modello di abbonamento ai componenti aggiuntivi e la sua representation of entitlements.

Tieni presente il seguente scenario:

  • Maria ha PRO e Sportz, oltre all'abbonamento Base. L'endpoint dei diritti restituisce i seguenti identificativi entitlementId:
    • example.com:basic
    • example.com:pro
    • example.com:sportz
  • John ha solo l'abbonamento Base. L'endpoint dei diritti restituisce il seguente entitlementId:
    • example.com:basic
  • Il feed Media Actions 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 Anna e Giovanni:

  • Sia Maria che Giovanni hanno accesso a 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
        }
    }
  }
}

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 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 category su rental.
  • Includi expectAcceptanceOf in actionAccessibilityRequirement per indicare il prezzo del noleggio.

TV in diretta

In un feed di azioni relative ai contenuti multimediali, puoi limitare l'accesso a un canale o evento della TV in diretta in base alle seguenti due condizioni utente:

  • 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 trasmissione locale.

  • Lo stato dell'account dell'utente

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

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

    • Bundle: i canali nazionali sono spesso inclusi nei bundle e gli utenti scelgono a quali abbonarsi.
    • Componente aggiuntivo: alcuni canali premium richiedono agli utenti di aggiungere in modo selettivo altri canali al proprio abbonamento.
    • Emittente sportiva regionale (RSN): le emittenti sportive regionali sono in genere associate alla località "di casa" di un utente. Gli utenti possono guardare i contenuti sulla RSN anche quando si trovano fuori dalla propria località "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"
      }
    },
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}
  • Aggiungi authenticator per indicare che un altro servizio autentica gli abbonati. Ad esempio, HBO GO richiede un abbonamento del 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 subscription. Per ulteriori informazioni sulla proprietà category, consulta la sezione Tipo di paywall.

Perché è necessario un pacchetto di livello comune?

Diversi prodotti Google forniscono consigli su TV e film agli utenti, tra cui la Ricerca Google, Android TV e l'Assistente Google. Per impostare le aspettative degli utenti in merito al costo, Google deve capire quali contenuti sono disponibili per tutti gli abbonati tramite l'utilizzo del livello comune. Google deve anche capire 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 di livello non comune a cui può accedere ogni singolo utente.

Quando devo creare un pacchetto di livello comune?

Un pacchetto di livello comune è obbligatorio se il tuo 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 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 mutuamente esclusivi in tutti i loro pacchetti.

Esempi di livelli comuni

Di seguito sono riportati alcuni esempi di questo livello.

Abbonamento a più livelli

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 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.

Il livello Oro contiene tutti i contenuti del livello Argento, che include tutti i contenuti del livello Bronzo.
Figura 5. Struttura del pacchetto di abbonamenti a più livelli.

Nel seguente esempio di codice, 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 con 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 un numero illimitato di canali. L'immagine seguente è un esempio della struttura del pacchetto.

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

Se hai un canale disponibile per tutti gli utenti e non è previsto alcun costo per il canale, puoi unire il pacchetto con il pacchetto del 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 in comune, 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 come &quot;Livello comune&quot;.
Figura 7. Struttura del pacchetto con contenuti incrociati.

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.

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

Nell'esempio seguente, il fornitore offre tre pacchetti senza contenuti che si sovrappongono tra loro. 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 riportate 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.

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 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

Questo è 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 fornitore.
  • ActiveTrial: l'utente ha una prova attiva per il fornitore.
  • 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 ulteriori dettagli, consulta Date di scadenza.

entitlements

Facoltativo

Questa è una proprietà principale che contiene i valori entitlementId posseduti dall'utente.

entitlements.entitlement

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

Questa proprietà contiene entitlementId. Per ulteriori informazioni, consulta Identificatore dei diritti.

entitlements.expiration_date

Facoltativo

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

Date di scadenza

In una risposta dell'endpoint esistono due proprietà che si occupano delle date di scadenza: subscription.expiration_date e entitlements.expiration_date. Puoi includerne uno o nessuno, ma non entrambi. La scelta dipende dal tuo modello di abbonamento.

Modello di abbonamento
L'accesso al tuo catalogo in streaming è lo stesso per tutti gli abbonati. 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 tuo modello di abbonamento prevede più livelli o componenti aggiuntivi che scadono nel tempo, svolgi una delle seguenti operazioni:

  • Se tutti i valori entitlements.entitlement scadono allo stesso tempo, specifica subscription.expiration_date.
  • Se alcuni valori entitlements.entitlement scadono in momenti diversi, specifica entitlements.expiration_date.

Risposte di esempio

Di seguito sono riportati esempi di risposte a 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 in 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 le distribuisce uniformemente nel tempo al tuo endpoint. Di conseguenza, 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ò 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à della specifica di accesso alle azioni

Per informazioni di riferimento, consulta la sezione Proprietà della specifica di accesso all'azione.