Requisitos de acceso

Los usuarios prefieren mirar o escuchar contenido al que ya pueden acceder, como el contenido de su 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 mejor 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 tu app o plataforma para acceder al contenido?
  • ¿Los usuarios necesitan una suscripción?

    Solo acciones de Watch:

    • ¿Los usuarios necesitan una suscripción de un proveedor de servicios externo?
    • ¿Ofreces una suscripción por niveles, con varios paquetes o complementos?
  • Solo acciones de reproducció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 tipo de muro de pago. En la siguiente tabla, se detallan los diferentes tipos de muros de pago:

Tipo de muro de pago Ejemplo Categoría
No es necesario realizar compras ni acceder. Crackle nologinrequired
El usuario debe haber accedido, 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 de forma indefinida después de la compra. Vudu purchase
El contenido está disponible mediante una suscripción de cable. HBO Go externalSubscription

Tipo de muro de pago para acciones de visualización

Para especificar el tipo de muro de pago de contenido para las Acciones en Relojes, usa la propiedad category en la especificación de 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

Para especificar el tipo de muro de pago de contenido 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 o ambas de las siguientes propiedades:

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

Las propiedades eligibleRegion y ineligibleRegion permiten los siguientes valores:

Si el contenido está disponible a nivel global, usa el siguiente valor especial para eligibleRegion:

"eligibleRegion": "EARTH",

Casos de uso de eligibleRegion

Los siguientes son ejemplos de casos de uso 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 avanzada (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 con un objeto GeoShape que contiene 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 con un objeto GeoShape que contiene una lista de códigos de Área de clasificación avanzada (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 con un objeto GeoShape que contiene un 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"
      }
    ]
  }
}

Ejemplo 5

eligibleRegion con 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 derechos

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

  1. Hacemos una llamada a la API a tu extremo de derechos para recibir los identificadores de derechos del usuario.
  2. Buscamos los identificadores de derechos necesarios del contenido en tu feed de Media Actions.
  3. Hacemos coincidir el entitlementId de un usuario con la propiedad identifier del objeto 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 requerido del 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 derechos

El feed de MediaExampleCompany especifica que Movie XYZ requiere 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 de acceso comunes

Los siguientes son casos de uso de acceso comunes:

  • Gratis (no se requiere acceso): El contenido está disponible sin necesidad de acceder, suscribirse ni comprarlo.
  • Gratis (se requiere acceso): 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 contenido diferente, ya sea películas o episodios, según su nivel de suscripción. Por ejemplo, Silver en comparación con Gold.
  • Suscripción a complementos: El contenido requiere una suscripción. Los suscriptores pueden agregar contenido premium además de su suscripción normal.
  • Compra única: Se puede comprar el contenido, después de lo cual el usuario puede acceder a él de forma 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.

Gratuito (no se requiere acceso)

No requiere acceso

El contenido está disponible sin necesidad de acceder a una cuenta ni de suscribirse.


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

Gratuito (se requiere acceso)

Acceso obligatorio

El contenido requiere que los usuarios accedan a sus cuentas, 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 del nivel superior pueden acceder a todo el contenido del nivel inferior. Sin embargo, los usuarios que tienen la suscripción del nivel inferior no pueden acceder al contenido del 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 Gold. Tu extremo de derechos muestra los siguientes identificadores entitlementId:
    • example.com:bronze
    • example.com:silver
    • example.com:gold
  • Juan se suscribe al nivel Bronce. Tu extremo de derechos muestra el siguiente entitlementId:
    • example.com:bronze
  • Tu feed de acciones en redes sociales describe los siguientes requisitos:
    • La película A requiere example.com:bronze.
    • La película B requiere example.com:silver.

En esta situación, Google determina los siguientes niveles de acceso para Juana y Juan:

  • Tanto Jane como John tienen acceso a 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 a complementos

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

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

Considera la siguiente situación:

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

