Użytkownicy wolą oglądać lub słuchać treści, do których mają już dostęp, np. swoich treści dostępnych w ramach subskrypcji. Jeśli Google wie, do jakich treści użytkownik ma dostęp w Twojej aplikacji lub na platformie, możemy utworzyć lepszy wynik wyszukiwania lub odpowiedź na polecenie tej treści.
Wymagania dotyczące dostępu do treści
Musisz określić wymagania dotyczące dostępu do każdego pakietu treści w katalogu. Jeśli się na to zdecydujesz, rozważ te pytania:
- Czy użytkownicy muszą logować się w aplikacji lub platformie, aby mieć dostęp do treści?
Czy użytkownicy potrzebują subskrypcji?
Tylko działania dotyczące oglądania:
- Czy użytkownicy potrzebują subskrypcji u zewnętrznego dostawcy usług?
- Czy masz abonament wielopoziomowy, wielopakowy lub dodatkowy?
Tylko obejrzenia: czy użytkownicy muszą wypożyczać lub kupować 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 płatnika
Możesz ograniczyć dostęp do treści według typu płatnej treści. W tabeli poniżej znajdziesz szczegółowe informacje o różnych typach płatności:
Typ płatnika | Przykład | Kategoria |
---|---|---|
Nie musisz dokonywać żadnego zakupu ani logować się. | Trzask | nologinrequired |
Użytkownik musi się zalogować, ale nie potrzebuje 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 typu subskrypcji. | Hulu (dodatki) |
|
Treści są dostępne przez określony czas po zakupie. | Vudu | rental |
Treść jest dostępna przez nieokreślony czas po zakupie. | Vudu | purchase |
Treści są dostępne w ramach abonamentu telewizji kablowej. | HBO Go | externalSubscription |
Typ rozliczenia w przypadku działań zegarka
Aby określić typ płatnych treści w przypadku działań zegarka, 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 systemu paywall dla działań Listen
Aby określić typ treści treści dla działań nasłuchujących, 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, w których treści są dostępne. Użyj jednej z tych właściwości lub obu naraz:
- 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 polu eligibleRegion
i nie znajduje się w regionie określonym w zasadzie ineligibleRegion
.
Właściwości eligibleRegion
i ineligibleRegion
zezwalają na te wartości:
- Lista
Country
,City
iState
. - Obiekt
GeoShape
. Szczegółowe wymagania znajdziesz w sekcji dotyczącej właściwościGeoShape
. - Lista obiektów
GeoShape
.
Jeśli treści są dostępne globalnie, użyj tej wartości specjalnej dla eligibleRegion
:
"eligibleRegion": "EARTH",
Przykłady zastosowaniaodpowiedniego regionu
Oto przykłady zastosowania właściwości eligibleRegion
:
- Przykład 1:
eligibleRegion
z listą krajów. - Przykład 2: obiekt
eligibleRegion
z obiektemGeoShape
zawierającym listę kodów pocztowych. - Przykład 3: obiekt
eligibleRegion
z obiektemGeoShape
, który zawiera listę kodów FSA (Forwardsortation Area), - Przykład 4:
eligibleRegion
z obiektemGeoShape
, który zawiera identyfikator DMA. - Przykład 5:
eligibleRegion
z listą obiektówGeoShape
. Każdy zawiera identyfikator DMA. - Przykład 6:
ineligibleRegion
zablokowane kody pocztowe.
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
zawierającym 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
zawierającym listę kodów obszaru przekierowywania (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
zawierającym 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ą GeoShape
obiektów.
Każdy 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 uprawnienia (entitlementId
) odnosi się do ciągu znaków, który reprezentuje dostęp do grupy treści w Twoim katalogu multimediów. Aby określić, czy użytkownik ma dostęp do Twoich treści, Google wykonuje te czynności:
- Wysyłamy interfejs API do punktu końcowego uprawnień, by otrzymać identyfikatory uprawnień użytkownika.
- Sprawdzamy wymagane identyfikatory treści w pliku danych działań związanych z mediami.
- Dopasowanie
entitlementId
użytkownika do właściwościidentifier
obiektu subskrypcji multimediów w pliku danych. Jeśli co najmniej 1 z nich pasuje do elementuentitlementId
, określamy, że użytkownik ma do nich dostęp.
Google zaleca używanie tej składni elementu 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:
{ "@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 dostępu
Oto typowe przypadki użycia dostępu:
- Bezpłatne (nie jest wymagane logowanie): treści są dostępne bez logowania, subskrypcji i zakupów.
- Bezpłatne (wymagane logowanie): treści wymagają zalogowania się, ale nie wymagają subskrypcji.
- Subskrypcja jednopoziomowa: zawartość wymaga subskrypcji. Wszyscy subskrybenci mają dostęp do tych samych treści (filmów i odcinków) bez względu na pakiet subskrypcji.
- Subskrypcja wielopoziomowa: zawartość wymaga subskrypcji. Subskrybenci mają dostęp do różnych treści, niezależnie od tego, czy są to filmy czy odcinki, w zależności od poziomu subskrypcji. na przykład Srebrny lub Złoty.
- Subskrypcja dodatkowa: zawartość wymaga subskrypcji. Subskrybenci mogą dodawać do subskrypcji treści premium.
- Zakup jednorazowy: użytkownik może kupić treści, a później mieć do nich nieograniczony dostęp.
- Telewizja na żywo: subskrypcja obejmuje dostęp do kanałów lokalnych, krajowych i premium.
- Subskrypcja innej firmy: użytkownik wymaga, aby zalogował się u swojego operatora telewizji kablowej.
Bezpłatnie (nie jest wymagane logowanie)
Logowanie nie jest wymagane
Treści są dostępne bez logowania i bez subskrypcji.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "nologinrequired", "availabilityStarts": "2015-01-01T00:00Z", "availabilityEnds": "2015-12-31T00:00Z", "eligibleRegion": { "@type": "Country", "name": "US" } } }
- Ustaw w polu
category
nanologinrequired
. - Nie podawaj
expectAcceptanceOf
.
Bezpłatne (wymagane logowanie)
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 w polu
category
nafree
. - Nie podawaj
expectAcceptanceOf
.
Subskrypcja jednopoziomowa
W modelu jednopoziomowym dostawca usług ma 1 poziom. Wszyscy subskrybenci mają dostęp do tych samych treści (filmów i odcinków) bez względu na pakiet 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 Złoty, Srebrny i Brązowy. Użytkownicy z subskrypcją wyższego poziomu mają dostęp do wszystkich treści z niższego poziomu. Użytkownicy, którzy mają subskrypcję niższego poziomu, nie mają jednak dostępu do treści najwyższego poziomu.
Weź pod uwagę ten scenariusz:
- Janka ma poziom Złoty. Punkt końcowy uprawnień zwraca następujące identyfikatory
entitlementId
:example.com:bronze
example.com:silver
example.com:gold
- Janek ma poziom Brązowy. Punkt końcowy uprawnień zwraca ten obiekt (
entitlementId
):example.com:bronze
- Twój plik danych działań związanych z multimediami opisuje te wymagania:
- Film A wymaga:
example.com:bronze
. - Film B wymaga:
example.com:silver
.
- Film A wymaga:
W tym scenariuszu Google określa następujące poziomy dostępu dla Jane i Jana:
- Zarówno Jan, jak i Jan mają dostęp do Filmu A.
- Anna ma dostęp do Filmu B, ale Jan nie ma do niego dostępu.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "subscription", "requiresSubscription": { "@type": "MediaSubscription", "@id": "http://www.example.com/basic_subscription", "name": "Bronze", "commonTier": true ... }, ... } }
Subskrypcja dodatkowa
W modelu subskrypcji dodatków dostawca usług umożliwia użytkownikom rozszerzanie uprawnień i dodawanie kanałów do subskrypcji podstawowej. Użytkownicy mogą dodać dowolną liczbę kanałów.
Weź pod uwagę ten scenariusz:
- Oprócz subskrypcji podstawowej Anna ma konta PRO i Sportz. Punkt końcowy uprawnień zwraca następujące identyfikatory
entitlementId
:example.com:basic
example.com:pro
example.com:sportz
- Jan ma tylko subskrypcję podstawową. Punkt końcowy uprawnień zwraca ten obiekt (
entitlementId
):example.com:basic
- Twój plik danych działań związanych z multimediami opisuje te wymagania:
- Film A wymaga:
example.com:basic
. - Film B wymaga:
example.com:pro
.
- Film A wymaga:
W tym scenariuszu Google określa następujące poziomy dostępu dla Jane i Jana:
- Zarówno Jan, jak i Jan mają dostęp do Filmu A.
- Anna ma dostęp do Filmu B, ale Jan nie ma do niego dostępu.
{ "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 } } } }
Zakup jednorazowy
Kup
Treść jest dostępna 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 w polu
category
napurchase
. - Umieść
expectAcceptanceOf
wactionAccessibilityRequirement
, aby określić cenę zakupu.
Wypożyczenie
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 w polu
category
narental
. - Aby określić cenę za wypożyczenie, dodaj właściwość
expectAcceptanceOf
w poluactionAccessibilityRequirement
.
Telewizja na żywo
W pliku danych Media Actions możesz ograniczyć dostęp do kanału lub zdarzenia telewizji na żywo zgodnie z tymi 2 warunkami:
-
Lokalizacja urządzenia użytkownika
Aby ograniczyć dostęp do kanału telewizyjnego, określ obszar, w którym użytkownicy będą do niego mieli 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 wskazać ograniczenia.
Ten warunek dotyczy zwykle następujących przypadków użycia:
- W pakiecie: kanały krajowe są często częścią pakietów, a użytkownicy wybierają subskrypcję, którą chcą zasubskrybować.
- Dodatek: niektóre kanały premium wymagają od użytkowników dodania wybranych kanałów do subskrypcji.
- Regionalna sieć sportowa (RSN): odpowiedzi są zwykle powiązane z domem użytkownika. Użytkownicy mogą oglądać treści w RSN, nawet jeśli wychodzą poza ich dom.
Subskrypcja innej firmy
Subskrypcja innej firmy
Treści są dostępne dla subskrybentów z 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" } }, "eligibleRegion": { "@type": "Country", "name": "US" } } }
- Dodaj
authenticator
, aby wskazać, że subskrybentów uwierzytelnia Cię inna usługa. Na przykład HBO GO wymaga subskrypcji od operatora telewizji kablowej.
Popularne pakiety poziomu
Treść typowa jest dostępna dla wszystkich subskrybentów, niezależnie od ich pakietu subskrypcji. Typ wspólnego poziomu dotyczy wszystkich treści z tagiem category
właściwości subscription
. Więcej informacji o właściwości category
znajdziesz w sekcji Paywall.
Dlaczego wymagany jest wspólny pakiet poziomu?
Wiele usług Google udostępnia użytkownikom rekomendacje dotyczące seriali i filmów, w tym wyszukiwarki Google, Androida TV i Asystenta Google. Aby eksponować koszty użytkowników, Google musi zrozumieć, jakie treści są dostępne dla wszystkich subskrybentów za pomocą wspólnego poziomu. Musimy też wiedzieć, jakie treści są dostępne dla subskrybentów z określonymi pakietami subskrypcji.
Zalecamy rekomendowanie tytułów dostępnych na typowym poziomie, chyba że obsługujesz interfejs API uprawnień. Pozwala on nam zrozumieć, jakie tytuły są niedostępne dla poszczególnych użytkowników.
Kiedy należy utworzyć wspólny pakiet poziomu?
Pakiet wspólny jest wymagany, gdy Twoja usługa oferuje treści dostępne dla wszystkich subskrybentów. Obejmuje to usługi, które oferują tylko jeden pakiet, oraz usługi, które oferują wiele pakietów lub dodatków.
Dostawcy, którzy nie mają dostępu do treści dla wszystkich subskrybentów, nie muszą tworzyć wspólnego pakietu. Przykładem mogą być dostawcy usług, którzy udostępniają wzajemnie wykluczające się treści we wszystkich swoich pakietach.
Przykłady popularnych poziomów
Oto przykłady popularnego poziomu.
Subskrypcja wielopoziomowa
W modelu subskrypcji wielopoziomowej dostawca usług ma kilka poziomów subskrypcji, takich jak Złoty, Srebrny i Brązowy. Użytkownicy z subskrypcję wyższego poziomu mają dostęp do wszystkich treści z niższego poziomu. Użytkownicy z niższym poziomem nie mają dostępu do treści z wyższego poziomu. Poniższa ilustracja przedstawia strukturę pakietu.
W poniższym przykładzie kod jest wykonany z brązu, ponieważ wszyscy użytkownicy mają dostęp do treści z tego poziomu.
"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 uprawnień i dodawanie kanałów do subskrypcji podstawowej. Użytkownicy mogą dodać dowolną liczbę kanałów. Poniższa ilustracja przedstawia strukturę pakietu.
Jeśli masz kanał dostępny dla wszystkich użytkowników, za który nie ponosisz opłat, możesz scalić go ze wspólnym pakietem.
W przykładzie poniżej przykładowy pakiet podstawowy to wspólny poziom, ponieważ wszyscy użytkownicy mają dostęp do wszystkich zawartych w nim treści.
"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ścią, która się krzyżuje;
W modelu treści, gdzie pakiety mają treść, która się krzyżuje, dostawca usług sprzedaje pakiety zawierające niektóre treści z innych pakietów. Poniższa ilustracja przedstawia strukturę pakietu.
W poniższym przykładzie kod oferuje 3 pakiety, w których część treści przecina się we wszystkich pakietach. W tym przypadku wymagany jest czwarty pakiet reprezentujący typ wspólny. Musi on 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 wspólnych treści
W modelu treści, w którym wszystkie pakiety treści się nie łączą, dostawca usług sprzedaje pakiety, które nie zawierają treści z innych pakietów. Poniższa ilustracja przedstawia strukturę pakietu.
W poniższym przykładzie dostawca oferuje 3 pakiety bez przecinających się treści. Nie jest wymagany żaden wspólny pakiet poziomu.
"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ń
Za pomocą informacji z tej sekcji możesz 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 protokołu OAuth 2.0 w Google.
Żądanie
Aby odebrać 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. Zobacz ten przykład:
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 jest pole w odpowiedzi głównej. |
subscription.type |
Wymagany Ta właściwość może mieć następujące 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 sekcji Daty ważności. |
entitlements |
Opcjonalny Ta właściwość główna zawiera wartości |
entitlements.entitlement |
Wymagany, jeśli dostęp do katalogu strumieniowego przesyłania danych różni się w zależności od typu subskrypcji. Ta właściwość zawiera właściwość |
entitlements.expiration_date |
Opcjonalny Data wygaśnięcia tej subskrypcji w formacie ISO 8601, która zawiera strefę czasową. Więcej informacji znajdziesz w sekcji Daty ważności. |
Daty ważności
W odpowiedzi na punkt końcowy 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ć tylko jedną z tych opcji lub obie. Twój wybór zależy od modelu subskrypcji.
Model subskrypcji | |
---|---|
Dostęp do katalogu strumieniowego przesyłania danych jest taki sam dla wszystkich subskrybentów. | Nie musisz określać właściwości entitlements , więc podaj właściwość subscription.expiration_date . |
Dostęp do katalogu strumieniowego przesyłania danych zależy od szczegółów subskrypcji użytkownika. |
Jeśli Twój model subskrypcji ma wiele poziomów lub dodatki, które z czasem tracą ważność, wykonaj jedną z tych czynności:
|
Przykładowe odpowiedzi
Oto przykładowe odpowiedzi na różne stany subskrypcji:
- Aktywna subskrypcja
- Aktywna subskrypcja z datą ważności
- Brak subskrypcji
- Aktywne subskrypcje na wielu poziomach 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 usług strumieniowego przesyłania danych, 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ę domeny example.com, której okres ważności wygasa. W tym przypadku wszyscy subskrybenci mają dostęp do całego katalogu Twoich treści strumieniowego przesyłania danych, niezależnie od ich typu.
{ "subscription" : { "type": "ActiveSubscription", "expiration_date": "2019-11-10T10:00:00Z" } }
Brak subskrypcji
Brak subskrypcji
Użytkownik nie ma subskrypcji example.com.
{ "subscription" : { "type": "InactiveSubscription" } }
Aktywne subskrypcje na wielu poziomach lub dodatków
Aktywne subskrypcje kilku 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" } ] }
Limit liczby żądań
Google odświeża informacje o uprawnieniach użytkownika do co sześć godzin. Aby wygładzić maksymalną liczbę zapytań na sekundę (QPS), Google równomiernie rozkłada zapytania na punkt końcowy. Z tego względu możesz oszacować szacowaną średnią liczbę zapytań na sekundę 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 zmienić Twój odstęp 6-godzinny. 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
Więcej informacji znajdziesz w sekcji właściwości specyfikacji dostępu do działania.