Các yêu cầu cần đáp ứng để truy cập

Người dùng thích xem hoặc nghe nội dung mà họ có thể đã truy cập, chẳng hạn như nội dung gói thuê bao hiện có. Nếu Google biết nội dung nào người dùng có thể truy cập trên ứng dụng hoặc nền tảng của bạn, thì Google có thể tạo kết quả tìm kiếm hoặc phản hồi tốt hơn để đưa người dùng đến nội dung đó.

Hình 1. Các yêu cầu cần đáp ứng để giúp người đăng ký có thể truy cập vào nội dung trên ứng dụng hoặc nền tảng của bạn.

Xác định các yêu cầu về quyền truy cập vào nội dung

Bạn phải xác định yêu cầu về quyền truy cập cho từng gói nội dung trong danh mục của mình. Khi bạn làm như vậy, hãy xem xét các câu hỏi sau:

  • Người dùng có cần đăng nhập vào ứng dụng hoặc nền tảng của bạn để truy cập nội dung không?
  • Người dùng có cần gói thuê bao không?

    Chỉ hành động xem:

    • Người dùng có cần gói thuê bao của nhà cung cấp dịch vụ bên ngoài không?
    • Bạn có cung cấp gói thuê bao theo bậc, gói nhiều gói hoặc tiện ích bổ sung không?
  • Chỉ hành động xem: Người dùng có cần thuê hoặc mua nội dung đó không?

  • Yêu cầu về quyền truy cập có thay đổi theo thời gian không?

  • Yêu cầu về quyền truy cập có phụ thuộc vào vị trí của thiết bị không?

Các loại hạn chế truy cập

Có hai loại quy định hạn chế về quyền truy cập:

Loại tường phí

Bạn có thể hạn chế quyền truy cập vào nội dung theo loại tường phí. Bảng sau đây nêu chi tiết các loại tường phí khác nhau:

Loại tường phí Ví dụ: Danh mục
Không yêu cầu đăng nhập hoặc mua hàng. Tanh tách nologinrequired
Người dùng phải đăng nhập, nhưng không cần gói thuê bao có tính phí. Vudu (AVOD) free
Người dùng phải sử dụng một gói đăng ký đang hoạt động. Quyền truy cập không phụ thuộc vào cấp thuê bao. Netflix

subscription

Người dùng phải sử dụng một gói đăng ký đang hoạt động. Quyền truy cập phụ thuộc vào cấp thuê bao. Hulu (tiện ích bổ sung)

subscription

Nội dung này có sẵn trong một khoảng thời gian nhất định sau khi mua. Vudu rental
Nội dung này có sẵn trong một khoảng thời gian vô hạn sau khi mua. Vudu purchase
Nội dung này được cung cấp bằng gói thuê bao truyền hình cáp. HBO Go externalSubscription

Loại tường phí cho Hành động xem

Để chỉ định loại tường phí cho nội dung trong Watch Actions, hãy sử dụng thuộc tính category trong thông số về Quyền truy cập vào hành động:

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

Loại tường phí cho Hành động nghe

Để chỉ định loại tường phí nội dung cho Hành động nghe, hãy sử dụng thuộc tính category trong đối tượng ưu đãi:

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

Khu vực địa lý

Bạn phải chỉ định khu vực địa lý nơi có nội dung. Hãy sử dụng một hoặc cả hai thuộc tính sau:

Người dùng có thể truy cập vào nội dung nếu vị trí thiết bị nằm trong bất kỳ khu vực nào được chỉ định trong eligibleRegion và không nằm trong bất kỳ khu vực nào được chỉ định trong ineligibleRegion.

Thuộc tính eligibleRegionineligibleRegion cho phép các giá trị sau:

Nếu nội dung đó được cung cấp trên toàn cầu, hãy sử dụng giá trị đặc biệt sau đây cho eligibleRegion:

"eligibleRegion": "EARTH",

Các trường hợp sử dụng Đủ điều kiện theo khu vực

Sau đây là các ví dụ về trường hợp sử dụng của thuộc tính eligibleRegion:

  • Ví dụ 1: eligibleRegion với danh sách các quốc gia.
  • Ví dụ 2: eligibleRegion với đối tượng GeoShape chứa danh sách mã ZIP.
  • Ví dụ 3: eligibleRegion với đối tượng GeoShape chứa danh sách mã Vùng sắp xếp chuyển tiếp (FSA).
  • Ví dụ 4: eligibleRegion với đối tượng GeoShape chứa mã DMA.
  • Ví dụ 5: eligibleRegion với danh sách các đối tượng GeoShape. Mỗi mục chứa một mã DMA.
  • Ví dụ 6: ineligibleRegion có mã ZIP bị chặn.

