Les utilisateurs préfèrent regarder ou écouter des contenus auxquels ils ont déjà accès, comme les contenus de leur abonnement. Si Google sait à quels contenus un utilisateur peut accéder dans votre application ou plate-forme, il peut créer un meilleur résultat de recherche ou une meilleure réponse pour rediriger l'utilisateur vers ces contenus.

Identifier les conditions d'accès au contenu
Vous devez identifier les conditions d'accès pour chaque package de contenu de votre catalogue. Dans ce cas, posez-vous les questions suivantes:
- Les utilisateurs doivent-ils se connecter à votre application ou plate-forme pour accéder au contenu ?
Les utilisateurs ont-ils besoin d'un abonnement ?
Actions liées au visionnage uniquement :
- Les utilisateurs doivent-ils souscrire un abonnement auprès d'un fournisseur de services externe ?
- Proposez-vous un abonnement par palier, multi-package ou avec des modules complémentaires ?
Actions de visionnage uniquement:les utilisateurs doivent-ils louer ou acheter le contenu ?
Les conditions d'accès changent-elles au fil du temps ?
L'exigence d'accès dépend-elle de l'emplacement de l'appareil ?
Types de restrictions d'accès
Il existe deux types de restrictions d'accès:
Type de paywall
Vous pouvez limiter l'accès aux contenus en fonction de leur type de paywall. Le tableau suivant présente les différents types de paywall:
Type de paywall | Exemple | Catégorie |
---|---|---|
Aucun achat ni connexion n'est requis. | Crackle | nologinrequired |
L'utilisateur doit être connecté, mais n'a pas besoin d'un abonnement payant. | Vudu (AVOD) | free |
L'utilisateur doit disposer d'un abonnement actif. L'accès est indépendant du niveau d'abonnement. | Netflix |
|
L'utilisateur doit disposer d'un abonnement actif. L'accès dépend du niveau d'abonnement. | Hulu (modules complémentaires) |
|
Le contenu est disponible pendant une durée limitée après l'achat. | Vudu | rental |
Le contenu est disponible indéfiniment après l'achat. | Vudu | purchase |
Le contenu est disponible avec un abonnement à la télévision par câble. | HBO Go | externalSubscription |
Type de paywall pour les actions de visionnage
Pour spécifier le type de paywall de contenu pour les actions de visionnage, utilisez la propriété category
dans la spécification d'accès aux actions:
"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"
}
},
...
}
Type de paywall pour les actions liées à l'écoute
Pour spécifier le type de paywall de contenu pour les actions d'écoute, utilisez la propriété category
dans l'objet d'offre:
"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"
}
},
...
}
Zone géographique
Vous devez spécifier les zones géographiques dans lesquelles le contenu est disponible. Utilisez l'une ou les deux propriétés suivantes:
- Propriété
eligibleRegion
d'un objet spécification d'accès à l'action. Cette propriété est obligatoire. - Propriété
ineligibleRegion
d'un objet spécification d'accès à l'action.
Un utilisateur peut accéder au contenu si l'emplacement de l'appareil se trouve dans une région spécifiée dans eligibleRegion
et non dans une région spécifiée dans ineligibleRegion
.
Les propriétés eligibleRegion
et ineligibleRegion
acceptent les valeurs suivantes:
- Liste des éléments
Country
,City
etState
. - Un objet
GeoShape
. Pour en savoir plus, consultez la section PropriétésGeoShape
. - Liste d'objets
GeoShape
.
Si le contenu est disponible dans le monde entier, utilisez la valeur spéciale suivante pour eligibleRegion
:
"eligibleRegion": "EARTH",
Cas d'utilisation de eligibleRegion
Voici des exemples de cas d'utilisation de la propriété eligibleRegion
:
- Exemple 1:
eligibleRegion
avec une liste de pays. - Exemple 2:
eligibleRegion
avec un objetGeoShape
contenant une liste de codes postaux. - Exemple 3:
eligibleRegion
avec un objetGeoShape
contenant une liste de codes de région de tri d'acheminement (RTA). - Exemple 4:
eligibleRegion
avec un objetGeoShape
contenant un ID de zone de diffusion - Exemple 5:
eligibleRegion
avec une liste d'objetsGeoShape
Chacune d'elles contient un ID de marché multimédia. - Exemple 6:
ineligibleRegion
avec les codes postaux masqués.
eligibleRegion
avec une liste de pays:
"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" } ] }
eligibleRegion
avec un objet GeoShape
contenant une liste de codes postaux:
"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" ] } }
eligibleRegion
avec un objet GeoShape
contenant une liste de codes de région de tri d'acheminement (RTA) :
"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" ] } }
eligibleRegion
avec un objet GeoShape
contenant 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" } ] } }
eligibleRegion
avec une liste d'objets GeoShape
.
Chacun d'eux contient un ID de marché:
"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" } } ] }
ineligibleRegion
avec des codes postaux masqués:
"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" ] } }
Identifiant du droit d'accès
L'identifiant d'accès, entitlementId
, fait référence à une chaîne qui représente l'accès à un groupe de contenus dans votre catalogue multimédia. Pour déterminer si un utilisateur a accès à votre contenu, Google procède comme suit:
- Nous effectuons un appel d'API à votre point de terminaison des droits d'accès pour recevoir les identifiants des droits d'accès de l'utilisateur.
- Nous recherchons les identifiants d'accès requis pour le contenu dans votre flux Media Actions.
- Nous faisons correspondre le
entitlementId
d'un utilisateur à la propriétéidentifier
de l'objet abonnement multimédia dans votre flux. Si au moins unentitlementId
correspond, nous déterminons que l'utilisateur peut accéder au contenu.

