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 w ramach subskrypcji. Jeśli Google wie, do jakich treści użytkownik ma dostęp w Twojej aplikacji lub na platformie, może utworzyć lepszy wynik wyszukiwania lub odpowiedź, aby skierować użytkownika do tych treści.

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

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

W przypadku każdego pakietu treści w katalogu musisz określić wymagania dotyczące dostępu. W takim przypadku odpowiedz na te pytania:

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

    Tylko działania związane z oglądaniem:

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

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

  • Czy 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. W tabeli poniżej znajdziesz szczegółowe informacje o różnych typach paywalli:

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

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 bezterminowo po zakupie. Vudu purchase
Treści są dostępne w ramach abonamentu telewizji kablowej. HBO Go externalSubscription

Typ paywalla w przypadku działań dotyczących oglądania

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

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

Typ paywalla w przypadku działań dotyczących słuchania

Aby określić typ paywalla treści w przypadku działań związanych ze słuchaniem, użyj właściwości category w obiekcie oferty:

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

Obszar geograficzny

Musisz określić obszary geograficzne, na których treś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 eligibleRegion i nie znajduje się w żadnym regionie określonym w ineligibleRegion.

Właściwości eligibleRegionineligibleRegion mogą mieć te wartości:

Jeśli treść jest dostępna na całym świecie, użyj tej specjalnej wartości atrybutu eligibleRegion:

"eligibleRegion": "EARTH",

Przypadki użycia parametru eligibleRegion

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

  • Przykład 1: 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 strefy sortowania (Forward Sortation Area – FSA).
  • 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 obszaru metropolitalnego.
  • Przykład 6: ineligibleRegion z zakrytymi kodami pocztowymi.

Przykład 1

eligibleRegion z listą krajów:


"actionAccessibilityRequirement": {
  "@type": "ActionAccessSpecification",
  "category": "subscription",
  "requiresSubscription": {
    "@type": "MediaSubscription",
    "@id": "http://www.example.com/north_america_network/subscription",
    "name": "Example Subscription",
    "commonTier": true
  },
  "eligibleRegion": [
    {
      "@type": "Country",
      "name": "US"
    },
    {
      "@type": "Country",
      "name": "CA"
    }
  ]
}

Przykład 2

eligibleRegion z obiektem GeoShape, który zawiera listę kodów pocztowych:


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

Przykład 3

eligibleRegion z obiektem GeoShape, który zawiera listę kodów 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
  },
  "additionalProperty": {
      "@type": "PropertyValue",
      "name": "DisplaySubscriptionIdentifier",
      "value": "http://www.example.com/local_tv_network/subscription"
  },
  "eligibleRegion":{
    "@type": "GeoShape",
    "@id": "http://example.com/area2",
    "addressCountry": "CA",
    "postalCode": [
      "1A1",
      "K1A"
    ]
  }
}

Przykład 4

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


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

Przykład 5

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


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

Przykład 6

ineligibleRegion z zakrytymi kodami pocztowymi:


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

Identyfikator uprawnienia

Identyfikator uprawnienia entitlementId to ciąg znaków reprezentujący dostęp do grupy treści w Twoim katalogu multimediów. Aby sprawdzić, czy użytkownik ma dostęp do Twoich treści, Google wykonuje te czynności:

  1. Wywołujemy interfejs API w punkcie końcowym uprawnień, aby otrzymać identyfikatory uprawnień użytkownika.
  2. Wyszukujemy wymagane identyfikatory uprawnień treści w pliku danych Media Actions.
  3. Dopasowujemy entitlementId użytkownika do właściwości identifier obiektu subskrypcja mediów w pliku danych. Jeśli co najmniej jeden warunek entitlementId jest spełniony, uznajemy, ż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.

Zalecamy 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
        ...
      },
      "additionalProperty": {
        "@type": "PropertyValue",
        "name": "DisplaySubscriptionIdentifier",
        "value": "http://www.example.com/basic_subscription"
      },
      ...
    }
  },
  ...
}

Przypadki użycia z powszechnym dostępem

Oto typowe przypadki użycia dostępu:

  • Bezpłatne (nie wymaga logowania): treści są dostępne bez logowania, subskrypcji ani zakupu.
  • Bezpłatne (wymaga zalogowania): treści wymagają zalogowania się użytkownika, ale nie wymagają subskrypcji.
  • Subskrypcja 1-poziomowa: treści wymagają subskrypcji. Wszyscy subskrybenci mają dostęp do tych samych treści, zarówno filmów, jak i odcinków, niezależnie od pakietu subskrypcji.
  • Subskrypcja wielopoziomowa: treści wymagają subskrypcji. Subskrybenci mogą uzyskać dostęp do różnych treści, takich jak filmy lub odcinki, w zależności od poziomu subskrypcji. Na przykład srebrnyzłoty.
  • Subskrypcja dodatku: treści wymagają subskrypcji. Subskrybenci mogą dodać treści premium do swojej regularnej subskrypcji.
  • Zakup jednorazowy: treści można kupić, a potem użytkownik ma do nich nieograniczony dostęp.
  • Telewizja na żywo: subskrypcja obejmuje dostęp do kanałów lokalnych, krajowych i premium.
  • Subskrypcja zewnętrzna: treści wymagają zalogowania się użytkownika za pomocą danych dostawcy telewizji kablowej.