En esta situación, Google determina los siguientes niveles de acceso para Juana y Juan:

  • Tanto Jane como John tienen acceso a 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 por 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 un evento de TV en vivo según las siguientes dos condiciones del usuario:

  • La ubicación del dispositivo del usuario

    Para restringir el acceso al canal de TV, especifica el área en la que los usuarios tienen acceso a él. Por lo general, esta condición se aplica a los canales de TV de transmisión local.

  • El estado de la cuenta del usuario

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

    Por lo general, esta condición se aplica a los siguientes casos de uso:

    • Paquete: Los canales nacionales suelen incluirse en paquetes, y los usuarios eligen a cuál quieren suscribirse.
    • Complemento: Algunos canales premium requieren que los usuarios agreguen canales adicionales de forma selectiva a su suscripción.
    • Cadena deportiva regional (RSN): Por lo general, las RSN se asocian con la ubicación "principal" de un usuario. Los usuarios pueden mirar contenido en la RSN incluso cuando viajan fuera de su ubicación "domiciliaria".

Suscripción de terceros

Suscripción de terceros

El contenido está disponible para los suscriptores desde 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 niveles comunes

El contenido del nivel común está disponible para todos los suscriptores, independientemente del 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 proporcionan recomendaciones de TV y películas a los usuarios, lo que incluye la Búsqueda de Google, Android TV y Asistente de Google. Para establecer las expectativas de los usuarios sobre el costo, Google debe comprender qué contenido está disponible para todos los suscriptores a través 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 permite que Google comprenda los títulos que no son de nivel 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 los servicios que ofrecen un solo paquete y los 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 de los niveles inferiores. Los usuarios con la suscripción de nivel inferior no tienen acceso al contenido del nivel superior. La siguiente imagen es un ejemplo de la estructura del paquete.

El nivel Oro contiene todo el contenido del nivel Plata, que a su vez contiene todo el nivel Bronce.
Figura 5: Estructura de paquetes 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 de 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 con 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 tantos canales como quieran. La siguiente imagen es un ejemplo de la estructura del paquete.

Todos los usuarios comienzan con el canal básico y pueden agregar cualquier combinación de los canales PRO, Sportz y Moviemax.
Figura 6: Estructura del paquete de suscripción de complementos.

Si tienes un canal disponible para todos los usuarios y no tiene costo, puedes combinar el paquete con el paquete del 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 superpone

En un modelo de contenido en el que los paquetes tienen contenido que se superpone, 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 está etiquetada como &quot;Nivel común&quot;.
Figura 7: Estructura del paquete con contenido superpuesto.

En el siguiente ejemplo de código, el proveedor ofrece tres paquetes en los que parte del contenido se superpone en 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 superponga

En un modelo de contenido en el que no se superponen todos los paquetes de contenido, 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 del paquete sin contenido superpuesto.

En el siguiente ejemplo, el proveedor ofrece tres paquetes sin contenido que se superponga 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 los derechos asociados con un usuario.

Requisitos

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

Solicitud

Para recibir los derechos de un usuario, Google envía una solicitud que contiene el token de OAuth del usuario. Tu extremo debe identificar al usuario en función de 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 ni una prueba activas.
subscription.expiration_date

Opcional

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

Opcional

Esta es una propiedad raíz que contiene los valores de entitlementId que tiene el usuario.

entitlements.entitlement

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

Opcional

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

Hay dos propiedades en una respuesta de extremo que se relacionan con las fechas de vencimiento: subscription.expiration_date y entitlements.expiration_date. Puedes incluir uno de ellos o ninguno, pero no ambos. La que uses dependerá de tu modelo de suscripción.

Modelo de suscripción
El acceso al catálogo de transmisión es el mismo para todos los suscriptores. Como 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 tu modelo de suscripción tiene varios niveles o complementos que vencen con el tiempo, haz lo siguiente:

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

Respuestas de ejemplo

A continuación, se muestran ejemplos de respuestas de diferentes estados de suscripción:

  • Suscripción activa
  • Suscripción activa con una fecha de vencimiento
  • Sin suscripción
  • Suscripciones activas a 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 transmisión, independientemente del tipo de suscripción.


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

Suscripción activa con una fecha de vencimiento

Suscripción activa con una 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 transmisión, independientemente del 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 a 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 de los derechos de un usuario hasta cada seis horas. Para suavizar las consultas máximas por segundo (QPS), Google distribuye las consultas a tu extremo de forma uniforme con el tiempo. Por lo tanto, puedes estimar el QPS promedio esperado para tu extremo con la siguiente fórmula:

QPS promedio esperado = <cantidad total de usuarios>/21,600 segundos (6 horas × 60 minutos × 60 segundos)

Si brindas asistencia a 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 la URL del extremo.

Propiedades de especificación de acceso de la acción

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