Requisitos de acceso

Los usuarios prefieren mirar o escuchar contenido al que ya pueden acceder, como su contenido de suscripción existente. Si Google sabe a qué contenido puede acceder un usuario en tu app o plataforma, puede crear un mejor resultado de la búsqueda o una respuesta para dirigir al usuario a ese contenido.

Figura 1. Los requisitos de acceso ayudan a los suscriptores a acceder al contenido de tu app o plataforma.

Identifica los requisitos de acceso al contenido

Debes identificar el requisito de acceso para cada paquete de contenido de tu catálogo. Cuando lo hagas, considera las siguientes preguntas:

  • ¿Los usuarios deben acceder a su aplicación o plataforma para ver el contenido?
  • ¿Los usuarios necesitan una suscripción?

    Solo acciones de visualización:

    • ¿Los usuarios necesitan una suscripción de un proveedor de servicios externo?
    • ¿Ofreces una suscripción por niveles, de varios paquetes o de complementos?
  • Solo acciones de visualización: ¿Los usuarios deben alquilar o comprar el contenido?

  • ¿El requisito de acceso cambia con el tiempo?

  • ¿El requisito de acceso depende de la ubicación del dispositivo?

Tipos de restricciones de acceso

Existen dos tipos de restricciones de acceso:

Tipo de muro de pago

Puedes restringir el acceso al contenido por su tipo de muro de pago. En la siguiente tabla, se detallan los diferentes tipos de muro de pago:

Tipo de muro de pago Ejemplo Categoría
No se requiere acceso ni compra. Crujido nologinrequired
El usuario debe acceder a su cuenta, pero no necesita una suscripción pagada. Vudu (AVOD) free
El usuario debe tener una suscripción activa. El acceso es independiente del nivel de suscripción. Netflix

subscription

El usuario debe tener una suscripción activa. El acceso depende del nivel de suscripción. Hulu (complementos)

subscription

El contenido está disponible durante un tiempo limitado después de la compra. Vudu rental
El contenido está disponible durante un tiempo indefinido después de la compra. Vudu purchase
El contenido está disponible mediante una suscripción por cable. HBO Go externalSubscription

Tipo de muro de pago para acciones de visualización

A fin de especificar el tipo de muro de pago para las acciones de reproducción, usa la propiedad category en la especificación del acceso a la acción:

"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 muro de pago para acciones de escucha

A fin de especificar el tipo de muro de pago para las acciones de escucha, usa la propiedad category en el 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

Debes especificar las áreas geográficas en las que está disponible el contenido. Usa una de las siguientes propiedades o ambas:

Un usuario puede acceder al contenido si la ubicación del dispositivo está dentro de cualquier región que se especifique en eligibleRegion y no en ninguna región especificada en ineligibleRegion.

Las propiedades eligibleRegion y ineligibleRegion permiten los siguientes valores:

Si el contenido está disponible de manera global, usa el siguiente valor especial para eligibleRegion:

"eligibleRegion": "EARTH",

Casos de uso aptos de la región

Los siguientes son ejemplos de casos prácticos de la propiedad eligibleRegion:

  • Ejemplo 1: eligibleRegion con una lista de países.
  • Ejemplo 2: eligibleRegion con un objeto GeoShape que contiene una lista de códigos postales
  • Ejemplo 3: eligibleRegion con un objeto GeoShape que contiene una lista de códigos de área de clasificación directa (FSA).
  • Ejemplo 4: eligibleRegion con un objeto GeoShape que contiene un ID de DMA.
  • Ejemplo 5: eligibleRegion con una lista de objetos GeoShape. Cada uno contiene un ID de DMA.
  • Ejemplo 6: ineligibleRegion con códigos postales bloqueados.

Ejemplo 1

eligibleRegion con una 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"
    }
  ]
}

Ejemplo 2

eligibleRegion por un objeto GeoShape que contenga una lista de códigos postales:


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

Ejemplo 3

eligibleRegion por un objeto GeoShape que contenga una lista de códigos de área de clasificación directa (FSA):


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

Ejemplo 4

eligibleRegion por un objeto GeoShape que contenga un ID DMA:


"actionAccessibilityRequirement": {
  "@type": "ActionAccessSpecification",
  "category": "subscription",
  "requiresSubscription": {
    "@type": "MediaSubscription",
    "@id": "http://www.example.com/abcd/subscription",
    "name": "Example Subscription",
    "commonTier": true
  },
  "eligibleRegion":{
    "@type": "GeoShape",
    "@id": "http://example.com/area3",
    "addressCountry": "US",
    "identifier": [
      {
        "@type": "PropertyValue",
        "propertyID": "DMA_ID",
        "value": "501"
      }
    ]
  }
}

Ejemplo 5

eligibleRegion por una lista de objetos GeoShape Cada uno contiene un 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"
         }
      }
   ]
}

Ejemplo 6

ineligibleRegion con códigos postales 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 derecho

El identificador de derechos, entitlementId, hace referencia a una string que representa el acceso a un grupo de contenido en tu catálogo de medios. Para determinar si un usuario tiene acceso a tu contenido, Google sigue estos pasos:

  1. Realizamos una llamada a la API a tu extremo de derecho para recibir los identificadores de autorización del usuario.
  2. Buscamos los identificadores de derechos necesarios del contenido en tu feed de acciones multimedia.
  3. El entitlementId de un usuario coincide con la propiedad identifier del objeto de suscripción multimedia en tu feed. Si al menos una entitlementId coincide, determinamos que el usuario puede acceder al contenido.
Figura 2. Uno de los identificadores de derechos del usuario coincide con el identificador de derechos que requiere el contenido.

Google recomienda que uses la siguiente sintaxis para entitlementId:

<domain name> + colon (:) + <access level to content>

Ejemplos de sintaxis:

  • example.com:basic
  • example.com:premium
  • example.com:sports

Ejemplo de identificador de derecho

El feed de MediaExampleCompany especifica que Movie XYZ requiere el example.com:basic entitlementId, como se muestra a continuación:

{
  "@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 comunes de acceso

Los siguientes son casos de uso de acceso comunes:

  • Gratis (no se requiere acceso): El contenido está disponible sin acceso, suscripción o compra.
  • Gratuito (acceso obligatorio): El contenido requiere que los usuarios accedan, pero no requiere una suscripción.
  • Suscripción de un solo nivel: El contenido requiere una suscripción. Todos los suscriptores pueden acceder al mismo contenido, ya sean películas o episodios, independientemente del paquete de suscripción.
  • Suscripción de varios niveles: El contenido requiere una suscripción. Los suscriptores pueden acceder a diferentes contenidos, ya sean películas o episodios, en función del nivel de suscripción. Por ejemplo, Plata o Oro.
  • Suscripción complementaria: el contenido requiere una suscripción. Los suscriptores pueden agregar contenido premium a su suscripción habitual.
  • Compra única: Se puede comprar el contenido y, luego, el usuario puede acceder a él de manera indefinida.
  • TV en vivo: Una suscripción incluye acceso a canales locales, nacionales y premium.
  • Suscripción de terceros: el contenido requiere que el usuario acceda con su proveedor de cable.

Gratis (no se requiere acceso)

No se requiere acceso

El contenido está disponible sin acceso ni suscripción.


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "nologinrequired",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}
  • Establece category en nologinrequired.
  • No incluyas expectAcceptanceOf.

Gratis (acceso obligatorio)

Acceso obligatorio

El contenido requiere que los usuarios accedan, pero no requiere una suscripción.


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "free",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}
  • Establece category en free.
  • No incluyas expectAcceptanceOf.

Suscripción de un solo nivel

En un modelo de suscripción de un solo nivel, un proveedor de servicios tiene un nivel de suscripción. Todos los suscriptores pueden acceder al mismo contenido, ya sean películas o episodios, independientemente del paquete de suscripción.


{
  "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"
    }
  }
}

Suscripción de varios niveles

En un modelo de suscripción por niveles, un proveedor de servicios tiene varios niveles de suscripción, como Oro, Plata y Bronce. Los usuarios que tienen la suscripción de nivel superior pueden acceder a todo el contenido de nivel inferior. Sin embargo, los usuarios que tienen la suscripción de nivel inferior no pueden acceder al contenido de nivel superior.

Figura 3. Un modelo de suscripción por niveles y su representación de derechos

Considera la siguiente situación:

  • Jane se suscribe al nivel Oro. El extremo de derechos muestra los siguientes identificadores de entitlementId:
    • example.com:bronze
    • example.com:silver
    • example.com:gold
  • Juan se suscribe al nivel Bronce. El extremo de derechos muestra el siguiente entitlementId:
    • example.com:bronze
  • Tu feed de acciones multimedia describe los siguientes requisitos:
    • La película A requiere example.com:bronze.
    • La película B requiere example.com:silver.

