Wymagania dotyczące dostępu

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

Rysunek 1. Wymagania dotyczące dostępu pomagają subskrybentom uzyskać dostęp do treści w aplikacji lub na platformie.

Wymagania dotyczące dostępu do treści

W przypadku każdego pakietu treści w katalogu musisz określić wymagania dotyczące dostępu. Podczas tego procesu zastanów się nad odpowiedziami na te pytania:

  • Czy użytkownicy muszą się zalogować w aplikacji lub na platformie, aby uzyskać dostęp do treści?
  • Czy użytkownicy potrzebują subskrypcji?

    Tylko WatchActions:

    • Czy użytkownicy muszą mieć subskrypcję od zewnętrznego dostawcy usług?
    • Czy oferujesz subskrypcję wielopoziomową, wielopakietową lub dodatkową?
  • Tylko działania związane z oglądaniem: czy użytkownicy muszą wypożyczyć lub kupić treści?

  • Czy wymagania dotyczące dostępu zmieniają się z czasem?

  • Czy wymagania dotyczące dostępu zależą od lokalizacji urządzenia?

Typy ograniczeń dostępu

Istnieją 2 rodzaje ograniczeń dostępu:

Typ paywall

Możesz ograniczyć dostęp do treści według typu paywalla. Tabela poniżej zawiera szczegółowe informacje o różnych typach paywalli:

Typ paywall Przykład Kategoria
Nie musisz nic kupować ani się logować. Trzask nologinrequired
Użytkownik musi się zalogować, ale nie musi mieć płatnej subskrypcji. Vudu (AVOD) free
Użytkownik musi mieć aktywną subskrypcję. Dostęp jest niezależny od poziomu subskrypcji. Netflix

subscription

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

subscription

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

Typ płatnej bariery dostępu w przypadku działań dotyczących oglądania

Aby określić typ płatnego dostępu do treści w przypadku działań związanych z oglądaniem, użyj właściwości categoryspecyfikacji dostępu do działań:

"potentialAction": {
  "@type":"WatchAction",
  "target": {  },
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "subscription",
    "availabilityStarts": "2018-06-01T10:35:29Z",
    "availabilityEnds": "2019-05-31T10:35:29Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  },
  ...
}

Typ płatnego dostępu do działań dotyczących słuchania

Aby określić typ płatnego dostępu do treści w przypadku działań związanych z odsłuchiwaniem, użyj właściwości category w obiekcie offer:

"potentialAction": {
  "@type":"ListenAction",
  "target": {  },
  "expectsAcceptanceOf":{
    "@type":"Offer",
    "category":"subscription",
    "availabilityStarts": "2018-06-01T10:35:29Z",
    "availabilityEnds": "2019-05-31T10:35:29Z",
    "eligibleRegion": {
      "@type":"Country",
      "name":"US"
    }
  },
  ...
}

Obszar geograficzny

Musisz określić obszary geograficzne, na których treści są dostępne. Użyj jednej lub obu tych właściwości:

Użytkownik może uzyskać dostęp do treści, jeśli lokalizacja urządzenia znajduje się w dowolnym regionie określonym w sekcji eligibleRegion i nie znajduje się w żadnym regionie określonym w sekcji ineligibleRegion.

Właściwości eligibleRegionineligibleRegion umożliwiają użycie tych wartości:

Jeśli treści są dostępne na całym świecie, użyj tej wartości specjalnej dla atrybutu eligibleRegion:

"eligibleRegion": "EARTH",

przypadki użycia eligibleRegion,

Oto przykłady zastosowania właściwości eligibleRegion:

  • Przykład 1: eligibleRegion z listą krajów.
  • Przykład 2: eligibleRegion z obiektem GeoShape zawierającym listę kodów pocztowych.
  • Przykład 3: eligibleRegion z obiektem GeoShape zawierającym listę kodów strefy sortowania (FSA).
  • Przykład 4: eligibleRegion z obiektem GeoShape zawierającym identyfikator rynku docelowego.
  • 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 strefy sortowania (Forward Sortation Area – FSA):


