Conditions d'accès

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.

Figure 1. Les conditions d'accès aident vos abonnés à accéder au contenu de votre application ou de votre plate-forme.

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

subscription

L'utilisateur doit disposer d'un abonnement actif. L'accès dépend du niveau d'abonnement. Hulu (modules complémentaires)

subscription

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:

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:

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 objet GeoShape contenant une liste de codes postaux.
  • Exemple 3:eligibleRegion avec un objet GeoShape contenant une liste de codes de région de tri d'acheminement (RTA).
  • Exemple 4:eligibleRegion avec un objet GeoShape contenant un ID de zone de diffusion
  • Exemple 5:eligibleRegion avec une liste d'objets GeoShape 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:

  1. 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.
  2. Nous recherchons les identifiants d'accès requis pour le contenu dans votre flux Media Actions.
  3. Nous faisons correspondre le entitlementId d'un utilisateur à la propriété identifier de l'objet abonnement multimédia dans votre flux. Si au moins un entitlementId correspond, nous déterminons que l'utilisateur peut accéder au contenu.
Figure 2 : L'un des identifiants de droits de l'utilisateur correspond à l'identifiant de droits requis pour le 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 sur nologinrequired.
  • 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 sur free.
  • 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.

Figure 3 : Modèle d'abonnement à plusieurs niveaux et représentation des droits d'accès.

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.

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.

Figure 4 Modèle d'abonnement aux modules complémentaires et représentation des droits d'accès.

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.

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 sur purchase.
  • Incluez expectAcceptanceOf dans actionAccessibilityRequirement 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 sur rental.
  • Incluez expectAcceptanceOf dans actionAccessibilityRequirement 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.

Le niveau Or contient tout le contenu du niveau Argent, qui contient à son tour tout le contenu du niveau Bronze.
Figure 5 : Structure des forfaits d'abonnement par niveau.

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.

Chaque utilisateur commence avec le canal de base et peut choisir d&#39;ajouter n&#39;importe quelle combinaison des canaux PRO, Sportz et Moviemax.
Figure 6 : Structure du package d'abonnement aux modules complémentaires.

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.

Diagramme de Venn où la partie commune entre les packages 1, 2 et 3 est intitulée &quot;Niveau commun&quot;.
Figure 7 : Structure de package avec contenu qui se croise.

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.

Les packages 1, 2 et 3 sont complètement distincts.
Figure 8 : Structure de package sans contenu qui se croise.

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:

  • ActiveSubscription: l'utilisateur dispose d'un abonnement actif au fournisseur.
  • ActiveTrial: l'utilisateur dispose d'un essai actif pour le fournisseur.
  • InactiveSubscription: l'utilisateur n'a pas d'abonnement ni d'essai actifs.
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 entitlementId détenues par l'utilisateur.

entitlements.entitlement

Obligatoire si l'accès à votre catalogue de streaming varie en fonction du type d'abonnement.

Cette propriété contient le entitlementId. Pour en savoir plus, consultez la section Identifiant d'éligibilité.

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:

  • Si toutes les valeurs entitlements.entitlement expirent en même temps, spécifiez subscription.expiration_date.
  • Si certaines valeurs entitlements.entitlement expirent à des moments différents, spécifiez entitlements.expiration_date.

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.