En este caso, Google determina los siguientes niveles de acceso para Jane y John:

  • Tanto Jane como John tienen acceso a la Película A.
  • Jane tiene acceso a la Película B, pero John no.
{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "subscription",
    "requiresSubscription": {
      "@type": "MediaSubscription",
      "@id": "http://www.example.com/basic_subscription",
      "name": "Bronze",
      "commonTier": true
      ...
    },
    ...
  }
}

Suscripción complementaria

En un modelo de suscripción de complementos, un proveedor de servicios permite a los usuarios expandir sus derechos y agregar canales a una suscripción base. Los usuarios pueden agregar todos los canales que quieran.

Figura 4: Un modelo de suscripción a complementos y su representación de derechos

Considera la siguiente situación:

  • Jane tiene PRO y Sportz, además de la suscripción Basic. El extremo de derechos muestra los siguientes identificadores de entitlementId:
    • example.com:basic
    • example.com:pro
    • example.com:sportz
  • Juan solo tiene la suscripción Básica. El extremo de derechos muestra el siguiente entitlementId:
    • example.com:basic
  • Tu feed de acciones multimedia describe los siguientes requisitos:
    • La película A requiere example.com:basic.
    • La película B requiere example.com:pro.

En este caso, Google determina los siguientes niveles de acceso para Jane y John:

  • Tanto Jane como John tienen acceso a la Película A.
  • Jane tiene acceso a la Película B, pero John no.
{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "subscription",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    "requiresSubscription": [
      {
          "@type": "MediaSubscription",
          "@id": "https://www.example.com/package/basic",
          "name": "Basic",
          "sameAs": "https://www.example.com/package/basic",
          "commonTier": true
        },
        {
          "@type": "MediaSubscription",
          "@id": "https://www.example.com/packages/basic/pro",
          "name": "PRO",
          "sameAs": "https://www.example.com/package/pro",
          "identifier": "example.com:pro",
          "commonTier": false
        },
        {
          "@type": "MediaSubscription",
          "@id": "https://www.example.com/package/sportz",
          "name": "Sportz",
          "sameAs": "https://www.example.com/package/sports",
          "identifier": "example.com:sportz",
          "commonTier": false
        }
    }
  }
}

Compra única

Compra

El contenido está disponible durante un tiempo indefinido después de la 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/"
      }
    }
  }
}
  • Establece category en purchase.
  • Incluye expectAcceptanceOf en actionAccessibilityRequirement para indicar el precio de la compra.

Alquiler

El contenido está disponible durante un tiempo limitado después de la 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/"
      }
    }
  }
}
  • Establece category en rental.
  • Incluye expectAcceptanceOf en actionAccessibilityRequirement para indicar el precio del alquiler.

TV en vivo

En un feed de acciones multimedia, puedes restringir el acceso a un canal o evento de TV en vivo en función de las siguientes dos condiciones de usuario:

  • La ubicación del dispositivo del usuario

    Para restringir el acceso al canal de TV, especifica el área donde los usuarios tienen acceso. Por lo general, esta condición se aplica a los canales de TV locales.

  • El estado de la cuenta del usuario

    Si el acceso a un canal de TV depende de la configuración del usuario a nivel de la cuenta, usa identificadores de derechos para representar la restricción.

    Por lo general, esta condición se aplica a los siguientes casos prácticos:

    • Paquete: Los canales nacionales suelen estar incluidos en paquetes, y los usuarios eligen a qué paquetes desean suscribirse.
    • Complemento: Algunos canales premium requieren que los usuarios agreguen canales adicionales de forma selectiva a la suscripción.
    • Red deportiva regional (RSN): Por lo general, las RSN están asociadas con la ubicación de "inicio" de un usuario. Los usuarios pueden mirar contenido en la RSN incluso cuando viajan fuera de su ubicación de "casa".

Suscripción de terceros

Suscripción de terceros

El contenido está disponible para los suscriptores de otro servicio.


{
  "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"
    }
  }
}
  • Agrega authenticator para indicar que un servicio diferente autentica a los suscriptores. Por ejemplo, HBO GO requiere una suscripción del proveedor de cable.

Paquetes de nivel común

El contenido de nivel común está disponible para todos los suscriptores, sin importar su paquete de suscripción. El nivel común se aplica a todo el contenido con el category de subscription. Para obtener más información sobre la propiedad category, consulta la sección Tipo de muro de pago.