"actionAccessibilityRequirement": {
  "@type": "ActionAccessSpecification",
  "category": "subscription",
  "requiresSubscription": {
    "@type": "MediaSubscription",
    "@id": "http://www.example.com/local_tv_network/subscription",
    "name": "Example Subscription",
    "commonTier": true
  },
  "eligibleRegion":{
    "@type": "GeoShape",
    "@id": "http://example.com/area2",
    "addressCountry": "CA",
    "postalCode": [
      "1A1",
      "K1A"
    ]
  }
}

Przykład 4

eligibleRegion z obiektem GeoShape, który zawiera identyfikator DMA:


"actionAccessibilityRequirement": {
  "@type": "ActionAccessSpecification",
  "category": "subscription",
  "requiresSubscription": {
    "@type": "MediaSubscription",
    "@id": "http://www.example.com/abcd/subscription",
    "name": "Example Subscription",
    "commonTier": true
  },
  "eligibleRegion":{
    "@type": "GeoShape",
    "@id": "http://example.com/area3",
    "addressCountry": "US",
    "identifier": [
      {
        "@type": "PropertyValue",
        "propertyID": "DMA_ID",
        "value": "501"
      }
    ]
  }
}

Przykład 5

eligibleRegion z listą obiektów GeoShape. Każdy z nich zawiera identyfikator DMA:


"actionAccessibilityRequirement" : {
   "@type" : "ActionAccessSpecification",
   "eligibleRegion" : [
      {
         "@id" : "http://example.com/dma/601",
         "@type" : "GeoShape",
         "addressCountry" : "US",
         "identifier" : {
            "@type" : "PropertyValue",
            "propertyID" : "DMA_ID",
            "value" : "601"
         }
      },
      {
         "@id" : "http://example.com/dma/602",
         "@type" : "GeoShape",
         "addressCountry" : "US",
         "identifier" : {
            "@type" : "PropertyValue",
            "propertyID" : "DMA_ID",
            "value" : "602"
         }
      }
   ]
}

Przykład 6

ineligibleRegion z zablokowanymi kodami pocztowymi:


"actionAccessibilityRequirement": {
  "@type": "ActionAccessSpecification",
  "category": "subscription",
  "requiresSubscription": {
    "@type": "MediaSubscription",
    "@id": "http://www.example.com/local_tv_network/subscription",
    "name": "Example Subscription",
    "commonTier": true
  },
 "eligibleRegion":   {
      "@type": "Country",
      "name": "US"
    },
  "ineligibleRegion": {
    "@type": "GeoShape",
    "@id": "http://example.com/area1",
    "addressCountry": "US",
    "postalCode": [
      "94118",
      "94119"
    ]
  }
}

Identyfikator uprawnienia

Identyfikator uprawnień entitlementId odnosi się do ciągu, który reprezentuje dostęp do grupy treści w katalogu multimediów. Aby ustalić, czy użytkownik ma dostęp do Twoich treści, Google wykonuje te czynności:

  1. Wykonujemy wywołanie interfejsu API do Twojego punktu końcowego uprawnień, aby otrzymać identyfikatory uprawnień użytkownika.
  2. W pliku danych Media Actions wyszukujemy wymagane identyfikatory uprawnień.
  3. Dopasowujemy wartość atrybutu entitlementId użytkownika do atrybutu identifier obiektu media subscription w pliku danych. Jeśli co najmniej entitlementId pasuje, określamy, że użytkownik może uzyskać dostęp do treści.
Rysunek 2. Jeden z identyfikatorów uprawnień użytkownika pasuje do wymaganego identyfikatora uprawnień treści.

Google zaleca używanie tej składni atrybutu entitlementId:

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

Przykłady składni:

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

Przykład identyfikatora uprawnienia

Plik danych MediaExampleCompany określa, że Movie XYZ wymaga example.com:basic entitlementId, jak pokazano poniżej:

{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type": "Movie",
  "@id": "www.example.com/movie_xyz",
  "url": "www.example.com/movie_xyz",
  "name": "Movie XYZ",
  "potentialAction": {
    "@type": "WatchAction",
    "target": [  ],
    "actionAccessibilityRequirement": {
      "@type": "ActionAccessSpecification",
      "category": "subscription",
      "requiresSubscription": {
        "@type": "MediaSubscription",
        "@id": "http://www.example.com/basic_subscription",
        "name": "Basic subscription",
        "commonTier": true
        ...
      },
      ...
    }
  },
  ...
}

