Пользователи предпочитают смотреть или слушать контент, к которому у них уже есть доступ, например контент, существующий по подписке. Если Google знает, к какому контенту пользователь может получить доступ в вашем приложении или платформе, Google может создать лучший результат поиска или ответ, чтобы направить пользователя к этому контенту.
![](https://developers.google.cn/static/actions/media/images/image-entitlements-4.png?authuser=6&hl=ru)
Определить требования к доступу к контенту
Вы должны определить требования к доступу для каждого пакета контента в вашем каталоге. При этом подумайте над следующими вопросами:
- Нужно ли пользователям входить в ваше приложение или платформу для доступа к контенту?
Нужна ли пользователям подписка?
Смотреть только действия:
- Нужна ли пользователям подписка от внешнего поставщика услуг?
- Предлагаете ли вы многоуровневую, многопакетную или дополнительную подписку?
Смотреть только действия: нужно ли пользователям брать напрокат или покупать контент?
Изменяются ли требования к доступу со временем?
Зависит ли требование доступа от местоположения устройства?
Типы ограничения доступа
Существует два вида ограничений доступа:
Тип платного доступа
Вы можете ограничить доступ к контенту по типу платного доступа. В следующей таблице подробно описаны различные типы платного доступа:
Тип платного доступа | Пример | Категория |
---|---|---|
Никакой покупки или входа в систему не требуется. | Треск | nologinrequired |
Пользователь должен войти в систему, но ему не нужна платная подписка. | Вуду (AVOD) | free |
У пользователя должна быть активная подписка. Доступ не зависит от уровня подписки. | Нетфликс | |
У пользователя должна быть активная подписка. Доступ зависит от уровня подписки. | Хулу (дополнения) | |
Контент доступен в течение ограниченного периода времени после покупки. | Вуду | rental |
Контент доступен в течение неопределенного времени после покупки. | Вуду | purchase |
Контент доступен по кабельной подписке. | ГБО, вперед | externalSubscription |
Тип платного доступа для Watch Actions
Чтобы указать тип платного доступа к контенту для действий Watch, используйте свойство category
в спецификации доступа к действию :
"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"
}
},
...
}
Тип платного доступа для действий прослушивания
Чтобы указать тип платного доступа к контенту для действий прослушивания, используйте свойство category
в объекте предложения :
"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"
}
},
...
}
Географическая зона
Вы должны указать географические регионы, в которых доступен контент. Используйте одно или оба следующих свойства:
- Свойство
eligibleRegion
объекта спецификации доступа Action . Это свойство является обязательным. - Свойство
ineligibleRegion
объекта спецификации доступа Action .
Пользователь может получить доступ к содержимому, если местоположение устройства находится в любом регионе, указанном в eligibleRegion
, и не находится в каком-либо регионе, указанном в ineligibleRegion
.
Свойства eligibleRegion
и ineligibleRegion
допускают следующие значения:
- Список
Country
,City
иState
. - Объект
GeoShape
. Подробные требования см. в разделе свойствGeoShape
. - Список объектов
GeoShape
.
Если контент доступен по всему миру, используйте следующее специальное значение для eligibleRegion
:
"eligibleRegion": "EARTH",
Варианты использования приемлемого региона
Ниже приведены примеры использования свойства eligibleRegion
:
- Пример 1:
eligibleRegion
со списком стран. - Пример 2:
eligibleRegion
с объектомGeoShape
, содержащим список почтовых индексов. - Пример 3:
eligibleRegion
с объектомGeoShape
, содержащим список кодов областей прямой сортировки (FSA). - Пример 4:
eligibleRegion
с объектомGeoShape
, содержащим идентификатор DMA. - Пример 5:
eligibleRegion
со списком объектовGeoShape
. Каждый содержит идентификатор DMA. - Пример 6:
ineligibleRegion
с заблокированными почтовыми индексами.
Пример 1
eligibleRegion
со списком стран:
"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" } ] }
Пример 2
eligibleRegion
с объектом GeoShape
, содержащим список почтовых индексов:
"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" ] } }
Пример 3
eligibleRegion
с объектом GeoShape
, содержащим список кодов областей прямой сортировки (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" ] } }
Пример 4
eligibleRegion
с объектом GeoShape
, содержащим идентификатор 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" } ] } }
Пример 5
eligibleRegion
со списком объектов GeoShape
. Каждый содержит идентификатор 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" } } ] }
Пример 6
ineligibleRegion
с заблокированными почтовыми индексами:
"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" ] } }
Идентификатор права
Идентификатор права, entitlementId
, относится к строке, которая представляет доступ к группе контента в вашем медиакаталоге. Чтобы определить, имеет ли пользователь доступ к вашему контенту, Google предпринимает следующие шаги:
- Мы делаем вызов API к вашей конечной точке прав , чтобы получить идентификаторы прав пользователя.
- Мы ищем необходимые идентификаторы прав на контент в вашем фиде Media Actions.
- Мы сопоставляем
entitlementId
пользователя со свойствомidentifier
объекта подписки на мультимедиа в вашем канале. Если хотя бы одинentitlementId
совпадает, мы определяем, что пользователь может получить доступ к контенту.
![](https://developers.google.cn/static/actions/media/images/image-entitlements-5.png?authuser=6&hl=ru)
Google рекомендует использовать следующий синтаксис для entitlementId
:
<domain name> + colon (:) + <access level to content>
Примеры синтаксиса:
-
example.com:basic
-
example.com:premium
-
example.com:sports
Пример идентификатора полномочий
В фиде MediaExampleCompany указано, что для Movie XYZ
требуется example.com:basic
entitlementId
, как показано:
{ "@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 ... }, ... } }, ... }
Варианты использования общего доступа
Ниже приведены распространенные варианты использования доступа:
- Бесплатно (не требуется вход в систему): контент доступен без входа в систему, подписки или покупки.
- Бесплатно (требуется вход в систему). Для просмотра контента требуется вход пользователей в систему, но не требуется подписка.
- Одноуровневая подписка: для контента требуется подписка. Все подписчики могут получить доступ к одному и тому же контенту, будь то фильмы или эпизоды, независимо от их пакета подписки.
- Многоуровневая подписка: для контента требуется подписка. Подписчики могут получить доступ к различному контенту, будь то фильмы или эпизоды, в зависимости от уровня подписки. Например, серебро против золота .
- Дополнительная подписка: для контента требуется подписка. Подписчики могут добавлять премиум-контент помимо своей обычной подписки.
- Единоразовая покупка: контент можно приобрести, после чего пользователь может получить к нему доступ в течение неопределенного времени.
- Live TV: подписка включает доступ к местным, национальным и премиальным каналам.
- Сторонняя подписка: для просмотра содержимого пользователю необходимо войти в систему у своего поставщика услуг кабельного телевидения.
Бесплатно (вход не требуется)
Вход в систему не требуется
Контент доступен без входа в систему и подписки.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "nologinrequired", "availabilityStarts": "2015-01-01T00:00Z", "availabilityEnds": "2015-12-31T00:00Z", "eligibleRegion": { "@type": "Country", "name": "US" } } }
- Установите
category
nologinrequired
. - Не включайте
expectAcceptanceOf
.
Бесплатно (требуется вход в систему)
Требуется вход
Для контента требуется вход пользователей в систему, но не требуется подписка.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "free", "availabilityStarts": "2015-01-01T00:00Z", "availabilityEnds": "2015-12-31T00:00Z", "eligibleRegion": { "@type": "Country", "name": "US" } } }
- Установите
category
«free
. - Не включайте
expectAcceptanceOf
.
Одноуровневая подписка
В модели одноуровневой подписки у поставщика услуг есть один уровень подписки. Все подписчики могут получить доступ к одному и тому же контенту, будь то фильмы или эпизоды, независимо от их пакета подписки.
{ "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" } } }
Многоуровневая подписка
В многоуровневой модели подписки поставщик услуг имеет несколько уровней подписки, например Gold , Silver и Bronze . Пользователи, у которых есть подписка верхнего уровня, могут получить доступ ко всему контенту нижнего уровня. Однако пользователи с подпиской нижнего уровня не могут получить доступ к содержимому верхнего уровня.
![](https://developers.google.cn/static/actions/media/images/image-entitlements-2.png?authuser=6&hl=ru)
Рассмотрим следующий сценарий:
- Джейн подписывается на золотой уровень. Конечная точка разрешений возвращает следующие идентификаторы
entitlementId
:-
example.com:bronze
-
example.com:silver
-
example.com:gold
-
- Джон подписывается на Бронзовый уровень. Конечная точка разрешений возвращает следующий
entitlementId
:-
example.com:bronze
-
- Ваш фид Media Actions описывает следующие требования:
- Для фильма A требуется
example.com:bronze
. - Для фильма B требуется
example.com:silver
.
- Для фильма A требуется
В этом сценарии Google определяет следующие уровни доступа для Джейн и Джона:
- И Джейн, и Джон имеют доступ к фильму «А» .
- У Джейн есть доступ к фильму Б , а у Джона нет.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "subscription", "requiresSubscription": { "@type": "MediaSubscription", "@id": "http://www.example.com/basic_subscription", "name": "Bronze", "commonTier": true ... }, ... } }
Дополнительная подписка
В модели подписки на надстройки поставщик услуг позволяет пользователям расширять свои права и добавлять каналы к базовой подписке. Пользователи могут добавлять столько каналов, сколько захотят.
![](https://developers.google.cn/static/actions/media/images/image-entitlements-3.png?authuser=6&hl=ru)
Рассмотрим следующий сценарий:
- Помимо базовой подписки у Джейн есть PRO и Sportz . Конечная точка разрешений возвращает следующие идентификаторы
entitlementId
:-
example.com:basic
-
example.com:pro
-
example.com:sportz
-
- У Джона есть только базовая подписка. Конечная точка разрешений возвращает следующий
entitlementId
:-
example.com:basic
-
- Ваш фид Media Actions описывает следующие требования:
- Для фильма A требуется
example.com:basic
. - Для фильма B требуется
example.com:pro
.
- Для фильма A требуется
В этом сценарии Google определяет следующие уровни доступа для Джейн и Джона:
- И Джейн, и Джон имеют доступ к фильму «А» .
- У Джейн есть доступ к фильму Б , а у Джона нет.
{ "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 } } } }
Разовая покупка
Покупка
Контент доступен в течение неопределенного времени после покупки.
{ "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/" } } } }
- Установите
category
дляpurchase
. - Включите
expectAcceptanceOf
вactionAccessibilityRequirement
, чтобы указать цену покупки.
Аренда
Контент доступен в течение ограниченного периода времени после покупки.
{ "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/" } } } }
- Установите
category
«rental
. - Включите
expectAcceptanceOf
вactionAccessibilityRequirement
, чтобы указать цену аренды.
Прямой эфир
В канале Media Actions вы можете ограничить доступ к каналу Live TV или событию на основе следующих двух пользовательских условий:
- Местоположение устройства пользователя
Чтобы ограничить доступ к телеканалу, укажите территорию, в которой пользователи будут иметь к нему доступ. Обычно это условие касается местных телеканалов.
- Статус учетной записи пользователя
Если доступ к телеканалу зависит от настроек на уровне учетной записи пользователя, используйте идентификаторы прав для представления ограничения.
Это условие обычно применяется к следующим вариантам использования:
- Пакет: национальные каналы часто включаются в пакеты, и пользователи сами выбирают, на какой пакет они хотят подписаться.
- Дополнение: некоторые премиальные каналы требуют, чтобы пользователи выборочно добавляли дополнительные каналы в свою подписку.
- Региональная спортивная сеть (RSN): RSN обычно связаны с «домашним» местоположением пользователя. Пользователи могут смотреть контент RSN, даже когда они выезжают за пределы своего «домашнего» местоположения.
Сторонняя подписка
Сторонняя подписка
Контент доступен подписчикам другого сервиса.
{ "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" } } }
- Добавьте
authenticator
чтобы указать, что аутентификацию подписчиков осуществляет другая служба. Например, для HBO GO требуется подписка от провайдера кабельного телевидения.
Пакеты общего уровня
Контент общего уровня доступен всем подписчикам независимо от их пакета подписки. Общий уровень применяется ко всему контенту с category
subscription
. Дополнительную информацию о свойстве category
см. в разделе «Тип платного доступа» .
Зачем нужен пакет общего уровня?
Многие продукты Google предоставляют пользователям рекомендации по телевидению и фильмам; сюда входят Google Search, Android TV и Google Assistant. Чтобы установить ожидания пользователей относительно стоимости, Google должен понимать, какой контент доступен всем подписчикам за счет использования общего уровня. Google также должен понимать, какой контент доступен подписчикам с определенными пакетами подписки.
Google рекомендует книги, доступные на общем уровне, если вы не поддерживаете API разрешений . API позволяет Google понять, к каким заголовкам необщего уровня может получить доступ каждый конкретный пользователь.
Когда мне следует создавать пакет общего уровня?
Пакет общего уровня требуется, если ваша служба предлагает контент, доступный всем подписчикам. Сюда входят услуги, предлагающие только один пакет, и услуги, предлагающие несколько пакетов или дополнений.
Поставщикам, у которых нет контента, доступного всем подписчикам, не нужно создавать пакет общего уровня. Примером являются поставщики услуг, которые предоставляют взаимоисключающий контент во всех своих пакетах.
Общие примеры уровней
Ниже приведены примеры общего уровня.
Многоуровневая подписка
В многоуровневой модели подписки поставщик услуг имеет несколько уровней подписки, например уровни Gold , Silver и Bronze . Пользователи с подпиской верхнего уровня имеют доступ ко всему контенту нижних уровней. Пользователи с подпиской нижнего уровня не имеют доступа к содержимому верхнего уровня. На следующем изображении показан пример структуры пакета.
![Уровень Gold содержит все содержимое уровня Silver, который в свою очередь содержит все содержимое уровня Bronze.](https://developers.google.cn/static/actions/media/images/tieredsub.png?authuser=6&hl=ru)
В следующем примере кода бронзовый пакет является общим уровнем, поскольку все пользователи имеют доступ ко всему содержимому этого уровня.
"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 } ],
Дополнения
В модели подписки с дополнительными услугами поставщик услуг позволяет пользователям расширять свои права и добавлять каналы к базовой подписке. Пользователи могут добавлять столько каналов, сколько захотят. На следующем изображении показан пример структуры пакета.
![Каждый пользователь начинает с базового канала и может добавить любую комбинацию каналов PRO, Sportz и Moviemax.](https://developers.google.cn/static/actions/media/images/addonssub.png?authuser=6&hl=ru)
Если у вас есть канал, доступный всем пользователям и за него не взимается плата, вы можете объединить пакет с пакетом общего уровня.
В следующем примере кода базовый пакет является общим уровнем, поскольку все пользователи имеют доступ ко всему содержимому этого пакета.
"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 } ],
Пакеты с пересекающимся содержимым
В модели контента, где пакеты имеют пересекающееся содержимое, поставщик услуг продает пакеты, которые включают в себя некоторое содержимое из других пакетов. На следующем изображении показан пример структуры пакета.
![Диаграмма Венна, на которой перекрытие пакетов 1, 2 и 3 обозначено как «Общий уровень».](https://developers.google.cn/static/actions/media/images/intersect.png?authuser=6&hl=ru)
В следующем примере кода поставщик предлагает три пакета, в которых некоторое содержимое пересекается во всех пакетах. В этом случае требуется четвертый пакет, представляющий общий уровень. Он должен включать весь контент, доступный во всех трех пакетах.
"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 } ],
Пакеты без пересекающегося содержимого
В модели контента, в которой все пакеты контента не пересекаются, поставщик услуг продает пакеты, которые не содержат контента из других пакетов. На следующем изображении показан пример структуры пакета.
![Пакеты 1, 2 и 3 полностью разделены.](https://developers.google.cn/static/actions/media/images/nointersect.png?authuser=6&hl=ru)
В следующем примере поставщик предлагает три пакета, содержимое которых не пересекается во всех пакетах. Пакет общего уровня не требуется.
"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 } ],
Конечная точка прав
Используйте информацию из этого раздела для размещения конечной точки HTTPS, которая возвращает права, связанные с пользователем.
Предварительное условие
Прежде чем начать, убедитесь, что ваша служба поддерживает поток OAuth 2.0 с Google.
Запрос
Чтобы получить права пользователя, Google отправляет запрос, содержащий токен OAuth пользователя. Ваша конечная точка должна идентифицировать пользователя на основе этого токена OAuth. См. следующий пример:
GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer <OAuthToken>
Ответ
Ваша конечная точка должна вернуть ответ со следующими свойствами:
Свойство | |
---|---|
subscription | Необходимый Это поле внутри корневого ответа. |
subscription.type | Необходимый Это свойство может иметь следующие значения:
|
subscription.expiration_date | Необязательный Дата истечения срока действия этого права в формате ISO 8601 , включая часовой пояс. Более подробную информацию см. в разделе Срок действия . |
entitlements | Необязательный Это корневое свойство содержит значения |
entitlements.entitlement | Требуется , если доступ к вашему каталогу потокового вещания зависит от типа подписки. Это свойство содержит |
entitlements.expiration_date | Необязательный Дата истечения срока действия этой подписки в формате ISO 8601 , включая часовой пояс. Более подробную информацию см. в разделе Срок действия . |
Срок годности
В ответе конечной точки есть два свойства, которые касаются дат истечения срока действия: subscription.expiration_date
и entitlements.expiration_date
. Вы можете включить один из них или ни один из них, но не оба. Какой из них вы используете, зависит от вашей модели подписки.
Модель подписки | |
---|---|
Доступ к вашему каталогу стриминга одинаков для всех подписчиков. | Поскольку вам не нужно указывать свойство entitlements , укажите subscription.expiration_date . |
Доступ к каталогу потокового вещания зависит от деталей подписки пользователя. | Если ваша модель подписки имеет несколько уровней или надстроек, срок действия которых истекает со временем, выполните одно из следующих действий:
|
Примеры ответов
Ниже приведены примеры ответов для разных состояний подписки:
- Активная подписка
- Активная подписка со сроком действия
- Нет подписки
- Активные подписки на несколько уровней или надстроек
Активная подписка
Активная подписка
У пользователя есть активная подписка на example.com . В этом случае все подписчики имеют доступ ко всему вашему каталогу потокового вещания независимо от типа подписки.
{ "subscription" : { "type": "ActiveSubscription", } }
Активная подписка со сроком действия
Активная подписка со сроком действия
У пользователя есть активная подписка на example.com , и у этой подписки есть срок действия. В этом случае все подписчики имеют доступ ко всему вашему каталогу потокового вещания независимо от типа подписки.
{ "subscription" : { "type": "ActiveSubscription", "expiration_date": "2019-11-10T10:00:00Z" } }
Нет подписки
Нет подписки
У пользователя нет подписки на example.com .
{ "subscription" : { "type": "InactiveSubscription" } }
Активные подписки на несколько уровней или надстроек
Активные подписки на несколько уровней или надстроек
У пользователя есть подписка на example.com:premium
до определенной даты.
{ "subscription" : { "type": "ActiveSubscription", } "entitlements": [ { "entitlement": "example.com:premium", "expiration": "2019-11-10T10:00:00Z" } ] }
Ограничение скорости
Google обновляет информацию о правах пользователя каждые шесть часов. Чтобы сгладить максимальное количество запросов в секунду (QPS), Google равномерно распределяет запросы к вашей конечной точке во времени. Таким образом, вы можете оценить ожидаемое среднее количество запросов в секунду для вашей конечной точки по следующей формуле:
Ожидаемое среднее количество запросов в секунду = <общее количество пользователей> / 21 600 секунд (6 часов x 60 минут x 60 секунд).
Если вы поддерживаете большое количество пользователей, Google может настроить 6-часовой интервал. При необходимости свяжитесь с Google, чтобы обсудить конфигурацию.
Свяжитесь с Google
Когда ваша конечная точка будет готова, свяжитесь с Google, чтобы сообщить URL-адрес конечной точки.
Свойства спецификации доступа к действию
Справочную информацию см. в разделе свойств спецификации доступа к действию .