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

Wymagania dotyczące dostępu do treści
W przypadku każdego pakietu treści w katalogu musisz określić wymagania dotyczące dostępu. Podczas tego procesu zastanów się nad odpowiedziami na te pytania:
- Czy użytkownicy muszą się zalogować w aplikacji lub na platformie, aby uzyskać dostęp do treści?
Czy użytkownicy potrzebują subskrypcji?
Tylko WatchActions:
- Czy użytkownicy muszą mieć subskrypcję od 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 wymagania dotyczące dostępu zależą od lokalizacji urządzenia?
Typy ograniczeń dostępu
Istnieją 2 rodzaje ograniczeń dostępu:
Typ paywall
Możesz ograniczyć dostęp do treści według typu paywalla. Tabela poniżej zawiera szczegółowe informacje o różnych typach paywalli:
Typ paywall | Przykład | Kategoria |
---|---|---|
Nie musisz nic kupować ani się logować. | Trzask | nologinrequired |
Użytkownik musi się zalogować, 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 przez nieokreślony czas po zakupie. | Vudu | purchase |
Treści są dostępne w ramach abonamentu telewizji kablowej. | HBO Go | externalSubscription |
Typ płatnej bariery dostępu w przypadku działań dotyczących oglądania
Aby określić typ płatnego dostępu do treści w przypadku działań związanych z oglądaniem, użyj właściwości category
w specyfikacji dostępu do działań:
"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 płatnego dostępu do działań dotyczących słuchania
Aby określić typ płatnego dostępu do treści w przypadku działań związanych z odsłuchiwaniem, użyj właściwości category
w obiekcie offer:
"potentialAction": {
"@type":"ListenAction",
"target": { … },
"expectsAcceptanceOf":{
"@type":"Offer",
"category":"subscription",
"availabilityStarts": "2018-06-01T10:35:29Z",
"availabilityEnds": "2019-05-31T10:35:29Z",
"eligibleRegion": {
"@type":"Country",
"name":"US"
}
},
...
}
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 specyfikacji dostępu do działania. Ta właściwość jest wymagana. - Właściwość
ineligibleRegion
obiektu specyfikacji dostępu do działania.
Użytkownik może uzyskać dostęp do treści, jeśli lokalizacja urządzenia znajduje się w dowolnym regionie określonym w sekcji eligibleRegion
i nie znajduje się w żadnym regionie określonym w sekcji ineligibleRegion
.
Właściwości eligibleRegion
i ineligibleRegion
umożliwiają użycie tych wartości:
- Lista wartości
Country
,City
iState
. - Obiekt
GeoShape
. Szczegółowe wymagania znajdziesz w sekcji WłaściwościGeoShape
. - Lista
GeoShape
obiektów.
Jeśli treści są dostępne na całym świecie, użyj tej wartości specjalnej dla atrybutu eligibleRegion
:
"eligibleRegion": "EARTH",
przypadki użycia eligibleRegion,
Oto przykłady zastosowania właściwości eligibleRegion
:
- Przykład 1:
eligibleRegion
z listą krajów. - Przykład 2:
eligibleRegion
z obiektemGeoShape
zawierającym listę kodów pocztowych. - Przykład 3:
eligibleRegion
z obiektemGeoShape
zawierającym listę kodów strefy sortowania (FSA). - Przykład 4:
eligibleRegion
z obiektemGeoShape
zawierającym identyfikator rynku docelowego. - Przykład 5:
eligibleRegion
z listą obiektówGeoShape
. Każdy z nich zawiera identyfikator DMA. - Przykład 6.
ineligibleRegion
z zablokowanymi 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 }, "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 }, "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 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 zablokowanymi kodami pocztowymi:
"actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "subscription", "requiresSubscription": { "@type": "MediaSubscription", "@id": "http://www.example.com/local_tv_network/subscription", "name": "Example Subscription", "commonTier": true }, "eligibleRegion": { "@type": "Country", "name": "US" }, "ineligibleRegion": { "@type": "GeoShape", "@id": "http://example.com/area1", "addressCountry": "US", "postalCode": [ "94118", "94119" ] } }
Identyfikator uprawnienia
Identyfikator uprawnień entitlementId
odnosi się do ciągu, który reprezentuje dostęp do grupy treści w katalogu multimediów. Aby ustalić, czy użytkownik ma dostęp do Twoich treści, Google wykonuje te czynności:
- Wykonujemy wywołanie interfejsu API do Twojego punktu końcowego uprawnień, aby otrzymać identyfikatory uprawnień użytkownika.
- W pliku danych Media Actions wyszukujemy wymagane identyfikatory uprawnień.
- Dopasowujemy wartość atrybutu
entitlementId
użytkownika do atrybutuidentifier
obiektu media subscription w pliku danych. Jeśli co najmniejentitlementId
pasuje, określamy, że użytkownik może uzyskać dostęp do treści.

