Nutzer sehen oder hören sich lieber Inhalte an, auf die sie bereits Zugriff haben, z. B. Inhalte aus ihrem bestehenden Abo. Wenn Google weiß, auf welche Inhalte ein Nutzer in Ihrer App oder auf Ihrer Plattform zugreifen kann, kann Google ein besseres Suchergebnis oder eine bessere Antwort erstellen, um den Nutzer zu diesen Inhalten zu leiten.

Anforderungen für den Zugriff auf Inhalte ermitteln
Sie müssen die Zugriffsanforderungen für jedes Inhaltspaket in Ihrem Katalog angeben. Berücksichtigen Sie dabei die folgenden Fragen:
- Müssen sich Nutzer in Ihrer App oder auf Ihrer Plattform anmelden, um auf die Inhalte zuzugreifen?
Benötigen Nutzer ein Abo?
Nur Watch Actions:
- Benötigen Nutzer ein Abo bei einem externen Dienstanbieter?
- Bieten Sie ein gestaffeltes Abo, ein Abo mit mehreren Paketen oder ein Add-on-Abo an?
Nur Wiedergabeaktionen:Müssen Nutzer die Inhalte leihen oder kaufen?
Ändern sich die Zugriffsanforderungen im Laufe der Zeit?
Hängt die Zugriffsanforderung vom Gerätestandort ab?
Arten von Zugriffsbeschränkungen
Es gibt zwei Arten von Zugriffsbeschränkungen:
Paywall-Typ
Sie können den Zugriff auf Inhalte nach Paywall-Typ einschränken. In der folgenden Tabelle werden die verschiedenen Arten von Paywalls beschrieben:
Paywall-Typ | Beispiel | Kategorie |
---|---|---|
Es ist kein Kauf oder Login erforderlich. | Crackle | nologinrequired |
Der Nutzer muss angemeldet sein, benötigt aber kein kostenpflichtiges Abo. | Vudu (AVOD) | free |
Der Nutzer muss ein aktives Abo haben. Der Zugriff ist unabhängig von der Abo-Stufe. | Netflix |
|
Der Nutzer muss ein aktives Abo haben. Der Zugriff hängt von der Abostufe ab. | Hulu (Add-ons) |
|
Die Inhalte sind nach dem Kauf für einen begrenzten Zeitraum verfügbar. | Vudu | rental |
Die Inhalte sind nach dem Kauf auf unbestimmte Zeit verfügbar. | Vudu | purchase |
Die Inhalte sind über ein Kabel-TV-Abo verfügbar. | HBO GO | externalSubscription |
Paywall-Typ für Anseh-Aktionen
Wenn Sie den Typ der Inhalts-Paywall für Watch Actions angeben möchten, verwenden Sie die Eigenschaft category
in der Action access specification:
"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"
}
},
...
}
Paywall-Typ für Anhör-Aktionen
Wenn Sie den Typ der Inhalts-Paywall für Listen Actions angeben möchten, verwenden Sie die Property category
im offer-Objekt:
"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"
}
},
...
}
Geografischer Bereich
Sie müssen die geografischen Gebiete angeben, in denen die Inhalte verfügbar sind. Verwenden Sie eine oder beide der folgenden Properties:
- Die
eligibleRegion
-Property eines Action access specification-Objekts. Dieses Attribut ist erforderlich. - Die
ineligibleRegion
-Property eines Action access specification-Objekts.
Ein Nutzer kann auf Inhalte zugreifen, wenn sich der Gerätestandort in einer Region befindet, die in eligibleRegion
angegeben ist, und nicht in einer Region, die in ineligibleRegion
angegeben ist.
Die Eigenschaften eligibleRegion
und ineligibleRegion
unterstützen die folgenden Werte:
- Eine Liste mit
Country
,City
undState
. - Ein
GeoShape
-Objekt. Detaillierte Anforderungen finden Sie im AbschnittGeoShape
-Attribute. - Eine Liste mit
GeoShape
-Objekten.
Wenn die Inhalte weltweit verfügbar sind, verwenden Sie den folgenden Sonderwert für eligibleRegion
:
"eligibleRegion": "EARTH",
Anwendungsfälle für „eligibleRegion“
Hier sind einige Beispiele für Anwendungsfälle der eligibleRegion
-Property:
- Beispiel 1:
eligibleRegion
mit einer Liste von Ländern. - Beispiel 2:
eligibleRegion
mit einemGeoShape
-Objekt, das eine Liste mit Postleitzahlen enthält. - Beispiel 3:
eligibleRegion
mit einemGeoShape
-Objekt, das eine Liste von FSA-Codes (Forward Sortation Area) enthält. - Beispiel 4:
eligibleRegion
mit einemGeoShape
-Objekt, das eine DMA-ID enthält. - Beispiel 5:
eligibleRegion
mit einer Liste vonGeoShape
-Objekten. Jeder enthält eine DMA-ID. - Beispiel 6:
ineligibleRegion
mit unkenntlich gemachten Postleitzahlen.
Beispiel 1
eligibleRegion
durch eine Liste von Ländern ersetzen:
"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" } ] }
Beispiel 2
eligibleRegion
mit einem GeoShape
-Objekt, das eine Liste von Postleitzahlen enthält:
"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" ] } }
Beispiel 3
eligibleRegion
mit einem GeoShape
-Objekt, das eine Liste von FSA-Codes (Forward Sortation Area) enthält:
"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" ] } }
Beispiel 4
eligibleRegion
mit einem GeoShape
-Objekt, das eine DMA-ID enthält:
"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" } ] } }
Beispiel 5
eligibleRegion
mit einer Liste von GeoShape
-Objekten.
Jeder enthält eine DMA-ID:
"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" } } ] }
Beispiel 6
ineligibleRegion
mit unkenntlich gemachten Postleitzahlen:
"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" ] } }
Berechtigungs-ID
Die Berechtigungs-ID entitlementId
bezieht sich auf einen String, der den Zugriff auf eine Gruppe von Inhalten in Ihrem Medienkatalog darstellt. So ermittelt Google, ob ein Nutzer Zugriff auf Ihre Inhalte hat:
- Wir senden einen API-Aufruf an Ihren Berechtigungs-Endpunkt, um die Berechtigungs-IDs des Nutzers zu erhalten.
- Wir rufen die erforderlichen Berechtigungs-IDs für die Inhalte aus Ihrem Media Actions-Feed ab.
- Wir gleichen die
entitlementId
eines Nutzers mit der Eigenschaftidentifier
des Objekts media subscription in Ihrem Feed ab. Wenn mindestens eineentitlementId
übereinstimmt, gehen wir davon aus, dass der Nutzer auf die Inhalte zugreifen kann.

