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 zapewnić mu bardziej trafne wrażenia w usługach Google i skierować go do tych treści.
Określanie wymagań dotyczących dostępu do treści
W katalogu musisz określić wymagania dotyczące dostępu dla każdego pakietu treści. Odpowiadając na nie, weź pod uwagę 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 wymagania dotyczące dostępu zależą 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 nic 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 ograniczony 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 systemu płatnego dostępu do treści w przypadku działań związanych z oglądaniem
Aby określić typ paywalla treści w przypadku 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 systemu płatnego dostępu do treści w przypadku działań związanych ze słuchaniem
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ść jest dostępna. Użyj co najmniej jednej z tych właściwości:
- Właściwość
eligibleRegionobiektu Action access specification. Ta właściwość jest wymagana. - Właściwość
ineligibleRegionobiektu Action access specification.
Użytkownik może uzyskać dostęp do treści, jeśli urządzenie znajduje się w dowolnym regionie określonym w atrybucie eligibleRegion i nie znajduje się w żadnym regionie określonym w atrybucie ineligibleRegion.
Właściwości eligibleRegion i ineligibleRegion mogą mieć te wartości:
- Lista
Country,CityiState. - Obiekt
GeoShape. Szczegółowe wymagania znajdziesz w sekcjiGeoShapeWłaściwości. - Lista
GeoShapeobiektów.
Jeśli treści są dostępne 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:
eligibleRegionz listą krajów. - Przykład 2:
eligibleRegionz obiektemGeoShape, który zawiera listę kodów pocztowych. - Przykład 3:
eligibleRegionz obiektemGeoShape, który zawiera listę kodów strefy sortowania (Forward Sortation Area – FSA). - Przykład 4:
eligibleRegionz obiektemGeoShape, który zawiera identyfikator DMA. - Przykład 5:
eligibleRegionz listąGeoShapeobiektów. Każdy z nich zawiera identyfikator obszaru DMA. - Przykład 6:
ineligibleRegionz 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 stref 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 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 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 Twoim punkcie końcowym uprawnień, aby otrzymać identyfikatory uprawnień użytkownika.
- Wyszukujemy wymagane identyfikatory uprawnień treści w pliku danych Media Actions.
- Dopasowujemy
entitlementIdużytkownika do właściwościidentifierobiektu subskrypcja mediów w pliku danych. Jeśli co najmniej jeden warunekentitlementIdjest spełniony, uznajemy, że użytkownik może uzyskać dostęp do treści.
Google zaleca używanie tej składni w przypadku atrybutu entitlementId:
<domain name> + colon (:) + <access level to content>
Przykłady składni:
example.com:basicexample.com:premiumexample.com:sports
Przykład identyfikatora uprawnienia
W pliku danych firmy MediaExampleCompany określono, że produkt Movie XYZ wymaga atrybutu 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" }, ... } }, ... }
Typowe przypadki użycia wspólnego dostępu
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 logowania): treści wymagają zalogowania się użytkownika, ale nie wymagają subskrypcji.
- Subskrypcja jednostopniowa: 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, zarówno filmów, jak i odcinków, w zależności od poziomu subskrypcji. Na przykład srebrny a 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 usługi innej firmy: treści wymagają zalogowania się użytkownika za pomocą danych dostawcy telewizji kablowej.
Bezpłatne (nie wymaga logowania)
Nie wymaga logowania
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
categorynanologinrequired. - Nie używaj symbolu
expectAcceptanceOf.
Bezpłatna (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
categorynafree. - 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 tego, czy są to filmy czy odcinki, i 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, takich jak 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
entitlementIdzwraca te identyfikatory:example.com:bronzeexample.com:silverexample.com:gold
- Jan subskrybuje poziom Brązowy. Punkt końcowy Twoje uprawnienia zwraca te
entitlementId:example.com:bronze
- Plik danych Media Actions musi spełniać te wymagania:
- Film A wymaga
example.com:bronze. - Film B wymaga
example.com:silver.
- Film A wymaga
W tej sytuacji Google określa te poziomy dostępu dla Jane i Johna:
- Zarówno Jan, jak i Anna mają dostęp do filmu A.
- Jane ma dostęp do filmu B, ale John 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 dodatku
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:
- Oprócz subskrypcji Basic Anna ma subskrypcje PRO i Sportz. Punkt końcowy uprawnień zwraca te identyfikatory
entitlementId:example.com:basicexample.com:proexample.com:sportz
- Jan ma tylko subskrypcję Basic. Punkt końcowy Twoje uprawnienia zwraca te
entitlementId:example.com:basic
- Plik danych Media Actions musi spełniać te wymagania:
- Film A wymaga
example.com:basic. - Film B wymaga
example.com:pro.
- Film A wymaga
W tej sytuacji Google określa te poziomy dostępu dla Jane i Johna:
- Zarówno Jan, jak i Anna mają dostęp do filmu A.
- Jane ma dostęp do filmu B, ale John 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 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
categorynapurchase. - W polu
expectAcceptanceOfw sekcjiactionAccessibilityRequirementpodaj cenę zakupu.
Wypożyczenie
Treści są dostępne przez ograniczony 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
categorynarental. - Wpisz
expectAcceptanceOfw poluactionAccessibilityRequirement, aby podać cenę wypożyczenia.
Telewizja na żywo
W pliku danych Media Actions możesz ograniczyć dostęp do kanału telewizji na żywo lub wydarzenia na podstawie tych 2 warunków 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 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 przedstawić ograniczenie.
Ten warunek zwykle ma zastosowanie w tych przypadkach:
- Pakiet: 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 „domyślną” lokalizację.
Subskrypcja innej firmy
Subskrypcja zewnętrzna
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
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 categorysubscription. Więcej informacji o właściwości category znajdziesz w sekcji Typ paywalla.
Dlaczego wymagany jest pakiet w ramach wspólnej wersji?
Wielu usług Google wyświetla użytkownikom rekomendacje seriali, programów i filmów. Aby spełnić 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 z określonymi pakietami subskrypcji.
Google zaleca tytuły dostępne w ramach wspólnej wersji, chyba że obsługujesz interfejs Entitlement API. Interfejs API umożliwia Google określenie tytułów spoza wspólnej puli, do których ma dostęp każdy użytkownik.
Kiedy należy utworzyć pakiet wspólnego poziomu?
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 we wszystkich pakietach udostępniają wzajemnie wykluczające się treści.
Typowe przykłady poziomów
Oto przykłady typowego poziomu:
Subskrypcja na różnych poziomach
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 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 tym przykładzie kodu pakiet Bronze 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. Na ilustracji poniżej przedstawiono przykład struktury 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 podstawowym.
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 treściami, które się przecinają
W modelu treści, w którym pakiety mają przecinającą się zawartość, dostawca usług sprzedaje pakiety, które zawierają część treści z innych pakietów. Na poniższym obrazie przedstawiono 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, 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ę 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. Na poniższym obrazie przedstawiono przykład struktury pakietu.
W poniższym przykładzie dostawca oferuje 3 pakiety, które nie zawierają żadnych wspólnych treści. 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 w 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 tego uprawnienia podana w formacie ISO 8601, która zawiera strefę czasową. Więcej informacji znajdziesz w sekcji Daty ważności. |
entitlements |
Opcjonalny Jest to właściwość główna, która zawiera wartości |
entitlements.entitlement |
Wymagane, jeśli dostęp do katalogu streamingowego różni się w zależności od rodzaju subskrypcji. Ta usługa zawiera |
entitlements.expiration_date |
Opcjonalny Data wygaśnięcia subskrypcji w formacie ISO 8601, która obejmuje strefę czasową. Więcej informacji znajdziesz w sekcji Daty ważności. |
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
Oto przykładowe odpowiedzi dotyczące różnych stanów 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 transmisji strumieniowych niezależnie od rodzaju subskrypcji.
{ "subscription" : { "type": "ActiveSubscription", } }
aktywna subskrypcja z datą ważności,
Aktywna subskrypcja z datą wygaśnięcia
Użytkownik ma aktywną subskrypcję example.com, która ma datę ważności. W tym 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 wielu poziomów lub dodatków;
Aktywne subskrypcje na wielu 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ę, Google rozkłada zapytania 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 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ć adres URL punktu końcowego.
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.