Requisitos de acesso

Os usuários preferem assistir ou ouvir conteúdo que já podem acessar, como o conteúdo da assinatura atual. Se o Google souber qual conteúdo um usuário pode acesso no seu app ou plataforma, o Google pode criar um resultado de pesquisa melhor ou resposta para direcionar o usuário a esse conteúdo.

Figura 1. Os requisitos de acesso ajudam os assinantes a acessar o conteúdo no seu app ou plataforma.

Identificar requisitos de acesso ao conteúdo

É necessário identificar o requisito de acesso para cada pacote de conteúdo na sua catálogo. Ao fazer isso, considere as seguintes perguntas:

  • Os usuários precisam fazer login no app ou na plataforma para acessar o conteúdo?
  • Os usuários precisam de uma assinatura?

    Somente as Ações de exibição:

    • Os usuários precisam de uma assinatura de um provedor de serviços externo?
    • Você oferece uma assinatura em níveis, com vários pacotes ou um complemento?
  • Apenas com as Ações de exibição: 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 detalha os diferentes tipos de paywall:

Tipo de paywall Exemplo Categoria
Não é necessário fazer compras ou login. Crackle nologinrequired
O usuário precisa estar conectado, mas não precisa de uma assinatura. Vudu (AVOD) free
O usuário precisa ter uma assinatura ativa. O acesso é independente o nível de assinatura. Netflix

subscription

O usuário precisa ter uma assinatura ativa. O acesso depende nível de assinatura. Hulu (complementos)

subscription

O conteúdo fica disponível por um período limitado após a compra. Vudu rental
O conteúdo fica 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 relógio

Para especificar o tipo de paywall de conteúdo para as Ações de exibição, use o método category na Especificação de acesso de ações:

"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 escuta", use o método category na 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 um ou as duas propriedades a seguir:

Um usuário pode acessar o conteúdo se a localização do dispositivo estiver em uma região especificado em eligibleRegion e não está em uma região especificada em ineligibleRegion.

As propriedades eligibleRegion e ineligibleRegion permitem o seguinte: valores:

Se o conteúdo estiver disponível globalmente, use o seguinte valor especial para eligibleRegion:

"eligibleRegion": "EARTH",

Casos de uso deeligibleRegion

Veja a seguir exemplos de caso de uso da propriedade eligibleRegion:

  • Exemplo 1:eligibleRegion com uma lista de países.
  • Exemplo 2:eligibleRegion com um objeto GeoShape que contém uma lista de CEPs.
  • Exemplo 3:eligibleRegion com um objeto GeoShape que contém uma lista de códigos de área de classificação direta (FSA, na sigla em inglês).
  • Exemplo 4:eligibleRegion com um objeto GeoShape que contém um ID de DMA.
  • Exemplo 5:eligibleRegion com uma lista de objetos GeoShape. Cada um contém um ID de DMA.
  • Exemplo 6:ineligibleRegion com CEPs bloqueados.

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 direta (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"
      }
    ]
  }
}

Example 5

eligibleRegion com 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 acesso a um grupo de conteúdo no seu catálogo de mídia. Para determinar se um usuário tiver acesso ao seu conteúdo, o Google tomará as seguintes medidas:

  1. Fazemos uma chamada de API para sua Endpoint de direitos para receber o identificadores de direitos.
  2. Procuramos na sua mídia os identificadores de direitos necessários para o conteúdo Feed de ações.
  3. Correspondemos o entitlementId de um usuário ao identifier do elemento objeto de assinatura de mídia no seu feed. Se pelo menos uma correspondência de entitlementId, determinamos que o usuário pode acessar conteúdo.
.
Figura 2. Um dos identificadores de direitos do usuário corresponde o identificador de direitos exigido do conteúdo.

O Google recomenda que você use 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

MediaExampleCompany especifica que Movie XYZ requer a 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 do acesso

Confira a seguir casos de uso comuns:

  • Sem custo financeiro (não é necessário fazer login): o o conteúdo está disponível sem login, assinatura ou compra.
  • Sem custo financeiro (login obrigatório): o o conteúdo exige que os usuários façam login, mas não exige uma assinatura.
  • Assinatura de nível único: O conteúdo requer uma assinatura. Todos os assinantes podem acessar a mesma conteúdo, seja filmes ou episódios, independentemente da assinatura .
  • Assinatura de vários níveis: a conteúdo requer uma assinatura. Os assinantes têm acesso a diferentes conteúdos, sejam filmes ou episódios, com base no nível de assinatura. Por exemplo: Prata versus Ouro.
  • Assinatura de complemento:o conteúdo. requer uma assinatura. Os assinantes podem adicionar conteúdo premium assinatura normal.
  • Compra única:o conteúdo pode ser comprado, depois do qual 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 de TV a 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 como nologinrequired.
  • Não inclua expectAcceptanceOf.

Sem custo financeiro (é necessário fazer login)

É necessário fazer login

