ユーザーは、既存の定期購入コンテンツなど、すでにアクセスできるコンテンツを視聴することを好みます。ユーザーがアプリやプラットフォームでアクセスできるコンテンツを Google が把握していれば、そのコンテンツにユーザーをリダイレクトできるため、検索結果やレスポンスが向上します。

コンテンツのアクセス要件を特定する
カタログ内の各コンテンツ パッケージのアクセス要件を特定する必要があります。その際は、次の点を考慮してください。
- ユーザーがコンテンツにアクセスするには、アプリやプラットフォームにログインする必要があるか。
有料会員登録は必要か。
ウォッチ アクションのみ:
- 外部サービス プロバイダからの有料会員登録は必要か。
- 階層型、マルチパッケージ、アドオンの定期購入を提供していますか?
ウォッチ アクションのみ: コンテンツをレンタルまたは購入する必要があるか。
アクセス要件は時間とともに変化するか。
アクセス要件はデバイスの場所によって異なるか。
アクセス制限の種類
アクセス制限には次の 2 種類があります。
ペイウォールの種類
ペイウォールの種類でコンテンツへのアクセスを制限できます。次の表に、さまざまなペイウォール タイプを示します。
ペイウォールの種類 | 例 | カテゴリ |
---|---|---|
購入やログインは必要ありません。 | Crackle | nologinrequired |
ユーザーはログインする必要がありますが、有料会員登録は不要です。 | Vudu(AVOD) | free |
お客様は有効な定期購入を利用している必要があります。アクセスはサブスクリプション ティアとは無関係です。 | Netflix |
|
お客様は有効な定期購入を利用している必要があります。アクセス権はサブスクリプションの階層によって異なります。 | Hulu(アドオン) |
|
コンテンツは購入後、一定期間利用できます。 | Vudu | rental |
コンテンツは購入後、無期限に利用できます。 | Vudu | purchase |
コンテンツはケーブルテレビのサブスクリプションで利用できます。 | HBO GO | externalSubscription |
ウォッチ アクションのペイウォール タイプ
ウォッチ アクションのコンテンツ ペイウォール タイプを指定するには、アクション アクセス指定で 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
プロパティ。このプロパティは必須です。 - アクション アクセス指定オブジェクトの
ineligibleRegion
プロパティ。
デバイスの所在地が eligibleRegion
で指定されたリージョン内にあり、ineligibleRegion
で指定されたリージョン内にない場合、ユーザーはコンテンツにアクセスできます。
eligibleRegion
プロパティと ineligibleRegion
プロパティでは、次の値を使用できます。
Country
、City
、State
のリスト。GeoShape
オブジェクト。詳細な要件については、GeoShape
プロパティのセクションをご覧ください。GeoShape
オブジェクトのリスト。
世界中で視聴できるコンテンツの場合は、eligibleRegion
に次の特別な値を指定します。
"eligibleRegion": "EARTH",
eligibleRegion のユースケース
eligibleRegion
プロパティのユースケースの例を次に示します。
- 例 1: 国のリストを含む
eligibleRegion
。 - 例 2: 郵便番号のリストを含む
GeoShape
オブジェクトを使用したeligibleRegion
。 - 例 3: Forward Sortation Area(FSA)コードのリストを含む
GeoShape
オブジェクトを含むeligibleRegion
。 - 例 4: DMA ID を含む
GeoShape
オブジェクトを使用したeligibleRegion
。 - 例 5:
GeoShape
オブジェクトのリストを含むeligibleRegion
。それぞれに DMA ID が含まれています。 - 例 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
Forward Sortation Area(FSA)コードのリストを含む GeoShape
オブジェクトを含む eligibleRegion
:
"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" ] } }
例 4
DMA ID を含む GeoShape
オブジェクトを使用した eligibleRegion
:
"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" } ] } }
例 5
GeoShape
オブジェクトのリストを含む eligibleRegion
。それぞれに DMA ID が含まれています。
"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 }, "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" ] } }
登録情報 ID
登録情報 ID(entitlementId
)は、メディア カタログにあるコンテンツ グループへのアクセス権を表す文字列です。Google では、コンテンツに対するアクセス権がユーザーにあるかどうかを判断するために次の手順を実施します。
- 登録情報のエンドポイントに対する API 呼び出しを実行し、ユーザーの利用資格 ID を受け取ります。
- メディア アクション フィードから、そのコンテンツの必須の登録情報識別子を検索します。
- ユーザーの
entitlementId
を、フィード内のメディア サブスクリプション オブジェクトのidentifier
プロパティと照合します。entitlementId
が 1 つ以上一致する場合、ユーザーはコンテンツにアクセスできると判断します。

