ユーザーは、既存のサブスクリプション コンテンツなど、すでにアクセスできるコンテンツを視聴または聴取することを好みます。Google がアプリやプラットフォームでユーザーがアクセスできるコンテンツを把握していれば、Google のさまざまなサービスでより関連性の高いエクスペリエンスを提供し、ユーザーをそのコンテンツに誘導できます。
コンテンツ アクセスの要件を特定する
カタログ内の各コンテンツ パッケージのアクセス要件を特定する必要があります。その際は、次の点を考慮してください。
- ユーザーがコンテンツにアクセスするには、アプリやプラットフォームにログインする必要があるか。
有料会員登録は必要か。
動画再生アクションのみ:
- ユーザーは外部サービス提供者のサブスクリプションが必要ですか?
- 階層型、マルチパッケージ、アドオンのサブスクリプションを提供していますか?
視聴アクションのみ: ユーザーはコンテンツをレンタルまたは購入する必要がありますか?
アクセス要件は時間とともに変化するか。
アクセス要件はデバイスの場所によって異なりますか?
アクセス制限の種類
アクセス制限には次の 2 種類があります。
ペイウォールのタイプ
ペイウォールの種類でコンテンツへのアクセスを制限できます。次の表に、さまざまなペイウォール タイプを示します。
| ペイウォールのタイプ | 例 | カテゴリ |
|---|---|---|
| 購入やログインは必要ありません。 | Crackle | nologinrequired |
| ユーザーはログインする必要がありますが、有料サブスクリプションは必要ありません。 | Vudu(AVOD) | free |
| お客様は有効な定期購入を利用している必要があります。アクセスはサブスクリプション レベルとは無関係です。 | Netflix |
|
| お客様は有効な定期購入を利用している必要があります。アクセス権はサブスクリプションの階層によって異なります。 | Hulu(アドオン) |
|
| 購入すると、コンテンツに一定期間アクセスできます。 | Vudu | rental |
| 購入後、コンテンツは無期限で利用できます。 | Vudu | purchase |
| コンテンツはケーブルテレビのサブスクリプションで利用できます。 | HBO GO | externalSubscription |
ウォッチ アクションのペイウォール タイプ
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プロパティ。このプロパティは必須です。 - アクション アクセス仕様オブジェクトの
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
利用資格識別子 entitlementId は、メディア カタログ内のコンテンツ グループへのアクセスを表す文字列を指します。ユーザーがコンテンツにアクセスできるかどうかを判断するために、Google は次の手順を行います。
- 利用資格エンドポイントに API 呼び出しを行い、ユーザーの利用資格 ID を取得します。
- メディア アクション フィードからコンテンツに必要な利用資格識別子を検索します。
- ユーザーの
entitlementIdは、フィード内のメディア サブスクリプション オブジェクトのidentifierプロパティと照合されます。entitlementIdが 1 つ以上一致する場合、ユーザーはコンテンツにアクセスできると判断します。
entitlementId には次の構文を使用することをおすすめします。
<domain name> + colon (:) + <access level to content>
構文の例:
example.com:basicexample.com:premiumexample.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 ... }, "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:bronzeexample.com:silverexample.com:gold
- ジョンが Bronze ティアに登録します。利用資格エンドポイントは、次の
entitlementIdを返します。example.com:bronze
- メディア アクション フィードには、次の要件が記述されています。
- 映画 A には
example.com:bronzeが必要です。 - 映画 B には
example.com:silverが必要です。
- 映画 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 は Basic サブスクリプションに加えて、PRO と Sportz を利用しています。利用資格エンドポイントは、次の
entitlementId識別子を返します。example.com:basicexample.com:proexample.com:sportz
- ジョンは ベーシック サブスクリプションのみを利用しています。利用資格エンドポイントは、次の
entitlementIdを返します。example.com:basic
- メディア アクション フィードには、次の要件が記述されています。
- 映画 A には
example.com:basicが必要です。 - 映画 B には
example.com:proが必要です。
- 映画 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 を利用するには、ケーブル プロバイダのサブスクリプションが必要です。
一般的な階層パッケージ
共通のメンバーシップ特典は、サブスクリプション パッケージに関係なく、すべてのチャンネル登録者が利用できます。共通階層は、subscription の category を持つすべてのコンテンツに適用されます。category プロパティの詳細については、ペイウォール タイプのセクションをご覧ください。
共通階層パッケージが必要な理由
複数の Google サービスで、ユーザーにおすすめのテレビ番組や映画が表示されます。費用に関するユーザーの期待値を設定するには、共通の階層を使用することで、すべての定期購読者が利用できるコンテンツを Google が把握する必要があります。また、特定の定期購入パッケージで購読者が利用できるコンテンツも Google が把握する必要があります。
利用資格 API をサポートしていない場合は、共通ティアで利用可能なタイトルをおすすめします。この 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 形式)。タイムゾーンが含まれます。詳細については、有効期限をご覧ください。 |
有効期限
エンドポイント レスポンスには、有効期限を扱う 2 つのプロパティ(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 は、ユーザーの利用資格情報を最大 6 時間ごとに更新します。最大秒間クエリ数(QPS)を平滑化するため、Google はクエリをエンドポイントに時間とともに均等に分散します。したがって、エンドポイントの予想平均 QPS は次の式で推定できます。
想定される平均 QPS = <ユーザーの合計数> / 21,600 秒(6 時間 × 60 分 × 60 秒)
多数のユーザーをサポートしている場合は、6 時間の間隔を調整できます。必要に応じて、Google にお問い合わせのうえ、構成についてご相談ください。
Google に問い合わせ
エンドポイントの準備が整ったら、Google にエンドポイントの URL を通知してください。
アクション アクセス指定プロパティ
リファレンス情報については、アクション アクセス仕様のプロパティのセクションをご覧ください。