O conteúdo exige que os usuários façam login, mas não exige uma assinatura.


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "free",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}
  • Defina category como free.
  • Não inclua expectAcceptanceOf.

Assinatura de camada única

Em um modelo de assinatura de camada única, o provedor de serviços tem nível de assinatura. Todos os assinantes podem acessar o mesmo conteúdo, 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árias níveis de assinatura, como Gold, Silver e Bronze. Os usuários com a assinatura de nível superior podem acessar todos o conteúdo de nível inferior. No entanto, os usuários que têm o nível inferior não podem acessar o conteúdo de nível superior.

Figura 3. Um modelo de assinatura em níveis e os representação de direitos.

Pense no seguinte cenário:

  • Jane assina o nível Ouro. Seus direitos endpoint retorna os seguintes identificadores entitlementId:
    • example.com:bronze
    • example.com:silver
    • example.com:gold
  • João assina o nível Bronze. Seus direitos endpoint 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.

Nesse cenário, o Google determina os seguintes níveis de acesso para Jane e John:

  • Tanto Jane quanto João têm acesso ao Filme A.
  • Jane tem acesso ao Filme B, mas João não.
{
  "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 expandir os direitos e adicionar canais a uma assinatura básica. Usuários poderá adicionar quantos canais quiser.

Figura 4. Um modelo de assinatura de complementos e os representação de direitos.

Pense no seguinte cenário:

  • Jane tem PRO e Sportz, além do Basic. O endpoint de direitos retorna o seguintes identificadores entitlementId:
    • example.com:basic
    • example.com:pro
    • example.com:sportz
  • João tem apenas a assinatura Basic. Seus direitos endpoint 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.

Nesse cenário, o Google determina os seguintes níveis de acesso para Jane e John:

  • Tanto Jane quanto João têm acesso ao Filme A.
  • Jane tem acesso ao Filme B, mas João não.
{
  "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

Compras

O conteúdo fica 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 como purchase.
  • Incluir expectAcceptanceOf em actionAccessibilityRequirement para indicar o preço do compra.

Aluguel

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 como rental.
  • Incluir expectAcceptanceOf em actionAccessibilityRequirement para indicar o preço do aluguel

TV ao vivo

Em um feed de Ações de mídia, é possível restringir o acesso a uma TV ao vivo channel ou event com base no 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 em que os usuários tenham acesso a ele. Esta condição geralmente se aplica à transmissão local canais de TV.

  • O status da conta do usuário

    Se o acesso a um canal de TV depender da configuração no nível da conta do usuário, usam identificadores de direitos para representam a restrição.

    Essa condição geralmente se aplica aos seguintes casos de uso:

    • Pacote: canais nacionais costumam ser incluídos em pacotes, e os usuários escolhem em qual pacote eles querem se inscrever.
    • Complemento: alguns canais premium exigem que os usuários adicionar seletivamente mais canais a sua inscrição.
    • Rede Regional Esportiva (RSN, na sigla em inglês): RSNs geralmente são associadas à "casa" do usuário o local. Os usuários podem assistir ao conteúdo na RSN mesmo quando estão fora de casa, o local.

Assinatura de terceiros

Assinatura de terceiros

O conteúdo está disponível para os assinantes de um serviço diferente.


{
  "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"
    }
  }
}
  • Adição de authenticator para indicar que um serviço diferente autentica os assinantes. Por exemplo, a HBO GO requer uma assinatura da operadora de cabo.

Pacotes de nível comum

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 a category de subscription. Para mais informações sobre a propriedade category, consulte a Seção Tipo de paywall.

Por que é necessário um pacote de camadas comum?

Vários produtos do Google oferecem serviços de TV e recomendações de filmes aos usuários; este inclui a Pesquisa Google, o Android TV e o Google Assistente. Para definir o usuário expectativas sobre custos, o Google precisa entender qual conteúdo está disponível para todos assinantes com o uso do nível comum. O Google também precisa entender o 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ê apoie o API Entitlement. A API permite que o Google entenda os títulos de nível não comum que cada que o usuário pode acessar.

Quando devo criar um pacote de camadas comum?

Um pacote de camada comum é necessário quando seu serviço oferece conteúdo que não é 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.

Provedores que não têm conteúdo disponível para todos os assinantes não precisam criar um pacote de camadas comum. Um exemplo são os provedores de serviços que oferecem benefícios mutuamente exclusivos conteúdo em todos os pacotes.

Exemplos de camadas 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árias assinaturas níveis, como Ouro, Prata e Bronze. Usuários com o assinaturas de nível superior têm acesso a todo o conteúdo dos níveis inferiores. Usuários usuários com assinaturas de nível inferior não têm acesso ao conteúdo camada de armazenamento. A imagem abaixo é um exemplo da estrutura do pacote.

O nível Ouro tem todo o conteúdo do nível Prata, que
            contém todo o nível Bronze.
Figura 5. Estrutura de pacotes de assinatura em níveis.

No exemplo de código a seguir, o pacote Bronze é o nível comum porque todas 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 adicionar canais a uma assinatura básica. Os usuários podem adicionar como quantos canais quiser. A imagem a seguir é um exemplo do pacote na estrutura dos preços.