Google empfiehlt die folgende Syntax für entitlementId
:
<domain name> + colon (:) + <access level to content>
Beispiele für die Syntax:
example.com:basic
example.com:premium
example.com:sports
Beispiel für eine Berechtigungs-ID
Im Feed von MediaExampleCompany wird angegeben, dass für Movie XYZ
die example.com:basic
entitlementId
erforderlich ist, wie unten dargestellt:
{ "@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" }, ... } }, ... }
Häufige Anwendungsfälle für den Zugriff
Im Folgenden sind einige gängige Anwendungsfälle für den Zugriff aufgeführt:
- Kostenlos (keine Anmeldung erforderlich): Die Inhalte sind ohne Anmeldung, Abo oder Kauf verfügbar.
- Kostenlos (Anmeldung erforderlich): Für die Inhalte ist eine Anmeldung erforderlich, aber kein Abo.
- Abo mit nur einer Stufe:Die Inhalte erfordern ein Abo. Alle Abonnenten können unabhängig von ihrem Abopaket auf dieselben Inhalte zugreifen, egal ob es sich um Filme oder Folgen handelt.
- Abo mit mehreren Stufen:Für die Inhalte ist ein Abo erforderlich. Abonnenten können je nach Abo-Stufe auf unterschiedliche Inhalte zugreifen, z. B. Filme oder Folgen. Beispiel: Silber im Vergleich zu Gold.
- Add-on-Abo:Für die Inhalte ist ein Abo erforderlich. Abonnenten können Premium-Inhalte zusätzlich zu ihrem regulären Abo hinzufügen.
- Einmalkauf:Die Inhalte können gekauft werden. Danach kann der Nutzer unbegrenzt darauf zugreifen.
- Live-TV:Ein Abo umfasst den Zugriff auf lokale, nationale und Premium-Sender.
- Abo bei Drittanbieter:Für die Inhalte muss sich der Nutzer mit seinem Kabelanbieter anmelden.
Kostenlos (keine Anmeldung erforderlich)
Keine Anmeldung erforderlich
Die Inhalte sind ohne Anmeldung oder Abo verfügbar.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "nologinrequired", "availabilityStarts": "2015-01-01T00:00Z", "availabilityEnds": "2015-12-31T00:00Z", "eligibleRegion": { "@type": "Country", "name": "US" } } }
- Setzen Sie
category
aufnologinrequired
. - Geben Sie
expectAcceptanceOf
nicht an.
Kostenlos (Anmeldung erforderlich)
Anmeldung erforderlich
Für die Inhalte müssen Nutzer angemeldet sein, aber kein Abo haben.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "free", "availabilityStarts": "2015-01-01T00:00Z", "availabilityEnds": "2015-12-31T00:00Z", "eligibleRegion": { "@type": "Country", "name": "US" } } }
- Setzen Sie
category
auffree
. - Geben Sie
expectAcceptanceOf
nicht an.
Einstufiges Abo
Bei einem einstufigen Abomodell hat ein Dienstanbieter eine Abostufe. Alle Abonnenten können unabhängig von ihrem Abopaket auf dieselben Inhalte zugreifen, egal ob Filme oder Folgen.
{ "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" } } }
Mehrstufiges Abo
Bei einem mehrstufigen Abomodell bietet ein Dienstanbieter mehrere Abostufen an, z. B. Gold, Silber und Bronze. Nutzer mit dem Abo der oberen Stufe können auf alle Inhalte der unteren Stufe zugreifen. Nutzer mit einem Abo der niedrigeren Stufe können jedoch nicht auf die Inhalte der höheren Stufe zugreifen.