Ví dụ 1

eligibleRegion có danh sách các quốc gia:


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

Ví dụ 2

eligibleRegion có đối tượng GeoShape chứa danh sách mã ZIP:


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

Ví dụ 3

eligibleRegion có đối tượng GeoShape chứa danh sách mã Vùng sắp xếp chuyển tiếp (FSA):


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

Ví dụ 4

eligibleRegion có đối tượng GeoShape chứa mã DMA:


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

Ví dụ 5:

eligibleRegion có danh sách các đối tượng GeoShape. Mỗi mục chứa một mã 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"
         }
      }
   ]
}

Ví dụ 6

ineligibleRegion có mã ZIP bị chặn:


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

Mã nhận dạng quyền

Mã nhận dạng quyền, entitlementId, là một chuỗi thể hiện quyền truy cập vào một nhóm nội dung trong danh mục nội dung đa phương tiện của bạn. Để xác định xem người dùng có quyền truy cập vào nội dung của bạn hay không, Google sẽ thực hiện các bước sau:

  1. Chúng tôi thực hiện lệnh gọi API đến điểm cuối quyền để nhận mã nhận dạng quyền của người dùng.
  2. Chúng tôi tra cứu giá trị nhận dạng quyền bắt buộc của nội dung từ nguồn cấp dữ liệu Hành động đối với nội dung đa phương tiện.
  3. Chúng tôi so khớp entitlementId của người dùng với thuộc tính identifier của đối tượng gói thuê bao nội dung đa phương tiện trong nguồn cấp dữ liệu của bạn. Nếu có ít nhất một entitlementId khớp, chúng tôi sẽ xác định rằng người dùng có thể truy cập nội dung.
Hình 2. Một trong những giá trị nhận dạng quyền của người dùng khớp với giá trị nhận dạng quyền bắt buộc của nội dung đó.

Bạn nên sử dụng cú pháp sau cho entitlementId:

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

Ví dụ về cú pháp:

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

Ví dụ về quyền nhận dạng

Nguồn cấp dữ liệu của MediaExampleCompany chỉ định rằng Movie XYZ yêu cầu example.com:basic entitlementId, như minh hoạ bên dưới:

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

Các trường hợp sử dụng phổ biến

Sau đây là những trường hợp sử dụng quyền truy cập phổ biến:

  • Miễn phí (không yêu cầu đăng nhập): Nội dung được cung cấp mà không cần đăng nhập, đăng ký hoặc mua hàng.
  • Miễn phí (yêu cầu đăng nhập): Nội dung yêu cầu người dùng đăng nhập nhưng không yêu cầu người dùng đăng ký.
  • Gói thuê bao một cấp: Nội dung yêu cầu phải có gói thuê bao. Tất cả người đăng ký đều có thể truy cập vào cùng một nội dung, bất kể là phim hay tập, bất kể gói thuê bao của họ là gì.
  • Gói thuê bao nhiều tầng: Nội dung yêu cầu phải có gói thuê bao. Người đăng ký có thể truy cập vào nhiều nội dung, dù là phim hay tập, dựa trên cấp độ của gói thuê bao. Ví dụ: Bạc so với Vàng.
  • Gói thuê bao bổ sung: Nội dung yêu cầu phải có gói thuê bao. Người đăng ký có thể thêm nội dung trả phí bên cạnh gói đăng ký thông thường của họ.
  • Mua một lần: Có thể mua nội dung, sau đó người dùng có thể truy cập nội dung đó vô thời hạn.
  • Truyền hình trực tiếp: Một gói thuê bao bao gồm quyền truy cập vào các kênh địa phương, quốc gia và kênh trả phí.
  • Gói thuê bao bên thứ ba: Nội dung yêu cầu người dùng đăng nhập thông qua nhà cung cấp dịch vụ truyền hình cáp của họ.

Miễn phí (không yêu cầu đăng nhập)

Không yêu cầu đăng nhập