Todos os usuários começam com o canal básico e podem adicionar
            qualquer combinação dos canais PRO, Sportz e Moviemax.
Figura 6. Estrutura do pacote de assinatura de complementos.

Se você tem um canal disponível para todos os usuários e não há custo para o é 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 usuários têm acesso a todo o conteúdo deste 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 serviço O provedor vende pacotes que incluem conteúdo de outros pacotes. A a imagem abaixo é um exemplo de estrutura de pacote.

Um diagrama de Venn em que a sobreposição entre os pacotes 1, 2 e 3 é
            identificados como &quot;Camada comum&quot;.
Figura 7. Estrutura do pacote com conteúdo cruzado.

No exemplo de código a seguir, o provedor oferece três pacotes em que alguns conteúdo cruza todos os pacotes. Nesse caso, um quarto pacote que representa o nível comum é necessário. Ele precisa incluir todo o conteúdo disponíveis 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 com interseção

Em um modelo de conteúdo em que nem todos os pacotes de conteúdo se cruzam, um serviço o provedor vende pacotes que não incluem conteúdo de outros pacotes. A a imagem abaixo é um exemplo de estrutura de pacote.

Os pacotes 1, 2 e 3 são completamente separados.
Figura 8. Estrutura do pacote sem interseção conteúdo.

No exemplo a seguir, o provedor oferece três pacotes sem conteúdo e interseção em todos os pacotes. Nenhum pacote de camadas 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 o 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 com os token OAuth do usuário. Seu endpoint precisa identificar o usuário com base nesse OAuth com base no token correto anterior. 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 é um campo dentro da resposta raiz.

subscription.type

Obrigatório

Essa propriedade pode ter os seguintes valores:

  • ActiveSubscription: o usuário tem uma assinatura ativa. ao provedor.
  • ActiveTrial: o usuário tem um teste ativo do de nuvem.
  • InactiveSubscription: o usuário não tem uma conta ativa uma assinatura ou um teste ativo.
subscription.expiration_date

Opcional

A data de expiração desse direito, em 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 entitlementId que o guardas de documentos do usuário.

entitlements.entitlement

Obrigatório se o acesso ao seu catálogo de streaming variar com base no tipo de assinatura.

Essa propriedade contém a entitlementId. Para mais informações, consulte Identificador de direitos.

entitlements.expiration_date

Opcional

A data de validade da assinatura, em 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 lidam com a expiração datas: subscription.expiration_date e entitlements.expiration_date. Você pode incluir um deles ou nenhum, mas não ambos. Qual você usa depende das seu modelo de assinatura.

Modelo de assinatura
O acesso ao catálogo de streaming é o mesmo para todos os assinantes. Como não é preciso especificar o entitlements , especifique subscription.expiration_date.

O acesso ao seu catálogo de streaming varia de acordo com os detalhes assinatura do usuário.

Se o modelo de assinatura tiver vários níveis ou complementos que expirar ao longo do tempo, siga um destes procedimentos:

  • Se todos os valores entitlements.entitlement expirarem em ao mesmo tempo, especifique subscription.expiration_date.
  • Se alguns valores entitlements.entitlement expirarem em em momentos diferentes, especifique entitlements.expiration_date.

Exemplos de respostas

Veja a seguir exemplos de respostas de diferentes estados de assinatura:

  • Inscrição ativa
  • Assinatura ativa com data de validade
  • Sem assinatura
  • Assinaturas ativas de vários níveis ou complementos

Inscrição ativa

Assinatura ativa

Um usuário tem uma assinatura ativa de example.com. Neste caso, todos os assinantes têm acesso a todo o seu catálogo de streaming seja qual for o tipo de assinatura.


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

Assinatura ativa com data de validade

Assinatura ativa com data de validade

Um usuário tem uma assinatura ativa em example.com, e a tem uma data de validade. Neste caso, todos os assinantes têm acesso a todo seu catálogo de streaming, seja qual for a assinatura não é válido.


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

Sem assinatura

Sem assinatura

Um usuário não tem assinatura em example.com.


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

Assinaturas ativas de vários níveis ou complementos

Assinaturas ativas de 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 o número máximo de consultas por segundo (QPS), e o Google distribui essas consultas ao endpoint de maneira uniforme ao longo do tempo. Assim, é possível estimar a média esperada QPS para seu endpoint com a seguinte fórmula:

QPS médio esperado = <total number of users> / 21.600 segundos (6 horas x 60 minutos x 60 segundos)

Se você aceita um grande número de usuários, o Google pode ajustar o intervalo de seis horas. Se necessário, entre em contato com o Google para conversar sobre a configuração.

Entrar em contato com o Google

Quando seu endpoint estiver pronto, entre em contato com o Google para informar o URL dele.

Propriedades de especificação de acesso à ação

Consulte a seção de propriedades de especificação de acesso à ação para referência informações imprecisas ou inadequadas.