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ó quyền truy cập, chẳng hạn như nội dung trong gói thuê bao hiện tại của họ. Nếu biết nội dung mà 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ể mang đến trải nghiệm phù hợp hơn trên các nền tảng của Google và chuyển người dùng đến nội dung đó.

Hình 1. Yêu cầu truy cập giúp người đăng ký 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 nội dung

Bạn phải xác định yêu cầu truy cập cho từng gói nội dung trong danh mục của mình. Khi làm như vậy, hãy cân nhắc những 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 vào nội dung không?
  • Người dùng có cần đăng ký gói thuê bao không?

    Chỉ có Thao tác xem:

    • Người dùng có cần gói thuê bao của một nhà cung cấp dịch vụ bên ngoài không?
    • Bạn có cung cấp gói thuê bao theo cấp, nhiều gói hoặc gói thuê bao bổ sung không?
  • Chỉ có 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 quy định hạn chế quyền truy cập

Có hai loại hạn chế 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 trình bày chi tiết các loại tường phí:

Loại tường phí Ví dụ Danh mục
Bạn không cần mua hàng hay đăng nhập. Crackle nologinrequired
Người dùng phải đăng nhập nhưng không cần có gói thuê bao có tính phí. Vudu (AVOD) free
Người dùng phải có một gói thuê bao đ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 có một gói thuê bao đang hoạt động. Quyền truy cập phụ thuộc vào cấp gói thuê bao. Hulu (gói bổ sung)

subscription

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

Loại tường phí cho Thao tác xem

Để chỉ định loại tường phí nội dung cho Thao tác xem, hãy dùng thuộc tính category trong Quy cách về quyền truy cập vào thao tác:

"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 Thao tác nghe, hãy dùng thuộc tính category trong đối tượng offer:

"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 nội dung được cung cấp. 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 eligibleRegion và ineligibleRegion cho phép các giá trị sau:

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

"eligibleRegion": "EARTH",

Các trường hợp sử dụng eligibleRegion

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

  • Ví dụ 1: eligibleRegion có danh sách các quốc gia.
  • Ví dụ 2: eligibleRegion có đối tượng GeoShape chứa danh sách mã ZIP.
  • Ví dụ 3: eligibleRegion có đối tượng GeoShape chứa danh sách mã Khu vực phân loại chuyển tiếp (FSA).
  • Ví dụ 4: eligibleRegion có một đối tượng GeoShape chứa mã nhận dạng DMA.
  • Ví dụ 5: eligibleRegion có danh sách các đối tượng GeoShape. Mỗi đối tượng chứa một mã nhận dạng DMA.
  • Ví dụ 6: ineligibleRegion có mã bưu chính bị che khuất.

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ã bưu chính:


"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ã Khu vực phân loại 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
  },
  "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"
    ]
  }
}

Ví dụ 4

eligibleRegion có đối tượng GeoShape chứa mã nhận dạng 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"
      }
    ]
  }
}

Ví dụ 5

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

Giá trị nhận dạng quyền

Mã nhận dạng quyền, entitlementId, là một chuỗi đại diện cho quyền truy cập vào một nhóm nội dung trong danh mục nội dung nghe nhì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 một lệnh gọi API đến điểm cuối Quyền của bạn để nhận mã nhận dạng quyền của người dùng.
  2. Chúng tôi tra cứu các giá trị nhận dạng quyền bắt buộc của nội dung trong nguồn cấp dữ liệu Media Actions của bạ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 nghe nhìn trong nguồn cấp dữ liệu. Nếu có ít nhất một entitlementId trùng khớp, chúng tôi sẽ xác định rằng người dùng có thể truy cập vào nội dung.
Hình 2. Một trong các 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ề giá trị nhận dạng quyền

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ạ:

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

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

Sau đây là các 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 yêu cầu đăng nhập, đăng ký thuê bao hoặc mua.
  • 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 phải có gói thuê bao.
  • Gói thuê bao một cấp: Người dùng cần có gói thuê bao để xem nội dung. Tất cả người đăng ký đều có thể truy cập vào cùng một nội dung, dù là phim hay tập phim, bất kể gói thuê bao của họ là gì.
  • Gói thuê bao nhiều cấp: Nội dung này 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, cho dù đó là phim hay tập phim, tuỳ thuộc vào gói thuê bao của họ. Ví dụ: Bạc so với Vàng.
  • Gói thuê bao bổ sung: Nội dung này yêu cầu có gói thuê bao. Người đăng ký có thể thêm nội dung trả phí vào gói thuê bao thông thường.
  • Mua một lần: Người dùng có thể mua nội dung và sau đó truy cập vào nội dung đó vô thời hạn.
  • Truyền hình trực tuyến: 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 cao cấp.
  • Gói thuê bao của bên thứ ba: Người dùng phải đăng nhập bằng nhà cung cấp truyền hình cáp của họ để xem nội dung.

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ể xem nội dung mà không cần đăng nhập hoặc đăng ký thuê bao.


