Les utilisateurs préfèrent regarder ou écouter des contenus auxquels ils ont déjà accès, comme ceux de leur abonnement existant. Si Google sait à quel contenu un utilisateur peut accéder sur votre application ou plate-forme, il peut créer un résultat de recherche ou une réponse plus pertinents pour le rediriger vers ce contenu.

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 ont-ils besoin d'un abonnement auprès d'un fournisseur de services externe ?
- Proposez-vous un abonnement par paliers, multipack ou avec des options supplé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 la position 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 au contenu en fonction de son type de paywall. Le tableau suivant détaille les différents types de paywalls :
Type de paywall | Exemple | Catégorie |
---|---|---|
Aucun achat ni aucune connexion ne sont 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 au 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 d'écoute
Pour spécifier le type de paywall de contenu pour les actions d'écoute, utilisez la propriété category
dans l'objet 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"
}
},
...
}
Zone géographique
Vous devez spécifier les zones géographiques où le contenu est disponible. Utilisez l'une ou les deux propriétés suivantes :
- Propriété
eligibleRegion
d'un objet Action access specification. Cette propriété est obligatoire. - Propriété
ineligibleRegion
d'un objet Action access specification.
Un utilisateur peut accéder à du contenu si la position de l'appareil se trouve dans l'une des régions spécifiées dans eligibleRegion
et ne se trouve dans aucune des régions spécifiées dans ineligibleRegion
.
Les propriétés eligibleRegion
et ineligibleRegion
acceptent les valeurs suivantes :
- Liste de
Country
,City
etState
. - Un objet
GeoShape
. Pour connaître les exigences détaillées, 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
. Chacun contient un ID de zone de marché désignée. - Exemple 6 :
ineligibleRegion
avec des codes postaux masqués.
Exemple 1
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" } ] }
Exemple 2
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" ] } }
Exemple 3
eligibleRegion
avec un objet GeoShape
contenant une liste de codes RTA (région de tri d'acheminement) :
"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" ] } }
Exemple 4
eligibleRegion
avec un objet GeoShape
contenant un ID de zone de diffusion :
"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" } ] } }
Exemple 5
eligibleRegion
avec une liste d'objets GeoShape
.
Chacun d'eux contient un ID de zone de marché désignée :
"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" } } ] }
Exemple 6
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 }, "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" ] } }
Identifiant du droit d'accès
L'identifiant de droit 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 Entitlements pour recevoir les identifiants de droits d'accès de l'utilisateur.
- Nous recherchons les identifiants de droits requis pour le contenu dans votre flux MediaActions.
- Nous faisons correspondre le
entitlementId
d'un utilisateur à la propriétéidentifier
de l'objet abonnement mé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 de droit d'accès
Le flux de MediaExampleCompany indique que Movie XYZ
nécessite example.com:basic
entitlementId
, comme indiqué ci-dessous :
{ "@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" }, ... } }, ... }
Cas d'utilisation courants pour l'accès
Voici quelques cas d'utilisation courants pour l'accès :
- Sans frais (aucune 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 n'ont pas besoin d'être abonnés.
- Abonnement à un seul niveau : l'accès au contenu nécessite un abonnement. Tous les abonnés peuvent accéder aux mêmes contenus (films ou épisodes), quel que soit leur forfait.
- Abonnement à plusieurs niveaux : l'accès au contenu nécessite un abonnement. Les abonnés peuvent accéder à différents contenus (films ou épisodes) en fonction de leur niveau d'abonnement. Par exemple, Argent et Or.
- Abonnement à une option : le contenu nécessite un abonnement. Les abonnés peuvent ajouter du contenu premium à leur abonnement standard.
- Achat unique : le contenu peut être acheté, après quoi l'utilisateur peut y accéder indéfiniment.
- TV en direct : un abonnement inclut l'accès aux chaînes locales, nationales et premium.
- Abonnement tiers : l'utilisateur doit se connecter avec son fournisseur de câble pour accéder au contenu.
Sans frais (aucune connexion requise)
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
.
Sans frais (connexion obligatoire)
Connexion requise
Le contenu nécessite que les utilisateurs soient connectés, mais pas qu'ils aient souscrit un 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
.
Abonnement à un seul niveau
Dans un modèle d'abonnement à un seul niveau, un fournisseur de services ne propose qu'un seul niveau d'abonnement. Tous les abonnés peuvent accéder aux mêmes contenus (films ou é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" }, "additionalProperty": { "@type": "PropertyValue", "name": "DisplaySubscriptionIdentifier", "value": "http://www.example.com/example_package" }, "eligibleRegion": { "@type": "Country", "name": "US" } } }
Abonnement à plusieurs niveaux
Dans un modèle d'abonnement à plusieurs niveaux, un fournisseur de services propose plusieurs niveaux d'abonnement, tels que Gold, Silver et Bronze. Les utilisateurs disposant d'un abonnement de niveau supérieur peuvent accéder à tous les contenus de niveau inférieur. Toutefois, les utilisateurs qui disposent 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 Or. 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'abonne au niveau Bronze. Votre point de terminaison des droits d'accès renvoie les
entitlementId
suivants :example.com:bronze
- Votre flux Actions média doit répondre aux exigences suivantes :
- Le film A nécessite
example.com:bronze
. - Film B nécessite
example.com:silver
.
- Le 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 les deux accès au film A.
- Jane a accès au Film B, mais pas John.
{ "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" }, ... } }
Abonnement complémentaire
Dans un modèle d'abonnement aux 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 chaînes qu'ils le souhaitent.