¿Por qué se requiere un paquete de nivel común?

Varios productos de Google ofrecen recomendaciones de TV y películas a los usuarios, como la Búsqueda de Google, Android TV y el Asistente de Google. A fin de establecer las expectativas de los usuarios sobre el costo, Google debe comprender qué contenido está disponible para todos los suscriptores mediante el uso del nivel común. Google también debe comprender qué contenido está disponible para los suscriptores con paquetes de suscripción específicos.

Google recomienda los títulos disponibles en el nivel común, a menos que admitas la API de derechos. La API le permite a Google comprender los títulos de nivel no común a los que puede acceder cada usuario específico.

¿Cuándo debo crear un paquete de nivel común?

Se requiere un paquete de nivel común cuando tu servicio ofrece contenido disponible para todos los suscriptores. Esto incluye servicios que ofrecen un solo paquete y servicios que ofrecen varios paquetes o complementos.

Los proveedores que no tienen contenido disponible para todos los suscriptores no necesitan crear un paquete de nivel común. Un ejemplo son los proveedores de servicios que proporcionan contenido mutuamente excluyente en todos sus paquetes.

Ejemplos de niveles comunes

Los siguientes son ejemplos del nivel común.

Suscripción por niveles

En un modelo de suscripción por niveles, un proveedor de servicios tiene varios niveles de suscripción, como Oro, Plata y Bronce. Los usuarios con la suscripción de nivel superior tienen acceso a todo el contenido en los niveles inferiores. Los usuarios con la suscripción de nivel inferior no tienen acceso al contenido en el nivel superior. La siguiente imagen es un ejemplo de la estructura del paquete.

El nivel Oro incluye todo el contenido del nivel Plata, que contiene todo el nivel Bronce.
Figura 5: Estructura del paquete de suscripción por niveles.

En el siguiente ejemplo de código, el paquete de bronce es el nivel común porque todos los usuarios tienen acceso a todo el contenido en ese nivel.

"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

En un modelo de suscripción de complementos, un proveedor de servicios permite a los usuarios expandir sus derechos y agregar canales a una suscripción básica. Los usuarios pueden agregar todos los canales que deseen. La siguiente imagen es un ejemplo de la estructura del paquete.

Cada usuario comienza con el canal Básico y puede optar por agregar cualquier combinación de los canales PRO, Sportz y Moviemax.
Figura 6. Estructura del paquete de suscripción a los complementos

Si tienes un canal disponible para todos los usuarios y este no tiene costo, puedes combinar el paquete con el paquete de nivel común.

En el siguiente ejemplo de código, el paquete básico es el nivel común porque todos los usuarios tienen acceso a todo el contenido de este paquete.

"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
    }
  ],

Paquetes con contenido que se cruza

En un modelo de contenido en el que los paquetes tienen contenido que se cruza, un proveedor de servicios vende paquetes que incluyen contenido de otros paquetes. La siguiente imagen es un ejemplo de la estructura del paquete.

Un diagrama de Venn en el que la superposición entre los paquetes 1, 2 y 3 se etiqueta como “Nivel común”.
Figura 7: Estructura de paquetes con contenido que se interseca

En el siguiente ejemplo de código, el proveedor ofrece tres paquetes en los que parte del contenido se cruza con todos ellos. En este caso, se requiere un cuarto paquete que represente el nivel común. Debe incluir todo el contenido disponible en los tres paquetes.

"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
    }
  ],

Paquetes sin contenido que se cruza

En un modelo de contenido en el que todos los paquetes de contenido no se cruzan, un proveedor de servicios vende paquetes que no incluyen contenido de otros paquetes. La siguiente imagen es un ejemplo de la estructura del paquete.

Los paquetes 1, 2 y 3 son completamente independientes.
Figura 8: Estructura de paquetes sin contenido intersecto

En el siguiente ejemplo, el proveedor ofrece tres paquetes sin contenido que se intersecan en todos ellos. No se requiere un paquete de nivel común.

"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
    }
  ],

Extremo de derechos

Usa la información de esta sección para alojar un extremo HTTPS que muestre las autorizaciones asociadas con un usuario.

Requisito previo

Antes de comenzar, verifica que tu servicio admita el flujo de OAuth 2.0 con Google.

Solicitud