Stellen Sie sich folgendes Szenario vor:
- Jana abonniert die Gold-Stufe. Der Endpunkt „Berechtigungen“ gibt die folgenden
entitlementId
-IDs zurück:example.com:bronze
example.com:silver
example.com:gold
- John abonniert die Stufe Bronze. Ihr Berechtigungs-Endpunkt gibt die folgenden
entitlementId
zurück:example.com:bronze
- In Ihrem Media Actions-Feed werden die folgenden Anforderungen beschrieben:
- Für Film A ist
example.com:bronze
erforderlich. - Für Film B ist
example.com:silver
erforderlich.
- Für Film A ist
In diesem Szenario bestimmt Google die folgenden Zugriffsebenen für Jane und John:
- Sowohl Erika als auch Max haben Zugriff auf Film A.
- Erika hat Zugriff auf Film B, Max jedoch nicht.
{ "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" }, ... } }
Add-on-Abo
Bei einem Add-on-Abo können Nutzer ihre Berechtigungen erweitern und einem Basisabo Kanäle hinzufügen. Nutzer können beliebig viele Kanäle hinzufügen.

Stellen Sie sich folgendes Szenario vor:
- Erika hat neben dem Basic-Abo auch PRO und Sportz. Ihr Berechtigungs-Endpunkt gibt die folgenden
entitlementId
-IDs zurück:example.com:basic
example.com:pro
example.com:sportz
- Max hat nur das Basic-Abo. Ihr Berechtigungs-Endpunkt gibt die folgenden
entitlementId
zurück:example.com:basic
- In Ihrem Media Actions-Feed werden die folgenden Anforderungen beschrieben:
- Für Film A ist
example.com:basic
erforderlich. - Für Film B ist
example.com:pro
erforderlich.
- Für Film A ist
In diesem Szenario bestimmt Google die folgenden Zugriffsebenen für Jane und John:
- Sowohl Erika als auch Max haben Zugriff auf Film A.
- Erika hat Zugriff auf Film B, Max jedoch nicht.
{ "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" }, } } }
Einmaliger Kauf
Kauf
Die Inhalte sind nach dem Kauf auf unbestimmte Zeit verfügbar.
{ "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/" } } } }
- Setzen Sie
category
aufpurchase
. - Fügen Sie
expectAcceptanceOf
inactionAccessibilityRequirement
ein, um den Preis des Kaufs anzugeben.
Ausleihe
Die Inhalte sind nach dem Kauf für einen begrenzten Zeitraum verfügbar.
{ "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/" } } } }
- Setzen Sie
category
aufrental
. - Fügen Sie
expectAcceptanceOf
inactionAccessibilityRequirement
ein, um den Preis für die Ausleihe anzugeben.
Live-TV
In einem Media Actions-Feed können Sie den Zugriff auf einen Live-TV-Kanal oder ein Event basierend auf den folgenden beiden Nutzerbedingungen einschränken:
-
Gerätestandort des Nutzers
Wenn Sie den Zugriff auf den TV-Kanal einschränken möchten, geben Sie den Bereich an, in dem Nutzer darauf zugreifen können. Diese Bedingung gilt in der Regel für lokale Fernsehsender.
-
Status des Nutzerkontos
Wenn der Zugriff auf einen TV-Kanal von einer Einstellung auf Kontoebene eines Nutzers abhängt, verwenden Sie Berechtigungs-IDs, um die Einschränkung darzustellen.
Diese Bedingung gilt in der Regel für die folgenden Anwendungsfälle:
- Bundle:Nationale Kanäle sind oft in Bundles enthalten und Nutzer wählen aus, welches Bundle sie abonnieren möchten.
- Add-on:Bei einigen Premium-Kanälen müssen Nutzer ihrem Abo selektiv zusätzliche Kanäle hinzufügen.
- Regionales Sportnetzwerk (RSN): RSNs sind in der Regel mit dem „Heimatstandort“ eines Nutzers verknüpft. Nutzer können sich Inhalte auf dem RSN auch dann ansehen, wenn sie sich außerhalb ihres „Heimatstandorts“ befinden.
Drittanbieterabo
Abo eines Drittanbieters
Die Inhalte sind für Abonnenten eines anderen Dienstes verfügbar.
{ "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" } } }
- Fügen Sie
authenticator
hinzu, um anzugeben, dass ein anderer Dienst die Abonnenten authentifiziert. Für HBO GO ist beispielsweise ein Abo beim Kabelanbieter erforderlich.
Gängige Stufenpakete
Inhalte der gemeinsamen Stufe sind für alle Abonnenten unabhängig von ihrem Abo-Paket verfügbar. Die gemeinsame Stufe gilt für alle Inhalte mit dem category
von subscription
. Weitere Informationen zum Attribut category
finden Sie im Abschnitt Paywall-Typ.
Warum ist ein gemeinsames Stufenpaket erforderlich?
In mehreren Google-Produkten erhalten Nutzer Empfehlungen für TV-Sendungen und Filme, darunter in der Google Suche, Android TV und Google Assistant. Damit Google die Erwartungen der Nutzer in Bezug auf die Kosten erfüllen kann, muss Google wissen, welche Inhalte allen Abonnenten über die gemeinsame Stufe zur Verfügung stehen. Google muss auch wissen, welche Inhalte Abonnenten mit bestimmten Abopaketen zur Verfügung stehen.
Google empfiehlt Titel, die auf der gemeinsamen Ebene verfügbar sind, es sei denn, du unterstützt die Entitlement API. Über die API kann Google nachvollziehen, auf welche Titel außerhalb der allgemeinen Stufe die einzelnen Nutzer zugreifen können.
Wann sollte ich ein gemeinsames Stufenpaket erstellen?
Ein gemeinsames Stufenpaket ist erforderlich, wenn Ihr Dienst Inhalte anbietet, die für alle Abonnenten verfügbar sind. Dazu gehören Dienste, die nur ein Paket anbieten, und Dienste, die mehrere Pakete oder Add-ons anbieten.
Anbieter, die keine Inhalte für alle Abonnenten haben, müssen kein gemeinsames Stufenpaket erstellen. Ein Beispiel sind Dienstanbieter, die in allen ihren Paketen sich gegenseitig ausschließende Inhalte anbieten.
Häufige Beispiele für Stufen
Im Folgenden finden Sie Beispiele für die gemeinsame Stufe.
Abo mit verschiedenen Stufen
Bei einem mehrstufigen Abomodell hat ein Dienstanbieter mehrere Abostufen, z. B. Gold, Silber und Bronze. Nutzer mit dem Abo der oberen Stufe haben Zugriff auf alle Inhalte der unteren Stufen. Nutzer mit dem Abo der unteren Stufe haben keinen Zugriff auf die Inhalte der oberen Stufe. Das folgende Bild zeigt ein Beispiel für die Paketstruktur.