Google zaleca 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 ... }, ... } }, ... }
Typowe przypadki użycia dostępu
Oto typowe przypadki użycia dostępu:
- Bezpłatne (bez logowania): treści są dostępne bez logowania, subskrypcji ani zakupu.
- Bezpłatne (wymaga logowania): użytkownicy muszą się zalogować, ale nie muszą mieć subskrypcji.
- Subskrypcja na jednym poziomie: treści wymagają subskrypcji. Wszyscy subskrybenci mają dostęp do tych samych treści, niezależnie od tego, czy są to filmy, czy odcinki, niezależnie od pakietu subskrypcji.
- Subskrypcja na wielu poziomach: 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 w porównaniu z złotym.
- Subskrypcja dodatku: treści wymagają subskrypcji. Subskrybenci mogą dodać treści premium do swojej zwykłej subskrypcji.
- Zakup jednorazowy: treści można kupić, a użytkownik ma do nich nieograniczony dostęp.
- Telewizja na żywo: subskrypcja obejmuje dostęp do kanałów lokalnych, krajowych i premium.
- Subskrypcja u osoby trzeciej: użytkownik musi zalogować się u swojego dostawcy usług kablowych, aby uzyskać dostęp do treści.
Bezpłatnie (nie wymaga logowania)
Nie trzeba się logować
Treści są dostępne bez logowania się ani subskrypcji.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "nologinrequired", "availabilityStarts": "2015-01-01T00:00Z", "availabilityEnds": "2015-12-31T00:00Z", "eligibleRegion": { "@type": "Country", "name": "US" } } }
- Ustaw
category
nanologinrequired
. - Nie używaj
expectAcceptanceOf
.
Bezpłatnie (wymaga logowania)
Wymagane logowanie
Treści wymagają zalogowania się, 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
category
nafree
. - Nie używaj
expectAcceptanceOf
.
Subskrypcja jednopoziomowa
W modelu subskrypcji jednopoziomowej dostawca usług ma jeden poziom subskrypcji. Wszyscy subskrybenci mają dostęp do tych samych treści, niezależnie od tego, czy są to filmy, czy odcinki, 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" }, "eligibleRegion": { "@type": "Country", "name": "US" } } }
Subskrypcja wielopoziomowa
W modelu subskrypcji wielopoziomowej dostawca usług ma kilka poziomów subskrypcji, takich jak Gold, Silver i Bronze. Użytkownicy, którzy mają subskrypcję wyższego poziomu, mają dostęp do wszystkich treści z niższego poziomu. Użytkownicy z subskrypcją na niższym poziomie nie mają jednak dostępu do treści na wyższym poziomie.

Przyjrzyjmy się temu scenariuszowi:
- Anna ma subskrypcję Gold. Punkt końcowy uprawnień zwraca te identyfikatory
entitlementId
:example.com:bronze
example.com:silver
example.com:gold
- Jan subskrybuje pakiet Brązowy. Punkt końcowy uprawnień zwraca następujące dane
entitlementId
:example.com:bronze
- Plik danych działań związanych z multimediami zawiera te wymagania:
- Film A wymaga
example.com:bronze
. - Film B wymaga
example.com:silver
.
- Film A wymaga
W tym scenariuszu Google określa dla Jane i Johna te poziomy dostępu:
- Zarówno Anna, jak i Jan mają dostęp do Movie A.
- Anna ma dostęp do Movie B, ale Jan nie.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "subscription", "requiresSubscription": { "@type": "MediaSubscription", "@id": "http://www.example.com/basic_subscription", "name": "Bronze", "commonTier": true ... }, ... } }
Dodatkowa subskrypcja
W przypadku modelu subskrypcji z dodatkami dostawca usługi umożliwia użytkownikom rozszerzanie uprawnień i dodawanie kanałów do subskrypcji podstawowej. Użytkownicy mogą dodawać dowolną liczbę kanałów.