Người dùng có thể đăng nhập mà không cần đăng nhập hoặc đăng ký.


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "nologinrequired",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}
  • Đặt category thành nologinrequired.
  • Không thêm expectAcceptanceOf.

Miễn phí (yêu cầu đăng nhập)

Yêu cầu đăng nhập

Nội dung yêu cầu người dùng đăng nhập nhưng không yêu cầu người dùng đăng ký.


{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "free",
    "availabilityStarts": "2015-01-01T00:00Z",
    "availabilityEnds": "2015-12-31T00:00Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}
  • Đặt category thành free.
  • Không thêm expectAcceptanceOf.

Gói thuê bao một cấp

Trong mô hình gói thuê bao một tầng, mỗi nhà cung cấp dịch vụ có một cấp thuê bao. Tất cả người đăng ký đều có thể truy cập vào cùng một nội dung, bất kể là phim hay tập, bất kể gói thuê bao của họ là gì.


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

Gói thuê bao nhiều tầng

Trong mô hình gói thuê bao theo bậc, nhà cung cấp dịch vụ có nhiều cấp thuê bao, chẳng hạn như Vàng, BạcĐồng. Những người dùng có gói thuê bao cấp cao hơn có thể truy cập vào tất cả nội dung của cấp thấp hơn. Tuy nhiên, những người dùng có gói thuê bao cấp thấp hơn không thể truy cập vào nội dung của cấp trên.

Hình 3. Mô hình gói thuê bao theo bậc và mô hình về các quyền.

Hãy xem xét trường hợp sau:

  • Jane đăng ký cấp độ Vàng. Điểm cuối quyền của bạn trả về giá trị nhận dạng entitlementId sau:
    • example.com:bronze
    • example.com:silver
    • example.com:gold
  • John đăng ký cấp Đồng. Điểm cuối quyền của bạn trả về entitlementId sau đây:
    • example.com:bronze
  • Nguồn cấp dữ liệu Hành động đối với nội dung đa phương tiện mô tả các yêu cầu sau:
    • Phim A yêu cầu example.com:bronze.
    • Phim B yêu cầu example.com:silver.

Trong trường hợp này, Google sẽ xác định các cấp truy cập sau cho Jane và John:

  • Cả Jane và John đều có quyền truy cập vào Phim A.
  • Jane có quyền truy cập vào Phim B, nhưng John thì không.
{
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "subscription",
    "requiresSubscription": {
      "@type": "MediaSubscription",
      "@id": "http://www.example.com/basic_subscription",
      "name": "Bronze",
      "commonTier": true
      ...
    },
    ...
  }
}

Gói thuê bao bổ sung

Trong mô hình gói thuê bao bổ sung, nhà cung cấp dịch vụ cho phép người dùng mở rộng các quyền và thêm kênh vào gói thuê bao cơ sở. Người dùng có thể thêm bao nhiêu kênh tùy thích.

Hình 4. Mô hình gói thuê bao bổ sung và mô tả quyền.

Hãy xem xét trường hợp sau:

  • Jane có PROSportz bên cạnh gói thuê bao Basic. Điểm cuối về quyền của bạn sẽ trả về giá trị nhận dạng entitlementId sau:
    • example.com:basic
    • example.com:pro
    • example.com:sportz
  • John chỉ có gói thuê bao Cơ bản. Điểm cuối quyền của bạn trả về entitlementId sau đây:
    • example.com:basic
  • Nguồn cấp dữ liệu Hành động đối với nội dung đa phương tiện mô tả các yêu cầu sau:
    • Phim A yêu cầu example.com:basic.
    • Phim B yêu cầu example.com:pro.

Trong trường hợp này, Google sẽ xác định các cấp truy cập sau cho Jane và John:

  • Cả Jane và John đều có quyền truy cập vào Phim A.
  • Jane có quyền truy cập vào Phim B, nhưng John thì không.
{
  "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
        }
    }
  }
}

Giao dịch mua hàng một lần

Lượt mua hàng

Nội dung này có sẵn trong một khoảng thời gian vô hạn sau khi mua.


{
  "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/"
      }
    }
  }
}
  • Đặt category thành purchase.
  • Đưa expectAcceptanceOf vào actionAccessibilityRequirement để cho biết giá mua.

Cho thuê

Nội dung này có sẵn trong một khoảng thời gian nhất định sau khi mua.


