Пользователи предпочитают смотреть или слушать контент, к которому у них уже есть доступ, например контент по существующей подписке. Если Google знает, к какому контенту пользователь может получить доступ в вашем приложении или на платформе, он может создать лучший результат поиска или ответ, чтобы направить пользователя к этому контенту.

Определение требований к доступу к контенту
Вы должны определить требования к доступу для каждого пакета содержимого в вашем каталоге. При этом рассмотрите следующие вопросы:
- Нужно ли пользователям входить в ваше приложение или платформу для доступа к контенту?
Нужна ли пользователям подписка?
Смотреть только действия:
- Нужна ли пользователям подписка от внешнего поставщика услуг?
- Предлагаете ли вы многоуровневую, многоуровневую или дополнительную подписку?
Только действия просмотра: нужно ли пользователям брать напрокат или покупать контент?
Изменяются ли требования к доступу со временем?
Зависят ли требования доступа к местоположению устройства?
Типы ограничения доступа
Существует два вида ограничения доступа:
Тип платного доступа
Вы можете ограничить доступ к контенту по типу платного доступа. В следующей таблице подробно описаны различные типы платного доступа:
Тип платного доступа | Пример | Категория |
---|---|---|
Никаких покупок или авторизации не требуется. | Треск | nologinrequired |
Пользователь должен войти в систему, но не требует платной подписки. | Вуду (AVOD) | free |
Пользователь должен иметь активную подписку. Доступ не зависит от уровня подписки. | Нетфликс | |
Пользователь должен иметь активную подписку. Доступ зависит от уровня подписки. | Хулу (дополнения) | |
Контент доступен в течение ограниченного периода времени после покупки. | вуду | rental |
Контент доступен в течение неопределенного времени после покупки. | вуду | purchase |
Контент доступен по кабельной подписке. | ГБО Перейти | externalSubscription |
Тип платного доступа к Watch Actions
Чтобы указать тип платного доступа к контенту для Watch Actions, используйте свойство category
в спецификации доступа Action :
"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
.
СвойстваСоответствующиеРегионы и ineligibleRegion
eligibleRegion
следующие значения:
- Список
Country
,City
иState
. - Объект
GeoShape
. Подробные требования см. в разделе свойствGeoShape
. - Список объектов
GeoShape
.
Если содержимое доступно глобально, используйте следующее специальное значение для eligibleRegion
региона:
"eligibleRegion": "EARTH",
Варианты использования подходящего региона
Ниже приведены примеры использования свойства eligibleRegion
.
- Пример 1:
eligibleRegion
со списком стран. - Пример 2:
GeoShape
eligibleRegion
который содержит список почтовых индексов. - Пример 3:
eligibleRegion
область с объектомGeoShape
, который содержит список кодов области прямой сортировки (FSA). - Пример 4:
GeoShape
eligibleRegion
который содержит идентификатор 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
GeoShape
eligibleRegion
который содержит список почтовых индексов:
"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
GeoShape
eligibleRegion
который содержит список кодов области прямой сортировки (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
GeoShape
eligibleRegion
который содержит идентификатор 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
GeoShape
eligibleRegion
Каждый содержит идентификатор 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
совпадает, мы определяем, что пользователь может получить доступ к содержимому.

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 ... }, ... } }, ... }
Общие варианты использования доступа
Ниже приведены распространенные варианты использования доступа:
- Бесплатно (вход в систему не требуется): содержимое доступно без входа в систему, подписки или покупки.
- Бесплатно (требуется вход в систему): контент требует, чтобы пользователи вошли в систему, но не требует подписки.
- Одноуровневая подписка: для контента требуется подписка. Все подписчики могут получить доступ к одному и тому же контенту, будь то фильмы или эпизоды, независимо от их пакета подписки.
- Многоуровневая подписка: для контента требуется подписка. Подписчики могут получить доступ к различному контенту, будь то фильмы или эпизоды, в зависимости от их уровня подписки. Например, серебро против золота .
- Дополнительная подписка: контент требует подписки. Подписчики могут добавлять премиум-контент поверх своей обычной подписки.
- Разовая покупка: Контент можно приобрести, после чего пользователь может получить к нему доступ на неопределенный срок.
- Прямая трансляция: подписка включает доступ к местным, национальным и премиальным каналам.
- Сторонняя подписка: контент требует, чтобы пользователь вошел в систему со своим кабельным провайдером.
Бесплатно (не требуется авторизация)
Логин не требуется
Контент доступен без авторизации или подписки.
{ "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 . Ваша конечная точка прав возвращает следующие идентификаторы
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 определяет следующие уровни доступа для Джейн и Джона:
- И Джейн, и Джон имеют доступ к фильму А.
- У Джейн есть доступ к Movie B , а у Джона нет.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "subscription", "requiresSubscription": { "@type": "MediaSubscription", "@id": "http://www.example.com/basic_subscription", "name": "Bronze", "commonTier": true ... }, ... } }
Дополнительная подписка
В модели подписки на надстройки поставщик услуг позволяет пользователям расширять свои права и добавлять каналы к базовой подписке. Пользователи могут добавлять столько каналов, сколько захотят.