Google vous recommande d'utiliser la syntaxe suivante pour entitlementId
:
<domain name> + colon (:) + <access level to content>
Exemples de syntaxe:
example.com:basic
example.com:premium
example.com:sports
Exemple d'identifiant d'accès
Le flux de MediaExampleCompany spécifie que Movie XYZ
nécessite example.com:basic
entitlementId
, comme illustré:
{ "@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 ... }, ... } }, ... }
Cas d'utilisation courants de l'accès
Voici des cas d'utilisation courants de l'accès:
- Sans frais (pas de connexion requise) : le contenu est disponible sans connexion, abonnement ni achat.
- Sans frais (connexion requise) : les utilisateurs doivent être connectés pour accéder au contenu, mais ils n'ont pas besoin d'abonnement.
- Abonnement à niveau unique:le contenu nécessite un abonnement. Tous les abonnés peuvent accéder au même contenu, qu'il s'agisse de films ou d'épisodes, quel que soit leur package d'abonnement.
- Abonnement à plusieurs niveaux:le contenu nécessite un abonnement. Les abonnés peuvent accéder à différents contenus, qu'il s'agisse de films ou d'épisodes, en fonction de leur niveau d'abonnement. Par exemple, Argent par rapport à Or.
- Abonnement à un module complémentaire:le contenu nécessite un abonnement. Les abonnés peuvent ajouter des contenus premium en plus de leur abonnement standard.
- Achat unique:le contenu peut être acheté, après quoi l'utilisateur peut y accéder indéfiniment.
- Télévision en direct:un abonnement inclut l'accès à des chaînes locales, nationales et premium.
- Abonnement tiers:le contenu nécessite que l'utilisateur se connecte avec son fournisseur de câble.
Aucune connexion requise
Le contenu est disponible sans connexion ni abonnement.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "nologinrequired", "availabilityStarts": "2015-01-01T00:00Z", "availabilityEnds": "2015-12-31T00:00Z", "eligibleRegion": { "@type": "Country", "name": "US" } } }
- Définissez
category
surnologinrequired
. - N'incluez pas
expectAcceptanceOf
.
Connexion requise
Le contenu nécessite que les utilisateurs soient connectés, mais pas d'abonnement.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "free", "availabilityStarts": "2015-01-01T00:00Z", "availabilityEnds": "2015-12-31T00:00Z", "eligibleRegion": { "@type": "Country", "name": "US" } } }
- Définissez
category
surfree
. - N'incluez pas
expectAcceptanceOf
.
Dans un modèle d'abonnement à niveau unique, un fournisseur de services propose un seul niveau d'abonnement. Tous les abonnés peuvent accéder au même contenu, qu'il s'agisse de films ou d'épisodes, quel que soit leur forfait.
{ "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" } } }
Dans un modèle d'abonnement à plusieurs niveaux, un fournisseur de services propose plusieurs niveaux d'abonnement, tels que Gold (Or), Silver (Argent) et Bronze (Bronze). Les utilisateurs disposant d'un abonnement de niveau supérieur peuvent accéder à tous les contenus du niveau inférieur. Toutefois, les utilisateurs disposant d'un abonnement de niveau inférieur ne peuvent pas accéder au contenu de niveau supérieur.