{
  "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 có gói thuê bao.


{
  "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 thuê bao một cấp, 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, cho dù đó là phim hay tập phim, 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"
    },
    "additionalProperty": {
      "@type": "PropertyValue",
      "name": "DisplaySubscriptionIdentifier",
      "value": "http://www.example.com/example_package"
    },
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}

Gói thuê bao nhiều cấp

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 và Đồ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 gói thuê bao cấp thấp hơn. Tuy nhiên, người dùng có gói thuê bao ở cấp thấp hơn sẽ không thể truy cập vào nội dung ở cấp cao hơn.

Hình 3. Một mô hình thuê bao theo cấp và cách thể hiện các quyền của mô hình đó.

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

  • Jane đăng ký gói Vàng. Điểm cuối về quyền của bạn trả về các giá trị nhận dạng entitlementId sau đây:
    • example.com:bronze
    • example.com:silver
    • example.com:gold
  • John đăng ký gói Đồng. Điểm cuối về quyền của bạn sẽ 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 xác định các cấp truy cập sau đây 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
      ...
    },
    "additionalProperty": {
      "@type": "PropertyValue",
      "name": "DisplaySubscriptionIdentifier",
      "value": "http://www.example.com/basic_subscription"
    },
    ...
  }
}

Gói thuê bao bổ sung

Trong mô hình 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 của họ 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 tuỳ thích.

Hình 4. Mô hình gói thuê bao bổ sung và cách thể hiện các quyền của mô hình đó.

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

  • Ngoài gói thuê bao Cơ bản, Jane còn có gói PRO và Sportz. Điểm cuối quyền của bạn trả về các giá trị nhận dạng entitlementId sau đây:
    • example.com:basic
    • example.com:pro
    • example.com:sportz
  • John chỉ có gói thuê bao Cơ bản. Điểm cuối về quyền của bạn sẽ 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 xác định các cấp truy cập sau đây 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
        }
    ],
      "additionalProperty": {
        "@type": "PropertyValue",
        "name": "DisplaySubscriptionIdentifier",
        "value": "http://www.example.com/package/basic"
      },
    }
  }
}

Mua hàng một lần

Mua hàng

Nội dung được cung cấp trong một khoảng thời gian không xác định 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.
  • Thêm expectAcceptanceOf vào actionAccessibilityRequirement để cho biết giá của giao dịch mua.

Cho thuê

Nội dung có thể xem được 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á của phim/chương trình cho thuê.

Truyền hình trực tuyến

Trong nguồn cấp dữ liệu Hành động đối với nội dung đa phương tiện, bạn có thể hạn chế quyền truy cập vào một kênh hoặc sự kiện truyền hình trực tuyến dựa trên 2 điều kiện sau đây đối với 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. Điều kiện này thường áp dụng cho các kênh truyền hình phát sóng tại đị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 sử dụng giá trị nhận dạng quyền để thể hiện quy định hạn chế.

    Điều kiện này thường áp dụng cho các trường hợp sử dụng sau:

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

Gói thuê bao của 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ý của 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"
      }
    },
    "additionalProperty": {
      "@type": "PropertyValue",
      "name": "DisplaySubscriptionIdentifier",
      "value": "http://www.example.com/faq"
     },
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  }
}
  • Thêm authenticator để cho biết một dịch vụ khác xác thực người đăng ký. Ví dụ: HBO GO yêu cầu bạn phải có gói thuê bao của nhà cung cấp truyền hình cáp.

Các gói cấp phổ biến

Tất cả người đăng ký đều có thể xem nội dung ở cấp phổ biến, 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 phổ biến?

Nhiều nền tảng của Google cung cấp đề xuất về chương trình truyền hình và phim cho người dùng. Để đặt kỳ vọng của người dùng về chi phí, Google phải hiểu rõ nội dung mà tất cả người đăng ký đều có thể xem thông qua việc sử dụng cấp phổ biến. Google cũng phải hiểu rõ những nội dung mà người đăng ký có thể xem được khi có các gói thuê bao cụ thể.

Google khuyến nghị bạn sử dụng những bộ phim/chương trình có trong cấp độ chung, trừ phi bạn hỗ trợ API quyền. API này cho phép Google hiểu được những bộ phim/chương trình không thuộc cấp 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 một gói cấp phổ thông?

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

Những nhà cung cấp không có nội dung cho tất cả người đăng ký không cần tạo gói cấp chung. Ví dụ: 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ác cấp phổ biến

Sau đây là ví dụ về cấp phổ biến.