Typowe przypadki użycia dostępu

Oto typowe przypadki użycia dostępu:

  • Bezpłatne (bez logowania): treści są dostępne bez logowania, subskrypcji ani zakupu.
  • Bezpłatne (wymaga logowania): użytkownicy muszą się zalogować, ale nie muszą mieć subskrypcji.
  • Subskrypcja na jednym poziomie: treści wymagają subskrypcji. Wszyscy subskrybenci mają dostęp do tych samych treści, niezależnie od tego, czy są to filmy, czy odcinki, niezależnie od pakietu subskrypcji.
  • Subskrypcja na wielu poziomach: treści wymagają subskrypcji. Subskrybenci mogą uzyskać dostęp do różnych treści, takich jak filmy lub odcinki, w zależności od poziomu subskrypcji. Na przykład: srebrny w porównaniu z złotym.
  • Subskrypcja dodatku: treści wymagają subskrypcji. Subskrybenci mogą dodać treści premium do swojej zwykłej subskrypcji.
  • Zakup jednorazowy: treści można kupić, a użytkownik ma do nich nieograniczony dostęp.
  • Telewizja na żywo: subskrypcja obejmuje dostęp do kanałów lokalnych, krajowych i premium.
  • Subskrypcja u osoby trzeciej: użytkownik musi zalogować się u swojego dostawcy usług kablowych, aby uzyskać dostęp do treści.

Bezpłatnie (nie wymaga logowania)

Nie trzeba się logować

Treści są dostępne bez logowania się ani subskrypcji.


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "nologinrequired",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}
  • Ustaw category na nologinrequired.
  • Nie używaj expectAcceptanceOf.

Bezpłatnie (wymaga logowania)

Wymagane logowanie

Treści wymagają zalogowania się, ale nie wymagają subskrypcji.


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "free",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}
  • Ustaw category na free.
  • Nie używaj expectAcceptanceOf.

Subskrypcja jednopoziomowa

W modelu subskrypcji jednopoziomowej dostawca usług ma jeden poziom subskrypcji. Wszyscy subskrybenci mają dostęp do tych samych treści, niezależnie od tego, czy są to filmy, czy odcinki, niezależnie od pakietu subskrypcji.


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "subscription",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "requiresSubscription": {
        "@type": "MediaSubscription",
        "name": "Example Package",
        "commonTier": true,
        "@id": "http://www.example.com/example_package"
    },
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}

Subskrypcja wielopoziomowa

W modelu subskrypcji wielopoziomowej dostawca usług ma kilka poziomów subskrypcji, takich jak Gold, Silver i Bronze. Użytkownicy, którzy mają subskrypcję wyższego poziomu, mają dostęp do wszystkich treści z niższego poziomu. Użytkownicy z subskrypcją na niższym poziomie nie mają jednak dostępu do treści na wyższym poziomie.

Rysunek 3. Model subskrypcji oparty na poziomach i sposób reprezentowania uprawnień.

Przyjrzyjmy się temu scenariuszowi:

  • Anna ma subskrypcję Gold. Punkt końcowy uprawnień zwraca te identyfikatory entitlementId:
    • example.com:bronze
    • example.com:silver
    • example.com:gold
  • Jan subskrybuje pakiet Brązowy. Punkt końcowy uprawnień zwraca następujące dane entitlementId:
    • example.com:bronze
  • Plik danych działań związanych z multimediami zawiera te wymagania:
    • Film A wymaga example.com:bronze.
    • Film B wymaga example.com:silver.

W tym scenariuszu Google określa dla Jane i Johna te poziomy dostępu:

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

Dodatkowa subskrypcja

W przypadku modelu subskrypcji z dodatkami dostawca usługi umożliwia użytkownikom rozszerzanie uprawnień i dodawanie kanałów do subskrypcji podstawowej. Użytkownicy mogą dodawać dowolną liczbę kanałów.

Rysunek 4. Model subskrypcji dodatków i reprezentacja uprawnień.

