Użytkownicy wolą oglądać lub słuchać treści, do których mają już dostęp, np. treści w ramach subskrypcji. Jeśli Google wie, do jakich treści użytkownik ma dostęp w Twojej aplikacji lub na platformie, może utworzyć lepszy wynik wyszukiwania lub odpowiedź, aby skierować użytkownika do tych treści.

Określanie wymagań dotyczących dostępu do treści
W przypadku każdego pakietu treści w katalogu musisz określić wymagania dotyczące dostępu. W takim przypadku odpowiedz na te pytania:
- Czy użytkownicy muszą zalogować się w aplikacji lub na platformie, aby uzyskać dostęp do treści?
Czy użytkownicy potrzebują subskrypcji?
Tylko działania związane z oglądaniem:
- Czy użytkownicy potrzebują subskrypcji zewnętrznego dostawcy usług?
- Czy oferujesz subskrypcję wielopoziomową, wielopakietową lub dodatkową?
Tylko działania związane z oglądaniem: czy użytkownicy muszą wypożyczyć lub kupić treści?
Czy wymagania dotyczące dostępu zmieniają się z czasem?
Czy wymaganie dostępu zależy od lokalizacji urządzenia?
Typy ograniczeń dostępu
Istnieją 2 rodzaje ograniczeń dostępu:
Typ paywalla
Możesz ograniczyć dostęp do treści według typu paywalla. W tabeli poniżej znajdziesz szczegółowe informacje o różnych typach paywalli:
Typ paywalla | Przykład | Kategoria |
---|---|---|
Nie musisz niczego kupować ani się logować. | Trzask | nologinrequired |
Użytkownik musi być zalogowany, ale nie musi mieć płatnej subskrypcji. | Vudu (AVOD) | free |
Użytkownik musi mieć aktywną subskrypcję. Dostęp jest niezależny od poziomu subskrypcji. | Netflix |
|
Użytkownik musi mieć aktywną subskrypcję. Dostęp zależy od poziomu subskrypcji. | Hulu (dodatki) |
|
Treści są dostępne przez określony czas po zakupie. | Vudu | rental |
Treści są dostępne bezterminowo po zakupie. | Vudu | purchase |
Treści są dostępne w ramach abonamentu telewizji kablowej. | HBO Go | externalSubscription |
Typ paywalla w przypadku działań dotyczących oglądania
Aby określić typ paywalla treści dla działań związanych z oglądaniem, użyj właściwości
category
w specyfikacji dostępu do działania:
"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"
}
},
...
}
Typ paywalla w przypadku działań dotyczących słuchania
Aby określić typ paywalla treści w przypadku działań związanych ze słuchaniem, użyj właściwości
category
w obiekcie oferty:
"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"
}
},
...
}
Obszar geograficzny
Musisz określić obszary geograficzne, na których treści są dostępne. Użyj jednej lub obu tych właściwości:
- Właściwość
eligibleRegion
obiektu Action access specification. Ta właściwość jest wymagana. - Właściwość
ineligibleRegion
obiektu Action access specification.
Użytkownik może uzyskać dostęp do treści, jeśli lokalizacja urządzenia znajduje się w dowolnym regionie określonym w eligibleRegion
i nie znajduje się w żadnym regionie określonym w ineligibleRegion
.
Właściwości eligibleRegion
i ineligibleRegion
mogą mieć te wartości:
- Lista
Country
,City
iState
. - Obiekt A
GeoShape
. Szczegółowe wymagania znajdziesz w sekcjiGeoShape
Właściwości. - Lista
GeoShape
obiektów.
Jeśli treść jest dostępna na całym świecie, użyj tej specjalnej wartości atrybutu eligibleRegion
:
"eligibleRegion": "EARTH",
Przypadki użycia parametru eligibleRegion
Oto przykłady zastosowania właściwości eligibleRegion
:
- Przykład 1:
eligibleRegion
z listą krajów. - Przykład 2:
eligibleRegion
z obiektemGeoShape
, który zawiera listę kodów pocztowych. - Przykład 3:
eligibleRegion
z obiektemGeoShape
, który zawiera listę kodów strefy sortowania (Forward Sortation Area – FSA). - Przykład 4:
eligibleRegion
z obiektemGeoShape
, który zawiera identyfikator DMA. - Przykład 5:
eligibleRegion
z listą obiektówGeoShape
. Każdy z nich zawiera identyfikator obszaru metropolitalnego. - Przykład 6:
ineligibleRegion
z zakrytymi kodami pocztowymi.
Przykład 1
eligibleRegion
z listą krajów:
"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" } ] }
Przykład 2
eligibleRegion
z obiektem GeoShape
, który zawiera listę kodów pocztowych:
"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" ] } }
Przykład 3
eligibleRegion
z obiektem GeoShape
, który zawiera listę kodów strefy sortowania (Forward Sortation Area – FSA):
"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" ] } }
Przykład 4
eligibleRegion
z obiektem GeoShape
, który zawiera identyfikator DMA:
"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" } ] } }
Przykład 5
eligibleRegion
z listą obiektów GeoShape
.
Każdy z nich zawiera identyfikator regionu DMA:
"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" } } ] }
Przykład 6
ineligibleRegion
z zakrytymi kodami pocztowymi:
"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" ] } }
Identyfikator uprawnienia
Identyfikator uprawnienia entitlementId
to ciąg znaków reprezentujący dostęp do grupy treści w Twoim katalogu multimediów. Aby sprawdzić, czy użytkownik ma dostęp do Twoich treści, Google wykonuje te czynności:
- Wywołujemy interfejs API w punkcie końcowym uprawnień, aby otrzymać identyfikatory uprawnień użytkownika.
- Wyszukujemy wymagane identyfikatory uprawnień treści w pliku danych Media Actions.
- Dopasowujemy
entitlementId
użytkownika do właściwościidentifier
obiektu subskrypcja mediów w pliku danych. Jeśli co najmniej jeden warunekentitlementId
jest spełniony, uznajemy, że użytkownik może uzyskać dostęp do treści.

