Persyaratan akses

Pengguna lebih suka menonton atau mendengarkan konten yang sudah dapat mereka akses, seperti konten langganan yang sudah ada. Jika Google mengetahui konten yang dapat diakses pengguna di aplikasi atau platform Anda, Google dapat membuat hasil penelusuran atau respons yang lebih baik untuk mengarahkan pengguna ke konten tersebut.

Gambar 1. Persyaratan akses membantu pelanggan mengakses konten di aplikasi atau platform Anda.

Mengidentifikasi persyaratan akses konten

Anda harus mengidentifikasi persyaratan akses untuk setiap paket konten dalam katalog Anda. Saat Anda melakukannya, pertimbangkan pertanyaan-pertanyaan berikut:

  • Apakah pengguna perlu login ke aplikasi atau platform Anda untuk mengakses konten?
  • Apakah pengguna memerlukan langganan?

    Hanya Tindakan Menonton:

    • Apakah pengguna memerlukan langganan dari penyedia layanan eksternal?
    • Apakah Anda menawarkan langganan bertingkat, multi-paket, atau add-on?
  • Hanya Tindakan Menonton: Apakah pengguna perlu menyewa atau membeli konten?

  • Apakah persyaratan akses berubah dari waktu ke waktu?

  • Apakah persyaratan akses bergantung pada lokasi perangkat?

Jenis pembatasan akses

Ada dua jenis pembatasan akses:

Jenis penghalang konten berbayar

Anda dapat membatasi akses ke konten berdasarkan jenis penghalang konten berbayarnya. Tabel berikut menjelaskan berbagai jenis penghalang konten berbayar:

Jenis penghalang konten berbayar Contoh Kategori
Tidak perlu melakukan pembelian atau login. Crackle nologinrequired
Pengguna harus login, tetapi tidak memerlukan langganan berbayar. Vudu (AVOD) free
Pengguna harus memiliki langganan aktif. Akses tidak bergantung pada tingkat langganan. Netflix

subscription

Pengguna harus memiliki langganan aktif. Akses bergantung pada tingkatan langganan. Hulu (add-on)

subscription

Konten tersedia selama waktu yang terbatas setelah pembelian. Vudu rental
Konten tersedia selama jangka waktu yang tidak terbatas setelah pembelian. Vudu purchase
Konten tersedia melalui langganan kabel. HBO Go externalSubscription

Jenis penghalang konten berbayar untuk Tindakan Menonton

Untuk menentukan jenis penghalang konten berbayar untuk Tindakan Tonton, gunakan properti category di Spesifikasi akses tindakan:

"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"
    }
  },
  ...
}

Jenis penghalang konten berbayar untuk Tindakan Mendengarkan

Untuk menentukan jenis penghalang konten berbayar untuk Tindakan Mendengarkan, gunakan properti category di objek penawaran:

"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"
    }
  },
  ...
}

Area geografis

Anda harus menentukan area geografis tempat konten tersedia. Gunakan salah satu atau kedua properti berikut:

Pengguna dapat mengakses konten jika lokasi perangkat berada dalam wilayah mana pun yang ditentukan dalam eligibleRegion dan tidak berada dalam wilayah mana pun yang ditentukan dalam ineligibleRegion.

Properti eligibleRegion dan ineligibleRegion memungkinkan nilai berikut:

Jika konten tersedia secara global, gunakan nilai khusus berikut untuk eligibleRegion:

"eligibleRegion": "EARTH",

Kasus penggunaan eligibleRegion

Berikut adalah contoh kasus penggunaan properti eligibleRegion:

  • Contoh 1: eligibleRegion dengan daftar negara.
  • Contoh 2: eligibleRegion dengan objek GeoShape yang berisi daftar kode pos.
  • Contoh 3: eligibleRegion dengan objek GeoShape yang berisi daftar kode Forward Sortation Area (FSA).
  • Contoh 4: eligibleRegion dengan objek GeoShape yang berisi ID DMA.
  • Contoh 5: eligibleRegion dengan daftar objek GeoShape. Setiap entri berisi ID DMA.
  • Contoh 6: ineligibleRegion dengan kode pos yang disamarkan.

Contoh 1

eligibleRegion dengan daftar negara:


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

Contoh 2

eligibleRegion dengan objek GeoShape yang berisi daftar kode pos:


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

Contoh 3

eligibleRegion dengan objek GeoShape yang berisi daftar kode Forward Sortation Area (FSA):


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