Przyjrzyjmy się temu scenariuszowi:

  • Janina ma subskrypcję PRO i Sportz oprócz subskrypcji Basic. Punkt końcowy uprawnień zwraca te identyfikatory entitlementId:
    • example.com:basic
    • example.com:pro
    • example.com:sportz
  • Jan ma tylko subskrypcję Podstawowa. Punkt końcowy uprawnień zwraca następujące dane entitlementId:
    • example.com:basic
  • Plik danych działań związanych z multimediami zawiera te wymagania:
    • Film A wymaga example.com:basic.
    • Film B wymaga example.com:pro.

W tym scenariuszu Google określa dla Jane i Johna te poziomy dostępu:

  • Zarówno Anna, jak i Jan mają dostęp do Movie A.
  • Anna ma dostęp do Movie B, ale Jan nie.
{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "subscription",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    "requiresSubscription": [
      {
          "@type": "MediaSubscription",
          "@id": "https://www.example.com/package/basic",
          "name": "Basic",
          "sameAs": "https://www.example.com/package/basic",
          "commonTier": true
        },
        {
          "@type": "MediaSubscription",
          "@id": "https://www.example.com/packages/basic/pro",
          "name": "PRO",
          "sameAs": "https://www.example.com/package/pro",
          "identifier": "example.com:pro",
          "commonTier": false
        },
        {
          "@type": "MediaSubscription",
          "@id": "https://www.example.com/package/sportz",
          "name": "Sportz",
          "sameAs": "https://www.example.com/package/sports",
          "identifier": "example.com:sportz",
          "commonTier": false
        }
    }
  }
}

Jednorazowy zakup

Zakup

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


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "purchase",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    },
    "expectsAcceptanceOf": {
      "@type": "Offer",
      "price": 7.99,
      "priceCurrency": "USD",
      "seller": {
        "@type": "Organization",
        "name": "Example",
        "sameAs": "http://www.example.com/"
      }
    }
  }
}
  • Ustaw category na purchase.
  • Uwzględnij expectAcceptanceOf w actionAccessibilityRequirement, aby wskazać cenę zakupu.

Wypożyczalnia

Treści są dostępne przez określony czas po zakupie.


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "rental",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    },
    "expectsAcceptanceOf": {
      "@type": "Offer",
      "price": 7.99,
      "priceCurrency": "USD",
      "seller": {
        "@type": "Organization",
        "name": "Example",
        "sameAs": "http://www.example.com/"
      }
    }
  }
}
  • Ustaw category na rental.
  • Wpisz expectAcceptanceOf w actionAccessibilityRequirement, aby wskazać cenę wypożyczenia.

Telewizja na żywo

W strumieniach działań związanych z multimediami możesz ograniczyć dostęp do kanału TV na żywo lub wydarzenia na podstawie tych 2 warunków dotyczących użytkownika:

  • Lokalizacja urządzenia użytkownika

    Aby ograniczyć dostęp do kanału telewizyjnego, określ obszar, w którym użytkownicy mają do niego dostęp. Ten warunek dotyczy zwykle lokalnych kanałów telewizyjnych.

  • Stan konta użytkownika

    Jeśli dostęp do kanału telewizyjnego zależy od ustawienia na poziomie konta użytkownika, użyj identyfikatorów uprawnień, aby reprezentować ograniczenie.

    Ten warunek zwykle dotyczy tych przypadków użycia:

    • Pakiet: kanały krajowe są często uwzględniane w pakietach, a użytkownicy wybierają, do których pakietów chcą się zasubskrybować.
    • Dodatki: niektóre kanały premium wymagają, aby użytkownicy selektywnie dodawali dodatkowe kanały do subskrypcji.
    • Regionalna sieć sportowa (RSN): regionalne sieci sportowe są zwykle powiązane z „domową” lokalizacją użytkownika. Użytkownicy mogą oglądać treści w RSN nawet wtedy, gdy przebywają poza „domem”.

Subskrypcja innej firmy

Subskrypcja firmy zewnętrznej

Treści są dostępne dla subskrybentów z innego serwisu.


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "externalsubscription"
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "requiresSubscription":{
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/faq",
      "name": "Example",
      "sameAs": "https://www.example.com/faq",
      "authenticator": {
        "@type": "Organization",
        "name": "TVE"
      }
    },
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}
  • Dodaj authenticator, aby wskazać, że inna usługa uwierzytelnia subskrybentów. Na przykład HBO GO wymaga subskrypcji u dostawcy telewizji kablowej.