Zalecamy używanie tej składni atrybutu entitlementId
:
<domain name> + colon (:) + <access level to content>
Przykłady składni:
example.com:basic
example.com:premium
example.com:sports
Przykład identyfikatora uprawnienia
Plik danych MediaExampleCompany określa, że Movie XYZ
wymaga example.com:basic
entitlementId
, jak pokazano poniżej:
{ "@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" }, ... } }, ... }
Przypadki użycia z powszechnym dostępem
Oto typowe przypadki użycia dostępu:
- Bezpłatne (nie wymaga logowania): treści są dostępne bez logowania, subskrypcji ani zakupu.
- Bezpłatne (wymaga zalogowania): treści wymagają zalogowania się użytkownika, ale nie wymagają subskrypcji.
- Subskrypcja 1-poziomowa: treści wymagają subskrypcji. Wszyscy subskrybenci mają dostęp do tych samych treści, zarówno filmów, jak i odcinków, niezależnie od pakietu subskrypcji.
- Subskrypcja wielopoziomowa: treści wymagają subskrypcji. Subskrybenci mogą uzyskać dostęp do różnych treści, takich jak filmy lub odcinki, w zależności od poziomu subskrypcji. Na przykład srebrny i złoty.
- Subskrypcja dodatku: treści wymagają subskrypcji. Subskrybenci mogą dodać treści premium do swojej regularnej subskrypcji.
- Zakup jednorazowy: treści można kupić, a potem użytkownik ma do nich nieograniczony dostęp.
- Telewizja na żywo: subskrypcja obejmuje dostęp do kanałów lokalnych, krajowych i premium.
- Subskrypcja zewnętrzna: treści wymagają zalogowania się użytkownika za pomocą danych dostawcy telewizji kablowej.
Bezpłatne (nie wymaga logowania)
Nie musisz się logować
Treści są dostępne bez logowania i subskrypcji.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "nologinrequired", "availabilityStarts": "2015-01-01T00:00Z", "availabilityEnds": "2015-12-31T00:00Z", "eligibleRegion": { "@type": "Country", "name": "US" } } }
- Ustaw wartość
category
nanologinrequired
. - Nie używaj symbolu
expectAcceptanceOf
.
Bezpłatnie (wymagane logowanie)
Wymagane logowanie
Treści wymagają zalogowania się użytkownika, ale nie wymagają subskrypcji.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "free", "availabilityStarts": "2015-01-01T00:00Z", "availabilityEnds": "2015-12-31T00:00Z", "eligibleRegion": { "@type": "Country", "name": "US" } } }
- Ustaw wartość
category
nafree
. - Nie używaj symbolu
expectAcceptanceOf
.
Subskrypcja jednopoziomowa
W modelu subskrypcji jednostopniowej dostawca usług ma jeden poziom subskrypcji. Wszyscy subskrybenci mają dostęp do tych samych treści, niezależnie od pakietu subskrypcji.
{ "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" } } }
Subskrypcja wielopoziomowa
W modelu subskrypcji wielopoziomowej dostawca usług ma kilka poziomów subskrypcji, np. Gold, Silver i Bronze. Użytkownicy, którzy mają subskrypcję wyższego poziomu, mogą uzyskać dostęp do wszystkich treści z niższych poziomów. Użytkownicy, którzy mają subskrypcję niższego poziomu, nie mogą jednak uzyskać dostępu do treści z wyższego poziomu.

