アクセスの要件

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

図 1. アクセス要件は、登録者がアプリやプラットフォーム上のコンテンツにアクセスできるようにするのに役立ちます。

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

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

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

    ウォッチ アクションのみ:

    • 外部サービス プロバイダからの有料会員登録は必要か。
    • 階層型、マルチパッケージ、アドオンの定期購入を提供していますか?
  • ウォッチ アクションのみ: コンテンツをレンタルまたは購入する必要があるか。

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

  • アクセス要件はデバイスの位置情報によって異なるか。

アクセス制限の種類

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

ペイウォールの種類

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

ペイウォールの種類 カテゴリ
購入やログインは必要ありません。 Crackle 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 のユースケース

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

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

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

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

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

eligibleRegionGeoShape オブジェクトのリストに置き換えます。各 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"
         }
      }
   ]
}

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 では、コンテンツに対するアクセス権がユーザーにあるかどうかを判断するために次の手順を実施します。

  1. Entitlements エンドポイントに対する API 呼び出しを実行し、ユーザーの利用資格 ID を受け取ります。
  2. メディア アクション フィードから、そのコンテンツの必須の利用資格 ID を検索します。
  3. ユーザーの entitlementId は、フィード内のメディア サブスクリプション オブジェクトの identifier プロパティと照合されます。entitlementId が 1 つ以上一致すると、ユーザーがコンテンツにアクセスできることが判断されます。
図 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 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 が必要です。

このシナリオにおいて、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 は基本サブスクリプションのほかに、PROSportz のサブスクリプションを持っています。登録情報のエンドポイントからは、次の 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 が必要です。

このシナリオにおいて、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
        }
    }
  }
}

購入

コンテンツは購入後、無期限に利用できます。


{
  "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 アシスタントなど)が、テレビ番組や映画のおすすめをユーザーに提供しています。費用に関するユーザーの期待値を設定するには、共通の階層を使用して、すべての定期購入者に提供されるコンテンツを把握する必要があります。また、特定のサブスクリプション パッケージのサブスクライバーが利用できるコンテンツについても把握する必要があります。

entitlement API をサポートしていない限り、共通階層で利用可能なタイトルを使用することをおすすめします。この 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
    }
  ],

アドオン

アドオンのサブスクリプション モデルでは、ユーザーが利用資格を拡張し、基本サブスクリプションにチャンネルを追加できる仕組みをサービス プロバイダが用意します。ユーザーは必要なだけチャンネルを追加できます。次の図は、パッケージ構造の例を示しています。

すべてのユーザーは、まず基本チャンネルから開始し、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

任意

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

entitlements

任意

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

entitlements.entitlement

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

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

entitlements.expiration_date

任意

この定期購入の有効期限。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"
  }
}

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

ユーザーが特定の日付まで 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 を通知してください。

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

参照情報については、アクション アクセス指定オブジェクトのプロパティのセクションをご覧ください。