Contoh 4

eligibleRegion dengan objek GeoShape yang berisi ID DMA:


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

Contoh 5

eligibleRegion dengan daftar objek GeoShape. Setiapnya berisi ID DMA:


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

Contoh 6

ineligibleRegion dengan kode pos yang diblokir:


"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 hak

ID hak, entitlementId, merujuk pada string yang merepresentasikan akses ke sekelompok konten dalam katalog media Anda. Untuk menentukan apakah pengguna memiliki akses ke konten Anda, Google melakukan langkah-langkah berikut:

  1. Kami melakukan panggilan API ke endpoint Hak Anda untuk menerima ID hak pengguna.
  2. Kami mencari ID hak konten yang diperlukan dari feed Tindakan Media Anda.
  3. Kami mencocokkan entitlementId pengguna dengan properti identifier objek langganan media di feed Anda. Jika setidaknya ada satu entitlementId yang cocok, kami akan menentukan bahwa pengguna dapat mengakses konten.
Gambar 2. Salah satu ID hak pengguna cocok dengan ID hak konten yang diperlukan.

Google merekomendasikan agar Anda menggunakan sintaksis berikut untuk entitlementId:

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

Contoh sintaksis:

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

Contoh ID hak

Feed MediaExampleCompany menentukan bahwa Movie XYZ memerlukan example.com:basic entitlementId, seperti yang ditunjukkan:

{
  "@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"
      },
      ...
    }
  },
  ...
}

Kasus penggunaan akses umum

Berikut adalah kasus penggunaan akses umum:

  • Gratis (tidak perlu login): Konten tersedia tanpa login, langganan, atau pembelian.
  • Gratis (login diperlukan): Konten mengharuskan pengguna untuk login, tetapi tidak memerlukan langganan.
  • Langganan satu tingkat: Konten memerlukan langganan. Semua pelanggan dapat mengakses konten yang sama, baik film maupun episode, terlepas dari paket langganan mereka.
  • Langganan multi-tingkatan: Konten memerlukan langganan. Pelanggan dapat mengakses konten yang berbeda, baik film maupun episode, berdasarkan tingkat langganan mereka. Misalnya, Silver versus Gold.
  • Langganan add-on: Konten memerlukan langganan. Pelanggan dapat menambahkan konten premium di atas langganan reguler mereka.
  • Pembelian sekali beli: Konten dapat dibeli, setelah itu pengguna dapat mengaksesnya tanpa batas waktu.
  • TV Live: Langganan mencakup akses ke channel lokal, nasional, dan premium.
  • Langganan pihak ketiga: Konten mengharuskan pengguna login dengan penyedia kabel mereka.

Gratis (tidak perlu login)

Tidak perlu login

Konten tersedia tanpa login atau langganan.


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "nologinrequired",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}
  • Tetapkan category ke nologinrequired.
  • Jangan sertakan expectAcceptanceOf.

Gratis (perlu login)

Perlu login

Konten mengharuskan pengguna untuk login, tetapi tidak mengharuskan langganan.


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "free",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}
  • Tetapkan category ke free.
  • Jangan sertakan expectAcceptanceOf.

Langganan satu tingkat

Dalam model langganan satu tingkat, penyedia layanan memiliki satu tingkat langganan. Semua pelanggan dapat mengakses konten yang sama, baik film maupun episode, terlepas dari paket langganan mereka.


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

Langganan multi-tingkat

Dalam model langganan bertingkat, penyedia layanan memiliki beberapa tingkat langganan, seperti Gold, Silver, dan Bronze. Pengguna yang memiliki langganan tingkat atas dapat mengakses semua konten tingkat bawah. Namun, pengguna yang memiliki langganan tingkat lebih rendah tidak dapat mengakses konten tingkat lebih tinggi.

Gambar 3. Model langganan bertingkat dan representasi haknya.

Pertimbangkan skenario berikut:

  • Jane berlangganan paket Gold. Endpoint hak Anda menampilkan ID entitlementId berikut:
    • example.com:bronze
    • example.com:silver
    • example.com:gold
  • John berlangganan paket Bronze. Endpoint hak Anda menampilkan entitlementId berikut:
    • example.com:bronze
  • Feed Tindakan Media Anda menjelaskan persyaratan berikut:
    • Film A memerlukan example.com:bronze.
    • Movie B memerlukan example.com:silver.