Imaginez le scénario suivant :
- Jane s'abonne au niveau Gold. Votre point de terminaison des droits d'accès renvoie les identifiants
entitlementId
suivants :example.com:bronze
example.com:silver
example.com:gold
- John s'a abonné au niveau Bronze. Votre point de terminaison des droits d'accès renvoie le
entitlementId
suivant :example.com:bronze
- Votre flux Media Actions décrit les exigences suivantes :
- Film A nécessite
example.com:bronze
. - Film B nécessite
example.com:silver
.
- Film A nécessite
Dans ce scénario, Google détermine les niveaux d'accès suivants pour Jane et John:
- Jane et John ont tous deux accès au film A.
- Jane a accès au film B, mais John n'y a pas accès.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "subscription", "requiresSubscription": { "@type": "MediaSubscription", "@id": "http://www.example.com/basic_subscription", "name": "Bronze", "commonTier": true ... }, ... } }
Dans un modèle d'abonnement avec modules complémentaires, un fournisseur de services permet aux utilisateurs d'étendre leurs droits d'accès et d'ajouter des chaînes à un abonnement de base. Les utilisateurs peuvent ajouter autant de canaux qu'ils le souhaitent.

Imaginez le scénario suivant :
- Jane dispose de PRO et de Sportz en plus de l'abonnement Basic. Votre point de terminaison des droits d'accès renvoie les identifiants
entitlementId
suivants :example.com:basic
example.com:pro
example.com:sportz
- Jean ne dispose que de l'abonnement Standard. Votre point de terminaison des droits d'accès renvoie le
entitlementId
suivant :example.com:basic
- Votre flux Media Actions décrit les exigences suivantes :
- Film A nécessite
example.com:basic
. - Film B nécessite
example.com:pro
.
- Film A nécessite
Dans ce scénario, Google détermine les niveaux d'accès suivants pour Jane et John:
- Jane et John ont tous deux accès au film A.
- Jane a accès au film B, mais John n'y a pas accès.
{ "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 } } } }
Achat
Le contenu est disponible indéfiniment après l'achat.
{ "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/" } } } }
- Définissez
category
surpurchase
. - Incluez
expectAcceptanceOf
dansactionAccessibilityRequirement
pour indiquer le prix de l'achat.
Location
Le contenu est disponible pendant une durée limitée après l'achat.
{ "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/" } } } }
- Définissez
category
surrental
. - Incluez
expectAcceptanceOf
dansactionAccessibilityRequirement
pour indiquer le prix de la location.
Dans un flux d'actions multimédias, vous pouvez restreindre l'accès à une chaîne ou à un événement de télévision en direct en fonction des deux conditions utilisateur suivantes:
-
Position de l'appareil de l'utilisateur
Pour limiter l'accès à la chaîne TV, spécifiez la zone dans laquelle les utilisateurs y ont accès. Cette condition s'applique généralement aux chaînes de télévision locales.
-
État du compte de l'utilisateur
Si l'accès à une chaîne de télévision dépend du paramètre au niveau du compte d'un utilisateur, utilisez des identifiants d'accès pour représenter la restriction.
Cette condition s'applique généralement aux cas d'utilisation suivants:
- Forfait:les chaînes nationales sont souvent incluses dans des forfaits, et les utilisateurs choisissent le forfait auquel ils souhaitent s'abonner.
- Module complémentaire:certaines chaînes premium exigent que les utilisateurs ajoutent sélectivement des chaînes supplémentaires à leur abonnement.
- Chaîne de sport régionale (RSN) : les chaînes de sport régionales sont généralement associées à la zone de résidence d'un utilisateur. Les utilisateurs peuvent regarder des contenus sur le RSN même lorsqu'ils se trouvent en dehors de leur zone géographique de résidence.
Abonnement tiers
Le contenu est disponible pour les abonnés à partir d'un autre service.
{ "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" } } }
- Ajoutez
authenticator
pour indiquer qu'un autre service authentifie les abonnés. Par exemple, HBO GO nécessite un abonnement auprès du fournisseur de câble.
Packages de niveau courants
Les contenus de niveau standard sont disponibles pour tous les abonnés, quel que soit leur forfait. Le niveau commun s'applique à tous les contenus avec l'category
de subscription
. Pour en savoir plus sur la propriété category
, consultez la section Type de paywall.
Pourquoi un package de niveau commun est-il requis ?
Plusieurs produits Google fournissent des recommandations de séries et de films aux utilisateurs, y compris la recherche Google, Android TV et l'Assistant Google. Pour définir les attentes des utilisateurs concernant les coûts, Google doit comprendre quels contenus sont disponibles pour tous les abonnés via l'utilisation du niveau commun. Google doit également comprendre les contenus disponibles pour les abonnés disposant de packages d'abonnement spécifiques.
Google recommande les titres disponibles dans le niveau commun, sauf si vous acceptez l'API Entitlements. L'API permet à Google de comprendre les titres non standards auxquels chaque utilisateur spécifique peut accéder.
Quand créer un package de niveau commun ?
Un package de niveau commun est obligatoire lorsque votre service propose du contenu accessible à tous les abonnés. Cela inclut les services qui n'offrent qu'un seul package et les services qui proposent plusieurs packages ou modules complémentaires.
Les fournisseurs qui ne proposent aucun contenu à tous les abonnés n'ont pas besoin de créer de package de niveau commun. Par exemple, les fournisseurs de services qui proposent du contenu mutuellement exclusif dans l'ensemble de leurs packages.
Exemples de niveaux courants
Voici des exemples de niveau commun.
Abonnement à plusieurs niveaux
Dans un modèle d'abonnement à plusieurs niveaux, un fournisseur de services propose plusieurs niveaux d'abonnement, tels que les niveaux Gold, Silver et Bronze. Les utilisateurs disposant d'un abonnement de niveau supérieur ont accès à tous les contenus des niveaux inférieurs. Les utilisateurs disposant d'un abonnement de niveau inférieur n'ont pas accès au contenu du niveau supérieur. L'image suivante est un exemple de structure de package.