Im folgenden Codebeispiel ist das Bronze-Paket die gemeinsame Stufe, da alle Nutzer Zugriff auf alle Inhalte in dieser Stufe haben.
"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 } ],
Add-ons
Bei einem Add‑on-Abo können Nutzer ihre Berechtigungen erweitern und einem Basisabo Kanäle hinzufügen. Nutzer können beliebig viele Kanäle hinzufügen. Das folgende Bild zeigt ein Beispiel für die Paketstruktur.

Wenn du einen Kanal hast, der allen Nutzern zur Verfügung steht und für den keine Kosten anfallen, kannst du das Paket mit dem Paket für die gemeinsame Stufe zusammenführen.
Im folgenden Codebeispiel ist das Basic-Paket die gemeinsame Stufe, da alle Nutzer Zugriff auf alle Inhalte in diesem Paket haben.
"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 } ],
Pakete mit sich überschneidenden Inhalten
In einem Inhaltsmodell, in dem sich die Inhalte von Paketen überschneiden, verkauft ein Dienstanbieter Pakete, die einige Inhalte aus anderen Paketen enthalten. Das folgende Bild zeigt ein Beispiel für die Paketstruktur.

Im folgenden Codebeispiel bietet der Anbieter drei Pakete an, in denen sich einige Inhalte überschneiden. In diesem Fall ist ein viertes Paket erforderlich, das das gemeinsame Tier darstellt. Es muss alle Inhalte enthalten, die in allen drei Paketen verfügbar sind.
"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 } ],
Pakete ohne sich überschneidende Inhalte
In einem Inhaltsmodell, in dem sich alle Inhaltspakete nicht überschneiden, verkauft ein Dienstanbieter Pakete, die keine Inhalte aus anderen Paketen enthalten. Das folgende Bild zeigt ein Beispiel für die Paketstruktur.

