Conditions d'accès

Les utilisateurs préfèrent regarder ou écouter des contenus auxquels ils peuvent déjà accéder, tels que le contenu de leur abonnement. Si Google connaît le contenu auquel un utilisateur peut accéder sur votre application ou plate-forme, il peut créer un meilleur résultat de recherche ou une réponse plus pertinente pour rediriger l'utilisateur vers ce contenu.

Figure 1. Ces 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 à votre plate-forme pour accéder au contenu ?
  • Les utilisateurs ont-ils besoin d'un abonnement ?

    Actions de visionnage uniquement :

    • Les utilisateurs ont-ils besoin d'un abonnement souscrit auprès d'un fournisseur de services externe ?
    • Proposez-vous un abonnement par paliers, multipackages ou modules complémentaires ?
  • Actions de visionnage uniquement:les utilisateurs doivent-ils louer ou acheter le contenu ?

  • Les conditions d'accès évoluent-elles au fil du temps ?

  • L'accès requis dépend-il de la position de l'appareil ?

Types de restrictions d'accès

Il existe deux types de restrictions d'accès:

Type d'écran de paiement

Vous pouvez restreindre l'accès au contenu par son type de paywall. Le tableau suivant détaille les différents types de paywalls:

Type d'écran de paiement Exemple Catégorie
Aucun achat ni connexion n'est requis. Craquement 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 pendant une durée illimitée après l'achat. Vudu purchase
Le contenu est disponible via un abonnement 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 surveillance, 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 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 des propriétés suivantes, ou les deux:

Un utilisateur peut accéder au contenu si l'emplacement de l'appareil se trouve dans une région spécifiée dans eligibleRegion ou dans une région spécifiée dans ineligibleRegion.

Les propriétés eligibleRegion et ineligibleRegion autorisent 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 sur la région éligible

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 la zone de tri avant (FSA).
  • Exemple 4:eligibleRegion avec un objet GeoShape contenant un ID de zone de marché désignée.
  • Exemple 5:eligibleRegion avec une liste d'objets GeoShape. Chaque champ contient un ID de zone de marché désignée.
  • Exemple 6 : ineligibleRegion avec des codes postaux bloqués.

Exemple 1

eligibleRegion avec la liste des 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 par 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 par un objet GeoShape contenant une liste de codes de la zone de tri avant (FSA) :


"actionAccessibilityRequirement": {
  "@type": "ActionAccessSpecification",
  "category": "subscription",
  "requiresSubscription": {
    "@type": "MediaSubscription",
    "@id": "http://www.example.com/local_tv_network/subscription",
    "name": "Example Subscription",
    "commonTier": true
  },
  "eligibleRegion":{
    "@type": "GeoShape",
    "@id": "http://example.com/area2",
    "addressCountry": "CA",
    "postalCode": [
      "1A1",
      "K1A"
    ]
  }
}

Exemple 4

eligibleRegion par un objet GeoShape contenant un ID de zone de marché désignée:


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

Exemple 5

eligibleRegion avec une liste d'objets GeoShape. Chaque champ 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 bloqué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 de droit d'accès

L'identifiant de droit entitlementId fait référence à une chaîne représentant l'accès à un groupe de contenu de votre catalogue de contenus multimédias. Pour déterminer si un utilisateur a accès à votre contenu, procédez comme suit:

  1. Nous envoyons un appel d'API au point de terminaison des droits d'accès pour recevoir les identifiants des droits d'accès de l'utilisateur.
  2. Nous identifions les identifiants de droits d'accès requis pour le contenu à partir de votre flux d'actions média.
  3. Nous associons la valeur entitlementId d'un utilisateur à la propriété identifier de l'objet abonnement multimédia de votre flux. Si au moins une propriété entitlementId correspond, l'utilisateur peut accéder au contenu.
Figure 2. L'un des identifiants de droits d'accès de l'utilisateur correspond à celui requis pour le contenu.

Google 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

Le flux de MediaExampleCompany spécifie que Movie XYZ nécessite l'élément 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
        ...
      },
      ...
    }
  },
  ...
}

Cas d'utilisation courants de l'accès

Voici des cas d'utilisation courants:

  • Offert (aucune connexion requise) : le contenu est disponible sans connexion, abonnement ni achat.
  • Offerte (connexion requise) : le contenu nécessite que les utilisateurs soient connectés, mais ne nécessite pas d'abonnement.
  • Abonnement à un niveau : 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 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 ou Or.
  • Abonnement complémentaire: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.
  • Télévision en direct : l'abonnement donne 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.

Offert (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 sur nologinrequired.
  • N'incluez pas expectAcceptanceOf.

Offert (connexion requise)

Connexion requise

Le contenu nécessite que les utilisateurs soient connectés, mais ne nécessite 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.

Abonnement à un niveau

Dans un modèle d'abonnement à un seul niveau, un fournisseur de services possède un 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 abonnement.


{
  "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"
    }
  }
}

