Requisitos de acceso

Los usuarios prefieren mirar o escuchar contenido al que ya pueden acceder, como el contenido de sus suscripciones existentes. Si Google sabe a qué contenido puede acceder un usuario en tu app o plataforma, puede generar un mejor resultado de búsqueda o respuesta para dirigir al usuario a ese contenido.

Figura 1: Los requisitos de acceso ayudan a tus 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 para Watch Actions:

    • ¿Los usuarios necesitan una suscripción de un proveedor de servicios externo?
    • ¿Ofreces una suscripción por niveles, con varios paquetes o con 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 según el 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 acceder ni realizar compras. Crackle nologinrequired
El usuario debe acceder, 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 por un tiempo indefinido después de la compra. Vudu purchase
El contenido está disponible con una suscripción de cable. HBO Go externalSubscription

Tipo de muro de pago para las acciones de visualización

Para especificar el tipo de muro de pago de contenido para las Acciones de reloj, 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 las 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 offer:

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

A continuación, se incluyen 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 del Á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
  },
  "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"
    ]
  }
}

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

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
  },
  "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 del derecho

El identificador de derechos, entitlementId, hace referencia a una cadena 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 derechos para recibir los identificadores de derechos del usuario.
  2. Buscamos los identificadores de derechos requeridos del contenido en tu feed de Acciones multimedia.
  3. Hacemos coincidir el entitlementId de un usuario con la propiedad identifier del objeto suscripción de medios en tu feed. Si coincide al menos un entitlementId, 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 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
        ...
      },
      "additionalProperty": {
        "@type": "PropertyValue",
        "name": "DisplaySubscriptionIdentifier",
        "value": "http://www.example.com/basic_subscription"
      },
      ...
    }
  },
  ...
}

Casos de uso habituales de acceso

Estos son algunos casos de uso comunes del acceso:

  • Gratis (no se requiere acceso): El contenido está disponible sin acceso, suscripción ni compra.
  • Gratuito (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 diferentes contenidos, ya sean películas o episodios, según el nivel de suscripción. Por ejemplo, Silver en comparación con Gold.
  • Suscripción a complemento: El contenido requiere una suscripción. Los suscriptores pueden agregar contenido premium a su suscripción normal.
  • Compra única: El contenido se puede comprar, y el usuario puede acceder a él de forma indefinida.
  • TV en vivo: La 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 se requiere acceder a una cuenta

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 (se requiere acceso)

Se requiere acceso

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"
    },
    "additionalProperty": {
      "@type": "PropertyValue",
      "name": "DisplaySubscriptionIdentifier",
      "value": "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 los niveles inferiores. 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:

  • Juana se suscribe al nivel Oro. Tu extremo de derechos devuelve los siguientes identificadores de entitlementId:
    • example.com:bronze
    • example.com:silver
    • example.com:gold
  • Juan se suscribe al nivel Bronce. Tu extremo de derechos devuelve el siguiente entitlementId:
    • example.com:bronze
  • Tu feed de Acciones multimedia describe los siguientes requisitos:
    • 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 Ana y Juan:

  • Tanto Julia como Juan tienen acceso a la Película A.
  • Ana tiene acceso a la película B, pero Juan no.
{
  "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"
    },
    ...
  }
}

Suscripción al complemento

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

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

Considera la siguiente situación:

  • Además de la suscripción Básica, Juana tiene PRO y Sportz. Tu extremo de derechos devuelve los siguientes identificadores de entitlementId:
    • example.com:basic
    • example.com:pro
    • example.com:sportz
  • Juan solo tiene la suscripción Básica. Tu extremo de derechos devuelve el siguiente entitlementId:
    • example.com:basic
  • Tu feed de Acciones multimedia describe los siguientes requisitos:
    • 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 Ana y Juan:

  • Tanto Julia como Juan tienen acceso a la Película A.
  • Ana tiene acceso a la película B, pero Juan 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
        }
    ],
      "additionalProperty": {
        "@type": "PropertyValue",
        "name": "DisplaySubscriptionIdentifier",
        "value": "http://www.example.com/package/basic"
      },
    }
  }
}

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 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 pueden acceder 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 qué paquete quieren suscribirse.
    • Complemento: Algunos canales premium requieren que los usuarios agreguen canales adicionales a su suscripción de forma selectiva.
    • 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 cadena deportiva regional incluso cuando viajan fuera de su ubicación "principal".

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"
      }
    },
    "additionalProperty": {
      "@type": "PropertyValue",
      "name": "DisplaySubscriptionIdentifier",
      "value": "http://www.example.com/faq"
     },
    "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 de nivel común está disponible para todos los suscriptores, independientemente de 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 proporcionan recomendaciones de películas y programas de TV a los usuarios, incluidos la Búsqueda de Google, Android TV y el 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 que los títulos estén 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 solo un 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 ofrecen contenido mutuamente exclusivo en todos sus paquetes.

Ejemplos de niveles comunes

A continuación, se muestran 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 los niveles 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 contenido del nivel Bronce.
Figura 5: Estructura de paquetes de suscripción por niveles.

En el siguiente ejemplo de código, el paquete de nivel 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 de complementos, un proveedor de servicios permite que los usuarios expandan sus derechos y agreguen 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 optar por 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 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 interseca, un proveedor de servicios vende paquetes que incluyen parte del 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 &quot;Nivel común&quot;.
Figura 7: Estructura del paquete con contenido que se cruza.

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

En un modelo de contenido en el que no se cruzan 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 que se cruce.

En el siguiente ejemplo, el proveedor ofrece tres paquetes sin contenido que se interseca en todos los paquetes. 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 a 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 endpoint 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 devolver 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 del proveedor.
  • InactiveSubscription: El usuario no tiene una suscripción activa ni una prueba activa.
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 derecho.

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 la respuesta de un 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. El que uses dependerá de tu modelo de suscripción.

Modelo de suscripción
El acceso a tu 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 una de las siguientes acciones:

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

Ejemplos de respuestas

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

  • Suscripción activa
  • Suscripción activa con 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 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 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 derechos de un usuario cada seis horas. Para suavizar la cantidad máxima de consultas por segundo (QPS), Google distribuye las consultas en tu endpoint de manera uniforme a lo largo del tiempo. Por lo tanto, puedes estimar el QPS promedio esperado para tu endpoint con la siguiente fórmula:

QPS promedio esperada = <cantidad total de usuarios> / 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 endpoint esté listo, comunícate con Google para informarle la URL del endpoint.

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

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