Imaginez le scénario suivant :
- Jeanne dispose des abonnements PRO et 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 Basic. Votre point de terminaison des droits d'accès renvoie les
entitlementId
suivants :example.com:basic
- Votre flux Actions média doit répondre aux exigences suivantes :
- Le film A nécessite
example.com:basic
. - Film B nécessite
example.com:pro
.
- Le 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 les deux accès au film A.
- Jane a accès au Film B, mais pas John.
{ "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" }, } } }
Achat unique
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.
TV en direct
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 restreindre 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 TV dépend d'un paramètre au niveau du compte d'un utilisateur, utilisez des identifiants de droits d'accès pour représenter la restriction.
Cette condition s'applique généralement aux cas d'utilisation suivants :
- Packs : les chaînes nationales sont souvent incluses dans des packs, et les utilisateurs choisissent le pack auquel ils souhaitent s'abonner.
- Module complémentaire : certains chaînes premium exigent que les utilisateurs ajoutent sélectivement des chaînes supplémentaires à leur abonnement.
- Chaîne de sport régionale : 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 du contenu sur la chaîne régionale, même lorsqu'ils voyagent en dehors de leur zone géographique.
Abonnement tiers
Abonnement tiers
Le contenu est disponible pour les abonnés 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" } }, "additionalProperty": { "@type": "PropertyValue", "name": "DisplaySubscriptionIdentifier", "value": "http://www.example.com/faq" }, "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.
Formules de niveau courant
Les contenus de niveau commun sont disponibles pour tous les abonnés, quel que soit leur forfait. Le niveau commun s'applique à tous les contenus dont le category
est subscription
. Pour en savoir plus sur la propriété category
, consultez la section Type de paywall.
Pourquoi un forfait de niveau commun est-il requis ?
Plusieurs produits Google proposent 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 grâce au niveau commun. Google doit également comprendre le contenu disponible pour les abonnés disposant de forfaits spécifiques.
Google recommande les titres disponibles dans le niveau commun, sauf si vous êtes compatible avec l'API Entitlements. L'API permet à Google de comprendre les titres non communs auxquels chaque utilisateur spécifique peut accéder.
Quand dois-je créer un package de niveau commun ?
Un package de niveau commun est requis lorsque votre service propose du contenu accessible à tous les abonnés. Cela inclut les services qui ne proposent qu'un seul forfait, ainsi que ceux qui en proposent plusieurs ou des modules complémentaires.
Les fournisseurs qui ne proposent aucun contenu accessible à tous les abonnés n'ont pas besoin de créer de forfait de niveau commun. Par exemple, les fournisseurs de services qui proposent des contenus mutuellement exclusifs dans tous leurs forfaits.
Exemples de niveaux courants
Voici des exemples de la catégorie courante.
Abonnement à plusieurs niveaux
Dans un modèle d'abonnement à plusieurs niveaux, un fournisseur de services propose plusieurs niveaux d'abonnement, tels que 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 forfait Bronze est le niveau commun, car tous les utilisateurs ont accès à l'ensemble du contenu 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 aux 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 chaînes qu'ils le souhaitent. L'image suivante est un exemple de structure de package.

Si vous disposez d'une chaîne accessible à tous les utilisateurs et qu'elle est sans frais, vous pouvez fusionner le package avec le package de niveau commun.
Dans l'exemple de code suivant, le forfait de base est le niveau commun, car tous les utilisateurs ont accès à l'ensemble du contenu de ce forfait.
"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 avec du contenu qui se chevauche
Dans un modèle de contenu où les packages ont du contenu qui se croise, un fournisseur de services vend des packages qui incluent du contenu provenant d'autres packages. L'image suivante est un exemple de structure de package.

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

Dans l'exemple suivant, le fournisseur propose trois forfaits 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 le jeton OAuth de l'utilisateur. Votre point de terminaison doit identifier l'utilisateur en fonction 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 à l'intérieur de 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, qui inclut le fuseau horaire. Pour en savoir plus, consultez 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 Dates d'expiration. |
Dates d'expiration
Deux propriétés d'une réponse de point de terminaison traitent des dates d'expiration : subscription.expiration_date
et entitlements.expiration_date
. Vous pouvez inclure l'un ou l'autre, ou aucun des deux, mais pas les deux. Le choix de l'une ou l'autre 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 de l'une des manières suivantes :
|
Exemples de réponses
Voici des exemples de réponses pour différents états d'abonnement :
- Abonnement actif
- Abonnement actif avec une date d'expiration
- Sans abonnement
- Abonnements actifs à plusieurs niveaux ou modules complémentaires
Abonnement actif
Abonnement actif
Un utilisateur dispose d'un abonnement actif à example.com. Dans ce cas, tous les abonnés ont accès à l'ensemble de votre catalogue de streaming, quel que soit leur type d'abonnement.
{ "subscription" : { "type": "ActiveSubscription", } }
Abonnement actif avec une date d'expiration
Abonnement actif avec une 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
Sans abonnement
Un utilisateur n'a aucun abonnement à example.com.
{ "subscription" : { "type": "InactiveSubscription" } }
Abonnements actifs à plusieurs niveaux ou modules complémentaires
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 lisser 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 nombre moyen de requêtes par seconde 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 communiquer son URL.
Propriétés de spécification d'accès aux actions
Pour obtenir des informations de référence, consultez la section Propriétés de la spécification d'accès aux actions.