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 acessar no seu app ou plataforma, ele poderá criar um resultado da pesquisa ou uma resposta melhor para direcionar o usuário a esse conteúdo.

Figura 1. Os requisitos de acesso ajudam os inscritos 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 no seu catálogo. Ao fazer isso, considere as seguintes perguntas:

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

    Ações de assistir apenas:

    • 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 complementar?
  • 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 detalha os diferentes tipos de paywall:

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

subscription

O usuário precisa ter uma assinatura ativa. O acesso depende do nível da 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 assistir a vídeos

Para especificar o tipo de paywall de conteúdo para ações de assistir, 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 ouvir conteúdo

Para especificar o tipo de paywall de conteúdo para ações de escuta, 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 ou as duas propriedades a seguir:

Um usuário pode acessar conteúdo se o local do dispositivo estiver em qualquer região especificada em eligibleRegion e não estiver em nenhuma região especificada em ineligibleRegion.

As propriedades eligibleRegion e ineligibleRegion permitem os seguintes valores:

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

"eligibleRegion": "EARTH",

Casos de uso de eligibleRegion

Confira a seguir exemplos de casos 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 da á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 com 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 com um objeto GeoShape que contém uma lista de códigos da área de classificação direta (FSA):


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

Exemplo 4

eligibleRegion com 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
  },
  "additionalProperty": {
      "@type": "PropertyValue",
      "name": "DisplaySubscriptionIdentifier",
      "value": "http://www.example.com/abcd/subscription"
  },
  "eligibleRegion":{
    "@type": "GeoShape",
    "@id": "http://example.com/area3",
    "addressCountry": "US",
    "identifier": [
      {
        "@type": "PropertyValue",
        "propertyID": "DMA_ID",
        "value": "501"
      }
    ]
  }
}

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
  },
  "additionalProperty": {
      "@type": "PropertyValue",
      "name": "DisplaySubscriptionIdentifier",
      "value": "http://www.example.com/local_tv_network/subscription"
  },
 "eligibleRegion":   {
      "@type": "Country",
      "name": "US"
    },
  "ineligibleRegion": {
    "@type": "GeoShape",
    "@id": "http://example.com/area1",
    "addressCountry": "US",
    "postalCode": [
      "94118",
      "94119"
    ]
  }
}

Identificador do direito

O identificador de direito, entitlementId, se refere 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 segue estas etapas:

  1. Fazemos uma chamada de API para seu endpoint Entitlements para receber os identificadores de direitos do usuário.
  2. Procuramos os identificadores de direitos necessários do conteúdo no seu feed de ações de mídia.
  3. Fazemos a correspondência entre o entitlementId de um usuário e a propriedade identifier do objeto assinatura de mídia no seu feed. Se pelo menos um entitlementId corresponder, determinamos que o usuário pode acessar o conteúdo.
Figura 2. Um dos identificadores de direitos do usuário corresponde ao 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 direito

O feed da MediaExampleCompany especifica que Movie XYZ exige o 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
        ...
      },
      "additionalProperty": {
        "@type": "PropertyValue",
        "name": "DisplaySubscriptionIdentifier",
        "value": "http://www.example.com/basic_subscription"
      },
      ...
    }
  },
  ...
}

Casos de uso comuns de acesso

Confira a seguir alguns casos de uso comuns de acesso:

  • Sem custo financeiro (sem necessidade de 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 requer uma assinatura.
  • Assinatura de nível único:O conteúdo exige uma assinatura. Todos os assinantes podem acessar o mesmo conteúdo, sejam filmes ou episódios, independente do pacote de assinatura.
  • Assinatura de vários níveis:o conteúdo exige uma assinatura. Os assinantes podem acessar diferentes conteúdos, sejam filmes ou episódios, com base no nível da assinatura. Por exemplo, Prata x Ouro.
  • Assinatura de complemento:o conteúdo exige uma assinatura. Os assinantes podem adicionar conteúdo premium à assinatura regular.
  • Compra única:o conteúdo pode ser comprado, e o usuário pode acessar 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)

Nenhum login necessário

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 requer 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 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, sejam filmes ou episódios, independente 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"
    },
    "additionalProperty": {
      "@type": "PropertyValue",
      "name": "DisplaySubscriptionIdentifier",
      "value": "http://www.example.com/example_package"
    },
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}

Assinatura de vários níveis

Em um modelo de assinatura por 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 do nível superior podem acessar todo o conteúdo dos níveis inferiores. No entanto, os usuários que têm a assinatura do nível inferior não podem acessar o conteúdo do nível superior.

Figura 3. Um modelo de assinatura por níveis e a representação dos direitos.

Pense no seguinte cenário:

  • Jane assina o plano Ouro. Seu endpoint de direitos retorna os seguintes identificadores entitlementId:
    • example.com:bronze
    • example.com:silver
    • example.com:gold
  • João assina o nível Bronze. O endpoint de direitos retorna o seguinte entitlementId:
    • example.com:bronze
  • O feed de ações de mídia descreve os seguintes requisitos:
    • O Filme A requer example.com:bronze.
    • Filme B exige example.com:silver.

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

  • Joana e João têm acesso ao Filme A.
  • Jane tem acesso ao Filme B, mas John não.
{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "subscription",
    "requiresSubscription": {
      "@type": "MediaSubscription",
      "@id": "http://www.example.com/basic_subscription",
      "name": "Bronze",
      "commonTier": true
      ...
    },
    "additionalProperty": {
      "@type": "PropertyValue",
      "name": "DisplaySubscriptionIdentifier",
      "value": "http://www.example.com/basic_subscription"
    },
    ...
  }
}

Assinatura de complemento