{
  "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/"
      }
    }
  }
}
  • Đặt category thành rental.
  • Thêm expectAcceptanceOf vào actionAccessibilityRequirement để cho biết giá thuê.

TV trực tiếp

Trong nguồn cấp dữ liệu Media Actions, bạn có thể hạn chế quyền truy cập vào kênh hoặc sự kiện Truyền hình trực tiếp dựa trên hai điều kiện sau đây của người dùng:

  • Vị trí thiết bị của người dùng

    Để hạn chế quyền truy cập vào kênh truyền hình, hãy chỉ định khu vực mà người dùng có quyền truy cập vào kênh đó. Điều kiện này thường áp dụng cho các kênh truyền hình địa phương.

  • Trạng thái tài khoản của người dùng

    Nếu quyền truy cập vào một kênh truyền hình phụ thuộc vào chế độ cài đặt cấp tài khoản của người dùng, hãy dùng giá trị nhận dạng quyền để giới thiệu các quy định hạn chế này.

    Tình trạng này thường áp dụng cho những trường hợp sử dụng sau:

    • Gói: Các kênh quốc gia thường nằm trong các gói và người dùng sẽ chọn gói mà họ muốn đăng ký.
    • Tiện ích bổ sung: Một số kênh cao cấp yêu cầu người dùng thêm các kênh khác một cách có chọn lọc vào gói thuê bao của họ.
    • Mạng thể thao khu vực (RSN): RSN thường được liên kết với vị trí "nhà riêng" của người dùng. Người dùng có thể xem nội dung trên RSN ngay cả khi họ di chuyển ra khỏi vị trí "nhà riêng" của mình.

Gói thuê bao bên thứ ba

Gói thuê bao của bên thứ ba

Nội dung này được cung cấp cho người đăng ký từ một dịch vụ khác.


{
  "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"
    }
  }
}
  • Thêm authenticator để cho biết rằng một dịch vụ khác sẽ xác thực người đăng ký. Ví dụ: HBO GO yêu cầu gói thuê bao của nhà cung cấp truyền hình cáp.

Gói cấp thông thường

Mọi người đăng ký đều có thể xem nội dung theo cấp chung, bất kể gói thuê bao của họ là gì. Cấp chung áp dụng cho tất cả nội dung có categorysubscription. Để biết thêm thông tin về thuộc tính category, hãy xem phần Loại tường phí.

Tại sao cần có gói cấp thông thường?

Nhiều sản phẩm của Google cung cấp đề xuất về phim và chương trình truyền hình cho người dùng, trong đó có Google Tìm kiếm, Android TV và Trợ lý Google. Để đặt kỳ vọng của người dùng về chi phí, Google phải biết nội dung nào có sẵn cho tất cả người đăng ký thông qua việc sử dụng cấp chung. Google cũng phải hiểu nội dung nào dành cho người thuê bao có gói thuê bao cụ thể.

Google đề xuất các tiêu đề có sẵn ở cấp chung trừ khi bạn hỗ trợ API quyền. API này cho phép Google hiểu được các tiêu đề không phổ biến mà mỗi người dùng cụ thể có thể truy cập.

Khi nào tôi nên tạo gói cấp thông thường?

Bạn bắt buộc phải có một gói chung cấp dịch vụ khi dịch vụ của bạn cung cấp nội dung dành cho tất cả những người đăng ký. Bao gồm các dịch vụ chỉ cung cấp một gói và các dịch vụ cung cấp nhiều gói hoặc tiện ích bổ sung.

Các nhà cung cấp không có nội dung cho tất cả người đăng ký sẽ không cần tạo gói cấp thông thường. Một ví dụ là các nhà cung cấp dịch vụ cung cấp nội dung loại trừ lẫn nhau trên tất cả các gói của họ.

Ví dụ về cấp thông thường

Sau đây là ví dụ về cấp chung.

Gói thuê bao theo bậc

Trong mô hình thuê bao theo cấp, nhà cung cấp dịch vụ có nhiều cấp thuê bao, chẳng hạn như Vàng, BạcĐồng. Người dùng có gói thuê bao cấp cao hơn sẽ có quyền truy cập vào tất cả nội dung ở cấp thấp hơn. Người dùng có gói thuê bao cấp thấp hơn không có quyền truy cập vào nội dung ở cấp cao hơn. Hình ảnh sau đây là ví dụ về cấu trúc gói.