Рассмотрим следующий сценарий:
- Джейн имеет PRO и Sportz в дополнение к базовой подписке. Ваша конечная точка прав возвращает следующие идентификаторы
entitlementId
:-
example.com:basic
-
example.com:pro
-
example.com:sportz
-
- У Джона есть только базовая подписка. Ваша конечная точка прав возвращает следующий
entitlementId
:-
example.com:basic
-
- Фид Media Actions описывает следующие требования:
- Для фильма А требуется
example.com:basic
. - Для фильма B требуется
example.com:pro
.
- Для фильма А требуется
В этом сценарии Google определяет следующие уровни доступа для Джейн и Джона:
- И Джейн, и Джон имеют доступ к фильму А.
- У Джейн есть доступ к Movie B , а у Джона нет.
{ "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 . Пользователи с подпиской верхнего уровня имеют доступ ко всему контенту нижних уровней. Пользователи с подпиской нижнего уровня не имеют доступа к содержимому верхнего уровня. На следующем изображении показан пример структуры пакета.

В следующем примере кода бронзовый пакет является общим уровнем, поскольку все пользователи имеют доступ ко всему содержимому на этом уровне.
"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 } ],
Дополнения
В модели подписки на надстройки поставщик услуг позволяет пользователям расширять свои права и добавлять каналы к базовой подписке. Пользователи могут добавлять столько каналов, сколько захотят. На следующем изображении показан пример структуры пакета.

Если у вас есть канал, доступный для всех пользователей, и за канал не взимается плата, вы можете объединить пакет с пакетом общего уровня.
В следующем примере кода базовый пакет является общим уровнем, поскольку все пользователи имеют доступ ко всему содержимому в этом пакете.
"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 } ],
Пакеты с пересекающимся содержимым
В модели содержимого, в которой содержимое пакетов пересекается, поставщик услуг продает пакеты, включающие некоторое содержимое из других пакетов. На следующем изображении показан пример структуры пакета.

В следующем примере кода поставщик предлагает три пакета, в которых некоторый контент пересекается во всех пакетах. В этом случае требуется четвертый пакет, представляющий общий уровень. Он должен включать весь контент, доступный во всех трех пакетах.
"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 } ],
Пакеты без содержания, которые пересекаются
В модели контента, в которой все пакеты контента не пересекаются, поставщик услуг продает пакеты, в которых нет контента из других пакетов. На следующем изображении показан пример структуры пакета.

В следующем примере поставщик предлагает три пакета без пересечения содержимого всех пакетов. Пакет общего уровня не требуется.
"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 равномерно распределяет запросы к вашей конечной точке с течением времени. Таким образом, вы можете оценить ожидаемое среднее количество запросов в секунду для вашей конечной точки по следующей формуле:
Ожидаемый средний показатель QPS = <общее количество пользователей> / 21 600 секунд (6 часов x 60 минут x 60 секунд).
Если вы поддерживаете большое количество пользователей, Google может настроить 6-часовой интервал. При необходимости свяжитесь с Google, чтобы обсудить конфигурацию.
Связаться с Google
Когда ваша конечная точка будет готова, свяжитесь с Google, чтобы сообщить URL-адрес конечной точки.
Свойства спецификации доступа к действию
Справочную информацию см. в разделе свойств спецификации доступа к действию .