Dalam skenario ini, Google menentukan tingkat akses berikut untuk Jane dan John:

  • Jane dan John memiliki akses ke Movie A.
  • Jane memiliki akses ke Film B, tetapi John tidak.
{
  "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"
    },
    ...
  }
}

Langganan add-on

Dalam model langganan add-on, penyedia layanan memungkinkan pengguna memperluas hak mereka dan menambahkan saluran ke langganan dasar. Pengguna dapat menambahkan channel sebanyak yang mereka inginkan.

Gambar 4. Model langganan add-on dan representasi haknya.

Pertimbangkan skenario berikut:

  • Jeni memiliki PRO dan Sportz selain langganan Basic. Endpoint hak Anda menampilkan ID entitlementId berikut:
    • example.com:basic
    • example.com:pro
    • example.com:sportz
  • John hanya memiliki langganan Basic. Endpoint hak Anda menampilkan entitlementId berikut:
    • example.com:basic
  • Feed Tindakan Media Anda menjelaskan persyaratan berikut:
    • Film A memerlukan example.com:basic.
    • Movie B memerlukan example.com:pro.

Dalam skenario ini, Google menentukan tingkat akses berikut untuk Jane dan John:

  • Jane dan John memiliki akses ke Movie A.
  • Jane memiliki akses ke Film B, tetapi John tidak.
{
  "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"
      },
    }
  }
}

Pembelian satu kali

Pembelian

Konten tersedia selama jangka waktu yang tidak ditentukan setelah pembelian.


{
  "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/"
      }
    }
  }
}
  • Tetapkan category ke purchase.
  • Sertakan expectAcceptanceOf di actionAccessibilityRequirement untuk menunjukkan harga pembelian.

Rental

Konten tersedia selama jangka waktu terbatas setelah pembelian.


{
  "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/"
      }
    }
  }
}
  • Tetapkan category ke rental.
  • Sertakan expectAcceptanceOf di actionAccessibilityRequirement untuk menunjukkan harga sewa.

TV live

Di feed Tindakan Media, Anda dapat membatasi akses ke channel TV Live atau acara berdasarkan dua kondisi pengguna berikut:

  • Lokasi perangkat pengguna

    Untuk membatasi akses ke saluran TV, tentukan area tempat pengguna memiliki akses ke saluran tersebut. Kondisi ini biasanya berlaku untuk saluran TV siaran lokal.

  • Status akun pengguna

    Jika akses ke channel TV bergantung pada setelan tingkat akun pengguna, gunakan ID hak untuk mewakili batasan.

    Kondisi ini biasanya berlaku untuk kasus penggunaan berikut:

    • Paket: Saluran nasional sering kali disertakan dalam paket, dan pengguna memilih paket yang ingin mereka langgani.
    • Add-on: Beberapa channel premium mengharuskan pengguna menambahkan channel ekstra secara selektif ke langganan mereka.
    • Jaringan Olahraga Regional (RSN): RSN biasanya dikaitkan dengan lokasi "rumah" pengguna. Pengguna dapat menonton konten di RSN meskipun mereka bepergian ke luar lokasi "rumah" mereka.

Langganan pihak ketiga

Langganan pihak ketiga

Konten tersedia untuk pelanggan dari layanan lain.


{
  "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"
    }
  }
}
  • Tambahkan authenticator untuk menunjukkan bahwa layanan lain mengautentikasi pelanggan. Misalnya, HBO GO memerlukan langganan dari penyedia kabel.

Paket tingkat umum

Konten tingkat umum tersedia untuk semua pelanggan, terlepas dari paket langganan mereka. Tingkat umum berlaku untuk semua konten dengan category subscription. Untuk mengetahui informasi selengkapnya tentang properti category, lihat bagian Jenis penghalang konten berbayar.

Mengapa paket tingkat umum diperlukan?

Beberapa produk Google memberikan rekomendasi TV & film kepada pengguna; hal ini mencakup Google Penelusuran, Android TV, dan Asisten Google. Untuk menetapkan ekspektasi pengguna tentang biaya, Google harus memahami konten apa yang tersedia untuk semua pelanggan melalui penggunaan tingkat umum. Google juga harus memahami konten apa yang tersedia bagi pelanggan dengan paket langganan tertentu.

Google merekomendasikan judul yang tersedia di tingkat umum, kecuali jika Anda mendukung API hak. API ini memungkinkan Google memahami judul tingkat non-umum yang dapat diakses oleh setiap pengguna tertentu.

Kapan saya harus membuat paket tingkat umum?

