Os usuários preferem assistir ou ouvir conteúdo que já possam acessar, como o conteúdo da assinatura. Se o Google souber qual conteúdo o usuário pode acessar no app ou na plataforma, ele poderá criar um resultado ou uma pesquisa de pesquisa melhor para direcionar o usuário a esse conteúdo.
Identificar os requisitos de acesso ao conteúdo
Você precisa identificar o requisito de acesso para cada pacote de conteúdo no seu catálogo. Para isso, considere as seguintes questões:
- Os usuários precisam fazer login no app ou na plataforma para acessar o conteúdo?
Os usuários precisam de uma assinatura?
Ações de exibição apenas:
- Os usuários precisam de uma assinatura de um provedor de serviços externo?
- Vocês oferecem uma assinatura em níveis, de vários pacotes ou complementos?
Somente ações de assistir: os usuários precisam alugar ou comprar o conteúdo?
O requisito de acesso muda com o tempo?
O requisito de acesso depende da localização do dispositivo?
Tipos de restrição de acesso
Há dois tipos de restrições de acesso:
Tipo de paywall
É possível restringir o acesso ao conteúdo pelo tipo de paywall. A tabela a seguir mostra os diferentes tipos de paywall:
Tipo de paywall | Exemplo | Categoria |
---|---|---|
Não é preciso fazer compras ou logins. | Estalos | nologinrequired |
O usuário precisa fazer login, mas não precisa de uma assinatura. | Vudu (AVOD) | free |
O usuário precisa ter uma assinatura ativa. O acesso é independente do nível da assinatura. | Netflix |
|
O usuário precisa ter uma assinatura ativa. O acesso depende do nível da assinatura. | Hulu (complementos) |
|
O conteúdo fica disponível por um período limitado após a compra. | Vudu | rental |
O conteúdo estará disponível por um período indefinido após a compra. | Vudu | purchase |
O conteúdo está disponível por assinatura de TV a cabo. | HBO Go | externalSubscription |
Tipo de paywall para ações de assistir
Para especificar o tipo de paywall de conteúdo para Ações do relógio, use a propriedade
category
na
Especificação de acesso à ação:
"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 de paywall para ações de escuta
Para especificar o tipo de paywall de conteúdo para Ações de listener, use a propriedade
category
no
objeto de oferta:
"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"
}
},
...
}
Área geográfica
É necessário especificar as áreas geográficas em que o conteúdo está disponível. Use uma das seguintes propriedades ou ambas:
- A propriedade
eligibleRegion
de um objeto de especificação do acesso à ação. Esta propriedade é obrigatória. - A propriedade
ineligibleRegion
de um objeto de especificação do acesso à ação.
Um usuário poderá acessar o conteúdo se o local do dispositivo estiver em qualquer região
especificada em eligibleRegion
e não estiver em uma região especificada em
ineligibleRegion
.
As propriedades eligibleRegion
e ineligibleRegion
permitem os seguintes
valores:
- Uma lista de
Country
,City
eState
. - Um objeto
GeoShape
Consulte a seção Propriedades deGeoShape
para ver os requisitos detalhados. - Uma lista de objetos
GeoShape
.
Se o conteúdo estiver disponível globalmente, use o seguinte valor especial para
eligibleRegion
:
"eligibleRegion": "EARTH",
casos de uso qualificados
Veja a seguir exemplos de casos de uso da propriedade eligibleRegion
:
- Exemplo 1:
eligibleRegion
com uma lista de países. - Exemplo 2:
eligibleRegion
com um objetoGeoShape
que contém uma lista de CEPs. - Exemplo 3:
eligibleRegion
com um objetoGeoShape
que contém uma lista de códigos de área de classificação de encaminhamento (FSA, na sigla em inglês). - Exemplo 4:
eligibleRegion
com um objetoGeoShape
que contém um ID de DMA. - Exemplo 5:
eligibleRegion
com uma lista de objetosGeoShape
. Cada um contém um ID de DMA. - Exemplo 6:
ineligibleRegion
com o CEP oculto.
Exemplo 1
eligibleRegion
com uma lista de países:
"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" } ] }
Exemplo 2
eligibleRegion
por um objeto GeoShape
que contém uma lista de CEPs:
"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" ] } }
Exemplo 3
eligibleRegion
por um objeto GeoShape
que contém uma lista de códigos de área de classificação de encaminhamento (FSA, na sigla em inglês):
"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" ] } }
Exemplo 4
eligibleRegion
por um objeto GeoShape
que
contém um ID de 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" } ] } }
Exemplo 5
eligibleRegion
por uma lista de objetos GeoShape
.
Cada um contém um ID de 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" } } ] }
Exemplo 6
ineligibleRegion
com CEPs bloqueados:
"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" ] } }
Identificador de direitos
O identificador de direitos, entitlementId
, refere-se a uma string que representa
o acesso a um grupo de conteúdo no seu catálogo de mídia. Para determinar se um usuário
tem acesso ao seu conteúdo, o Google executa as seguintes etapas:
- Fazemos uma chamada de API para o endpoint de direitos para receber os identificadores de direitos do usuário.
- Procuramos os identificadores de direitos obrigatórios do conteúdo do seu feed de ações de mídia.
- Fazemos a correspondência de
entitlementId
de um usuário com a propriedadeidentifier
do objeto de assinatura de mídia no seu feed. Se pelo menos umentitlementId
corresponder, determinamos que o usuário pode acessar o conteúdo.
O Google recomenda usar a seguinte sintaxe para entitlementId
:
<domain name> + colon (:) + <access level to content>
Exemplos de sintaxe:
example.com:basic
example.com:premium
example.com:sports
Exemplo de identificador de direitos
O feed de MediaExampleCompany especifica que Movie XYZ
exige
example.com:basic
entitlementId
, conforme mostrado:
{ "@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 ... }, ... } }, ... }
Casos de uso comuns de acesso
Veja a seguir casos de uso de acesso comuns:
- Sem custos financeiros (não é necessário fazer login): o conteúdo está disponível sem login, assinatura ou compra.
- Sem custo financeiro (login obrigatório): o conteúdo exige que os usuários façam login, mas não é necessário ter uma assinatura.
- Assinatura de nível único:o conteúdo requer uma assinatura. Todos os assinantes podem acessar o mesmo conteúdo, seja filmes ou episódios, independentemente do pacote de assinaturas.
- Assinatura de vários níveis:o conteúdo requer uma assinatura. Os assinantes podem acessar conteúdos diferentes, como filmes ou episódios, com base no nível da assinatura. Por exemplo, Prata ou Ouro.
- Assinatura de complementos: o conteúdo requer uma assinatura. Os assinantes podem adicionar conteúdo premium além da assinatura normal.
- Compra única:o conteúdo pode ser comprado. Depois disso, o usuário pode acessá-lo indefinidamente.
- TV ao vivo:uma assinatura inclui acesso a canais locais, nacionais e premium.
- Assinatura de terceiros:o conteúdo exige que o usuário faça login com o provedor do cabo.
Sem custo financeiro (não é necessário fazer login)
Não é necessário fazer login
O conteúdo está disponível sem login ou assinatura.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "nologinrequired", "availabilityStarts": "2015-01-01T00:00Z", "availabilityEnds": "2015-12-31T00:00Z", "eligibleRegion": { "@type": "Country", "name": "US" } } }
- Defina
category
comonologinrequired
. - Não inclua
expectAcceptanceOf
.
Sem custo financeiro (login obrigatório)
Login obrigatório
O conteúdo exige que os usuários façam login, mas não é necessário ter uma assinatura.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "free", "availabilityStarts": "2015-01-01T00:00Z", "availabilityEnds": "2015-12-31T00:00Z", "eligibleRegion": { "@type": "Country", "name": "US" } } }
- Defina
category
comofree
. - Não inclua
expectAcceptanceOf
.
Assinatura de nível único
Em um modelo de assinatura de nível único, um provedor de serviços tem um nível de assinatura. Todos os assinantes podem acessar o mesmo conteúdo, seja filmes ou episódios, independentemente do pacote de assinatura.
{ "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" } } }
Assinatura de vários níveis
Em um modelo de assinatura em níveis, um provedor de serviços tem vários níveis de assinatura, como Ouro, Prata e Bronze. Os usuários que têm uma assinatura de nível superior podem acessar todo o conteúdo do nível inferior. No entanto, os usuários com a assinatura de nível inferior não podem acessar o conteúdo do nível superior.
Pense no seguinte cenário:
- Jane assina o nível Ouro. O endpoint de direitos
retorna os seguintes identificadores
entitlementId
:example.com:bronze
example.com:silver
example.com:gold
- João se inscreve no nível Bronze. Seu endpoint
de direitos retorna o seguinte
entitlementId
:example.com:bronze
- Seu feed de Ações de mídia descreve os seguintes requisitos:
- O Filme A requer
example.com:bronze
. - O Filme B requer
example.com:silver
.
- O Filme A requer
Nesse cenário, o Google determina os seguintes níveis de acesso para Jane e John:
- Jane e João têm acesso ao Filme A.
- Jane tem acesso ao Filme B, mas João não tem.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "subscription", "requiresSubscription": { "@type": "MediaSubscription", "@id": "http://www.example.com/basic_subscription", "name": "Bronze", "commonTier": true ... }, ... } }
Assinatura de complementos
Em um modelo de assinatura de complementos, um provedor de serviços permite que os usuários expandam os direitos e adicionem canais a uma assinatura de base. Os usuários podem adicionar quantos canais quiserem.
Pense no seguinte cenário:
- Jane tem PRO e Sportz, além da
assinatura Basic. O endpoint de direitos retorna os
seguintes identificadores
entitlementId
:example.com:basic
example.com:pro
example.com:sportz
- João só tem a assinatura Basic. Seu endpoint
de direitos retorna o seguinte
entitlementId
:example.com:basic
- Seu feed de Ações de mídia descreve os seguintes requisitos:
- O Filme A requer
example.com:basic
. - O Filme B requer
example.com:pro
.
- O Filme A requer
Nesse cenário, o Google determina os seguintes níveis de acesso para Jane e John:
- Jane e João têm acesso ao Filme A.
- Jane tem acesso ao Filme B, mas João não tem.
{ "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 } } } }
Compra única
Comprar
O conteúdo estará disponível por um período indefinido após a compra.
{ "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/" } } } }
- Defina
category
comopurchase
. - Inclua
expectAcceptanceOf
emactionAccessibilityRequirement
para indicar o preço da compra.
Locação
O conteúdo fica disponível por um período limitado após a compra.
{ "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/" } } } }
- Defina
category
comorental
. - Inclua
expectAcceptanceOf
emactionAccessibilityRequirement
para indicar o preço do empréstimo.
TV ao vivo
Em um feed de Ações de mídia, é possível restringir o acesso a um canal ou evento do Live TV com base nas duas condições de usuário a seguir:
-
A localização do dispositivo do usuário
Para restringir o acesso ao canal de TV, especifique a área onde os usuários têm acesso a ele. Essa condição geralmente se aplica a canais de TV transmitidos locais.
-
O status da conta do usuário
Se o acesso a um canal de TV depender da configuração no nível da conta de um usuário, use identificadores de direitos para representar a restrição.
Essa condição geralmente se aplica aos seguintes casos de uso:
- Pacote:os canais nacionais são geralmente incluídos em pacotes, e os usuários escolhem qual pacote querem assinar.
- Complemento:alguns canais premium exigem que os usuários adicionem canais extras à assinatura.
- Rede esportiva regional (RSN, na sigla em inglês): os RSNs costumam ser associados ao local de "casa" do usuário. Os usuários podem assistir conteúdo na RSN mesmo quando estiverem fora do local de casa.
Assinatura de terceiros
Assinatura de terceiros
O conteúdo está disponível para assinantes de outro serviço.
{ "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" } } }
- Adicione
authenticator
para indicar que um serviço diferente autentica os assinantes. Por exemplo, o HBO GO requer uma assinatura do provedor de TV a cabo.
Pacotes comuns do nível
O conteúdo de nível comum está disponível para todos os assinantes, independentemente do
pacote de assinatura. O nível comum se aplica a todo o conteúdo com category
de subscription
. Para mais informações sobre a propriedade category
, consulte a
seção Tipo de paywall.
Por que um pacote de nível comum é necessário?
Vários produtos do Google oferecem recomendações de TV e filmes aos usuários, incluindo a Pesquisa Google, o Android TV e o Google Assistente. Para definir as expectativas dos usuários sobre custo, o Google precisa entender qual conteúdo está disponível para todos os assinantes usando o nível comum. O Google também precisa entender qual conteúdo está disponível para assinantes com pacotes de assinatura específicos.
O Google recomenda títulos disponíveis no nível comum, a menos que você ofereça suporte à API de direitos. A API permite que o Google entenda os títulos não comuns que cada usuário específico pode acessar.
Quando devo criar um pacote de nível comum?
Um pacote de nível comum é necessário quando o serviço oferece conteúdo disponível para todos os assinantes. Isso inclui serviços que oferecem apenas um pacote e serviços que oferecem vários pacotes ou complementos.
Os provedores que não têm conteúdo disponível para todos os assinantes não precisam criar um pacote de nível comum. Um exemplo são os provedores de serviços que fornecem conteúdo mutuamente exclusivo em todos os pacotes.
Exemplos de níveis comuns
Veja a seguir exemplos do nível comum.
Assinatura em níveis
Em um modelo de assinatura em níveis, um provedor de serviços tem vários níveis de assinatura, como Ouro, Prata e Bronze. Os usuários com a assinatura de nível superior têm acesso a todo o conteúdo nos níveis inferiores. Os usuários com a assinatura de nível inferior não têm acesso ao conteúdo no nível superior. A imagem a seguir é um exemplo da estrutura do pacote.
No exemplo de código a seguir, o pacote de bronze é o nível comum porque todos os usuários têm acesso a todo o conteúdo nesse nível.
"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 } ],
Complementos
Em um modelo de assinatura de complementos, um provedor de serviços permite que os usuários expandam os direitos e adicionem canais a uma assinatura básica. Os usuários podem adicionar quantos canais quiserem. A imagem a seguir é um exemplo da estrutura do pacote.
Se você tiver um canal disponível para todos os usuários e não houver custo para o canal, é possível mesclar o pacote com o pacote de nível comum.
No exemplo de código a seguir, o pacote básico é o nível comum porque todos os usuários têm acesso a todo o conteúdo desse pacote.
"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 } ],
Pacotes com conteúdo que se cruza
Em um modelo de conteúdo em que os pacotes têm conteúdo que se cruza, um provedor de serviços vende pacotes que incluem conteúdo de outros pacotes. A imagem abaixo é um exemplo da estrutura do pacote.
No exemplo de código a seguir, o provedor oferece três pacotes em que parte do conteúdo se cruza em todos os pacotes. Nesse caso, é necessário um quarto pacote que represente o nível comum. Ele precisa incluir todo o conteúdo disponível nos três pacotes.
"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 } ],
Pacotes sem conteúdo cruzado
Em um modelo de conteúdo em que todos os pacotes de conteúdo não se cruzam, um provedor de serviços vende pacotes que não incluem conteúdo de outros pacotes. A imagem abaixo é um exemplo da estrutura do pacote.
No exemplo a seguir, o provedor oferece três pacotes sem conteúdo cruzado em todos os pacotes. Nenhum pacote de nível comum é necessário.
"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 de direitos
Use as informações desta seção para hospedar um endpoint HTTPS que retorna os direitos associados a um usuário.
Pré-requisito
Antes de começar, verifique se o serviço é compatível com o fluxo do OAuth 2.0 com o Google.
Solicitação
Para receber os direitos de um usuário, o Google envia uma solicitação que contém o token OAuth do usuário. Seu endpoint precisa identificar o usuário com base nesse token. Veja o exemplo a seguir:
GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer <OAuthToken>
Resposta
Seu endpoint precisa retornar uma resposta com as seguintes propriedades:
Propriedade | |
---|---|
subscription |
Obrigatório Esse campo está dentro da resposta raiz. |
subscription.type |
Obrigatório Essa propriedade pode ter os seguintes valores:
|
subscription.expiration_date |
Opcional É a data de validade do direito, no formato ISO 8601, que inclui o fuso horário. Para mais detalhes, consulte Datas de validade. |
entitlements |
Opcional Essa propriedade raiz contém os valores |
entitlements.entitlement |
Obrigatório se o acesso ao seu catálogo de streaming variar de acordo com o tipo de assinatura. Essa propriedade contém o |
entitlements.expiration_date |
Opcional É a data de validade da assinatura, no formato ISO 8601, que inclui o fuso horário. Para mais detalhes, consulte Datas de validade. |
Datas de vencimento
Há duas propriedades em uma resposta de endpoint que lida com datas de validade: subscription.expiration_date
e entitlements.expiration_date
. É
possível incluir um deles ou nenhum, mas não ambos. Sua escolha depende do
modelo da sua assinatura.
Modelo de assinatura | |
---|---|
O acesso ao seu catálogo de streaming é o mesmo para todos os assinantes. | Como você não precisa especificar a propriedade
entitlements , especifique subscription.expiration_date . |
O acesso ao seu catálogo de streaming varia de acordo com os detalhes da assinatura do usuário. |
Se o modelo de assinatura tiver vários níveis ou complementos que expiram ao longo do tempo, siga um destes procedimentos:
|
Exemplos de respostas
Veja a seguir exemplos de respostas de diferentes estados de assinatura:
- Inscrição ativa
- Assinatura ativa com uma data de validade
- Sem assinatura
- Assinaturas ativas em vários níveis ou complementos
Inscrição ativa
Assinatura ativa
Um usuário tem uma assinatura ativa para example.com. Nesse caso, todos os assinantes têm acesso a todo seu catálogo de streaming, independentemente do tipo de assinatura.
{ "subscription" : { "type": "ActiveSubscription", } }
Assinatura ativa com uma data de validade
Assinatura ativa com uma data de validade
Um usuário tem uma assinatura ativa em example.com, e ela tem uma data de validade. Nesse caso, todos os assinantes têm acesso a todo o seu catálogo de streaming, independentemente do tipo de assinatura.
{ "subscription" : { "type": "ActiveSubscription", "expiration_date": "2019-11-10T10:00:00Z" } }
Sem assinatura
Sem assinatura
Um usuário não tem uma assinatura de example.com.
{ "subscription" : { "type": "InactiveSubscription" } }
Assinaturas ativas em vários níveis ou complementos
Assinaturas ativas em vários níveis ou complementos
Um usuário tem uma assinatura do example.com:premium
até uma determinada data.
{ "subscription" : { "type": "ActiveSubscription", } "entitlements": [ { "entitlement": "example.com:premium", "expiration": "2019-11-10T10:00:00Z" } ] }
Limite de taxa
O Google atualiza as informações de direitos de um usuário a cada seis horas. Para suavizar o máximo de consultas por segundo (QPS), o Google distribui as consultas ao seu endpoint de maneira uniforme ao longo do tempo. Assim, é possível estimar o QPS médio esperado para seu endpoint com a seguinte fórmula:
QPS médio esperado = <número total de usuários>/21.600 segundos (6 horas x 60 minutos x 60 segundos)
Se você oferecer suporte a um grande número de usuários, o Google poderá ajustar o intervalo de seis horas. Se necessário, entre em contato com o Google para discutir a configuração.
Entrar em contato com o Google
Quando o endpoint estiver pronto, entre em contato com o Google para informar o URL do endpoint.
Propriedades da especificação de acesso de ação
Consulte a seção Propriedades da especificação de acesso de ações para informações de referência.