Wymagania dotyczące dostępu

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

Rysunek 1. Wymagania dotyczące dostępu ułatwiają subskrybentom dostęp treści dostępne w Twojej aplikacji lub na platformie.

Określanie wymagań dotyczących dostępu do treści

Musisz określić wymagania dotyczące dostępu dla każdego pakietu treści w katalogu. W takim przypadku weź pod uwagę te kwestie:

  • Czy użytkownicy muszą logować 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 od zewnętrznego dostawcy usług?
    • Czy oferujesz wielopoziomową subskrypcję obejmującą wiele pakietów lub dodatkowe subskrypcje?
  • Tylko działania związane z oglądaniem: 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 paywalla

Możesz ograniczyć dostęp do treści według typu paywalla. Tabela poniżej szczegółowo opisujemy różne typy paywalla:

Typ paywalla Przykład Kategoria
Nie musisz niczego kupować ani logować się. Crackle nologinrequired
Użytkownik musi być zalogowany, ale nie potrzebuje płatnej subskrypcji. vudu (AVOD) free
Użytkownik musi mieć aktywną subskrypcję. Dostęp jest niezależny od: na poziomie subskrypcji. Netflix

subscription

Użytkownik musi mieć aktywną subskrypcję. Dostęp zależy od typ subskrypcji. Hulu (dodatki)

subscription

Treści są dostępne przez ograniczony czas po zakup. Vudu rental
Treści są dostępne przez czas nieokreślony po zakup. Vudu purchase
Treści są dostępne w ramach abonamentu telewizji kablowej. HBO Go externalSubscription

Typ paywalla dla działań związanych z oglądaniem

Aby określić typ paywalla dla działań oglądania, użyj parametru category w sekcji Specyfikacja 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 Paywall za działania nasłuchiwania

Aby określić typ paywalla dla treści w przypadku działań związanych z słuchaniem, użyj parametru category w sekcji obiekt 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 lub obie te właściwości:

Użytkownik może uzyskiwać dostęp do treści, jeśli lokalizacja urządzenia znajduje się w dowolnym regionie, określono w eligibleRegion i nie należy do żadnego regionu określonego w ineligibleRegion

Właściwości eligibleRegion i ineligibleRegion umożliwiają: wartości:

Jeśli treści są dostępne na całym świecie, użyj następującej wartości specjalnej jak eligibleRegion:

"eligibleRegion": "EARTH",

Przypadki użycia allowRegion

Oto przykłady przypadków użycia właściwości eligibleRegion:

  • Przykład 1: eligibleRegion z listą krajów.
  • Przykład 2: eligibleRegion z obiektem GeoShape, który zawiera listę kodów pocztowych.
  • Przykład 3: eligibleRegion z obiektem GeoShape, który zawiera listę kodów FSA (Forward Sortation Area – sortowania).
  • Przykład 4: eligibleRegion z obiektem GeoShape, który zawiera identyfikator DMA.
  • Przykład 5: eligibleRegion z listą obiektów GeoShape. 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 FSA (Forward Sortation Area – sortowanie):


"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 uprawnienia (entitlementId) odnosi się do ciągu znaków, który reprezentuje dostęp do grupy treści z Twojego katalogu multimediów. Aby ustalić, czy użytkownik ma dostęp do Twoich treści, Google wykonuje te czynności:

  1. Wywołanie interfejsu API Punkt końcowy uprawnień, do którego otrzymasz identyfikatory uprawnień.
  2. Szukamy wymaganych identyfikatorów uprawnień do treści w Twoich mediach Plik danych działań.
  3. Dopasowujemy entitlementId użytkownika do identifier właściwości subskrypcja multimediów w pliku danych. Jeśli co najmniej 1 wynik entitlementId, określamy, że użytkownik ma dostęp do treści.
Rysunek 2. Jeden z identyfikatorów uprawnień użytkownika pasuje wymagany identyfikator treści.

