Zugriffsanforderungen

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.

Abbildung 1. Über die Zugriffsanforderungen können deine Abonnenten auf die Inhalte in deiner App oder auf deiner Plattform zugreifen.

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

subscription

Der Nutzer muss ein aktives Abo haben. Der Zugriff hängt von der Abostufe ab. Hulu (Add-ons)

subscription

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:

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:

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 einem GeoShape-Objekt, das eine Liste mit Postleitzahlen enthält.
  • Beispiel 3:eligibleRegion mit einem GeoShape-Objekt, das eine Liste von FSA-Codes (Forward Sortation Area) enthält.
  • Beispiel 4:eligibleRegion mit einem GeoShape-Objekt, das eine DMA-ID enthält.
  • Beispiel 5:eligibleRegion mit einer Liste von GeoShape-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:

  1. Wir senden einen API-Aufruf an Ihren Berechtigungs-Endpunkt, um die Berechtigungs-IDs des Nutzers zu erhalten.
  2. Wir rufen die erforderlichen Berechtigungs-IDs für die Inhalte aus Ihrem Media Actions-Feed ab.
  3. Wir gleichen die entitlementId eines Nutzers mit der Eigenschaft identifier des Objekts media subscription in Ihrem Feed ab. Wenn mindestens eine entitlementId übereinstimmt, gehen wir davon aus, dass der Nutzer auf die Inhalte zugreifen kann.
Abbildung 2. Eine der Berechtigungs-IDs des Nutzers stimmt mit der erforderlichen Berechtigungs-ID des Inhalts überein.

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 auf nologinrequired.
  • 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 auf free.
  • 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.

Abbildung 3. Ein mehrstufiges Abo-Modell und die zugehörige Darstellung von Berechtigungen.

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.

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.

Abbildung 4. Ein Add-on-Abo-Modell und die Darstellung der Berechtigungen.

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.

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 auf purchase.
  • Fügen Sie expectAcceptanceOf in actionAccessibilityRequirement 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 auf rental.
  • Fügen Sie expectAcceptanceOf in actionAccessibilityRequirement 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.

Die Gold-Stufe umfasst alle Inhalte der Silber-Stufe, die wiederum alle Inhalte der Bronze-Stufe enthält.
Abbildung 5. Struktur von Abopaketen mit verschiedenen Stufen.

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.

Jeder Nutzer beginnt mit dem Basic-Kanal und kann eine beliebige Kombination der Kanäle PRO, Sportz und Moviemax hinzufügen.
Abbildung 6: Abopaketstruktur für Add-ons.

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.

Ein Venn-Diagramm, in dem die Überschneidung zwischen Paket 1, Paket 2 und Paket 3 als „Gemeinsame Stufe“ bezeichnet wird.
Abbildung 7. Paketstruktur mit sich überschneidenden Inhalten.

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.

Paket 1, Paket 2 und Paket 3 sind voneinander getrennt.
Abbildung 8. Paketstruktur ohne sich überschneidende Inhalte.

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:

  • ActiveSubscription: Der Nutzer hat ein aktives Abo beim Anbieter.
  • ActiveTrial: Der Nutzer hat ein aktives Probeabo für den Anbieter.
  • InactiveSubscription: Der Nutzer hat kein aktives Abo oder kein aktives Probeabo.
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 entitlementId-Werte, die der Nutzer besitzt.

entitlements.entitlement

Erforderlich, wenn der Zugriff auf deinen Streamingkatalog je nach Abotyp variiert.

Diese Eigenschaft enthält die entitlementId. Weitere Informationen finden Sie unter Berechtigungs-ID.

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:

  • Wenn alle entitlements.entitlement-Werte gleichzeitig ablaufen, geben Sie subscription.expiration_date an.
  • Wenn einige entitlements.entitlement-Werte zu unterschiedlichen Zeiten ablaufen, geben Sie entitlements.expiration_date an.

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.