Pakiety z poziomami dostępu

Treści z poziomu wspólnego są dostępne dla wszystkich subskrybentów niezależnie od ich pakietu subskrypcji. Powszechny poziom dotyczy wszystkich treści z category subscription. Więcej informacji o właściwości category znajdziesz w sekcji Typ płatnego dostępu.

Dlaczego wymagany jest pakiet wspólny?

Wiele usług Google oferuje użytkownikom rekomendacje dotyczące programów i filmów. Dotyczy to wyszukiwarki Google, Androida TV i Asystenta Google. Aby określić oczekiwania użytkowników dotyczące kosztów, Google musi wiedzieć, jakie treści są dostępne dla wszystkich subskrybentów w ramach wspólnego poziomu. Google musi też wiedzieć, jakie treści są dostępne dla subskrybentów w ramach konkretnych pakietów subskrypcji.

Google zaleca tytuły dostępne na poziomie wspólnym, chyba że obsługujesz interfejs API uprawnień. Interfejs API pozwala Google określić, do których tytułów niestandardowych ma dostęp dany użytkownik.

Kiedy należy utworzyć pakiet poziomu wspólnego?

Pakiet wspólny jest wymagany, gdy usługa oferuje treści dostępne dla wszystkich subskrybentów. Dotyczy to usług, które oferują tylko 1 pakiet, oraz usług, które oferują wiele pakietów lub dodatków.

Dostawcy, którzy nie mają treści dostępnych dla wszystkich subskrybentów, nie muszą tworzyć pakietu wspólnego. Przykładem są dostawcy usług, którzy udostępniają treści wzajemnie wykluczające się w ramach wszystkich swoich pakietów.

Przykłady typowych poziomów

Poniżej przedstawiamy przykłady typowych poziomów.

Subskrypcja wielopoziomowa

W modelu subskrypcji wielopoziomowej dostawca usług ma kilka poziomów subskrypcji, takich jak Gold, Silver i Bronze. Użytkownicy z subskrypcją wyższego poziomu mają dostęp do wszystkich treści w ramach niższego poziomu. Użytkownicy z subskrypcją niższego poziomu nie mają dostępu do treści w ramach subskrypcji wyższego poziomu. Poniższy obraz przedstawia przykład struktury pakietu.

Poziom złoty obejmuje wszystkie treści poziomu srebrnego, który z kolei obejmuje wszystkie treści poziomu brązowego.
Rysunek 5. Struktura pakietów subskrypcji na podstawie poziomów.

W poniższym przykładzie kodu pakiet brązowy jest wspólnym poziomem, ponieważ wszyscy użytkownicy mają dostęp do wszystkich treści na tym poziomie.

"requiresSubscription": [
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/bronze",
      "name": "Bronze",
      "sameAs": "https://www.example.com/package/bronze",
      "commonTier": true
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/silver",
      "name": "Silver",
      "sameAs": "https://www.example.com/package/silver",
      "identifier": "example.com:silver",
      "commonTier": false
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/gold",
      "name": "Gold",
      "sameAs": "https://www.example.com/package/gold",
      "identifier": "example.com:gold",
      "commonTier": false
    }
  ],

Dodatki

W modelu subskrypcji dodatków dostawca usług umożliwia użytkownikom rozszerzanie swoich uprawnień i dodawanie kanałów do subskrypcji podstawowej. Użytkownicy mogą dodawać dowolną liczbę kanałów. Poniższy obraz przedstawia przykład struktury pakietu.

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 subskrypcji dodatków.

Jeśli masz kanał dostępny dla wszystkich użytkowników i nie wiąże się on z żadnymi kosztami, możesz połączyć pakiet z pakietem poziomu wspólnego.

W tym przykładzie kodu pakiet podstawowy jest poziomem wspólnym, ponieważ wszyscy użytkownicy mają dostęp do wszystkich treści w tym pakiecie.