Paket tingkat umum diperlukan saat layanan Anda menawarkan konten yang tersedia untuk semua pelanggan. Hal ini mencakup layanan yang hanya menawarkan satu paket dan layanan yang menawarkan beberapa paket atau add-on.

Penyedia yang tidak memiliki konten yang tersedia untuk semua pelanggan tidak perlu membuat paket tingkat umum. Contohnya adalah penyedia layanan yang menyediakan konten yang saling eksklusif di semua paketnya.

Contoh tingkat umum

Berikut adalah contoh tingkat umum.

Langganan Bertingkat

Dalam model langganan bertingkat, penyedia layanan memiliki beberapa tingkat langganan, seperti tingkat Gold, Silver, dan Bronze. Pengguna dengan langganan tingkat atas memiliki akses ke semua konten di tingkat yang lebih rendah. Pengguna dengan langganan tingkat bawah tidak memiliki akses ke konten di tingkat atas. Gambar berikut adalah contoh struktur paket.

Paket Gold berisi semua konten paket Silver, yang
            sendiri berisi semua konten paket Bronze.
Gambar 5. Struktur paket langganan bertingkat.

Dalam contoh kode berikut, paket perunggu adalah tingkat umum karena semua pengguna memiliki akses ke semua konten di tingkat tersebut.

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

Add-on

Dalam model langganan add-on, penyedia layanan memungkinkan pengguna memperluas hak mereka dan menambahkan saluran ke langganan dasar. Pengguna dapat menambahkan saluran sebanyak yang diinginkan. Gambar berikut adalah contoh struktur paket.

Setiap pengguna memulai dengan saluran Basic, dan mereka dapat memilih untuk menambahkan
            kombinasi saluran PRO, Sportz, dan Moviemax.
Gambar 6. Struktur paket langganan add-on.

Jika Anda memiliki channel yang tersedia untuk semua pengguna dan tidak ada biaya untuk channel tersebut, Anda dapat menggabungkan paket dengan paket tingkat umum.

Dalam contoh kode berikut, paket dasar adalah tingkat umum karena semua pengguna memiliki akses ke semua konten dalam paket ini.

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

Paket dengan konten yang beririsan

Dalam model konten yang paketnya memiliki konten yang beririsan, penyedia layanan menjual paket yang menyertakan beberapa konten dari paket lain. Gambar berikut adalah contoh struktur paket.

Diagram Venn yang menunjukkan tumpang-tindih antara Paket 1, 2, dan 3 yang
            diberi label &#39;Tingkat Umum&#39;.
Gambar 7. Struktur paket dengan konten yang berpotongan.

Dalam contoh kode berikut, penyedia menawarkan tiga paket yang beberapa kontennya beririsan di semua paket. Dalam hal ini, paket keempat yang mewakili tingkat umum diperlukan. Paket ini harus menyertakan semua konten yang tersedia di ketiga paket tersebut.

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

Paket tanpa konten yang beririsan

Dalam model konten yang semua paket kontennya tidak beririsan, penyedia layanan menjual paket yang tidak menyertakan konten dari paket lain. Gambar berikut adalah contoh struktur paket.

Paket 1, 2, dan 3 sepenuhnya terpisah.
Gambar 8. Struktur paket tanpa konten yang berpotongan.

Dalam contoh berikut, penyedia menawarkan tiga paket tanpa konten yang beririsan di semua paket. Tidak diperlukan paket tingkat umum.

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

Endpoint hak

Gunakan informasi dari bagian ini untuk menghosting endpoint HTTPS yang menampilkan hak terkait dengan pengguna.

Prasyarat

Sebelum memulai, verifikasi bahwa layanan Anda mendukung alur OAuth 2.0 dengan Google.

Permintaan

Untuk menerima hak pengguna, Google mengirimkan permintaan yang berisi token OAuth pengguna. Endpoint Anda perlu mengidentifikasi pengguna berdasarkan token OAuth tersebut. Lihat contoh berikut:

GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer <OAuthToken>

Respons

Endpoint Anda harus menampilkan respons dengan properti berikut:

Properti
subscription

Wajib

Ini adalah kolom di dalam respons root.

subscription.type

Wajib

Properti ini dapat memiliki nilai berikut:

  • ActiveSubscription: Pengguna memiliki langganan aktif ke penyedia.
  • ActiveTrial: Pengguna memiliki uji coba aktif untuk penyedia.
  • InactiveSubscription: Pengguna tidak memiliki langganan aktif atau uji coba aktif.
