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.
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 |
|
El usuario debe tener una suscripción activa. El acceso depende del nivel de suscripción. | Hulu (complementos) |
|
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:
- La propiedad
eligibleRegion
de un objeto de especificación de acceso a la acción. Esta propiedad es obligatoria. - La propiedad
ineligibleRegion
de un objeto de especificación de acceso a la acción.
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:
- Una lista de
Country
,City
yState
- Un objeto
GeoShape
. Consulta la sección PropiedadesGeoShape
para conocer los requisitos detallados. - Una lista de objetos
GeoShape
.
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 objetoGeoShape
que contiene una lista de códigos postales - Ejemplo 3:
eligibleRegion
con un objetoGeoShape
que contiene una lista de códigos de área de clasificación directa (FSA). - Ejemplo 4:
eligibleRegion
con un objetoGeoShape
que contiene un ID de DMA. - Ejemplo 5:
eligibleRegion
con una lista de objetosGeoShape
. 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:
- Realizamos una llamada a la API a tu extremo de derecho para recibir los identificadores de autorización del usuario.
- Buscamos los identificadores de derechos necesarios del contenido en tu feed de acciones multimedia.
- El
entitlementId
de un usuario coincide con la propiedadidentifier
del objeto de suscripción multimedia en tu feed. Si al menos unaentitlementId
coincide, determinamos que el usuario puede acceder al 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
ennologinrequired
. - 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
enfree
. - 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.
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
.
- La película A requiere
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.
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
.
- La película A requiere
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
enpurchase
. - Incluye
expectAcceptanceOf
enactionAccessibilityRequirement
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
enrental
. - Incluye
expectAcceptanceOf
enactionAccessibilityRequirement
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.
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.
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.
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.
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:
|
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 |
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 |
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:
|
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.