Cấp Vàng chứa tất cả nội dung của cấp Bạc, thường chứa tất cả cấp Đồng.
Hình 5. Cấu trúc gói thuê bao theo bậc.

Trong ví dụ về mã sau, gói đồng là cấp chung vì tất cả người dùng đều có quyền truy cập vào tất cả nội dung trong cấp đó.

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

Tiện ích bổ sung

Trong mô hình gói thuê bao bổ sung, nhà cung cấp dịch vụ cho phép người dùng mở rộng các quyền và thêm kênh vào gói thuê bao cơ bản. Người dùng có thể thêm bao nhiêu kênh tùy thích. Hình ảnh sau đây là ví dụ về cấu trúc gói.

Mỗi người dùng đều bắt đầu bằng Kênh cơ bản và có thể chọn thêm bất kỳ tổ hợp kênh PRO, Sportz và Moviemax nào.
Hình 6. Cấu trúc gói thuê bao bổ sung.

Nếu bạn có một kênh cho tất cả người dùng và miễn phí cho kênh đó, bạn có thể hợp nhất gói này với gói cấp thông thường.

Trong ví dụ về mã sau, gói cơ bản là cấp chung vì tất cả người dùng đều có quyền truy cập vào tất cả nội dung trong gói này.

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

Gói có nội dung giao nhau

Trong mô hình nội dung, trong đó các gói có nội dung giao nhau, nhà cung cấp dịch vụ bán các gói bao gồm một số nội dung từ các gói khác. Hình ảnh sau đây là ví dụ về cấu trúc gói.

Sơ đồ Venn trong đó sự chồng chéo giữa các Gói 1, 2 và 3 được gắn nhãn &quot;Cấp chung&quot;.
Hình 7. Cấu trúc gói có nội dung giao nhau.

Trong ví dụ về mã sau đây, nhà cung cấp cung cấp ba gói mà trong đó một số nội dung giao nhau trên tất cả các gói. Trong trường hợp này, gói thứ tư đại diện cho cấp chung là bắt buộc. Gói này phải bao gồm tất cả nội dung có sẵn trên cả ba gói.

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

Các gói không có nội dung giao nhau

Trong mô hình nội dung mà tất cả các gói nội dung không giao nhau, nhà cung cấp dịch vụ bán các gói không bao gồm nội dung từ các gói khác. Hình ảnh sau đây là ví dụ về cấu trúc gói.

Các gói 1, 2 và 3 hoàn toàn riêng biệt.
Hình 8. Cấu trúc gói không có nội dung giao nhau.

Trong ví dụ sau, nhà cung cấp cung cấp 3 gói không có nội dung nào bị giao cắt trên tất cả các gói. Không cần có gói cấp thông thường.

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

Điểm cuối quyền

Sử dụng thông tin từ phần này để lưu trữ điểm cuối HTTPS trả về các quyền liên quan đến người dùng.

Điều kiện tiên quyết

Trước khi bắt đầu, hãy xác minh rằng dịch vụ của bạn hỗ trợ luồng OAuth 2.0 với Google.

Yêu cầu

Để nhận được quyền của người dùng, Google sẽ gửi một yêu cầu có chứa mã thông báo OAuth của người dùng. Điểm cuối của bạn cần xác định người dùng dựa trên mã thông báo OAuth đó. Xem ví dụ sau:

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

Phản hồi

Điểm cuối của bạn cần trả về phản hồi với các thuộc tính sau:

Thuộc tính
subscription

Bắt buộc

Đây là trường bên trong phản hồi gốc.

subscription.type

Bắt buộc

Thuộc tính này có thể có các giá trị sau:

  • ActiveSubscription: Người dùng có gói thuê bao đang hoạt động của nhà cung cấp.
  • ActiveTrial: Người dùng đang dùng thử gói thuê bao này.
  • InactiveSubscription: Người dùng không có gói thuê bao nào đang hoạt động hay gói dùng thử nào đang hoạt động.
subscription.expiration_date

Optional (Không bắt buộc)

Ngày hết hạn của quyền này, ở định dạng ISO 8601, bao gồm cả múi giờ. Để biết thêm thông tin, hãy xem phần Ngày hết hạn.

entitlements

Optional (Không bắt buộc)

Thuộc tính gốc này chứa các giá trị entitlementId mà người dùng lưu giữ.

entitlements.entitlement