"requiresSubscription": [
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/basic",
      "name": "Basic",
      "sameAs": "https://www.example.com/package/basic",
      "commonTier": true
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/packages/basic/pro",
      "name": "PRO",
      "sameAs": "https://www.example.com/package/pro",
      "identifier": "example.com:pro",
      "commonTier": false
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/sportz",
      "name": "Sportz",
      "sameAs": "https://www.example.com/package/sports",
      "identifier": "example.com:sportz",
      "commonTier": false
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/moviemax",
      "name": "Moviemax",
      "sameAs": "https://www.example.com/package/moviemax",
      "identifier": "example.com:moviemax",
      "commonTier": false
    }
  ],

Pakiety z przecinaniem się treści

W modelu treści, w którym pakiety mają nakładające się treści, dostawca usług sprzedaje pakiety, które zawierają treści z innych pakietów. Na ilustracji poniżej znajduje się przykład struktury pakietu.

Diagram Venna, w którym obszary pokrycia pakietów 1, 2 i 3 są oznaczone jako „Poziom wspólny”.
Rysunek 7. Struktura pakietu z przecinającą się zawartością.

W tym przykładzie kodu dostawca oferuje 3 pakiety, w których niektóre treści są wspólne. W tym przypadku wymagany jest czwarty pakiet, który reprezentuje wspólny poziom. Musi zawierać wszystkie treści dostępne we wszystkich 3 pakietach.

"requiresSubscription": [
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/1",
      "name": "Package 1",
      "sameAs": "https://www.example.com/package/1",
      "identifier": "example.com:package1",
      "commonTier": false
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/2",
      "name": "Package 2",
      "sameAs": "https://www.example.com/package/2",
      "identifier": "example.com:package2",
      "commonTier": false
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/3",
      "name": "Package 3",
      "sameAs": "https://www.example.com/package/3",
      "identifier": "example.com:package3",
      "commonTier": false
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/common",
      "name": "Common Tier Package",
      "sameAs": "https://www.example.com/package/common",
      "commonTier": true
    }
  ],

Pakiety bez treści, które się nakładają

W modelu treści, w którym pakiety treści nie nakładają się na siebie, dostawca usług sprzedaje pakiety, które nie zawierają treści z innych pakietów. Na ilustracji poniżej znajduje się przykład struktury pakietu.

Pakiety 1, 2 i 3 są całkowicie od siebie niezależne.
Rysunek 8. Struktura pakietu bez nakładających się treści.

W tym przykładzie dostawca oferuje 3 pakiety, w których żadne treści nie pokrywają się. Nie jest wymagany pakiet poziomu wspólnego.

"requiresSubscription": [
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/1",
      "name": "Package 1",
      "sameAs": "https://www.example.com/package/1",
      "identifier": "example.com:package1",
      "commonTier": false
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/2",
      "name": "Package 2",
      "sameAs": "https://www.example.com/package/2",
      "identifier": "example.com:package2",
      "commonTier": false
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/3",
      "name": "Package 3",
      "sameAs": "https://www.example.com/package/3",
      "identifier": "example.com:package3",
      "commonTier": false
    }
  ],

Punkt końcowy Zezwolenia

Użyj informacji z tej sekcji, aby hostować punkt końcowy HTTPS, który zwraca uprawnienia powiązane z użytkownikiem.

Warunek wstępny

Zanim zaczniesz, sprawdź, czy Twoja usługa obsługuje przepływ OAuth 2.0 z Google.

Żądanie

Aby otrzymać uprawnienia użytkownika, Google wysyła żądanie zawierające token OAuth użytkownika. Twój punkt końcowy musi zidentyfikować użytkownika na podstawie tego tokena OAuth. Przyjrzyj się temu przykładowi:

GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer <OAuthToken>

Odpowiedź

Punkt końcowy musi zwrócić odpowiedź z tymi właściwościami:

Właściwość
subscription

Wymagany

To pole w odpowiedzi głównej.

subscription.type

Wymagany

Ta właściwość może mieć te wartości:

  • ActiveSubscription: użytkownik ma aktywną subskrypcję u dostawcy.
  • ActiveTrial: użytkownik ma aktywny okres próbny dostawcy.
  • InactiveSubscription: użytkownik nie ma aktywnej subskrypcji ani aktywnej wersji próbnej.
subscription.expiration_date

Opcjonalny

Data ważności tego uprawnienia w formacie ISO 8601, która zawiera strefę czasową. Więcej informacji znajdziesz w artykule Daty wygaśnięcia.