Przyjrzyjmy się temu scenariuszowi:
- Anna subskrybuje poziom Gold. Punkt końcowy
entitlementId
zwraca te identyfikatory:example.com:bronze
example.com:silver
example.com:gold
- Jan subskrybuje poziom Brązowy. Punkt końcowy Twoje uprawnienia zwraca te
entitlementId
:example.com:bronze
- Plik danych działań związanych z multimediami musi spełniać te wymagania:
- Film A wymaga
example.com:bronze
. - Film B wymaga
example.com:silver
.
- Film A wymaga
W tym przypadku Google określa następujące poziomy dostępu dla Janka i Jasia:
- Zarówno Anna, jak i Jan mają dostęp do filmu A.
- Anna ma dostęp do filmu B, ale Jan nie.
{ "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" }, ... } }
Subskrypcja dodatkowa
W modelu subskrypcji dodatków dostawca usług umożliwia użytkownikom rozszerzenie uprawnień i dodanie kanałów do subskrypcji podstawowej. Użytkownicy mogą dodać dowolną liczbę kanałów.

Przyjrzyjmy się temu scenariuszowi:
- Janina ma subskrypcje PRO i Sportz oprócz subskrypcji Basic. Punkt końcowy uprawnień zwraca te identyfikatory
entitlementId
:example.com:basic
example.com:pro
example.com:sportz
- Jan ma tylko subskrypcję Basic. Punkt końcowy Twoje uprawnienia zwraca te
entitlementId
:example.com:basic
- Plik danych działań związanych z multimediami musi spełniać te wymagania:
- Film A wymaga
example.com:basic
. - Film B wymaga
example.com:pro
.
- Film A wymaga
W tym przypadku Google określa następujące poziomy dostępu dla Janka i Jasia:
- Zarówno Anna, jak i Jan mają dostęp do filmu A.
- Anna ma dostęp do filmu B, ale Jan nie.
{ "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" }, } } }
Jednorazowy zakup
Zakup
Treści są dostępne bezterminowo po zakupie.
{ "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/" } } } }
- Ustaw wartość
category
napurchase
. - Wpisz
expectAcceptanceOf
w poluactionAccessibilityRequirement
, aby podać cenę zakupu.
Wypożyczalnia
Treści są dostępne przez określony czas po zakupie.
{ "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/" } } } }
- Ustaw wartość
category
narental
. - Wpisz
expectAcceptanceOf
w poluactionAccessibilityRequirement
, aby podać cenę wypożyczenia.
Telewizja na żywo
W pliku danych Działań związanych z multimediami możesz ograniczyć dostęp do kanału telewizji na żywo lub wydarzenia na podstawie tych 2 warunków dotyczących użytkownika:
-
Lokalizacja urządzenia użytkownika
Aby ograniczyć dostęp do kanału telewizyjnego, określ obszar, na którym użytkownicy mają do niego dostęp. Ten warunek zwykle dotyczy lokalnych kanałów telewizyjnych.
-
Stan konta użytkownika
Jeśli dostęp do kanału telewizyjnego zależy od ustawienia na poziomie konta użytkownika, użyj identyfikatorów uprawnień, aby przedstawić ograniczenie.
Ten warunek zwykle dotyczy tych przypadków użycia:
- Pakiety: kanały krajowe są często uwzględniane w pakietach, a użytkownicy wybierają, który pakiet chcą subskrybować.
- Dodatek: niektóre kanały premium wymagają od użytkowników selektywnego dodawania dodatkowych kanałów do subskrypcji.
- Regionalna sieć sportowa (RSN): RSN są zwykle powiązane z lokalizacją „domową” użytkownika. Użytkownicy mogą oglądać treści w regionalnej sieci sportowej nawet podczas podróży poza „domową” lokalizację.
Subskrypcja innej firmy
Subskrypcja usługi innej firmy
Treści są dostępne dla subskrybentów innej usługi.
{ "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" } } }
- Dodaj symbol
authenticator
, aby wskazać, że subskrybentów uwierzytelnia inna usługa. Na przykład HBO GO wymaga subskrypcji u dostawcy telewizji kablowej.
Pakiety na poziomie Common
Treści z poziomu wspólnego są dostępne dla wszystkich subskrybentów niezależnie od pakietu subskrypcji. Poziom wspólny dotyczy wszystkich treści z category
subscription
. Więcej informacji o właściwości category
znajdziesz w sekcji Typ paywalla.
Dlaczego wymagany jest pakiet w ramach wspólnej wersji?
Wiele usług Google, w tym wyszukiwarka Google, Android TV i Asystent Google, wyświetla użytkownikom rekomendacje dotyczące filmów i programów TV. Aby określić oczekiwania użytkowników dotyczące kosztów, Google musi wiedzieć, jakie treści są dostępne dla wszystkich subskrybentów w ramach wspólnego poziomu. Google musi też wiedzieć, jakie treści są dostępne dla subskrybentów w ramach konkretnych pakietów subskrypcji.
Google zaleca tytuły dostępne w ramach wspólnej wersji, chyba że obsługujesz interfejs API uprawnień. Interfejs API umożliwia Google określenie, do których tytułów spoza wspólnej puli ma dostęp każdy użytkownik.
Kiedy warto utworzyć pakiet z poziomem wspólnym?
Wspólny pakiet poziomów jest wymagany, gdy usługa oferuje treści dostępne dla wszystkich subskrybentów. Dotyczy to usług, które oferują tylko 1 pakiet, oraz usług, które oferują wiele pakietów lub dodatków.
Dostawcy, którzy nie mają treści dostępnych dla wszystkich subskrybentów, nie muszą tworzyć wspólnego pakietu. Przykładem są dostawcy usług, którzy w ramach wszystkich swoich pakietów udostępniają wzajemnie wykluczające się treści.
Przykłady typowych poziomów
Oto przykłady typowych poziomów:
Subskrypcja na różnych poziomach
W modelu subskrypcji z różnymi poziomami dostawca usług ma kilka poziomów subskrypcji, np. Gold, Silver i Bronze. Użytkownicy z subskrypcją wyższego poziomu mają dostęp do wszystkich treści z niższych poziomów. Użytkownicy z subskrypcją niższego poziomu nie mają dostępu do treści z wyższego poziomu. Obraz poniżej przedstawia przykład struktury pakietu.

