Требования к доступу

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

Рисунок 1. Требования к доступу помогают вашим подписчикам получать доступ к контенту в вашем приложении или на платформе.

Определение требований к доступу к контенту

Вы должны определить требования к доступу для каждого пакета содержимого в вашем каталоге. При этом рассмотрите следующие вопросы:

  • Нужно ли пользователям входить в ваше приложение или платформу для доступа к контенту?
  • Нужна ли пользователям подписка?

    Смотреть только действия:

    • Нужна ли пользователям подписка от внешнего поставщика услуг?
    • Предлагаете ли вы многоуровневую, многоуровневую или дополнительную подписку?
  • Только действия просмотра: нужно ли пользователям брать напрокат или покупать контент?

  • Изменяются ли требования к доступу со временем?

  • Зависят ли требования доступа к местоположению устройства?

Типы ограничения доступа

Существует два вида ограничения доступа:

Тип платного доступа

Вы можете ограничить доступ к контенту по типу платного доступа. В следующей таблице подробно описаны различные типы платного доступа:

Тип платного доступа Пример Категория
Никаких покупок или авторизации не требуется. Треск nologinrequired
Пользователь должен войти в систему, но не требует платной подписки. Вуду (AVOD) free
Пользователь должен иметь активную подписку. Доступ не зависит от уровня подписки. Нетфликс

subscription

Пользователь должен иметь активную подписку. Доступ зависит от уровня подписки. Хулу (дополнения)

subscription

Контент доступен в течение ограниченного периода времени после покупки. вуду 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 , и не находится в каком-либо регионе, указанном в ineligibleRegion .

СвойстваСоответствующиеРегионы и ineligibleRegion eligibleRegion следующие значения:

Если содержимое доступно глобально, используйте следующее специальное значение для 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 выполняет следующие действия:

  1. Мы делаем вызов API к вашей конечной точке прав, чтобы получить идентификаторы прав пользователя.
  2. Мы ищем требуемые идентификаторы прав контента в вашей ленте Media Actions.
  3. Мы сопоставляем entitlementId пользователя со свойством identifier объекта подписки на мультимедиа в вашей ленте. Если хотя бы один entitlementId совпадает, мы определяем, что пользователь может получить доступ к содержимому.
Рисунок 2. Один из идентификаторов прав пользователя соответствует требуемому идентификатору прав контента.

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"
    }
  }
}

Многоуровневая подписка

В многоуровневой модели подписки у поставщика услуг есть несколько уровней подписки, например Золотой , Серебряный и Бронзовый . Пользователи с подпиской верхнего уровня могут получить доступ ко всему содержимому нижнего уровня. Однако пользователи с подпиской нижнего уровня не могут получить доступ к содержимому верхнего уровня.

Рисунок 3. Многоуровневая модель подписки и ее представление прав.

Рассмотрим следующий сценарий:

  • Джейн подписывается на уровень 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 .

В этом сценарии Google определяет следующие уровни доступа для Джейн и Джона:

  • И Джейн, и Джон имеют доступ к фильму А.
  • У Джейн есть доступ к Movie B , а у Джона нет.
{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "subscription",
    "requiresSubscription": {
      "@type": "MediaSubscription",
      "@id": "http://www.example.com/basic_subscription",
      "name": "Bronze",
      "commonTier": true
      ...
    },
    ...
  }
}

Дополнительная подписка

В модели подписки на надстройки поставщик услуг позволяет пользователям расширять свои права и добавлять каналы к базовой подписке. Пользователи могут добавлять столько каналов, сколько захотят.

Рисунок 4. Модель подписки на надстройки и ее представление прав.

Рассмотрим следующий сценарий:

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

Золотой уровень содержит все содержимое серебряного уровня, который, в свою очередь, содержит все содержимое бронзового уровня.
Рисунок 5. Структура многоуровневого пакета подписки.

В следующем примере кода бронзовый пакет является общим уровнем, поскольку все пользователи имеют доступ ко всему содержимому на этом уровне.

"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.
Рисунок 6. Структура пакета подписки на надстройки.

Если у вас есть канал, доступный для всех пользователей, и за канал не взимается плата, вы можете объединить пакет с пакетом общего уровня.

В следующем примере кода базовый пакет является общим уровнем, поскольку все пользователи имеют доступ ко всему содержимому в этом пакете.

"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 помечено как «Общий уровень».
Рисунок 7. Структура пакета с пересекающимся содержимым.

В следующем примере кода поставщик предлагает три пакета, в которых некоторый контент пересекается во всех пакетах. В этом случае требуется четвертый пакет, представляющий общий уровень. Он должен включать весь контент, доступный во всех трех пакетах.

"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 полностью разделены.
Рисунок 8. Структура пакета без пересекающегося содержимого.

В следующем примере поставщик предлагает три пакета без пересечения содержимого всех пакетов. Пакет общего уровня не требуется.

"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

Необходимый

Это свойство может иметь следующие значения:

  • ActiveSubscription : у пользователя есть активная подписка на поставщика.
  • ActiveTrial : у пользователя есть активная пробная версия поставщика.
  • InactiveSubscription : у пользователя нет активной подписки или активной пробной версии.
subscription.expiration_date

По желанию

Дата истечения срока действия этого права в формате ISO 8601 , включая часовой пояс. Дополнительные сведения см. в разделе Сроки действия .

entitlements

По желанию

Это корневое свойство содержит значения entitlementId , которыми владеет пользователь.

entitlements.entitlement

Требуется , если доступ к вашему потоковому каталогу зависит от типа подписки.

Это свойство содержит entitlementId . Дополнительные сведения см. в разделе Идентификатор права .

entitlements.expiration_date

По желанию

Дата истечения срока действия этой подписки в формате ISO 8601 , включая часовой пояс. Дополнительные сведения см. в разделе Сроки действия .

Срок годности

В ответе конечной точки есть два свойства, которые касаются дат истечения срока действия: subscription.expiration_date и entitlements.expiration_date . Вы можете включить один из них или ни один из них, но не оба. Какой из них вы используете, зависит от вашей модели подписки.

Модель подписки
Доступ к вашему потоковому каталогу одинаков для всех подписчиков. Так как вам не нужно указывать свойство entitlements , укажите subscription.expiration_date .

Доступ к вашему потоковому каталогу зависит от сведений о подписке пользователя.

Если ваша модель подписки имеет несколько уровней или надстроек, срок действия которых истекает со временем, выполните одно из следующих действий:

  • Если все значения entitlements.entitlement истекают в одно и то же время, укажите subscription.expiration_date .
  • Если срок действия некоторых значений entitlements.entitlement истекает в разное время, укажите entitlements.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-адрес конечной точки.

Свойства спецификации доступа к действию

Справочную информацию см. в разделе свойств спецификации доступа к действию .