Conditions d'accès

Les utilisateurs préfèrent regarder ou écouter du contenu auquel ils ont déjà accès, comme leurs abonnements existants. Si Google sait quel contenu un utilisateur peut à votre application ou à votre plate-forme, Google peut alors créer un meilleur résultat de recherche ou une réponse pour diriger l'utilisateur vers ce contenu.

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

Identifier les conditions d'accès au contenu

Vous devez définir l'accès requis pour chaque package de contenu dans votre catalogue. Lorsque vous le faites, 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 auprès d'un fournisseur de services externe ?
    • Proposez-vous un abonnement avec plusieurs niveaux, plusieurs forfaits ou 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 ?

  • Les conditions d'accès dépendent-elles 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 au contenu en fonction du type de paywall. Le tableau suivant présente les différents types de paywalls:

Type de paywall Exemple Catégorie
Aucun achat ou connexion n'est requis. Crackle nologinrequired
L'utilisateur doit être connecté, mais il 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 le niveau d'abonnement. Netflix

subscription

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

subscription

Le contenu est disponible pendant une durée limitée après le à l'achat. Vudu rental
Le contenu est disponible pour une durée indéterminée après la à l'achat. Vudu purchase
Le contenu est disponible sur 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 méthode category du composant Spécification de l'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 les category du composant objet de l'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 un ou les deux propriétés suivantes:

Un utilisateur peut accéder au contenu si la position de son appareil se trouve dans une région spécifiée dans eligibleRegion et qui ne se trouve dans aucune région spécifiée dans ineligibleRegion

Les propriétés eligibleRegion et ineligibleRegion permettent ce qui suit : :

Si le contenu est disponible dans le monde entier, utilisez la valeur spéciale suivante pour eligibleRegion:

"eligibleRegion": "EARTH",

cas d'utilisation éligiblesRegion

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 qui contient une liste de codes postaux.
  • Exemple 3:eligibleRegion avec un objet GeoShape qui contient une liste de codes RTA (région de tri d'acheminement).
  • Exemple 4:eligibleRegion avec un objet GeoShape qui contient un identifiant de zone de marché désignée.
  • Exemple 5:eligibleRegion avec une liste d'objets GeoShape. Chacune contient un identifiant de zone de marché désignée.
  • Exemple 6:ineligibleRegion avec des codes postaux bloqués.

Exemple 1

eligibleRegion par 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 par un objet GeoShape qui contient 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 qui contient 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
  },
  "eligibleRegion":{
    "@type": "GeoShape",
    "@id": "http://example.com/area2",
    "addressCountry": "CA",
    "postalCode": [
      "1A1",
      "K1A"
    ]
  }
}

Exemple 4

eligibleRegion par un objet GeoShape qui contient un identifiant 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 par une liste d'objets GeoShape. Chacune d'elles contient un identifiant 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 du droit d'accès

L'identifiant des droits d'accès, entitlementId, fait référence à une chaîne qui représente l'accès à un groupe de contenus de votre catalogue multimédia. Pour déterminer si un utilisateur a accès à votre contenu, Google prend les mesures suivantes:

  1. Un appel d'API est effectué Point de terminaison des droits d'accès pour recevoir les les identifiants des droits d'accès.
  2. Nous recherchons les identifiants des droits d'accès requis pour le contenu dans votre support Flux d'actions.
  3. Nous associons le entitlementId d'un utilisateur aux identifier de la classe media subscription dans votre flux. Si au moins si entitlementId correspond, nous déterminons que l'utilisateur peut accéder de votre contenu.
Figure 2. L'un des identifiants des droits d'accès de l'utilisateur correspond l'identifiant des 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
        ...
      },
      ...
    }
  },
  ...
}

Cas d'utilisation courants de l'accès

Voici des cas d'utilisation courants des accès:

  • Sans frais (pas de connexion requise) : l' le contenu est disponible sans connexion, abonnement ou achat.
  • Sans frais (connexion requise) : le contenu nécessite que les utilisateurs soient connectés, mais ne nécessite pas d'abonnement.
  • Abonnement à niveau unique: Le contenu nécessite un abonnement. Tous les abonnés peuvent accéder au même contenus (films ou épisodes), quel que soit le type d'abonnement d'un package.
  • Abonnement à plusieurs niveaux : nécessite un abonnement. Les abonnés peuvent accéder à différents contenus, qu'il s'agisse de films ou d'épisodes, en fonction du niveau d'abonnement. Par exemple, Silver ou Gold.
  • Add-on subscription (Abonnement au module complémentaire) : le contenu nécessite un abonnement. Les abonnés peuvent ajouter du contenu premium à leur un abonnement standard.
  • Achat unique:le contenu peut après l'achat, après quoi l'utilisateur peut y accéder indéfiniment.
  • Télévision en direct:l'abonnement inclut l'accès à locales, nationales et premium.
  • Abonnement tiers: Pour accéder au contenu, l'utilisateur doit se connecter à son fournisseur d'accès au câble.

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

Connexion requise

