アクセス要件

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

ユーザーは、既存の購読コンテンツなど、すでにアクセス可能なコンテンツを視聴することを好みます。アプリやプラットフォームでユーザーがアクセスできるコンテンツを Google が把握している場合、Google は検索結果やレスポンスを改善し、ユーザーをそのコンテンツに誘導します。

図 1. アクセス要件により、サブスクライバーがアプリまたはプラットフォーム上のコンテンツにアクセスしやすくなります。

コンテンツ アクセスの要件を特定する

カタログ内の各コンテンツ パッケージのアクセス要件を特定する必要があります。その際は、以下の点を考慮してください。

  • ユーザーがコンテンツにアクセスするには、アプリやプラットフォームにログインする必要があるか。
  • 有料会員登録は必要か。

    動画再生アクションのみ:

    • お客様は外部サービス プロバイダの有料会員登録が必要ですか?
    • 階層型、マルチパッケージ、アドオンのサブスクリプションはありますか?
  • Watch Actions のみ: ユーザーはコンテンツをレンタルまたは購入する必要があるか。

  • アクセス要件は時間とともに変化するか。

  • アクセス要件はデバイスの場所によって異なるか?

アクセス制限のタイプ

アクセス制限には次の 2 種類があります。

ペイウォールの種類

コンテンツへのアクセスをペイウォールの種類ごとに制限できます。次の表に、ペイウォールの種類を示します。

ペイウォールの種類 カテゴリ
購入やログインは不要です。 クラックル nologinrequired
ユーザーはログインする必要がありますが、有料の定期購入は必要ありません。 Vudu(AVOD) free
対象のユーザーには有効な定期購入が必要です。アクセスは定期購入階層とは関係ありません。 Netflix

subscription

対象のユーザーには有効な定期購入が必要です。アクセスは定期購入の階層によって異なります。 Hulu(アドオン)

subscription

購入後、コンテンツを一定期間利用できます。 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 に次の特別な値を使用します。

"eligibleRegion": "EARTH",

対象地域のユースケース

eligibleRegion プロパティのユースケースを次に示します。

  • 例 1: 国のリストを含む eligibleRegion
  • 例 2: 郵便番号のリストを含む GeoShape オブジェクトを含む eligibleRegion
  • 例 3: eligibleRegion(転送並べ替えエリア(FSA)コードのリストを含む)を含む GeoShape オブジェクト。
  • 例 4: DMA ID を含む GeoShape オブジェクトを含む eligibleRegion
  • 例 5: eligibleRegionGeoShape オブジェクトのリスト。各列には 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 は、前方並べ替え領域(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

利用資格の識別子(entitlementId)は、メディア カタログ内のコンテンツ グループへのアクセスを表す文字列です。ユーザーがコンテンツにアクセスできるかどうかを判断するには、Google が次の手順を行います。

  1. Google は Entitlements エンドポイントに対して API 呼び出しを行い、ユーザーの利用資格 ID を受け取ります。
  2. メディア アクション フィードから、コンテンツに必要な利用資格 ID を検索します。
  3. ユーザーの entitlementId と、フィードのメディア サブスクリプション オブジェクトの identifier プロパティを照合します。少なくとも 1 つの entitlementId が一致する場合、ユーザーはコンテンツにアクセスできます。
図 2.ユーザーの利用資格 ID のいずれかが、コンテンツに必要な利用資格 ID と一致する。

entitlementId には、次の構文を使用することをおすすめします。

<domain name> + colon (:) + <access level to content>

構文の例:

  • example.com:basic
  • example.com:premium
  • example.com:sports

利用資格 ID の例

MediaExampleCompany のフィードでは、次のように Movie XYZexample.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"
    }
  }
}
  • categorynologinrequired に設定する。
  • expectAcceptanceOf は含めないでください。

無料(要ログイン)

ログインしてください

コンテンツを利用するにはログインが必要ですが、定期購入は不要です。


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "free",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}
  • categoryfree に設定する。
  • 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"
    }
  }
}

多層サブスクリプション

階層型サブスクリプション モデルの場合、サービス プロバイダには、ゴールドシルバーブロンズなどの複数のサブスクリプション階層があります。上位階層の定期購入を利用しているユーザーは、すべての下位コンテンツにアクセスできます。ただし、下位層の定期購入を持つユーザーは、上位層のコンテンツにアクセスできません。

図 3. 階層型サブスクリプション モデルと利用資格の表現。

次のシナリオを考えてみます。

  • Jane はゴールド ティアに登録しています。利用資格エンドポイントから次の entitlementId 識別子が返されます。
    • example.com:bronze
    • example.com:silver
    • example.com:gold
  • ジョンはブロンズ ティアに登録します。利用資格エンドポイントから次の entitlementId が返されます。
    • example.com:bronze
  • メディア アクション フィードでは、次の要件について説明しています。
    • 映画 A には example.com:bronze が必要です。
    • 映画 B には example.com:silver が必要です。

このシナリオでは、Jane と John について次のアクセスレベルが 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
      ...
    },
    ...
  }
}

アドオン サブスクリプション

アドオン サブスクリプション モデルでは、サービス プロバイダはユーザーの利用資格を拡大し、チャンネルをベース サブスクリプションに追加できます。チャンネルはいくつでも追加できます。

図 4. アドオン サブスクリプション モデルと利用資格の表現。

次のシナリオを考えてみます。

  • Jane は Basic サブスクリプションに加えて PROSportz を所有しています。利用資格エンドポイントは、次の entitlementId 識別子を返します。
    • example.com:basic
    • example.com:pro
    • example.com:sportz
  • 太郎さんは基本サブスクリプションのみを持っています。利用資格エンドポイントから次の entitlementId が返されます。
    • example.com:basic
  • メディア アクション フィードでは、次の要件について説明しています。
    • 映画 A には example.com:basic が必要です。
    • 映画 B には example.com:pro が必要です。