Gói thuê bao theo cấp

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ư cấp Vàng, Bạc và Đồng. Người dùng có gói thuê bao cấp cao hơn có quyền truy cập vào tất cả nội dung trong các gói cấp thấp hơn. Người dùng có gói thuê bao cấp thấp hơn sẽ không có quyền truy cập vào nội dung trong gói cấp cao hơn. Hình ảnh sau đây là ví dụ về cấu trúc gói.

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

Trong ví dụ về mã sau đây, gói đồng là cấp phổ biến vì tất cả người dùng đều có quyền truy cập vào mọi 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 của họ 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 tuỳ 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 với kênh Basic và họ có thể chọn thêm bất kỳ tổ hợp nào của các kênh PRO, Sportz và Moviemax.
Hình 6. Cấu trúc gói thuê bao bổ sung.

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

Trong ví dụ về mã sau đây, gói cơ bản là cấp phổ biến vì tất cả người dùng đều có quyền truy cập vào mọi 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 trùng lặp

Trong một mô hình nội dung mà các gói có nội dung trùng lặp, nhà cung cấp dịch vụ sẽ bán các gói có chứa một số nội dung của các gói khác. Hình ảnh sau đây là ví dụ về cấu trúc gói.

Biểu đồ Venn trong đó phần chồng chéo giữa 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 3 gói, trong đó một số nội dung trùng lặp trên tất cả các gói. Trong trường hợp này, bạn cần có gói thứ tư đại diện cho cấp phổ biến. Nội dung này phải bao gồm tất cả nội dung có trong cả 3 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 trùng lặp

Trong một 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.

Gói 1, 2 và 3 hoàn toàn tách 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 trùng lặp giữa tất cả các gói. Không cần gói cấp chung.

"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 về quyền

Sử dụng thông tin trong phần này để lưu trữ một điểm cuối HTTPS trả về các quyền liên kết với một 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ợ quy trình OAuth 2.0 với Google.

Yêu cầu

Để nhận các quyền của người dùng, Google sẽ gửi một yêu cầu 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 đó. Hãy 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ề một phản hồi có các thuộc tính sau:

Thuộc tính
subscription

Bắt buộc

Đây là một 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ó một gói thuê bao còn hiệu lực của nhà cung cấp.
  • ActiveTrial: Người dùng đang dùng thử nhà cung cấp.
  • InactiveSubscription: Người dùng không có gói thuê bao đang hoạt động hoặc bản dùng thử đang hoạt động.
subscription.expiration_date

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 chi tiết, hãy xem phần Ngày hết hạn.

entitlements

Không bắt buộc

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

entitlements.entitlement

Bắt buộc nếu quyền truy cập vào danh mục nội dung phát trực tuyến của bạn khác nhau tuỳ 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

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, bao gồm cả múi giờ. Để biết thêm thông tin chi tiết, hãy xem phần Ngày hết hạn.

Ngày hết hạn

Có 2 thuộc tính trong phản hồi của điểm cuối liên quan đến ngày hết hạn: subscription.expiration_date và entitlements.expiration_date. Bạn có thể thêm một trong hai hoặc không thêm cả hai, nhưng không được thêm cả hai. Bạn sử dụng loại nào tuỳ thuộc vào mô hình thuê bao của bạn.

Mô hình gói thuê bao
Quyền truy cập vào danh mục nội dung 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, hãy chỉ định subscription.expiration_date.

Quyền truy cập vào danh mục nội dung phát trực tuyến của bạn sẽ khác nhau tuỳ thuộc vào 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 một trong những việc sau:

  • Nếu tất cả các giá trị entitlements.entitlement đều hết hạn cùng 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à các ví dụ về phản hồi cho các trạng thái thuê bao khác nhau:

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

Đăng ký hoạt động

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

Một người dùng có gói thuê bao đang hoạt động trên example.com. 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 nội dung phát trực tuyến của bạn, bất kể loại gói thuê bao của họ.


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

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

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

Một người dùng có gói thuê bao đang hoạt động cho example.com và gói thuê bao này có ngày hết hạn. 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 nội dung phát trực tuyến của bạn, bất kể loại gói thuê bao của họ.


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

Không có gói thuê bao

Không có gói thuê bao

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


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

Có gói thuê bao đang hoạt động ở nhiều cấp hoặc gói bổ sung

Có nhiều gói thuê bao đang hoạt động ở nhiều cấp hoặc có nhiều 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 tốc độ

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. Để giảm số lượng truy vấn tối đa mỗi giây (QPS), Google phân phối các truy vấn đến điểm cuối của bạn một 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 của mình 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 bạn đã chuẩn bị xong điểm cuối, hãy liên hệ với Google để thông báo URL của điểm cuối đó.

Thuộc tính chỉ định quyền truy cập vào hành động

Hãy xem phần các thuộc tính của quy cách về quyền truy cập vào thao tác để biết thông tin tham khảo.