Abonnement à plusieurs niveaux

Dans un modèle d'abonnement par palier, un fournisseur de services comporte plusieurs niveaux d'abonnement, tels que Or, Argent 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 disposant d'un abonnement de niveau inférieur ne peuvent pas accéder au contenu du niveau supérieur.

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

Imaginez le scénario suivant :

  • Jeanne s'abonne au niveau Or. Le 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. Le point de terminaison des droits d'accès renvoie l'élément entitlementId suivant :
    • example.com:bronze
  • Votre flux Media Actions décrit les exigences suivantes :
    • Le film A nécessite example.com:bronze.
    • Le film B nécessite example.com:silver.

Dans ce scénario, Google détermine les niveaux d'accès suivants pour Jeanne et Jean:

  • Jeanne et Jean ont tous les deux accès au film A.
  • Jeanne 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
      ...
    },
    ...
  }
}

Abonnement complémentaire

Dans un modèle d'abonnement aux modules complémentaires, un fournisseur de services permet aux utilisateurs d'élargir leurs droits 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 pour les modules complémentaires et représentation des droits d'accès.

Imaginez le scénario suivant :

  • Jane possède PRO et Sportz en plus de l'abonnement Basic. Le point de terminaison des droits d'accès renvoie les identifiants entitlementId suivants :
    • example.com:basic
    • example.com:pro
    • example.com:sportz
  • John ne dispose que de l'abonnement Basic. Le point de terminaison des droits d'accès renvoie l'élément entitlementId suivant :
    • example.com:basic
  • Votre flux Media Actions décrit les exigences suivantes :
    • Le film A nécessite example.com:basic.
    • Le film B nécessite example.com:pro.

Dans ce scénario, Google détermine les niveaux d'accès suivants pour Jeanne et Jean:

  • Jeanne et Jean ont tous les deux accès au film A.
  • Jeanne 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
        }
    }
  }
}

Achat unique

Acheter

Le contenu est disponible pendant une durée illimitée 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.
  • Ajoutez 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.
  • Ajoutez expectAcceptanceOf dans actionAccessibilityRequirement pour indiquer le prix de la location.

Télévision en direct

Dans un flux d'actions multimédias, vous pouvez limiter l'accès à une chaîne ou à un événement Live TV en fonction des deux conditions suivantes:

  • Position géographique de l'appareil de l'utilisateur

    Pour restreindre l'accès à la chaîne de télévision, spécifiez la zone dans laquelle les utilisateurs ont accès à la chaîne. 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 défini au niveau du compte de l'utilisateur, utilisez des identifiants d'accès pour représenter la restriction.

    Cette condition s'applique généralement aux cas d'utilisation suivants:

    • Lot : les chaînes nationales sont souvent incluses dans des offres groupées, et les utilisateurs choisissent la chaîne à laquelle ils souhaitent s'abonner.
    • Module complémentaire : certaines chaînes premium nécessitent que les utilisateurs ajoutent des chaînes à leur abonnement.
    • Réseau de sport régional (RSN) : les RSN sont généralement associés à l'adresse de domicile d'un utilisateur. Les utilisateurs peuvent regarder des contenus sur la RSN même lorsqu'ils ne font pas partie de leur domicile.

Abonnement tiers

Abonnement tiers

Le contenu est accessible aux 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"
      }
    },
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}
  • Ajoutez authenticator pour indiquer qu'un service différent authentifie les abonnés. Par exemple, HBO GO nécessite un abonnement auprès du fournisseur du câble.

Packages de niveau commun

Le contenu commun est disponible pour tous les abonnés, quel que soit leur abonnement. Le niveau commun s'applique à tous les contenus avec le 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 aux utilisateurs des recommandations de films et de séries, y compris la recherche Google, Android TV et l'Assistant Google. Pour définir les attentes des utilisateurs en termes de coûts, Google doit comprendre quels contenus sont accessibles à tous les abonnés via le niveau commun. Google doit également comprendre quel contenu est disponible pour les abonnés ayant des formules d'abonnement spécifiques.

Google recommande des titres disponibles au niveau commun, sauf si vous optez pour l'API Entitlement. L'API permet à Google de comprendre les titres de niveau non commun auxquels chaque utilisateur spécifique peut accéder.

Quand 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 proposant un seul package et les services proposant plusieurs packages ou modules complémentaires.

Les fournisseurs qui n'ont pas de contenu disponible pour tous les abonnés n'ont pas besoin de créer un package de niveau commun. Les fournisseurs de services qui fournissent du contenu mutuellement exclusif dans tous leurs packages, par exemple,