Im folgenden Beispiel bietet der Anbieter drei Pakete an, die sich inhaltlich nicht überschneiden. Es ist kein gemeinsames Paket für die Stufe erforderlich.
"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 } ],
Berechtigungsendpunkt
Anhand der Informationen in diesem Abschnitt können Sie einen HTTPS-Endpunkt hosten, der die Berechtigungen zurückgibt, die einem Nutzer zugewiesen sind.
Voraussetzungen
Prüfen Sie zuerst, ob Ihr Dienst den OAuth 2.0-Vorgang mit Google unterstützt.
Anfrage
Um die Berechtigungen eines Nutzers zu erhalten, sendet Google eine Anfrage mit dem OAuth-Token des Nutzers. Ihr Endpunkt muss den Nutzer anhand dieses OAuth-Tokens identifizieren. Sehen Sie sich folgendes Beispiel an:
GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer <OAuthToken>
Antwort
Ihr Endpunkt muss eine Antwort mit den folgenden Eigenschaften zurückgeben:
Attribut | |
---|---|
subscription |
Erforderlich Dies ist ein Feld in der Stammantwort. |
subscription.type |
Erforderlich Diese Eigenschaft kann die folgenden Werte haben:
|
subscription.expiration_date |
Optional Das Ablaufdatum dieses Anspruchs im ISO 8601-Format, einschließlich der Zeitzone. Weitere Informationen finden Sie unter Ablaufdaten. |
entitlements |
Optional Diese Stamm-Property enthält die |
entitlements.entitlement |
Erforderlich, wenn der Zugriff auf deinen Streamingkatalog je nach Abotyp variiert. Diese Eigenschaft enthält die |
entitlements.expiration_date |
Optional Das Ablaufdatum dieses Abos im ISO 8601-Format, einschließlich der Zeitzone. Weitere Informationen finden Sie unter Ablaufdaten. |
Ablaufdaten
Es gibt zwei Attribute in einer Endpunktantwort, die sich auf Ablaufdaten beziehen: subscription.expiration_date
und entitlements.expiration_date
. Sie können einen der beiden oder keinen der beiden einfügen, aber nicht beide. Welche Sie verwenden, hängt von Ihrem Abomodell ab.
Abomodell | |
---|---|
Der Zugriff auf den Streamingkatalog ist für alle Abonnenten gleich. | Da Sie die Property entitlements nicht angeben müssen, geben Sie subscription.expiration_date an. |
Der Zugriff auf deinen Streamingkatalog hängt von den Details des Abos eines Nutzers ab. |
Wenn Ihr Abomodell mehrere Stufen oder Add-ons hat, die im Laufe der Zeit ablaufen, haben Sie folgende Möglichkeiten:
|
Beispielantworten
Hier sind Beispielantworten für verschiedene Abostatus:
- Aktives Abo
- Aktives Abo mit Ablaufdatum
- Kein Abo
- Aktive Abos für mehrere Stufen oder Add-ons
Aktives Abo
Aktives Abo
Ein Nutzer hat ein aktives Abo für example.com. In diesem Fall haben alle Abonnenten unabhängig von ihrem Abo-Typ Zugriff auf deinen gesamten Streamingkatalog.
{ "subscription" : { "type": "ActiveSubscription", } }
Aktives Abo mit Ablaufdatum
Aktives Abo mit Ablaufdatum
Ein Nutzer hat ein aktives Abo für example.com und das Abo hat ein Ablaufdatum. In diesem Fall haben alle Abonnenten unabhängig von ihrem Abotyp Zugriff auf deinen gesamten Streamingkatalog.
{ "subscription" : { "type": "ActiveSubscription", "expiration_date": "2019-11-10T10:00:00Z" } }
Kein Abo
Kein Abo
Ein Nutzer hat kein Abo für example.com.
{ "subscription" : { "type": "InactiveSubscription" } }
Aktive Abos für mehrere Stufen oder Add-ons
Aktive Abos für mehrere Stufen oder Add-ons
Ein Nutzer hat ein Abo für example.com:premium
bis zu einem bestimmten Datum.
{ "subscription" : { "type": "ActiveSubscription", } "entitlements": [ { "entitlement": "example.com:premium", "expiration": "2019-11-10T10:00:00Z" } ] }
Ratenbegrenzung
Google aktualisiert die Berechtigungsinformationen eines Nutzers bis zu sechsmal pro Tag. Um die maximale Anzahl von Abfragen pro Sekunde (QPS) zu glätten, verteilt Google die Anfragen gleichmäßig über die Zeit auf Ihren Endpunkt. Sie können die erwartete durchschnittliche QPS für Ihren Endpunkt also mit der folgenden Formel schätzen:
Erwartete durchschnittliche QPS = <Gesamtzahl der Nutzer> / 21.600 Sekunden (6 Stunden × 60 Minuten × 60 Sekunden)
Wenn Sie eine große Anzahl von Nutzern unterstützen, kann Google das 6-Stunden-Intervall anpassen. Wenden Sie sich bei Bedarf an Google, um die Konfiguration zu besprechen.
Google kontaktieren
Wenn Ihr Endpunkt bereit ist, wenden Sie sich an Google, um die URL des Endpunkts mitzuteilen.
Eigenschaften der Spezifikation für den Aktionszugriff
Referenzinformationen finden Sie im Abschnitt Eigenschaften der Spezifikation für den Aktionszugriff.