Przyjrzyjmy się temu scenariuszowi:
- Janina ma subskrypcję 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ę Podstawowa. Punkt końcowy uprawnień zwraca następujące dane
entitlementId
:example.com:basic
- Plik danych działań związanych z multimediami zawiera te wymagania:
- Film A wymaga
example.com:basic
. - Film B wymaga
example.com:pro
.
- Film A wymaga
W tym scenariuszu Google określa dla Jane i Johna te poziomy dostępu:
- Zarówno Anna, jak i Jan mają dostęp do Movie A.
- Anna ma dostęp do Movie 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 } } } }
Jednorazowy zakup
Zakup
Treści są dostępne przez nieokreślony czas 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
category
napurchase
. - Uwzględnij
expectAcceptanceOf
wactionAccessibilityRequirement
, aby wskazać 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
category
narental
. - Wpisz
expectAcceptanceOf
wactionAccessibilityRequirement
, aby wskazać cenę wypożyczenia.
Telewizja na żywo
W strumieniach działań związanych z multimediami możesz ograniczyć dostęp do kanału TV 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, w którym użytkownicy mają do niego dostęp. Ten warunek dotyczy zwykle 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 reprezentować ograniczenie.
Ten warunek zwykle dotyczy tych przypadków użycia:
- Pakiet: kanały krajowe są często uwzględniane w pakietach, a użytkownicy wybierają, do których pakietów chcą się zasubskrybować.
- Dodatki: niektóre kanały premium wymagają, aby użytkownicy selektywnie dodawali dodatkowe kanały do subskrypcji.
- Regionalna sieć sportowa (RSN): regionalne sieci sportowe są zwykle powiązane z „domową” lokalizacją użytkownika. Użytkownicy mogą oglądać treści w RSN nawet wtedy, gdy przebywają poza „domem”.
Subskrypcja innej firmy
Subskrypcja firmy zewnętrznej
Treści są dostępne dla subskrybentów z innego serwisu.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "externalsubscription" "availabilityStarts": "2015-01-01T00:00Z", "availabilityEnds": "2015-12-31T00:00Z", "requiresSubscription":{ "@type": "MediaSubscription", "@id": "https://www.example.com/faq", "name": "Example", "sameAs": "https://www.example.com/faq", "authenticator": { "@type": "Organization", "name": "TVE" } }, "eligibleRegion": { "@type": "Country", "name": "US" } } }
- Dodaj
authenticator
, aby wskazać, że inna usługa uwierzytelnia subskrybentów. Na przykład HBO GO wymaga subskrypcji u dostawcy telewizji kablowej.
Pakiety z poziomami dostępu
Treści z poziomu wspólnego są dostępne dla wszystkich subskrybentów niezależnie od ich pakietu subskrypcji. Powszechny poziom dotyczy wszystkich treści z category
subscription
. Więcej informacji o właściwości category
znajdziesz w sekcji Typ płatnego dostępu.
Dlaczego wymagany jest pakiet wspólny?
Wiele usług Google oferuje użytkownikom rekomendacje dotyczące programów i filmów. Dotyczy to wyszukiwarki Google, Androida TV i Asystenta Google. 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 na poziomie wspólnym, chyba że obsługujesz interfejs API uprawnień. Interfejs API pozwala Google określić, do których tytułów niestandardowych ma dostęp dany użytkownik.
Kiedy należy utworzyć pakiet poziomu wspólnego?
Pakiet wspólny 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ć pakietu wspólnego. Przykładem są dostawcy usług, którzy udostępniają treści wzajemnie wykluczające się w ramach wszystkich swoich pakietów.
Przykłady typowych poziomów
Poniżej przedstawiamy przykłady typowych poziomów.
Subskrypcja wielopoziomowa
W modelu subskrypcji wielopoziomowej dostawca usług ma kilka poziomów subskrypcji, takich jak Gold, Silver i Bronze. Użytkownicy z subskrypcją wyższego poziomu mają dostęp do wszystkich treści w ramach niższego poziomu. Użytkownicy z subskrypcją niższego poziomu nie mają dostępu do treści w ramach subskrypcji wyższego poziomu. Poniższy obraz 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 rozszerzanie swoich uprawnień i dodawanie kanałów do subskrypcji podstawowej. Użytkownicy mogą dodawać dowolną liczbę kanałów. Poniższy obraz przedstawia przykład struktury pakietu.