subscription.expiration_date

Opsional

Tanggal habis masa berlaku hak ini, dalam format ISO 8601, yang mencakup zona waktu. Untuk mengetahui detail selengkapnya, lihat Tanggal habis masa berlaku.

entitlements

Opsional

Properti root ini berisi nilai entitlementId yang dimiliki pengguna.

entitlements.entitlement

Wajib diisi jika akses ke katalog streaming Anda bervariasi berdasarkan jenis langganan.

Properti ini berisi entitlementId. Untuk mengetahui informasi selengkapnya, lihat ID hak.

entitlements.expiration_date

Opsional

Tanggal habis masa berlaku langganan ini, dalam format ISO 8601, yang mencakup zona waktu. Untuk mengetahui detail selengkapnya, lihat Tanggal habis masa berlaku.

Tanggal kedaluwarsa

Ada dua properti dalam respons endpoint yang berkaitan dengan tanggal habis masa berlaku: subscription.expiration_date dan entitlements.expiration_date. Anda dapat menyertakan salah satunya atau tidak keduanya, tetapi tidak keduanya. Yang Anda gunakan bergantung pada model langganan Anda.

Model langganan
Akses ke katalog streaming Anda sama untuk semua pelanggan. Karena Anda tidak perlu menentukan properti entitlements, tentukan subscription.expiration_date.

Akses ke katalog streaming Anda bervariasi berdasarkan detail langganan pengguna.

Jika model langganan Anda memiliki beberapa tingkat atau add-on yang berakhir seiring waktu, lakukan salah satu hal berikut:

  • Jika semua nilai entitlements.entitlement berakhir pada waktu yang sama, tentukan subscription.expiration_date.
  • Jika beberapa nilai entitlements.entitlement berakhir pada waktu yang berbeda, tentukan entitlements.expiration_date.

Contoh respons

Berikut adalah contoh respons dari berbagai status langganan:

  • Langganan aktif
  • Langganan aktif dengan tanggal habis masa berlaku
  • Tanpa langganan
  • Langganan aktif ke beberapa tingkat atau add-on

Langganan aktif

Langganan aktif

Pengguna memiliki langganan aktif ke example.com. Dalam kasus ini, semua pelanggan memiliki akses ke seluruh katalog streaming Anda terlepas dari jenis langganan mereka.


{
  "subscription" : {
    "type": "ActiveSubscription",
  }
}

Langganan aktif dengan tanggal habis masa berlaku

Langganan aktif dengan tanggal habis masa berlaku

Pengguna memiliki langganan aktif ke example.com, dan langganan tersebut memiliki tanggal habis masa berlaku. Dalam hal ini, semua pelanggan memiliki akses ke seluruh katalog streaming Anda, apa pun jenis langganan mereka.


{
  "subscription" : {
    "type": "ActiveSubscription",
    "expiration_date": "2019-11-10T10:00:00Z"
  }
}

Tanpa langganan

Tidak perlu langganan

Pengguna tidak memiliki langganan ke example.com.


{
  "subscription" : {
    "type": "InactiveSubscription"
  }
}

Langganan aktif ke beberapa tingkat atau add-on

Langganan aktif ke beberapa paket atau add-on

Pengguna memiliki langganan example.com:premium hingga tanggal tertentu.


{
  "subscription" : {
    "type": "ActiveSubscription",
  }
  "entitlements": [
    {
      "entitlement": "example.com:premium",
      "expiration": "2019-11-10T10:00:00Z"
    }
  ]
}

Batas kapasitas

Google memperbarui informasi hak pengguna hingga setiap enam jam. Untuk memperlancar kueri per detik (QPS) maksimum, Google mendistribusikan kueri ke endpoint Anda secara merata dari waktu ke waktu. Dengan demikian, Anda dapat memperkirakan QPS rata-rata yang diharapkan untuk endpoint Anda dengan formula berikut:

QPS rata-rata yang diharapkan = <jumlah total pengguna> / 21.600 detik (6 jam x 60 menit x 60 detik)

Jika Anda mendukung sejumlah besar pengguna, Google dapat menyesuaikan interval 6 jam. Jika perlu, hubungi Google untuk mendiskusikan konfigurasi.

Hubungi Google

Setelah endpoint Anda siap, hubungi Google untuk memberi tahu URL endpoint.

Properti spesifikasi akses tindakan

Lihat bagian properti spesifikasi akses tindakan untuk mengetahui informasi referensi.