Dans l'exemple de code suivant, le package de bronze est le niveau le plus courant, car tous les utilisateurs ont accès à tous les contenus de ce niveau.
"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 } ],
Modules complémentaires
Dans un modèle d'abonnement avec modules complémentaires, un fournisseur de services permet aux utilisateurs d'étendre leurs droits d'accès et d'ajouter des chaînes à un abonnement de base. Les utilisateurs peuvent ajouter autant de canaux qu'ils le souhaitent. L'image suivante est un exemple de structure de package.

Si un canal est disponible pour tous les utilisateurs et qu'il n'est pas payant, vous pouvez fusionner le package avec le package de niveau commun.
Dans l'exemple de code suivant, le package de base est le niveau commun, car tous les utilisateurs ont accès à l'ensemble du contenu de ce package.
"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 } ],
Packages dont le contenu se chevauche
Dans un modèle de contenu où les packages contiennent du contenu qui se chevauche, un fournisseur de services vend des packages qui incluent du contenu d'autres packages. L'image suivante est un exemple de structure de package.

Dans l'exemple de code suivant, le fournisseur propose trois packages dont certains contenus se chevauchent. Dans ce cas, un quatrième package représentant le niveau commun est requis. Il doit inclure tout le contenu disponible dans les trois packages.
"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 } ],
Packages sans contenu qui se chevauche
Dans un modèle de contenu où tous les packages de contenu ne se chevauchent pas, un fournisseur de services vend des packages qui n'incluent aucun contenu d'autres packages. L'image suivante est un exemple de structure de package.