Bắt buộc nếu quyền truy cập vào danh mục phát trực tuyến của bạn khác nhau tùy theo loại gói thuê bao.

Thuộc tính này chứa entitlementId. Để biết thêm thông tin, hãy xem phần Mã nhận dạng quyền.

entitlements.expiration_date

Optional (Không bắt buộc)

Ngày hết hạn của gói thuê bao này, ở định dạng ISO 8601, kèm theo múi giờ. Để biết thêm thông tin, hãy xem phần Ngày hết hạn.

Ngày hết hạn

Có hai thuộc tính trong phản hồi điểm cuối xử lý các ngày hết hạn: subscription.expiration_dateentitlements.expiration_date. Bạn có thể bao gồm một trong hai hoặc không, nhưng không được bao gồm cả hai. Mô hình bạn sử dụng phụ thuộc vào mô hình gói thuê bao của bạn.

Mô hình gói thuê bao
Quyền truy cập vào danh mục phát trực tuyến của bạn là như nhau đối với tất cả người đăng ký. Vì bạn không cần chỉ định thuộc tính entitlements, nên hãy chỉ định subscription.expiration_date.

Quyền truy cập vào danh mục phát trực tuyến của bạn thay đổi tùy theo thông tin chi tiết về gói thuê bao của người dùng.

Nếu mô hình gói thuê bao của bạn có nhiều cấp hoặc tiện ích bổ sung hết hạn theo thời gian, hãy làm theo một trong những cách sau:

  • Nếu tất cả các giá trị entitlements.entitlement hết hạn cùng một lúc, hãy chỉ định subscription.expiration_date.
  • Nếu một số giá trị entitlements.entitlement hết hạn vào các thời điểm khác nhau, hãy chỉ định entitlements.expiration_date.

Câu trả lời mẫu

Sau đây là ví dụ về phản hồi của các trạng thái gói thuê bao:

  • Đăng ký hoạt động
  • Gói thuê bao đang hoạt động và có ngày hết hạn
  • Không có gói đăng ký nào
  • Gói thuê bao đang hoạt động cấp nhiều hoặc tiện ích bổ sung

Đăng ký hoạt động

Gói thuê bao đang hoạt động

Người dùng có gói thuê bao example.com đang hoạt động. Trong trường hợp này, tất cả người đăng ký đều có quyền truy cập vào toàn bộ danh mục phát trực tuyến của bạn, bất kể loại gói thuê bao là gì.


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

Gói thuê bao đang hoạt động và có ngày hết hạn

Gói thuê bao đang hoạt động có ngày hết hạn

Người dùng có gói thuê bao example.com đang hoạt động và gói thuê bao có ngày hết hạn. Trong trường hợp này, tất cả người đăng ký sẽ có quyền truy cập vào toàn bộ danh mục phát trực tuyến của bạn, bất kể loại đăng ký của họ là gì.


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

Không có gói đăng ký nào

Không có gói thuê bao

Người dùng không có gói thuê bao example.com.


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

Gói thuê bao đang hoạt động cấp nhiều hoặc tiện ích bổ sung

Gói thuê bao đang hoạt động cấp nhiều hoặc tiện ích bổ sung

Người dùng có gói thuê bao example.com:premium cho đến một ngày nhất định.


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

Giới hạn số lần gọi

Google làm mới thông tin về quyền của người dùng tối đa 6 giờ một lần. Để làm mượt các truy vấn tối đa mỗi giây (QPS), Google sẽ phân phối các truy vấn đó đến điểm cuối của bạn theo cách đồng đều theo thời gian. Do đó, bạn có thể ước tính QPS trung bình dự kiến cho điểm cuối bằng công thức sau:

QPS trung bình dự kiến = <tổng số người dùng> / 21.600 giây (6 giờ x 60 phút x 60 giây)

Nếu bạn hỗ trợ một số lượng lớn người dùng, Google có thể điều chỉnh khoảng thời gian 6 giờ. Nếu cần, hãy liên hệ với Google để thảo luận về cấu hình.

Liên hệ với Google

Khi điểm cuối của bạn đã sẵn sàng, hãy liên hệ với Google để thông báo URL của điểm cuối đó.

Thuộc tính thông số kỹ thuật của quyền truy cập hành động

Hãy xem mục thuộc tính quy cách truy cập hành động để biết thông tin tham khảo.