Para recibir los derechos del usuario, Google envía una solicitud que contiene el token de OAuth del usuario. Tu extremo debe identificar al usuario según ese token de OAuth. Consulta el siguiente ejemplo:

GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer <OAuthToken>

Respuesta

Tu extremo debe mostrar una respuesta con las siguientes propiedades:

Propiedad
subscription

Obligatorio

Este es un campo dentro de la respuesta raíz.

subscription.type

Obligatorio

Esta propiedad puede tener los siguientes valores:

  • ActiveSubscription: El usuario tiene una suscripción activa al proveedor.
  • ActiveTrial: El usuario tiene una prueba activa para el proveedor.
  • InactiveSubscription: El usuario no tiene una suscripción activa ni una prueba activa.
subscription.expiration_date

Optional

Es la fecha de vencimiento de este derecho, en formato ISO 8601, que incluye la zona horaria. Para obtener más detalles, consulta Fechas de vencimiento.

entitlements

Optional

Esta propiedad raíz contiene los valores entitlementId que contiene el usuario.

entitlements.entitlement

Es obligatorio si el acceso a tu catálogo de transmisión varía según el tipo de suscripción.

Esta propiedad contiene el entitlementId. Para obtener más información, consulta Identificador de derechos.

entitlements.expiration_date

Optional

Es la fecha de vencimiento de esta suscripción en formato ISO 8601, que incluye la zona horaria. Para obtener más detalles, consulta Fechas de vencimiento.

Fechas de vencimiento

En una respuesta de extremo, hay dos propiedades que tratan con fechas de vencimiento: subscription.expiration_date y entitlements.expiration_date. Puedes incluir uno de ellos o ninguno, pero no ambos. El que uses depende del modelo de suscripción.

Modelo de suscripción
El acceso a tu catálogo de transmisión es el mismo para todos los suscriptores. Debido a que no necesitas especificar la propiedad entitlements, especifica subscription.expiration_date.

El acceso a tu catálogo de transmisión varía según los detalles de la suscripción de un usuario.

Si el modelo de suscripción tiene varios niveles o complementos que caducan con el tiempo, realiza una de las siguientes acciones:

  • Si todos los valores entitlements.entitlement vencen al mismo tiempo, especifica subscription.expiration_date.
  • Si algunos valores entitlements.entitlement vencen en momentos diferentes, especifica entitlements.expiration_date.

Respuestas de ejemplo

Las siguientes son respuestas de ejemplo de diferentes estados de suscripción:

  • Suscripción activa
  • Suscripción activa con fecha de vencimiento
  • Sin suscripción
  • Suscripciones activas en varios niveles o complementos

Suscripción activa

Suscripción activa

Un usuario tiene una suscripción activa a example.com. En este caso, todos los suscriptores tienen acceso a todo tu catálogo de transmisiones, sin importar el tipo de suscripción.


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

Suscripción activa con fecha de vencimiento

Suscripción activa con fecha de vencimiento

Un usuario tiene una suscripción activa a example.com y la suscripción tiene una fecha de vencimiento. En este caso, todos los suscriptores tienen acceso a todo tu catálogo de transmisiones, sin importar el tipo de suscripción.


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

Sin suscripción

Sin suscripción

Un usuario no tiene una suscripción a example.com.


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

Suscripciones activas en varios niveles o complementos

Suscripciones activas a varios niveles o complementos

Un usuario tiene una suscripción a example.com:premium hasta una fecha determinada.


{
  "subscription" : {
    "type": "ActiveSubscription",
  }
  "entitlements": [
    {
      "entitlement": "example.com:premium",
      "expiration": "2019-11-10T10:00:00Z"
    }
  ]
}

Límite de frecuencia

Google actualiza la información sobre derechos de un usuario cada seis horas. Para disminuir las consultas máximas por segundo (QPS), Google distribuye las consultas a tu extremo de manera uniforme. Por lo tanto, puedes estimar las QPS promedio esperadas para tu extremo con la siguiente fórmula:

Promedio de QPS esperadas = <total number of users>/21,600 segundos (6 horas x 60 minutos x 60 segundos)

Si admites una gran cantidad de usuarios, Google puede ajustar el intervalo de 6 horas. Si es necesario, comunícate con Google para analizar la configuración.

Comunicarse con Google

Cuando tu extremo esté listo, comunícate con Google para informar su URL.

Propiedades de las especificaciones del acceso de acciones

Consulta la sección de propiedades de la especificación de acceso a acciones para obtener información de referencia.