Bezpłatne (nie wymaga logowania)

Nie musisz się logować

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 wartość category na nologinrequired.
  • Nie używaj symbolu expectAcceptanceOf.

Bezpłatnie (wymagane logowanie)

Wymagane logowanie

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


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

Subskrypcja jednopoziomowa

W modelu subskrypcji jednostopniowej dostawca usług ma jeden poziom subskrypcji. Wszyscy subskrybenci mają dostęp do tych samych treści, niezależnie od pakietu subskrypcji.


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

Subskrypcja wielopoziomowa

W modelu subskrypcji wielopoziomowej dostawca usług ma kilka poziomów subskrypcji, np. Gold, SilverBronze. Użytkownicy, którzy mają subskrypcję wyższego poziomu, mogą uzyskać dostęp do wszystkich treści z niższych poziomów. Użytkownicy, którzy mają subskrypcję niższego poziomu, nie mogą jednak uzyskać dostępu do treści z wyższego poziomu.

Rysunek 3. Model subskrypcji z różnymi poziomami i jego reprezentacja uprawnień.

Przyjrzyjmy się temu scenariuszowi:

  • Anna subskrybuje poziom Gold. Punkt końcowy entitlementId zwraca te identyfikatory:
    • example.com:bronze
    • example.com:silver
    • example.com:gold
  • Jan subskrybuje poziom Brązowy. Punkt końcowy Twoje uprawnienia zwraca te entitlementId:
    • example.com:bronze
  • Plik danych działań związanych z multimediami musi spełniać te wymagania:
    • Film A wymaga example.com:bronze.
    • Film B wymaga example.com:silver.

W tym przypadku Google określa następujące poziomy dostępu dla Janka i Jasia:

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

Subskrypcja dodatkowa

W modelu subskrypcji dodatków dostawca usług umożliwia użytkownikom rozszerzenie uprawnień i dodanie kanałów do subskrypcji podstawowej. Użytkownicy mogą dodać dowolną liczbę kanałów.

Rysunek 4. model subskrypcji dodatków i jego reprezentacja uprawnień.

Przyjrzyjmy się temu scenariuszowi:

  • Janina ma subskrypcje PROSportz 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ę Basic. Punkt końcowy Twoje uprawnienia zwraca te entitlementId:
    • example.com:basic
  • Plik danych działań związanych z multimediami musi spełniać te wymagania:
    • Film A wymaga example.com:basic.
    • Film B wymaga example.com:pro.

W tym przypadku Google określa następujące poziomy dostępu dla Janka i Jasia:

  • Zarówno Anna, jak i Jan mają dostęp do filmu A.
  • Anna ma dostęp do filmu 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
        }
    ],
      "additionalProperty": {
        "@type": "PropertyValue",
        "name": "DisplaySubscriptionIdentifier",
        "value": "http://www.example.com/package/basic"
      },
    }
  }
}

Jednorazowy zakup

Zakup

Treści są dostępne bezterminowo 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 wartość category na purchase.
  • Wpisz expectAcceptanceOf w polu actionAccessibilityRequirement, aby podać 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 wartość category na rental.
  • Wpisz expectAcceptanceOf w polu actionAccessibilityRequirement, aby podać cenę wypożyczenia.

Telewizja na żywo

W pliku danych Działań związanych z multimediami możesz ograniczyć dostęp do kanału telewizji 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, na którym użytkownicy mają do niego 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 przedstawić ograniczenie.

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

    • Pakiety: kanały krajowe są często uwzględniane w pakietach, a użytkownicy wybierają, który pakiet chcą subskrybować.
    • Dodatek: niektóre kanały premium wymagają od użytkowników selektywnego dodawania dodatkowych kanałów do subskrypcji.
    • Regionalna sieć sportowa (RSN): RSN są zwykle powiązane z lokalizacją „domową” użytkownika. Użytkownicy mogą oglądać treści w regionalnej sieci sportowej nawet podczas podróży poza „domową” lokalizację.

Subskrypcja innej firmy

Subskrypcja usługi innej firmy

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


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

Pakiety na poziomie Common