Jeśli masz kanał dostępny dla wszystkich użytkowników i nie wiąże się on z żadnymi kosztami, możesz połączyć pakiet z pakietem poziomu wspólnego.
W tym przykładzie kodu pakiet podstawowy jest poziomem wspólnym, 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 przecinaniem się treści
W modelu treści, w którym pakiety mają nakładające się treści, dostawca usług sprzedaje pakiety, które zawierają treści z innych pakietów. Na ilustracji poniżej znajduje się przykład struktury pakietu.

W tym przykładzie kodu dostawca oferuje 3 pakiety, w których niektóre treści są wspólne. W tym przypadku wymagany jest czwarty pakiet, który reprezentuje 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ę nakładają
W modelu treści, w którym pakiety treści nie nakładają się na siebie, dostawca usług sprzedaje pakiety, które nie zawierają treści z innych pakietów. Na ilustracji poniżej znajduje się przykład struktury pakietu.

W tym przykładzie dostawca oferuje 3 pakiety, w których żadne treści nie pokrywają się. Nie jest wymagany pakiet poziomu wspólnego.
"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 Zezwolenia
Użyj 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 z Google.
Żądanie
Aby otrzymać uprawnienia użytkownika, Google wysyła żądanie zawierające token OAuth użytkownika. Twój punkt końcowy musi zidentyfikować 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 zwrócić odpowiedź z tymi właściwościami:
Właściwość | |
---|---|
subscription |
Wymagany To pole w odpowiedzi głównej. |
subscription.type |
Wymagany Ta właściwość może mieć te wartości:
|
subscription.expiration_date |
Opcjonalny Data ważności tego uprawnienia w formacie ISO 8601, która zawiera strefę czasową. Więcej informacji znajdziesz w artykule Daty wygaśnięcia. |
entitlements |
Opcjonalny Ta własność wierzchołkowa zawiera wartości |
entitlements.entitlement |
Wymagany, 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 tej 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 są 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 jednocześnie. Który z nich wybierzesz, zależy od modelu subskrypcji.
Model subskrypcji | |
---|---|
Dostęp do katalogu strumieniowego jest taki sam dla wszystkich subskrybentów. | Nie musisz określać właściwości entitlements , ale musisz określić właściwość subscription.expiration_date . |
Dostęp do katalogu streamingowego zależy od szczegółów subskrypcji użytkownika. |
Jeśli Twój model subskrypcji obejmuje kilka poziomów lub dodatków, które wygasają z czasem, wykonaj jedną z tych czynności:
|
Przykładowe odpowiedzi
Oto przykłady odpowiedzi w różnych stanach subskrypcji:
- Aktywna subskrypcja
- aktywna subskrypcja z datą ważności,
- Brak subskrypcji
- aktywne subskrypcje wielu 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 strumieniowego niezależnie od typu subskrypcji.
{ "subscription" : { "type": "ActiveSubscription", } }
aktywna subskrypcja z datą ważności,
Aktywna subskrypcja z datą ważności
Użytkownik ma aktywną subskrypcję example.com, która ma datę ważności. W takim przypadku wszyscy subskrybenci mają dostęp do całego katalogu strumieniowego niezależnie od typu 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 wielu poziomów lub dodatków;
Aktywne subskrypcje dotyczące wielu poziomów lub dodatków
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 je równomiernie w czasie na Twój punkt końcowy. Dlatego możesz oszacować oczekiwaną średnią liczbę QPS dla swojego punktu końcowego za pomocą tej formuły:
Oczekiwana średnia liczba zapytań na sekundę = <łączna liczba użytkowników> / 21 600 sekund (6 godzin x 60 minut x 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ć jego adres URL.
Właściwości specyfikacji dostępu do działania
Informacje referencyjne znajdziesz w sekcji Właściwości specyfikacji dostępu do działania.