Wymagania dotyczące dostępu

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.

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

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

subscription

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

subscription

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:

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:

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 obiektem GeoShape zawierającym listę kodów pocztowych.
  • Przykład 3: obiekt eligibleRegion z obiektem GeoShape, który zawiera listę kodów FSA (Forwardsortation Area),
  • Przykład 4: eligibleRegion z obiektem GeoShape, który zawiera identyfikator DMA.
  • Przykład 5: eligibleRegion z listą obiektów GeoShape. 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:

  1. Wysyłamy interfejs API do punktu końcowego uprawnień, by otrzymać identyfikatory uprawnień użytkownika.
  2. Sprawdzamy wymagane identyfikatory treści w pliku danych działań związanych z mediami.
  3. Dopasowanie entitlementId użytkownika do właściwości identifier obiektu subskrypcji multimediów w pliku danych. Jeśli co najmniej 1 z nich pasuje do elementu entitlementId, określamy, że użytkownik ma do nich dostęp.
Rysunek 2. Jeden z identyfikatorów uprawnień użytkownika pasuje do wymaganego identyfikatora treści.

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 na nologinrequired.
  • 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 na free.
  • 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.

Rysunek 3. Poziomowy model subskrypcji i jego reprezentacja.

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.

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.

Rysunek 4. Model subskrypcji dodatków i ich reprezentacja.

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.

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 na purchase.
  • Umieść expectAcceptanceOf w actionAccessibilityRequirement, 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 na rental.
  • Aby określić cenę za wypożyczenie, dodaj właściwość expectAcceptanceOf w polu actionAccessibilityRequirement.

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.

Poziom Złoty zawiera całą zawartość poziomu srebrnego, który obejmuje cały poziom brązowy.
Rysunek 5. Warstwa struktury pakietu subskrypcji.

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.

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

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.

Diagram Venna, w którym problemy z pokrywaniem się pakietów 1, 2 i 3 są oznaczone jako „Common Tier”.
Rysunek 7. Struktura pakietu z przecinającymi się treściami.

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.

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

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:

  • ActiveSubscription: użytkownik ma aktywną subskrypcję dostawcy.
  • ActiveTrial: użytkownik ma aktywny okres próbny dla dostawcy.
  • InactiveSubscription: użytkownik nie ma aktywnej subskrypcji ani aktywnego okresu próbnego.
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 entitlementId przechowywane przez użytkownika.

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ść entitlementId. Więcej informacji znajdziesz w sekcji Identyfikator podmiotu.

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:

  • Jeśli wszystkie wartości entitlements.entitlement wygasają jednocześnie, określ subscription.expiration_date.
  • Jeśli niektóre wartości entitlements.entitlement wygasają w różnym czasie, określ właściwość entitlements.expiration_date.

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.