Le contenu nécessite que les utilisateurs soient connectés, mais il ne nécessite pas 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 à niveau unique

Dans un modèle d'abonnement à niveau unique, un fournisseur de services niveau d'abonnement. Tous les abonnés peuvent accéder au même contenu, des films ou des épisodes, quel que soit leur forfait d'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 à plusieurs niveaux, un fournisseur de services possède plusieurs différents niveaux d'abonnement, tels que Gold, Silver et Bronze : Les utilisateurs disposant de l'abonnement de niveau supérieur peuvent accéder au contenu de niveau inférieur. Toutefois, les utilisateurs bénéficiant du niveau d'accès le plus bas ne peut pas accéder au contenu de niveau supérieur.

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

Imaginez le scénario suivant :

  • Jane s'abonne au niveau Or. Vos droits d'accès Le point de terminaison renvoie les identifiants entitlementId suivants:
    • example.com:bronze
    • example.com:silver
    • example.com:gold
  • John s'abonne au niveau Bronze. Vos droits d'accès renvoie le 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 Jane. et John:

  • Jeanne et Jean ont tous les deux accès au film A.
  • Jeanne a accès au film B, contrairement à Jean.
{
  "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 à des modules complémentaires, un fournisseur de services permet aux utilisateurs développer leurs droits d'accès et ajouter des chaînes à un abonnement de base. Utilisateurs peuvent ajouter autant de chaînes qu'ils le souhaitent.

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

Imaginez le scénario suivant :

  • En plus des licences PRO et Sportz, Basic. Le point de terminaison des droits d'accès renvoie le Identifiants entitlementId suivants:
    • example.com:basic
    • example.com:pro
    • example.com:sportz
  • John dispose uniquement de l'abonnement Basic. Vos droits d'accès renvoie le 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 Jane. et John:

  • Jeanne et Jean ont tous les deux accès au film A.
  • Jeanne a accès au film B, contrairement à Jean.
{
  "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

Achat

Le contenu est disponible pour une durée indéterminée après la à 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.
  • Inclure expectAcceptanceOf dans actionAccessibilityRequirement pour indiquer le prix à l'achat.

Location

Le contenu est disponible pendant une durée limitée après le à 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.
  • Inclure expectAcceptanceOf dans actionAccessibilityRequirement pour indiquer le prix en location.

TV en direct

Dans un flux Media Actions, vous pouvez restreindre l'accès à la télévision en direct channel ou événement en fonction de la les deux conditions utilisateur suivantes:

  • Position de l'appareil de l'utilisateur

    Pour restreindre l'accès à la chaîne TV, spécifiez la zone géographique des utilisateurs y avoir accès. Cette condition s'applique généralement aux diffusions locales chaînes de télévision.

  • État du compte de l'utilisateur

    Si l'accès à une chaîne de télévision dépend des paramètres au niveau du compte de l'utilisateur, utiliser identifiants des droits d'accès représentent la restriction.

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

    • Offre groupée:les chaînes nationales sont souvent incluses dans d'offres groupées, et les utilisateurs choisissent l'abonnement auquel ils souhaitent s'abonner.
    • Module complémentaire:certaines chaînes premium nécessitent que les utilisateurs ajouter des chaînes à son abonnement de façon sélective.
    • Regional Sports Network (RSN) : les RSN sont généralement associée à la "maison" d'un utilisateur l'emplacement. Les utilisateurs peuvent regarder du contenu sur le réseau RSN même lorsqu'ils sortent de chez eux l'emplacement.

Abonnement tiers

Abonnement tiers

Les abonnés peuvent accéder au contenu via 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"
    }
  }
}
  • Ajout de authenticator pour indiquer qu'un autre service authentifie les abonnés. Par exemple, HBO GO nécessite un auprès du fournisseur d'accès au câble.

Packages de niveau commun

Le contenu du niveau commun est accessible à tous les abonnés, quel que soit leur d'abonnement payant. Le niveau commun s'applique à tous les contenus avec category sur subscription. Pour en savoir plus sur la propriété category, consultez Section Type de paywall.

Pourquoi un package de niveau commun est-il nécessaire ?

Plusieurs produits Google proposent des recommandations de films aux utilisateurs ; ce inclut la recherche Google, Android TV et l'Assistant Google. Pour définir les paramètres à leurs attentes en termes de coût, Google doit comprendre quel contenu est accessible à tous des abonnés en utilisant le niveau commun. Google doit également comprendre le contenu est disponible pour les abonnés ayant souscrit des formules d'abonnement spécifiques.

Google recommande les titres disponibles au niveau commun, sauf si vous acceptez les API entitlement. L'API permet à Google d'identifier les titres non communs à chaque niveau auquel l'utilisateur peut accéder.

Quand créer un package de niveau commun ?

Un package de niveau commun est requis lorsque votre service propose du contenu disponible pour tous les abonnés. Cela inclut les services qui n'offrent qu'un seul forfait et services qui proposent plusieurs forfaits ou modules complémentaires.