Treści z poziomu wspólnego są dostępne dla wszystkich subskrybentów niezależnie od pakietu subskrypcji. Poziom wspólny dotyczy wszystkich treści z categorysubscription. Więcej informacji o właściwości category znajdziesz w sekcji Typ paywalla.

Dlaczego wymagany jest pakiet w ramach wspólnej wersji?

Wiele usług Google, w tym wyszukiwarka Google, Android TV i Asystent Google, wyświetla użytkownikom rekomendacje dotyczące filmów i programów TV. 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 w ramach wspólnej wersji, chyba że obsługujesz interfejs API uprawnień. Interfejs API umożliwia Google określenie, do których tytułów spoza wspólnej puli ma dostęp każdy użytkownik.

Kiedy warto utworzyć pakiet z poziomem wspólnym?

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

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

Przykłady typowych poziomów

Oto przykłady typowych poziomów:

Subskrypcja na różnych poziomach

W modelu subskrypcji z różnymi poziomami dostawca usług ma kilka poziomów subskrypcji, np. Gold, SilverBronze. Użytkownicy z subskrypcją wyższego poziomu mają dostęp do wszystkich treści z niższych poziomów. Użytkownicy z subskrypcją niższego poziomu nie mają dostępu do treści z wyższego poziomu. Obraz poniżej przedstawia przykład struktury pakietu.

Poziom Gold zawiera wszystkie treści z poziomu Silver, który z kolei zawiera wszystkie treści z poziomu Bronze.
Rysunek 5. Struktura pakietu subskrypcji z różnymi poziomami.

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 rozszerzenie uprawnień i dodanie kanałów do podstawowej subskrypcji. Użytkownicy mogą dodać dowolną liczbę kanałów. Obraz poniżej przedstawia przykładową strukturę pakietu.

Każdy użytkownik zaczyna od kanału Basic 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 opłatami, możesz połączyć pakiet z pakietem o wspólnym poziomie.

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

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

Pakiety z treściami, które się pokrywają

W modelu treści, w którym pakiety mają wspólne treści, dostawca usług sprzedaje pakiety zawierające niektóre treści z innych pakietów. Obraz poniżej przedstawia przykład struktury pakietu.

Diagram Venna, na którym obszar wspólny pakietów 1, 2 i 3 jest oznaczony jako „Poziom wspólny”.
Rysunek 7. Struktura pakietu z przecinającymi się treściami.

W poniższym przykładzie kodu dostawca oferuje 3 pakiety, w których część treści się pokrywa. W takim przypadku wymagany jest czwarty pakiet reprezentujący wspólny poziom. Musi zawierać wszystkie treści dostępne we wszystkich 3 pakietach.

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

Pakiety bez treści, które się przecinają

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

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

W poniższym przykładzie dostawca oferuje 3 pakiety, w których nie ma treści wspólnych dla wszystkich pakietów. Nie jest wymagany pakiet z poziomem wspólnym.

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

Punkt końcowy uprawnień

Skorzystaj z informacji 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 w Google.

Żądanie

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

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

Odpowiedź

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

Właściwość
subscription

Wymagany

To pole znajduje się w odpowiedzi głównej.

subscription.type

Wymagany

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

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

Opcjonalny

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

entitlements

Opcjonalny

Ta właściwość główna zawiera wartości entitlementId, które posiada użytkownik.

entitlements.entitlement

Wymagane, 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 sekcji Identyfikator uprawnienia.

entitlements.expiration_date

Opcjonalny

Data wygaśnięcia 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 znajdują się 2 właściwości związane z datami ważności: subscription.expiration_dateentitlements.expiration_date. Możesz uwzględnić jeden z nich lub żaden, ale nie oba. To, którego z nich użyjesz, zależy od modelu subskrypcji.

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

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

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

  • Jeśli wszystkie wartości entitlements.entitlement wygasają w tym samym czasie, wpisz subscription.expiration_date.
  • Jeśli niektóre wartości entitlements.entitlement wygasają w różnym czasie, określ entitlements.expiration_date.

Przykładowe odpowiedzi

Przykłady odpowiedzi w różnych stanach subskrypcji:

  • Aktywna subskrypcja
  • aktywna subskrypcja z datą wygaśnięcia,
  • Brak subskrypcji
  • aktywne subskrypcje na wiele poziomów lub dodatków;

Aktywna subskrypcja

Aktywna subskrypcja

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


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

aktywna subskrypcja z datą wygaśnięcia,

Aktywna subskrypcja z datą ważności

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


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

Brak subskrypcji

Brak subskrypcji

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


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

aktywne subskrypcje na wiele poziomów lub dodatków;

Aktywne subskrypcje na różnych poziomach lub dodatki

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


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

Ograniczenie liczby żądań

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

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

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

Kontaktowanie się z Google

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

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

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