Google zaleca użycie tej składni w polu entitlementId:

<domain name> + colon (:) + <access level to content>

Przykłady składni:

  • example.com:basic
  • example.com:premium
  • example.com:sports

Przykład identyfikatora uprawnień

Plik danych MediaExampleCompany określa, że Movie XYZ wymaga parametru example.com:basic entitlementId, na przykład:

{
  "@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:

  • Bezpłatnie (bez logowania): treści są dostępne bez logowania, subskrypcji czy zakupu.
  • Bezpłatnie (wymagane logowanie): wymaga zalogowania się, ale nie wymaga subskrypcji.
  • Subskrypcja jednopoziomowa: Treści wymagają subskrypcji. Wszyscy subskrybenci mają dostęp do tego samego treści (filmów i odcinków), niezależnie od ich subskrypcji pakietu SDK.
  • Subskrypcja wielopoziomowa: treści wymagają subskrypcji. Subskrybenci mają dostęp do różnych treści, filmów czy odcinków – w zależności od poziomu subskrypcji. Przykład: Srebro kontra Złoty.
  • Subskrypcja dodatku: treści. wymaga subskrypcji. Subskrybenci mogą dodawać płatne treści standardowej subskrypcji.
  • Jednorazowy zakup: treści można zostanie zakupiony, dzięki czemu użytkownik będzie miał do niej dostęp bezterminowo.
  • Telewizja na żywo: subskrypcja obejmuje dostęp do: lokalnych, krajowych i premium.
  • Subskrypcja innej firmy: Treści wymagają od użytkownika zalogowania się u dostawcy telewizji kablowej.

Bezpłatnie (logowanie się nie jest wymagane)

Logowanie się nie jest wymagane

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 category na nologinrequired.
  • Nie uwzględniaj wartości expectAcceptanceOf.

Bezpłatnie (zalogowanie się jest wymagane)

Wymagane logowanie

Treści wymagają od użytkowników zalogowania się, ale nie są wymagane subskrypcji.


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "free",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}
  • Ustaw category na free.
  • Nie uwzględniaj wartości expectAcceptanceOf.

Subskrypcja jednopoziomowa

W modelu subskrypcji jednopoziomowej dostawca usług ma jeden typ subskrypcji. Wszyscy subskrybenci mają dostęp do tych samych treści niezależnie od tego, filmów czy 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 warstwowym modelu subskrypcji usługodawca ma wiele poziomów subskrypcji, takich jak Złoty, Srebrny, Brązowy. Użytkownicy, którzy mają subskrypcję najwyższego poziomu, mają dostęp do wszystkich treści z niższej kategorii. Jednak użytkownicy, którzy należą do niższego poziomu subskrypcja nie może uzyskać dostępu do treści wyższego poziomu.

Rysunek 3. Warstwowy model subskrypcji dotyczące reprezentacji uprawnień.

Przyjrzyjmy się temu scenariuszowi:

  • Janina subskrybuje poziom złoty. Twoje uprawnienia punkt końcowy zwraca te identyfikatory entitlementId:
    • example.com:bronze
    • example.com:silver
    • example.com:gold
  • Jan subskrybuje poziom Brązowy. Twoje uprawnienia Punkt końcowy zwraca tę wartość entitlementId:
    • example.com:bronze
  • Plik danych Media Actions zawiera te wymagania:
    • Film A wymaga example.com:bronze.
    • Film B wymaga example.com:silver.

W takim przypadku Google określa następujące poziomy dostępu dla Anny: a Jan:

  • Zarówno Anna, jak i John mają dostęp do filmu A.
  • Janina ma dostęp do Filmu B, ale Jan nie ma dostępu.
{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "subscription",
    "requiresSubscription": {
      "@type": "MediaSubscription",
      "@id": "http://www.example.com/basic_subscription",
      "name": "Bronze",
      "commonTier": true
      ...
    },
    ...
  }
}