W poniższym przykładzie kodu pakiet brązowy jest wspólnym poziomem, ponieważ wszyscy użytkownicy mają dostęp do wszystkich treści na tym poziomie.
"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 } ],
Dodatki
W modelu subskrypcji dodatków dostawca usług umożliwia użytkownikom rozszerzenie uprawnień i dodanie kanałów do podstawowej subskrypcji. Użytkownicy mogą dodać dowolną liczbę kanałów. Obraz poniżej przedstawia przykładową strukturę pakietu.

Jeśli masz kanał dostępny dla wszystkich użytkowników i nie wiąże się on z żadnymi opłatami, możesz połączyć pakiet z pakietem o wspólnym poziomie.
W poniższym przykładzie kodu pakiet podstawowy jest wspólnym poziomem, ponieważ wszyscy użytkownicy mają dostęp do wszystkich treści w tym pakiecie.
"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 } ],
Pakiety z treściami, które się pokrywają
W modelu treści, w którym pakiety mają wspólne treści, dostawca usług sprzedaje pakiety zawierające niektóre treści z innych pakietów. Obraz poniżej przedstawia przykład struktury pakietu.

W poniższym przykładzie kodu dostawca oferuje 3 pakiety, w których część treści się pokrywa. W takim przypadku wymagany jest czwarty pakiet reprezentujący wspólny poziom. Musi zawierać wszystkie treści dostępne we wszystkich 3 pakietach.
"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 } ],
Pakiety bez treści, które się przecinają
W modelu treści, w którym wszystkie pakiety treści nie przecinają się, dostawca usług sprzedaje pakiety, które nie zawierają treści z innych pakietów. Obraz poniżej przedstawia przykład struktury pakietu.