Exemples courants

Voici des exemples de niveau commun.

Abonnement à plusieurs niveaux

Dans un modèle d'abonnement à plusieurs niveaux, un fournisseur de services comporte plusieurs niveaux d'abonnement, tels que Gold, Silver et Bronze. Les utilisateurs disposant d'un abonnement de niveau supérieur ont accès à tout le contenu 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 illustre la structure du package.

Le niveau Or inclut l&#39;ensemble du contenu du niveau Argent, qui contient lui-même tout le niveau Bronze.
Figure 5. Structure de l'abonnement à plusieurs niveaux.

Dans l'exemple de code suivant, le package bronze est le niveau commun, car tous les utilisateurs ont accès à tout le 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 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 par la version de base et peut choisir d&#39;ajouter n&#39;importe quelle combinaison des chaînes PRO, Sportz et Moviemax.
Figure 6. Structure des packages d'abonnement pour les modules complémentaires.

Si un canal est disponible pour tous les utilisateurs et que celui-ci n'entraîne aucuns frais, 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 à tout le 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
    }
  ],

Package avec du contenu qui se recoupe

Dans un modèle de contenu dans lequel des packages se chevauchent, 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.

Diagramme de Venn où le chevauchement entre les packages 1, 2 et 3 est nommé &quot;Common Tier&quot;.
Figure 7. Structure du package avec des intersections de contenus

Dans l'exemple de code suivant, le fournisseur propose trois packages dans lesquels 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 recoupent

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 totalement distincts.
Figure 8. Structure du package sans contenu croisé.

Dans l'exemple suivant, le fournisseur propose trois packages sans contenu qui les croisent tous. 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

Utilisez les informations de cette section pour héberger un point de terminaison HTTPS qui renvoie les droits 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.

Demande

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

Ce champ se trouve dans la réponse racine.

subscription.type

Obligatoire

Cette propriété peut avoir les valeurs suivantes:

  • ActiveSubscription : l'utilisateur dispose d'un abonnement actif auprès du fournisseur.
  • ActiveTrial: l'utilisateur dispose d'un essai actif pour le fournisseur.
  • InactiveSubscription: l'utilisateur n'a pas d'abonnement actif ni d'essai actif.
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

Cette propriété racine contient les valeurs entitlementId que l'utilisateur détient.

entitlements.entitlement

Obligatoire si l'accès à votre catalogue de flux varie selon le type d'abonnement.

Cette propriété contient entitlementId. Pour en savoir plus, consultez Identifiant des droits d'accès.

entitlements.expiration_date

Optional

Date d'expiration de cet abonnement, au format ISO 8601, incluant le fuseau horaire. Pour en savoir plus, consultez Dates d'expiration.

Dates d'expiration

Dans une réponse de point de terminaison, deux propriétés gèrent les dates d'expiration: subscription.expiration_date et entitlements.expiration_date. Vous pouvez inclure l'un d'entre eux ou aucun, mais pas les deux. L'option que vous utilisez 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, indiquez subscription.expiration_date.

L'accès à votre catalogue de flux varie selon les 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, effectuez l'une des opérations suivantes:

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

Exemples de réponses

Voici 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

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 le type d'abonnement.


{
  "subscription" : {
    "type": "ActiveSubscription",
  }
}

Abonnement actif avec date d'expiration

Abonnement actif avec date d'expiration

Un utilisateur dispose d'un abonnement actif à example.com, et cet abonnement est associé à une date d'expiration. Dans ce cas, tous les abonnés ont accès à l'ensemble de votre catalogue de contenus, quel que soit leur type d'abonnement.


{
  "subscription" : {
    "type": "ActiveSubscription",
    "expiration_date": "2019-11-10T10:00:00Z"
  }
}

Sans abonnement

Aucun abonnement

Un utilisateur n'est pas abonné à example.com.


{
  "subscription" : {
    "type": "InactiveSubscription"
  }
}

Abonnements actifs à plusieurs niveaux ou modules complémentaires

Abonnements actifs à plusieurs niveaux ou modules complémentaires

Un utilisateur a souscrit 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 au maximum. Pour atténuer le nombre maximal de requêtes par seconde (RPS), Google répartit les requêtes vers votre point de terminaison de manière uniforme au fil du temps. Ainsi, vous pouvez estimer le RPS moyen attendu pour votre point de terminaison à l'aide de la formule suivante:

RPS moyenne attendue = <nombre total d'utilisateurs> /21 600 secondes (6 heures x 60 minutes x 60 secondes)

Si vous acceptez 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 en informer l'URL du point de terminaison.

Propriétés des spécifications des accès pour l'action

Pour en savoir plus, consultez la section Propriétés des spécifications d'accès aux actions.