Em um modelo de assinatura de complementos, um provedor de serviços permite que os usuários ampliem os direitos e adicionem canais a uma assinatura básica. Os usuários podem adicionar quantos canais quiserem.

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

Pense no seguinte cenário:

  • Além da assinatura Basic, Jane tem PRO e Sportz. O endpoint de direitos retorna os seguintes identificadores entitlementId:
    • example.com:basic
    • example.com:pro
    • example.com:sportz
  • João tem apenas a assinatura do Basic. O endpoint de direitos retorna o seguinte entitlementId:
    • example.com:basic
  • O feed de ações de mídia descreve os seguintes requisitos:
    • O Filme A requer example.com:basic.
    • Filme B exige example.com:pro.

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

  • Joana e João têm acesso ao Filme A.
  • Jane tem acesso ao Filme B, mas John 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
        }
    ],
      "additionalProperty": {
        "@type": "PropertyValue",
        "name": "DisplaySubscriptionIdentifier",
        "value": "http://www.example.com/package/basic"
      },
    }
  }
}

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.
  • Inclua expectAcceptanceOf em actionAccessibilityRequirement para indicar o preço da 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.
  • Inclua 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 um canal ou evento de TV ao vivo 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 em que os usuários têm acesso a ele. Essa condição geralmente se aplica a canais de TV de transmissão local.

  • O status da conta do usuário

    Se o acesso a um canal de TV depender de uma 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 geralmente são incluídos em pacotes, e os usuários escolhem a qual pacote querem se inscrever.
    • Complemento:alguns canais premium exigem que os usuários adicionem outros canais à assinatura de forma seletiva.
    • Rede esportiva regional (RSN): as RSNs geralmente são associadas ao local "residencial" de um usuário. Os usuários podem assistir conteúdo na RSN mesmo quando viajam para fora do local "domicílio".

Assinatura de terceiros

Assinatura de terceiros

O conteúdo está disponível para os inscritos 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"
      }
    },
    "additionalProperty": {
      "@type": "PropertyValue",
      "name": "DisplaySubscriptionIdentifier",
      "value": "http://www.example.com/faq"
     },
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}
  • Adicione authenticator para indicar que um serviço diferente autentica os assinantes. Por exemplo, o HBO GO exige uma assinatura do provedor de TV a cabo.

Pacotes de nível comum

O conteúdo do nível comum está disponível para todos os assinantes, independente 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 nível comum?

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 o 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 específicos.

O Google recomenda títulos disponíveis no nível comum, a menos que você ofereça suporte à API Entitlement. A API permite que o Google entenda os títulos que não são do nível comum e 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 seu 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 oferecem conteúdo mutuamente exclusivo em todos os pacotes.

Exemplos de níveis comuns

Confira alguns exemplos do nível comum.

Assinatura por níveis

Em um modelo de assinatura por 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 dos níveis inferiores. Os usuários com a assinatura de nível inferior não têm acesso ao conteúdo do nível superior. A imagem a seguir é um exemplo da estrutura do pacote.

O nível Ouro contém todo o conteúdo do nível Prata, que, por sua vez, contém todo o conteúdo do nível Bronze.
Figura 5. Estrutura de pacote de assinatura por níveis.

No exemplo de código a seguir, o pacote bronze é o nível comum porque todos os usuários têm acesso a todo o conteúdo desse 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 ampliem 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.

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

Se você tiver um canal disponível para todos os usuários e não houver custo para ele, poderá 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 dele.

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

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 algum conteúdo de outros pacotes. A imagem a seguir é um exemplo da estrutura do pacote.

Um diagrama de Venn em que a sobreposição entre os pacotes 1, 2 e 3 é rotulada como &quot;Nível comum&quot;.
Figura 7. Estrutura de pacote com conteúdo que se cruza.

No exemplo de código a seguir, o provedor oferece três pacotes em que parte do conteúdo se cruza em todos eles. 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 que se cruza

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

Os pacotes 1, 2 e 3 são completamente separados.
Figura 8. Estrutura de pacote sem conteúdo que se cruza.

No exemplo a seguir, o provedor oferece três pacotes sem conteúdo que se cruzem. Não é necessário ter um pacote de nível comum.

"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 retorne 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. O endpoint precisa identificar o usuário com base nesse token do OAuth. 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

Este é 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 do provedor.
  • ActiveTrial: o usuário tem um teste ativo do provedor.
  • InactiveSubscription: o usuário não tem uma assinatura ou um teste ativo.
subscription.expiration_date

Opcional

A data de expiração desse 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 de entitlementId que o usuário tem.

entitlements.entitlement

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

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

entitlements.expiration_date

Opcional

A data de expiração desta 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 lidam com datas de validade: subscription.expiration_date e entitlements.expiration_date. Você pode incluir um deles ou nenhum, mas não os dois. A escolha depende do seu modelo de assinatura.

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

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

Se o modelo de assinatura tiver vários níveis ou complementos que expiram com o tempo, faça o seguinte:

  • Se todos os valores de entitlements.entitlement expirarem ao mesmo tempo, especifique subscription.expiration_date.
  • Se alguns valores de entitlements.entitlement expirarem em horários diferentes, especifique entitlements.expiration_date.

Exemplos de respostas

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

  • Inscrição ativa
  • Assinatura ativa com uma 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 do domínio example.com. Nesse caso, todos os assinantes têm acesso a todo o catálogo de streaming, independente 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 do example.com, e ela tem uma data de expiração. Nesse caso, todos os inscritos têm acesso a todo o catálogo de streaming, independente 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 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 suavizar o máximo de consultas por segundo (QPS), o Google distribui as consultas para 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 dele.

Propriedades de especificação de acesso a ações

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