アクセスの要件

ユーザーは、既存の定期購入コンテンツなど、すでにアクセスできるコンテンツを視聴することを好みます。ユーザーがアプリやプラットフォームでアクセスできるコンテンツを 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: 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 では、コンテンツに対するアクセス権がユーザーにあるかどうかを判断するために次の手順を実施します。

  1. 登録情報のエンドポイントに対する API 呼び出しを実行し、ユーザーの利用資格 ID を受け取ります。
  2. メディア アクション フィードから、そのコンテンツの必須の登録情報識別子を検索します。
  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 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"
    }
  }
}
  • 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"
    },
    "additionalProperty": {
      "@type": "PropertyValue",
      "name": "DisplaySubscriptionIdentifier",
      "value": "http://www.example.com/example_package"
    },
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}

複数レベルの有料会員登録

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

図 3. 階層があるサブスクリプション モデルとその登録情報。

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

  • 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 が必要です。

このシナリオでは、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"
    },
    ...
  }
}

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

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

図 4. アドオンのサブスクリプション モデルとその登録情報。

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

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

このシナリオでは、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/"
      }
    }
  }
}
  • 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"
      }
    },
    "additionalProperty": {
      "@type": "PropertyValue",
      "name": "DisplaySubscriptionIdentifier",
      "value": "http://www.example.com/faq"
     },
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}
  • authenticator を追加して、登録者が別のサービスの認証を受けることを示します。たとえば、HBO GO を利用するにはケーブル プロバイダへの有料会員登録が必要です。

一般的な階層パッケージ

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

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

Google 検索、Android TV、Google アシスタントなど、複数の Google サービスでユーザーにテレビ番組や映画のおすすめが表示されます。費用に関するユーザーの期待値を設定するには、共通の階層を使用することで、すべての定期購読者がどのコンテンツを利用できるかを Google が把握する必要があります。また、特定のサブスクリプション パッケージの登録者が利用できるコンテンツも 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
    }
  ],

アドオン

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

すべてのユーザーはベーシック チャンネルから始まり、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 が含まれます。詳しくは、利用資格識別子をご覧ください。

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 を通知してください。

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

リファレンス情報については、アクション アクセス指定オブジェクトのセクションをご覧ください。