W poniższym przykładzie dostawca oferuje 3 pakiety, w których nie ma treści wspólnych dla wszystkich pakietów. Nie jest wymagany pakiet z poziomem wspólnym.
"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 } ],
Punkt końcowy uprawnień
Skorzystaj z informacji z tej sekcji, aby hostować punkt końcowy HTTPS, który zwraca uprawnienia powiązane z użytkownikiem.
Warunek wstępny
Zanim zaczniesz, sprawdź, czy Twoja usługa obsługuje przepływ OAuth 2.0 w Google.
Żądanie
Aby otrzymać uprawnienia użytkownika, Google wysyła żądanie zawierające token OAuth użytkownika. Punkt końcowy musi identyfikować użytkownika na podstawie tego tokena OAuth. Przyjrzyj się temu przykładowi:
GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer <OAuthToken>
Odpowiedź
Punkt końcowy musi zwracać odpowiedź z tymi właściwościami:
Właściwość | |
---|---|
subscription |
Wymagany To pole znajduje się w odpowiedzi głównej. |
subscription.type |
Wymagany Ta właściwość może mieć te wartości:
|
subscription.expiration_date |
Opcjonalny Data wygaśnięcia uprawnienia w formacie ISO 8601, która obejmuje strefę czasową. Więcej informacji znajdziesz w artykule Daty wygaśnięcia. |
entitlements |
Opcjonalny Ta właściwość główna zawiera wartości |
entitlements.entitlement |
Wymagane, jeśli dostęp do katalogu strumieniowego różni się w zależności od typu subskrypcji. Ta usługa zawiera |
entitlements.expiration_date |
Opcjonalny Data wygaśnięcia subskrypcji w formacie ISO 8601, która zawiera strefę czasową. Więcej informacji znajdziesz w artykule Daty wygaśnięcia. |
Daty ważności
W odpowiedzi punktu końcowego znajdują się 2 właściwości związane z datami ważności: subscription.expiration_date
i entitlements.expiration_date
. Możesz uwzględnić jeden z nich lub żaden, ale nie oba. To, którego z nich użyjesz, zależy od modelu subskrypcji.
Model subskrypcji | |
---|---|
Dostęp do katalogu streamingowego jest taki sam dla wszystkich subskrybentów. | Nie musisz określać właściwości entitlements , więc podaj subscription.expiration_date . |
Dostęp do katalogu streamingowego zależy od szczegółów subskrypcji użytkownika. |
Jeśli Twój model subskrypcji ma kilka poziomów lub dodatków, które wygasają z czasem, wykonaj jedną z tych czynności:
|
Przykładowe odpowiedzi
Przykłady odpowiedzi w różnych stanach subskrypcji:
- Aktywna subskrypcja
- aktywna subskrypcja z datą wygaśnięcia,
- Brak subskrypcji
- aktywne subskrypcje na wiele poziomów lub dodatków;
Aktywna subskrypcja
Aktywna subskrypcja
Użytkownik ma aktywną subskrypcję example.com. W tym przypadku wszyscy subskrybenci mają dostęp do całego katalogu transmisji strumieniowych niezależnie od rodzaju subskrypcji.
{ "subscription" : { "type": "ActiveSubscription", } }
aktywna subskrypcja z datą wygaśnięcia,
Aktywna subskrypcja z datą ważności
Użytkownik ma aktywną subskrypcję w domenie example.com, która ma datę ważności. W takim przypadku wszyscy subskrybenci mają dostęp do całego katalogu transmisji strumieniowych niezależnie od rodzaju subskrypcji.
{ "subscription" : { "type": "ActiveSubscription", "expiration_date": "2019-11-10T10:00:00Z" } }
Brak subskrypcji
Brak subskrypcji
Użytkownik nie ma subskrypcji w domenie example.com.
{ "subscription" : { "type": "InactiveSubscription" } }
aktywne subskrypcje na wiele poziomów lub dodatków;
Aktywne subskrypcje na różnych poziomach lub dodatki
Użytkownik ma subskrypcję example.com:premium
do określonej daty.
{ "subscription" : { "type": "ActiveSubscription", } "entitlements": [ { "entitlement": "example.com:premium", "expiration": "2019-11-10T10:00:00Z" } ] }
Ograniczenie liczby żądań
Google odświeża informacje o uprawnieniach użytkownika co 6 godzin. Aby wyrównać maksymalną liczbę zapytań na sekundę (QPS), Google rozkłada zapytania do punktu końcowego równomiernie w czasie. Dlatego możesz oszacować oczekiwaną średnią liczbę zapytań na sekundę dla punktu końcowego za pomocą tego wzoru:
Oczekiwana średnia liczba zapytań na sekundę = <łączna liczba użytkowników> / 21 600 sekund (6 godzin × 60 minut × 60 sekund)
Jeśli obsługujesz dużą liczbę użytkowników, Google może dostosować 6-godzinny interwał. W razie potrzeby skontaktuj się z Google, aby omówić konfigurację.
Kontaktowanie się z Google
Gdy punkt końcowy będzie gotowy, skontaktuj się z Google, aby podać adres URL punktu końcowego.
Właściwości specyfikacji dostępu do działania
Informacje znajdziesz w sekcji właściwości specyfikacji dostępu do działania.