entitlementId
には次の構文を使用することをおすすめします。
<domain name> + colon (:) + <access level to content>
構文の例:
example.com:basic
example.com:premium
example.com:sports
登録情報 ID の例
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 ... }, "additionalProperty": { "@type": "PropertyValue", "name": "DisplaySubscriptionIdentifier", "value": "http://www.example.com/basic_subscription" }, ... } }, ... }
一般的なアクセスのユースケース
一般的なアクセスのユースケースは次のとおりです。
- 無料(ログイン不要): ログイン、サブスクリプション、購入なしでコンテンツを利用できます。
- 無料(ログインが必要): コンテンツを利用する際、ユーザーはログインする必要がありますが、サブスクリプションは必要ありません。
- 単一階層の定期購入: コンテンツを利用するには定期購入が必要です。すべての定期購入者は、定期購入プランに関係なく、映画やエピソードなどの同じコンテンツにアクセスできます。
- マルチティア サブスクリプション: コンテンツを利用するにはサブスクリプションが必要です。定期購入者は、定期購入のプランに応じて、映画やエピソードなどさまざまなコンテンツにアクセスできます。たとえば、シルバーとゴールドなどです。
- アドオン サブスクリプション: コンテンツを利用するにはサブスクリプションが必要です。定期購入者は、通常の定期購入に加えてプレミアム コンテンツを追加できます。
- 1 回限りの購入: コンテンツを購入すると、ユーザーは無期限でアクセスできるようになります。
- ライブテレビ: 定期購入すると、地域、全国、プレミアム チャンネルにアクセスできます。
- サードパーティのサブスクリプション: コンテンツを利用するには、ケーブル プロバイダでログインする必要があります。
無料(ログイン不要)
ログインは不要
コンテンツはログインまたはサブスクリプションなしで利用できます。
{ "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
は含めないでください。
単一階層の定期購入
単一階層のサブスクリプション モデルでは、サービス プロバイダが 1 つのサブスクリプション階層を用意します。サブスクリプション パッケージに関係なく、すべての登録者が同じコンテンツ(映画やエピソードなど)にアクセスできます。
{ "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" } } }
複数レベルの有料会員登録
階層があるサブスクリプション モデルでは、サービス プロバイダが複数のサブスクリプション階層(ゴールド、シルバー、ブロンズなど)を用意します。上位階層のサブスクリプションを持つユーザーは、下位階層のすべてのコンテンツにアクセスできます。ただし、下位階層のサブスクリプションを持つユーザーは、上位階層のコンテンツにアクセスできません。

次のシナリオを考えてみます。
- Jane はゴールド階層に加入しています。登録情報のエンドポイントからは、次の
entitlementId
識別子が返されます。example.com:bronze
example.com:silver
example.com:gold
- John はブロンズ階層に加入しています。登録情報のエンドポイントからは、次の
entitlementId
が返されます。example.com:bronze
- メディア アクション フィードでは、次の要件が規定されています。
- Movie A には
example.com:bronze
が必要です。 - Movie B には
example.com:silver
が必要です。
- Movie A には
このシナリオでは、Google は Jane と John に次のアクセスレベルがあると判断します。
- Jane と John はどちらも Movie A にアクセスできます。
- Jane は Movie B にアクセスできますが、John はアクセスできません。
{ "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" }, ... } }
アドオン サブスクリプション
アドオンのサブスクリプション モデルでは、ユーザーが利用資格を拡張して基本サブスクリプションにチャンネルを追加できる仕組みをサービス プロバイダが用意します。ユーザーは必要なだけチャンネルを追加できます。

