ユーザーは、既存の定期購入コンテンツなど、すでにアクセスできるコンテンツを視聴または視聴することを好みます。ユーザーがアプリやプラットフォームでアクセスできるコンテンツを Google が把握していれば、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:
eligibleRegion
と、Forward Sortation Area(FSA)コードのリストを含むGeoShape
オブジェクト。 - 例 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
eligibleRegion
は、郵便番号のリストを含む GeoShape
オブジェクトに置き換えます。
"actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "subscription", "requiresSubscription": { "@type": "MediaSubscription", "@id": "http://www.example.com/local_tv_network/subscription", "name": "Example Subscription", "commonTier": true }, "eligibleRegion": { "@type": "GeoShape", "@id": "http://example.com/area1", "addressCountry": "US", "postalCode": [ "94118", "94119" ] } }
例 3
eligibleRegion
は、Forward Sortation Area(FSA)コードのリストを含む GeoShape
オブジェクトに置き換えます。
"actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "subscription", "requiresSubscription": { "@type": "MediaSubscription", "@id": "http://www.example.com/local_tv_network/subscription", "name": "Example Subscription", "commonTier": true }, "eligibleRegion":{ "@type": "GeoShape", "@id": "http://example.com/area2", "addressCountry": "CA", "postalCode": [ "1A1", "K1A" ] } }
例 4
eligibleRegion
は、DMA ID を含む GeoShape
オブジェクトに置き換えます。
"actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "subscription", "requiresSubscription": { "@type": "MediaSubscription", "@id": "http://www.example.com/abcd/subscription", "name": "Example Subscription", "commonTier": true }, "eligibleRegion":{ "@type": "GeoShape", "@id": "http://example.com/area3", "addressCountry": "US", "identifier": [ { "@type": "PropertyValue", "propertyID": "DMA_ID", "value": "501" } ] } }
例 5
eligibleRegion
は GeoShape
オブジェクトのリストに置き換えます。各 DMA 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 }, "eligibleRegion": { "@type": "Country", "name": "US" }, "ineligibleRegion": { "@type": "GeoShape", "@id": "http://example.com/area1", "addressCountry": "US", "postalCode": [ "94118", "94119" ] } }
登録情報 ID
登録情報 ID entitlementId
は、メディア カタログにあるコンテンツ グループへのアクセス権を表す文字列です。Google では、コンテンツに対するアクセス権がユーザーにあるかどうかを判断するために次の手順を実施します。
- Entitlements エンドポイントに対する API 呼び出しを実行し、ユーザーの利用資格 ID を受け取ります。
- メディア アクション フィードから、そのコンテンツの必須の利用資格 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 ... }, ... } }, ... }
一般的なアクセスのユースケース
一般的なアクセスのユースケースは次のとおりです。
- 無料(ログイン不要): ログイン、定期購入、購入なしでコンテンツを利用できます。
- 無料(ログイン必須): コンテンツを利用するにはログインが必要ですが、サブスクリプションは必要ありません。
- 単一階層のサブスクリプション: コンテンツを利用するにはサブスクリプションが必要です。すべての定期購入者は、定期購入パッケージに関係なく、映画やエピソードなど、同じコンテンツにアクセスできます。
- マルチティア サブスクリプション: コンテンツを利用するにはサブスクリプションが必要です。定期購入者は、定期購入の階層に応じて、映画やエピソードなど、さまざまなコンテンツにアクセスできます。たとえば、シルバーとゴールドなどです。
- アドオン サブスクリプション: コンテンツを利用するにはサブスクリプションが必要です。定期購入者は、通常の定期購入に加えてプレミアム コンテンツを追加できます。
- 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" }, "eligibleRegion": { "@type": "Country", "name": "US" } } }
複数階層の定期購入
階層型のサブスクリプション モデルでは、サービス プロバイダが複数のサブスクリプション階層(ゴールド、シルバー、ブロンズなど)を用意します。上位階層のサブスクリプションを持つユーザーは、下位階層のすべてのコンテンツにアクセスできます。ただし、下位階層のサブスクリプションを持つユーザーは、上位階層のコンテンツにアクセスできません。

次のシナリオを考えてみます。
- Jane はゴールド階層に加入しています。登録情報のエンドポイントからは、次の
entitlementId
ID が返されます。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 はどちらも 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 ... }, ... } }
アドオン サブスクリプション
アドオンのサブスクリプション モデルでは、ユーザーが利用資格を拡張し、基本サブスクリプションにチャンネルを追加できる仕組みをサービス プロバイダが用意します。ユーザーは必要なだけチャンネルを追加できます。

次のシナリオを考えてみます。
- Jane は基本サブスクリプションのほかに、PRO と Sportz のサブスクリプションを持っています。登録情報のエンドポイントからは、次の
entitlementId
ID が返されます。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 はどちらも 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 } } } }
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" } }, "eligibleRegion": { "@type": "Country", "name": "US" } } }
authenticator
を追加して、登録者が別のサービスの認証を受けることを示します。たとえば、HBO GO を利用するにはケーブル プロバイダへの有料会員登録が必要です。
一般的な階層パッケージ
共通階層のコンテンツは、サブスクリプション パッケージに関係なく、すべての定期購入者が利用できます。共通階層は、category
が subscription
のすべてのコンテンツに適用されます。category
プロパティの詳細については、ペイウォールのタイプをご覧ください。
共通階層パッケージが必要な理由
複数の Google サービス(Google 検索、Android TV、Google アシスタントなど)が、テレビ番組や映画のおすすめをユーザーに提供しています。費用に関するユーザーの期待値を設定するには、共通の階層を使用して、すべての定期購入者に提供されるコンテンツを把握する必要があります。また、特定のサブスクリプション パッケージのサブスクライバーが利用できるコンテンツについても把握する必要があります。
entitlement 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 形式で指定します(タイムゾーンを含む)。詳細については、有効期限をご覧ください。 |
有効期限
エンドポイント レスポンスには、有効期限を扱う 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 を通知してください。
アクション アクセス指定プロパティ
参照情報については、アクション アクセス指定オブジェクトのプロパティのセクションをご覧ください。