Les fournisseurs qui n'ont pas de contenu accessible à tous les abonnés n'ont pas besoin de créer un package de niveau commun. C'est par exemple le cas des fournisseurs de services qui s'excluent mutuellement du contenu dans tous 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 (Gold, Silver et Bronze, par exemple). Les utilisateurs disposant du ont accès à tout le contenu des niveaux inférieurs. Utilisateurs avec un abonnement de niveau inférieur n'ont pas accès au contenu de la partie supérieure à un niveau supérieur. L'image suivante illustre la structure du package.

Le niveau Or comprend tout le contenu du niveau Argent,
            contient tout le niveau Bronze.
Figure 5 : Structure de forfaits d'abonnement à plusieurs niveaux

Dans l'exemple de code suivant, le package 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 à des modules complémentaires, un fournisseur de services permet aux utilisateurs leurs droits d'accès et ajouter des chaînes à un abonnement de base. Les utilisateurs peuvent ajouter en tant que autant de canaux qu'ils le souhaitent. L'image suivante montre un exemple du package structure.

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

Si vous disposez d'une chaîne accessible à tous les utilisateurs et que la fonctionnalité 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
    }
  ],

Packages dont le contenu se recoupe

Dans un modèle de contenu dans lequel le contenu des packages se croise, un service le fournisseur vend des packages qui incluent du contenu provenant d'autres packages. La L'image suivante est un exemple de structure de package.

Un diagramme de Venn dans lequel le chevauchement entre les packs 1, 2 et 3 est
            intitulée &quot;Common Tier&quot;.
Figure 7 : Structure du package avec des contenus qui se croisent.

Dans l'exemple de code suivant, le fournisseur propose trois packages où certains le contenu recoupe tous les packages. Dans ce cas, un quatrième package qui représente le niveau commun. Il doit inclure l'ensemble du 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 contenus qui ne se chevauchent pas

Dans un modèle de contenu où tous les packages de contenu ne se croisent pas, un service le fournisseur vend des packages qui n'incluent aucun contenu d'autres packages. La L'image suivante est un exemple de structure de package.

Les packs 1, 2 et 3 sont complètement séparés.
Figure 8 : Structure du package sans intersection contenus.

Dans l'exemple suivant, le fournisseur propose trois packages sans contenu l’intersection entre tous les packages. 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 le des droits d'accès associés à un utilisateur.

Conditions préalables

Avant de commencer, vérifiez que votre service est compatible avec flux OAuth 2.0 avec Google.

Requête

Pour recevoir les droits d'accès d'un utilisateur, Google envoie une requête contenant les le jeton OAuth de l'utilisateur. Votre point de terminaison doit identifier l'utilisateur à l'aide de ce à partir d'un jeton d'accès. 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 un fournisseur de services agréé.
  • InactiveSubscription: l'utilisateur n'a pas de ou un essai en cours.
subscription.expiration_date

Optional

Date d'expiration de ce droit d'accès, dans 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 le des obligations de conservation appliquées aux utilisateurs.

entitlements.entitlement

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

Cette propriété contient la entitlementId. Pour plus pour en savoir plus, consultez Identifiant du droit d'accès.

entitlements.expiration_date

Optional

Date d'expiration de cet abonnement, en Format ISO 8601, qui inclut le fuseau horaire. Pour en savoir plus, consultez Dates d'expiration :

Dates d'expiration

Une réponse de point de terminaison comporte deux propriétés qui gèrent le délai d'expiration dates: subscription.expiration_date et entitlements.expiration_date. Toi peut inclure l'un d'entre eux ou aucun, mais pas les deux. Celle 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. Parce que vous n'avez pas besoin de spécifier le entitlements , spécifiez subscription.expiration_date.

L'accès à votre catalogue de streaming varie en fonction des détails l'abonnement de l'utilisateur.

Si votre modèle d'abonnement comporte plusieurs niveaux ou modules complémentaires expirent au fil du temps, effectuez l'une des opérations 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 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 une date d'expiration

Abonnement actif avec une date d'expiration

Un utilisateur dispose d'un abonnement actif à example.com, et l'abonnement a une date d'expiration. Dans ce cas, tous les abonnés ont accéder à l'intégralité de votre catalogue de streaming, quel que soit leur abonnement ; de mots clés.


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

Sans abonnement

Sans abonnement

Un utilisateur n'a pas d'abonnement à example.com.


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

Abonnements actifs à plusieurs niveaux ou modules complémentaires

Abonnements actifs à plusieurs niveaux ou modules complémentaires

Un utilisateur est abonné à 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. À lisser le nombre maximal de requêtes par seconde (RPS), Google répartit les requêtes à votre terminal uniformément au fil du temps. Ainsi, vous pouvez estimer la moyenne attendue Nombre de RPS pour votre point de terminaison à l'aide de la formule suivante:

Nombre moyen de RPS attendu = <nombre total d'utilisateurs> / 21 600 secondes (6 heures x 60 minutes x 60 secondes)

Si vous proposez une gestion à 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

Consultez le section Propriétés de spécification d'accès aux actions pour référence. des informations.