次のシナリオを考えてみます。
- Jane は基本サブスクリプションのほかに、PRO と Sportz のサブスクリプションを持っています。登録情報のエンドポイントからは、次の
entitlementId
識別子が返されます。example.com:basic
example.com:pro
example.com:sportz
- John は基本サブスクリプションのみを持っています。登録情報のエンドポイントからは、次の
entitlementId
が返されます。example.com:basic
- メディア アクション フィードでは、次の要件が規定されています。
- Movie A には
example.com:basic
が必要です。 - Movie B には
example.com:pro
が必要です。
- Movie A には
このシナリオでは、Google は Jane と John に次のアクセスレベルがあると判断します。
- Jane と John はどちらも Movie A にアクセスできます。
- Jane は Movie B にアクセスできますが、John はアクセスできません。
{ "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" }, } } }
1 回だけの購入
購入
コンテンツは購入後、無期限に利用できます。
{ "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
に設定します。actionAccessibilityRequirement
にexpectAcceptanceOf
を含めて購入価格を示します。
レンタル
コンテンツは購入後、一定期間利用できます。
{ "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
に設定します。actionAccessibilityRequirement
にexpectAcceptanceOf
を含めてレンタル料を示します。
ライブテレビ
メディア アクション フィードでは、次の 2 つのユーザー条件に基づいて、ライブテレビのチャンネルまたはイベントへのアクセスを制限できます。
-
ユーザーのデバイスの位置情報
テレビ チャンネルへのアクセスを制限するには、ユーザーがアクセスできる地域を指定します。通常、この条件はローカル放送のテレビ チャンネルに適用されます。
-
ユーザーのアカウント ステータス
ユーザーのアカウント レベルの設定によってテレビ チャンネルへのアクセス権が決まる場合は、その制限を表す利用資格 IDを使用します。
通常、この条件は次のユースケースに適用されます。
- バンドル: 全国放送のチャンネルはバンドルされていることが多く、ユーザーは加入するバンドルを選択します。
- アドオン: プレミアム チャンネルの中には、ユーザーが希望のチャンネルを選択して各自のサブスクリプションに追加しなければならないものがあります。
- 地域スポーツ ネットワーク(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" } }, "additionalProperty": { "@type": "PropertyValue", "name": "DisplaySubscriptionIdentifier", "value": "http://www.example.com/faq" }, "eligibleRegion": { "@type": "Country", "name": "US" } } }
authenticator
を追加して、登録者が別のサービスの認証を受けることを示します。たとえば、HBO GO を利用するにはケーブル プロバイダへの有料会員登録が必要です。
一般的な階層パッケージ
共通の階層のコンテンツは、サブスクリプション パッケージに関係なく、すべての登録者が利用できます。共通階層は、category
が subscription
のすべてのコンテンツに適用されます。category
プロパティの詳細については、ペイウォール タイプのセクションをご覧ください。
共通階層パッケージが必要な理由
Google 検索、Android TV、Google アシスタントなど、複数の Google サービスでユーザーにテレビ番組や映画のおすすめが表示されます。費用に関するユーザーの期待値を設定するには、共通の階層を使用することで、すべての定期購読者がどのコンテンツを利用できるかを Google が把握する必要があります。また、特定のサブスクリプション パッケージの登録者が利用できるコンテンツも Google が把握する必要があります。
利用資格 API をサポートしていない限り、Google は共通ティアで利用可能なタイトルをおすすめします。この API を使用すると、Google は各ユーザーがアクセスできる非共通階層のタイトルを把握できます。
共通階層パッケージを作成するタイミング
サービスで、すべての定期購入者が利用できるコンテンツを提供する場合、共通のティア パッケージが必要です。これには、1 つのパッケージのみを提供するサービスと、複数のパッケージやアドオンを提供するサービスが含まれます。
すべての定期購入者が利用できるコンテンツがないプロバイダは、共通階層パッケージを作成する必要はありません。たとえば、すべてのパッケージで相互に排他的なコンテンツを提供するサービス プロバイダなどです。
一般的な階層の例
一般的な階層の例を以下に示します。
階層型サブスクリプション
階層があるサブスクリプション モデルでは、サービス プロバイダが複数のサブスクリプション階層(ゴールド、シルバー、ブロンズなど)を用意します。上位階層のサブスクリプションを持つユーザーは、その下位階層のすべてのコンテンツにアクセスできます。下位階層のサブスクリプションを持つユーザーは、上位階層のコンテンツにはアクセスできません。次の画像は、パッケージ構造の例です。

次のコード例では、すべてのユーザーがその階層のすべてのコンテンツにアクセスできるため、ブロンズ パッケージが共通階層になります。
"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 } ],
重複するコンテンツを含むパッケージ
パッケージに重複するコンテンツが含まれるコンテンツ モデルでは、サービス プロバイダは他のパッケージのコンテンツを含むパッケージを販売します。次の画像は、パッケージ構造の例です。

次のコード例では、プロバイダが 3 つのパッケージを提供しており、一部のコンテンツはすべてのパッケージで重複しています。この場合、共通階層を表す 4 つ目のパッケージが必要です。3 つのパッケージすべてで利用可能なすべてのコンテンツを含める必要があります。
"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 } ],
コンテンツが重複しないパッケージ
すべてのコンテンツ パッケージが交差しないコンテンツ モデルでは、サービス プロバイダは他のパッケージのコンテンツを含まないパッケージを販売します。次の画像は、パッケージ構造の例です。

次の例では、プロバイダは、すべてのパッケージでコンテンツが重複しない 3 つのパッケージを提供しています。共通の階層パッケージは必要ありません。
"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 エンドポイントをホストします。
前提条件
始める前に、使用しているサービスが Google の OAuth 2.0 フローをサポートしていることを確認してください。
リクエスト
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
の 2 つのプロパティがあります。どちらか一方を含めるか、両方とも含めないことはできますが、両方を含めることはできません。どちらを使用するかは、サブスクリプション モデルによって異なります。
サブスクリプション モデル | |
---|---|
ストリーミング カタログへのアクセスは、すべての定期購入者で同じです。 | 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 では、最長 6 時間ごとにユーザーの利用資格情報を更新しています。1 秒あたりの最大クエリ数(QPS)が大幅に変化しないように、時間の経過に対して均等にクエリがエンドポイントに配分されます。したがって、次の式を使用して、エンドポイントで予想される平均 QPS を見積もることができます。
予想平均 QPS = <ユーザーの総数> / 21,600 秒(6 時間 × 60 分 × 60 秒)
サポートされているユーザーの数が多い場合、この 6 時間の更新間隔は調整できます。必要に応じて、Google にお問い合わせのうえ、構成についてご相談ください。
Google に問い合わせ
エンドポイントの準備が整ったら、Google にエンドポイントの URL を通知してください。
アクション アクセス指定プロパティ
リファレンス情報については、アクション アクセス指定オブジェクトのセクションをご覧ください。