Subskrypcja dodatku

W modelu subskrypcji dodatków dostawca usług umożliwia użytkownikom rozszerzyć swoje uprawnienia i dodać kanały do subskrypcji podstawowej. Użytkownicy mogą dodać dowolną liczbę kanałów.

Rysunek 4. Model subskrypcji dodatków dotyczące reprezentacji uprawnień.

Przyjrzyjmy się temu scenariuszowi:

  • Janina ma kanały PRO i PRO, a nie tylko Podstawowa. Punkt końcowy uprawnień zwraca wartość te identyfikatory (entitlementId):
    • example.com:basic
    • example.com:pro
    • example.com:sportz
  • Jan ma tylko subskrypcję Podstawowa. Twoje uprawnienia Punkt końcowy zwraca tę wartość entitlementId:
    • example.com:basic
  • Plik danych Media Actions zawiera te wymagania:
    • Film A wymaga example.com:basic.
    • Film B wymaga example.com:pro.

W takim przypadku Google określa następujące poziomy dostępu dla Anny: a Jan:

  • Zarówno Anna, jak i John mają dostęp do filmu A.
  • Janina ma dostęp do Filmu B, ale Jan nie ma 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

Zakup

Treści są dostępne przez czas nieokreślony po zakup.


{
  "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 na purchase.
  • Uwzględnij expectAcceptanceOf w actionAccessibilityRequirement, aby wskazać cenę zakup.

Wypożyczenie

Treści są dostępne przez ograniczony czas po zakup.


{
  "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 na rental.
  • Uwzględnij expectAcceptanceOf w actionAccessibilityRequirement, aby wskazać cenę do wypożyczenia.

Telewizja na żywo

W pliku danych działań związanych z multimediami możesz ograniczyć dostęp do telewizji na żywo. channel lub event na podstawie następujące 2 warunki:

  • Lokalizacja urządzenia użytkownika

    Aby ograniczyć dostęp do kanału telewizyjnego, określ obszar, na którym użytkownicy mają do nich dostęp. Ten warunek dotyczy zwykle transmisji lokalnych Kanały telewizyjne.

  • Stan konta użytkownika

    Jeśli dostęp do kanału telewizyjnego zależy od ustawień na poziomie konta użytkownika, należy użyć funkcji identyfikatorów uprawnień na nie stanowią ograniczenia.

    Zwykle ten warunek ma zastosowanie w tych przypadkach użycia:

    • Pakiet: kanały krajowe są często częścią a użytkownicy wybierają pakiet, który chcą subskrybować.
    • Dodatek: niektóre kanały premium wymagają od użytkowników wybrać dodatkowe kanały do subskrypcji.
    • Regionalna sieć sportowa (RSN): numery RSN są zwykle powiązane z domeną użytkownika lokalizacji. Użytkownicy mogą oglądać treści na RSN nawet wtedy, gdy przebywają poza swoim „domem” lokalizacji.

Subskrypcja innej firmy

Subskrypcja innej firmy

Treści są dostępne dla subskrybentów w innej usłudze.


{
  "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 usługa uwierzytelnia subskrybentów. Na przykład HBO GO wymaga: operatora telewizji kablowej.

Typowe pakiety poziomu

Treści z poziomu wspólnego są dostępne dla wszystkich subskrybentów niezależnie pakietu subskrypcji. Wspólna warstwa dotyczy wszystkich treści z atrybutem category z subscription. Więcej informacji o właściwości category znajdziesz w Typ paywall.

Dlaczego wymagany jest wspólny pakiet poziomu?

Wiele usług Google zapewnia dostęp do telewizji polecać użytkownikom filmy; w tym obejmuje wyszukiwarkę Google, Androida TV i Asystenta Google. Aby ustawić użytkownika co do kosztów, Google musi wiedzieć, jakie treści są dostępne dla wszystkich subskrybentów za pomocą wspólnego poziomu. Google musi też wiedzieć, treści są dostępne dla subskrybentów z określonymi pakietami subskrypcji.

Google zaleca tytuły dostępne na poziomie wspólnym, chyba że obsługujesz entitlement API. Interfejs API pozwala Google rozpoznawać tytuły, które nie są często używane przez poszczególne grupy użytkownik ma dostęp do filmu.

Kiedy należy utworzyć wspólny pakiet poziomów?

Jeśli Twoja usługa oferuje treści, które dostępne dla wszystkich subskrybentów. Obejmuje to usługi, które oferują tylko jeden pakiet. i usługi, które oferują wiele pakietów lub dodatków.

Dostawcy, którzy nie mają dostępu do treści dostępnych dla wszystkich subskrybentów, nie muszą tworzyć na wspólny pakiet poziomów. Przykładem mogą być dostawcy usług, którzy wzajemnie się wykluczają we wszystkich pakietach.

Typowe przykłady poziomów

Oto przykłady wspólnego poziomu.

Subskrypcja wielopoziomowa

W modelu subskrypcji wielopoziomowej dostawca usług ma wiele subskrypcji poziomów, takie jak Złoty, Srebrny i Brązowy. Użytkownicy z w ramach subskrypcji wyższego poziomu – do wszystkich treści z niższych poziomów. Użytkownicy użytkownicy z subskrypcją niższego poziomu nie mają dostępu do treści na górze. . Poniższy obraz przedstawia przykład struktury pakietu.

Na poziomie złotym znajdują się wszystkie treści z poziomu srebrnego,
            zawiera cały poziom Brązowy.
Rysunek 5. Wielopoziomowa struktura pakietów subskrypcji.

W poniższym przykładzie kodu pakiet Brąz jest typową warstwą, ponieważ wszystkie 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 swoje uprawnienia, a także dodawać kanały do subskrypcji podstawowej. Użytkownicy mogą dodać jako dowolną liczbę kanałów. Ten obraz przedstawia przykład pakietu do jego struktury.

Każdy użytkownik zaczyna od kanału podstawowego i może dodać
            dowolną kombinację kanałów PRO, Sportz i Moviemax.
Rysunek 6. Struktura pakietów subskrypcji dodatków.

Jeśli masz kanał dostępny dla wszystkich użytkowników i nie wiąże się to z żadnymi kosztami kanału, możesz scalić ten pakiet ze wspólnym pakietem poziomów.

W poniższym przykładzie kodu pakiet podstawowy jest wspólnym poziomem, ponieważ wszystkie 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 zawierają treści, które przecinają usługę, dostawca sprzedaje pakiety zawierające część treści z innych pakietów. Poniższy obraz przedstawia przykład struktury pakietu.

Diagram Venna, w którym nakładanie się pakietów 1, 2 i 3 wynosi
            o etykiecie „Typowy poziom”.
Rysunek 7. Struktura pakietu z przecinającymi się treściami.

W poniższym przykładzie kodu dostawca oferuje 3 pakiety, z których część które przecinają się we wszystkich pakietach. W tym przypadku czwarty pakiet reprezentujący wspólny poziom, jest wymagana. Musi zawierać wszystkie treści we wszystkich trzech 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 przecinają

W modelu treści, w którym wszystkie pakiety treści nie przecinają się, usługa dostawca sprzedaje pakiety, które nie zawierają treści z innych pakietów. Poniższy obraz przedstawia przykład struktury pakietu.

Pakiety 1, 2 i 3 są całkowicie oddzielne.
Rysunek 8. Struktura pakietu bez przecinających się elementów i treści.

W poniższym przykładzie dostawca oferuje 3 pakiety bez treści. które przecinają wszystkie pakiety. 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ń

Wykorzystaj informacje z tej sekcji do hostowania punktu końcowego HTTPS, który zwraca powiązanych z użytkownikiem uprawnienia.

Warunek wstępny

Zanim zaczniesz, sprawdź, czy Twoja usługa obsługuje obsługa protokołu OAuth 2.0 w Google;

Żądanie

Aby otrzymać uprawnienia użytkownika, Google wysyła żądanie, które zawiera token OAuth użytkownika. Punkt końcowy musi identyfikować użytkownika na podstawie tego protokołu OAuth token. 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 jest pole w odpowiedzi na poziomie roota.

subscription.type

Wymagany

Właściwość ta może mieć następujące wartości:

  • ActiveSubscription: użytkownik ma aktywną subskrypcję z dostawcą.
  • ActiveTrial: użytkownik ma aktywną wersję próbną usługi dostawcy usług.
  • InactiveSubscription: użytkownik nie ma aktywnego subskrypcji lub aktywnej wersji próbnej.
subscription.expiration_date

Opcjonalny

Data ważności tego uprawnienia w formacie Format ISO 8601, który obejmuje też strefę czasową. Więcej informacji: Daty ważności

entitlements

Opcjonalny

Ta usługa główna zawiera wartości entitlementId, które blokady użytkowników.

entitlements.entitlement

Wymagany, jeśli dostęp do katalogu strumieniowego przesyłania danych jest różny na podstawie typu subskrypcji.

Ta właściwość zawiera: entitlementId. Więcej Więcej informacji zawiera Identyfikator uprawnień.

entitlements.expiration_date

Opcjonalny

Data wygaśnięcia tej subskrypcji podana w formacie Format ISO 8601, który obejmuje też strefę czasową. Więcej informacji: Daty ważności

Daty ważności

Odpowiedź punktu końcowego zawiera 2 właściwości, które dotyczą wygaśnięcia daty: subscription.expiration_date i entitlements.expiration_date. Ty może zawierać jeden z nich lub żaden z nich, ale nie oba. To, którego z nich użyjesz, zależy od tego, model subskrypcji.

Model subskrypcji
Wszyscy subskrybenci mają taki sam dostęp do katalogu strumieniowania. Ponieważ nie trzeba określać entitlements należy podać subscription.expiration_date.

Dostęp do katalogu strumieniowania zależy od szczegółów subskrypcji.

Jeśli Twój model subskrypcji ma wiele poziomów lub dodatków, wygasają z czasem, wykonaj jedną z tych czynności:

  • Jeśli wszystkie wartości entitlements.entitlement wygasną w tym samym czasie: subscription.expiration_date.
  • Jeśli niektóre wartości entitlements.entitlement wygasną w różnych przedziałach czasu, wpisz entitlements.expiration_date.

Przykładowe odpowiedzi

Poniżej znajdziesz przykładowe odpowiedzi 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 w przypadku każdego, wszyscy subskrybenci mają dostęp do całego katalogu bez względu na rodzaj 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, a subskrypcja ma datę ważności. W tym przypadku wszyscy subskrybenci mają dostępu do całego katalogu strumieniowania niezależnie od jego subskrypcji typu.


{
  "subscription" : {
    "type": "ActiveSubscription",
    "expiration_date": "2019-11-10T10:00:00Z"
  }
}

Brak subskrypcji

Brak subskrypcji

Użytkownik nie ma subskrypcji domeny example.com.


{
  "subscription" : {
    "type": "InactiveSubscription"
  }
}

Aktywne subskrypcje wielu poziomów lub dodatków

Aktywne subskrypcje wielu poziomów lub dodatków

Użytkownik wykupił 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 co 6 godzin. Do wygładza maksymalną liczbę zapytań na sekundę (QPS), Google rozdziela zapytania do punktu końcowego. Dzięki temu możesz oszacować oczekiwaną średnią Zapytania na sekundę dla punktu końcowego według 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ć 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łań

Zobacz Właściwości specyfikacji dostępu do działań. i informacjami o nich.