Conditions d'accès

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.

Figure 1. Les conditions d'accès aident vos abonnés à accéder au contenu de votre application ou 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 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

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

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 :

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

  1. Nous effectuons un appel d'API à votre point de terminaison Entitlements pour recevoir les identifiants de droits d'accès de l'utilisateur.
  2. Nous recherchons les identifiants de droits requis pour le contenu dans votre flux MediaActions.
  3. Nous faisons correspondre le entitlementId d'un utilisateur à la propriété identifier de l'objet abonnement mé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 d'accès de l'utilisateur correspond à l'identifiant de droits d'accès 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 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 sur nologinrequired.
  • 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 sur free.
  • 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.

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

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.

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.

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

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.

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

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.

Le niveau Or contient tout le contenu du niveau Argent, qui contient lui-même tout le contenu du niveau Bronze.
Figure 5 : Structure des forfaits d'abonnement par niveaux.

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.

Chaque utilisateur commence avec la chaîne Basic et peut choisir d&#39;ajouter n&#39;importe quelle combinaison des chaînes PRO, Sportz et Moviemax.
Figure 6 : Structure des forfaits d'abonnement aux modules complémentaires.

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.

Diagramme de Venn où le chevauchement entre les packages 1, 2 et 3 est intitulé &quot;Niveau commun&quot;.
Figure 7 : Structure de package avec du contenu qui se chevauche.

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.

Les packages 1, 2 et 3 sont complètement distincts.
Figure 8 : Structure du package sans contenu croisé.

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 :

  • ActiveSubscription : l'utilisateur dispose d'un abonnement actif au fournisseur.
  • ActiveTrial : l'utilisateur dispose d'un essai actif pour le fournisseur.
  • InactiveSubscription : l'utilisateur ne dispose pas d'abonnement ni d'essai actifs.
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 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 Identifiant de droit d'accès.

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 :

  • 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

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.