entitlements

Opcjonalny

Ta własność wierzchołkowa zawiera wartości entitlementId, które posiada użytkownik.

entitlements.entitlement

Wymagany, jeśli dostęp do katalogu strumieniowego różni się w zależności od typu subskrypcji.

Ta usługa zawiera entitlementId. Więcej informacji znajdziesz w artykule o identyfikatorze uprawnień.

entitlements.expiration_date

Opcjonalny

Data wygaśnięcia tej subskrypcji w formacie ISO 8601, która zawiera strefę czasową. Więcej informacji znajdziesz w artykule Daty wygaśnięcia.

Daty ważności

W odpowiedzi punktu końcowego są 2 właściwości związane z datami ważności: subscription.expiration_date i entitlements.expiration_date. Możesz uwzględnić jeden z nich lub żaden, ale nie oba jednocześnie. Który z nich wybierzesz, zależy od modelu subskrypcji.

Model subskrypcji
Dostęp do katalogu strumieniowego jest taki sam dla wszystkich subskrybentów. Nie musisz określać właściwości entitlements, ale musisz określić właściwość subscription.expiration_date.

Dostęp do katalogu streamingowego zależy od szczegółów subskrypcji użytkownika.

Jeśli Twój model subskrypcji obejmuje kilka poziomów lub dodatków, które wygasają z czasem, wykonaj jedną z tych czynności:

  • Jeśli wszystkie wartości entitlements.entitlement wygasną w tym samym czasie, podaj wartość subscription.expiration_date.
  • Jeśli niektóre wartości entitlements.entitlement wygasają w różnych momentach, określ entitlements.expiration_date.

Przykładowe odpowiedzi

Oto przykłady odpowiedzi w różnych stanach subskrypcji:

  • Aktywna subskrypcja
  • aktywna subskrypcja z datą ważności,
  • Brak subskrypcji
  • aktywne subskrypcje wielu poziomów lub dodatków;

Aktywna subskrypcja

Aktywna subskrypcja

Użytkownik ma aktywną subskrypcję example.com. W tym przypadku wszyscy subskrybenci mają dostęp do całego katalogu strumieniowego niezależnie od typu subskrypcji.


{
  "subscription" : {
    "type": "ActiveSubscription",
  }
}

aktywna subskrypcja z datą ważności,

Aktywna subskrypcja z datą ważności

Użytkownik ma aktywną subskrypcję example.com, która ma datę ważności. W takim przypadku wszyscy subskrybenci mają dostęp do całego katalogu strumieniowego niezależnie od typu subskrypcji.


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

Brak subskrypcji

Brak subskrypcji

Użytkownik nie ma subskrypcji w domenie example.com.


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

aktywne subskrypcje wielu poziomów lub dodatków;

Aktywne subskrypcje dotyczące wielu poziomów lub dodatków

Użytkownik ma subskrypcję example.com:premium do określonej daty.


{
  "subscription" : {
    "type": "ActiveSubscription",
  }
  "entitlements": [
    {
      "entitlement": "example.com:premium",
      "expiration": "2019-11-10T10:00:00Z"
    }
  ]
}

Ograniczenie liczby żądań

Google odświeża informacje o uprawnieniach użytkownika co 6 godzin. Aby wyrównać maksymalną liczbę zapytań na sekundę (QPS), Google rozkłada je równomiernie w czasie na Twój punkt końcowy. Dlatego możesz oszacować oczekiwaną średnią liczbę QPS dla swojego punktu końcowego za pomocą tej formuły:

Oczekiwana średnia liczba zapytań na sekundę = <łączna liczba użytkowników> / 21 600 sekund (6 godzin x 60 minut x 60 sekund)

Jeśli obsługujesz dużą liczbę użytkowników, Google może dostosować 6-godzinny interwał. W razie potrzeby skontaktuj się z Google, aby omówić konfigurację.

Kontaktowanie się z Google

Gdy punkt końcowy będzie gotowy, skontaktuj się z Google, aby podać jego adres URL.

Właściwości specyfikacji dostępu do działania

Informacje referencyjne znajdziesz w sekcji Właściwości specyfikacji dostępu do działania.