このシナリオでは、Jane と John について次のアクセスレベルが 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/"
      }
    }
  }
}
  • categorypurchase に設定する。
  • actionAccessibilityRequirementexpectAcceptanceOf を追加して、購入価格を示します。

レンタル

購入後、コンテンツを一定期間利用できます。


{
  "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/"
      }
    }
  }
}
  • categoryrental に設定する。
  • actionAccessibilityRequirementexpectAcceptanceOf を追加して、レンタル価格を示します。

ライブテレビ

メディア アクション フィードでは、次の 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 を利用するには、ケーブル プロバイダのサブスクリプションが必要です。

共通ティア パッケージ

共通階層のコンテンツは、サブスクリプション パッケージに関係なく、すべてのサブスクライバーが利用できます。共通階層は、categorysubscription であるすべてのコンテンツに適用されます。category プロパティの詳細については、ペイウォールのタイプのセクションをご覧ください。

共通階層パッケージが必要な理由

複数の Google プロダクトを通じて、Google 検索、Android TV、Google アシスタントなど、ユーザーにおすすめのテレビや映画が提供されています。費用に関するユーザーの期待を設定するには、共通ティアを使用してすべてのサブスクライバーが利用できるコンテンツを理解する必要があります。また、特定の定期購入パッケージを利用している定期購入者が利用できるコンテンツも理解する必要があります。

利用資格 API がサポートされていない場合、Google は共通階層で利用可能なタイトルをおすすめします。API を使用すると、各ユーザーがアクセスできる階層以外のタイトルを Google に認識させることができます。

共有パッケージの作成が必要となる状況

すべてのサブスクライバーが利用できるコンテンツを提供するサービスの場合、共通階層パッケージが必要です。これには、1 つのパッケージのみを提供するサービスと、複数のパッケージまたはアドオンを提供するサービスが含まれます。

すべてのサブスクライバーが利用できるコンテンツがないプロバイダでは、共通階層パッケージを作成する必要はありません。一例として、すべてのパッケージにわたって相互に排他的なコンテンツを提供するサービス プロバイダなどが挙げられます。

一般的な階層の例

以下に、共通ティアの例を示します。

階層型サブスクリプション

階層型サブスクリプション モデルの場合、サービス プロバイダには、ゴールドシルバーブロンズなどの複数の階層があります。上位階層の定期購入を持つユーザーは、下位レベルのすべてのコンテンツにアクセスできます。下位階層のサブスクリプションを持つユーザーは、上位の階層にあるコンテンツにアクセスできません。以下の画像は、パッケージ構造の例です。

ゴールド階層にはシルバー階層のすべてのコンテンツが含まれており、それ自体にブロンズ階層がすべて含まれています。
図 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
    }
  ],

アドオン

アドオン サブスクリプション モデルでは、サービス プロバイダはユーザーの利用資格を拡大し、チャンネルを基本的なサブスクリプションに追加できます。ユーザーは必要な数のチャンネルを追加できます。次の画像は、パッケージ構造の例です。

どのユーザーも Basic チャンネルを使用して開始し、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. コンテンツが交差するパッケージ構造。

次のコードサンプルでは、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
    }
  ],

コンテンツが交差していないパッケージ

すべてのコンテンツ パッケージが交差しないコンテンツ モデルでは、サービス プロバイダは他のパッケージのコンテンツを含まないパッケージを販売します。次の画像は、パッケージ構造の例です。

パッケージ 1、2、3 は完全に分離されています。
図 8. コンテンツが交差していないパッケージ構造。

次の例では、プロバイダは 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

必須

このプロパティには次の値を指定できます。

  • ActiveSubscription: ユーザーはプロバイダに対して有効な定期購入を持っています。
  • ActiveTrial: ユーザーにプロバイダのトライアルがアクティブになっている。
  • InactiveSubscription: ユーザーは有効な定期購入または試用を利用していません。
subscription.expiration_date

Optional

この利用資格の有効期限。タイムゾーンを含む、ISO 8601 形式で指定します。詳細については、有効期限をご覧ください。

entitlements

Optional

このルート プロパティには、ユーザーが保持する entitlementId 値が含まれています。

entitlements.entitlement

ストリーミング カタログへのアクセスがサブスクリプションのタイプによって異なる場合は、必須です。

このプロパティには entitlementId が含まれています。詳細については、利用資格 ID をご覧ください。

entitlements.expiration_date

Optional

このサブスクリプションの有効期限。タイムゾーンを含む ISO 8601 形式で指定します。詳細については、有効期限をご覧ください。

有効期限

エンドポイント レスポンスには、有効期限を処理する subscription.expiration_dateentitlements.expiration_date の 2 つのプロパティがあります。どちらか一方を含めるか、両方を含めることはできません。どちらを使用するかは、サブスクリプション モデルによって異なります。

サブスクリプション モデル
ストリーミング カタログへのアクセスは、すべてのサブスクライバーで同じです。 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"
  }
}

複数階層またはアドオンの有効なサブスクリプション

複数の Tier またはアドオンに対する有効な定期購入

ユーザーが特定の日付までに 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 秒)

多数のユーザーをサポートしている場合、Google は 6 時間間隔を調整できます。 必要に応じて、構成について Google にお問い合わせください。

Google に連絡する

エンドポイントの準備が整ったら、Google にエンドポイントの URL を通知してください。

アクション アクセス指定プロパティ

リファレンス情報については、アクション アクセス仕様のプロパティ セクションをご覧ください。