Dans l'exemple suivant, le fournisseur propose trois packages sans contenu commun. Aucun package de niveau commun n'est requis.
"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 } ],
Point de terminaison des droits d'accès
Utilisez les informations de cette section pour héberger un point de terminaison HTTPS qui renvoie les droits d'accès associés à un utilisateur.
Conditions préalables
Avant de commencer, vérifiez que votre service est compatible avec le flux OAuth 2.0 avec Google.
Requête
Pour recevoir les droits d'accès d'un utilisateur, Google envoie une requête contenant son jeton OAuth. Votre point de terminaison doit identifier l'utilisateur à l'aide de ce jeton OAuth. Consultez l'exemple ci-dessous :
GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer <OAuthToken>
Réponse
Votre point de terminaison doit renvoyer une réponse avec les propriétés suivantes:
Propriété | |
---|---|
subscription |
Obligatoire Il s'agit d'un champ dans la réponse racine. |
subscription.type |
Obligatoire Cette propriété peut avoir les valeurs suivantes:
|
subscription.expiration_date |
Optional Date d'expiration de ce droit d'accès, au format ISO 8601, y compris le fuseau horaire. Pour en savoir plus, consultez la section Dates d'expiration. |
entitlements |
Optional Il s'agit d'une propriété racine qui contient les valeurs |
entitlements.entitlement |
Obligatoire si l'accès à votre catalogue de streaming varie en fonction du type d'abonnement. Cette propriété contient le |
entitlements.expiration_date |
Optional Date d'expiration de cet abonnement, au format ISO 8601, y compris le fuseau horaire. Pour en savoir plus, consultez la section Dates d'expiration. |
Dates d'expiration
Dans une réponse de point de terminaison, deux propriétés traitent des dates d'expiration: subscription.expiration_date
et entitlements.expiration_date
. Vous pouvez inclure l'un d'eux ou aucun, mais pas les deux. La méthode à utiliser dépend de votre modèle d'abonnement.
Modèle d'abonnement | |
---|---|
L'accès à votre catalogue de streaming est le même pour tous les abonnés. | Comme vous n'avez pas besoin de spécifier la propriété entitlements , spécifiez subscription.expiration_date . |
L'accès à votre catalogue de streaming varie en fonction des détails de l'abonnement d'un utilisateur. |
Si votre modèle d'abonnement comporte plusieurs niveaux ou modules complémentaires qui expirent au fil du temps, procédez comme suit:
|
Exemples de réponses
Vous trouverez ci-dessous des exemples de réponses pour différents états d'abonnement:
- Abonnement actif
- Abonnement actif avec date d'expiration
- Sans abonnement
- Abonnements actifs à plusieurs niveaux ou modules complémentaires
Abonnement actif
Un utilisateur dispose d'un abonnement actif à example.com. Dans ce cas, tous les abonnés ont accès à l'intégralité de votre catalogue de streaming, quel que soit leur type d'abonnement.
{ "subscription" : { "type": "ActiveSubscription", } }
Abonnement actif avec date d'expiration
Un utilisateur dispose d'un abonnement actif à example.com, et cet abonnement a une date d'expiration. Dans ce cas, tous les abonnés ont accès à l'intégralité de votre catalogue de streaming, quel que soit leur type d'abonnement.
{ "subscription" : { "type": "ActiveSubscription", "expiration_date": "2019-11-10T10:00:00Z" } }
Sans abonnement
Un utilisateur n'est pas abonné à example.com.
{ "subscription" : { "type": "InactiveSubscription" } }
Abonnements actifs à plusieurs niveaux ou modules complémentaires
Un utilisateur dispose d'un abonnement à example.com:premium
jusqu'à une certaine date.
{ "subscription" : { "type": "ActiveSubscription", } "entitlements": [ { "entitlement": "example.com:premium", "expiration": "2019-11-10T10:00:00Z" } ] }
Limite de débit
Google actualise les informations sur les droits d'accès d'un utilisateur toutes les six heures maximum. Pour répartir de manière uniforme le nombre maximal de requêtes par seconde (RPS), Google distribue les requêtes à votre point de terminaison de manière uniforme au fil du temps. Vous pouvez donc estimer le débit de requêtes par seconde moyen attendu pour votre point de terminaison à l'aide de la formule suivante:
RPS moyen attendu = <nombre total d'utilisateurs> / 21 600 secondes (6 heures x 60 minutes x 60 secondes)
Si vous gérez un grand nombre d'utilisateurs, Google peut ajuster l'intervalle de six heures. Si nécessaire, contactez Google pour discuter de la configuration.
Contacter Google
Lorsque votre point de terminaison est prêt, contactez Google pour lui indiquer son URL.
Propriétés de la spécification d'accès aux actions
Pour en savoir plus, consultez la section Propriétés de spécification d'accès aux actions.