يفضّل المستخدمون مشاهدة أو الاستماع إلى المحتوى الذي يمكنهم الوصول إليه، مثل محتوى الاشتراك الحالي. إذا كانت Google تعرف المحتوى الذي يمكن للمستخدم الوصول إليه في تطبيقك أو منصتك، يمكنها إنشاء نتيجة بحث أو إجابة أفضل لتوجيه المستخدم إلى هذا المحتوى.

تحديد متطلبات الوصول إلى المحتوى
يجب تحديد متطلبات الوصول إلى كل حزمة محتوى في قائمة المحتوى. عند إجراء ذلك، ضع في اعتبارك الأسئلة التالية:
- هل يحتاج المستخدمون إلى تسجيل الدخول إلى تطبيقك أو منصتك للوصول إلى المحتوى؟
هل يحتاج المستخدمون إلى اشتراك؟
إجراءات المشاهدة فقط:
- هل يحتاج المستخدمون إلى اشتراك من مقدّم خدمة خارجي؟
- هل تقدّم اشتراكًا متعدّد المستويات أو اشتراكًا يتضمّن عدة حِزم أو اشتراكًا إضافيًا؟
إجراءات المشاهدة فقط: هل يحتاج المستخدمون إلى استئجار المحتوى أو شرائه؟
هل يتغيّر شرط الوصول بمرور الوقت؟
هل يعتمد شرط الوصول على الموقع الجغرافي للجهاز؟
أنواع القيود المفروضة على إمكانية الوصول
هناك نوعان من قيود الوصول:
نوع جدار الدفع
يمكنك حظر الوصول إلى المحتوى حسب نوع جدار الدفع. يوضّح الجدول التالي بالتفصيل أنواع بوابات الدفع المختلفة:
نوع جدار الدفع | مثال | الفئة |
---|---|---|
ولا يلزم إجراء أي عملية شراء أو تسجيل الدخول. | Crackle | nologinrequired |
يجب أن يكون المستخدم مسجّلاً الدخول، ولكن لا يحتاج إلى اشتراك مدفوع. | Vudu (AVOD) | free |
يجب أن يكون لدى المستخدم اشتراك نشط. لا يعتمد إذن الوصول على فئة الاشتراك. | Netflix |
|
يجب أن يكون لدى المستخدم اشتراك نشط. يعتمد الوصول إلى هذه الميزات على مستوى الاشتراك. | Hulu (الإضافات) |
|
يتوفّر المحتوى لفترة زمنية محدودة بعد الشراء. | Vudu | rental |
يتوفّر المحتوى لفترة غير محدودة بعد الشراء. | Vudu | purchase |
يتوفّر المحتوى من خلال اشتراك في خدمة تلفزيون الكابل. | HBO Go | externalSubscription |
نوع جدار الدفع لإجراءات المشاهدة
لتحديد نوع جدار الدفع للمحتوى في "الإجراءات المتعلّقة بالمشاهدة"، استخدِم السمة
category
في
مواصفات الوصول إلى الإجراءات:
"potentialAction": {
"@type":"WatchAction",
"target": { … },
"actionAccessibilityRequirement": {
"@type": "ActionAccessSpecification",
"category": "subscription",
"availabilityStarts": "2018-06-01T10:35:29Z",
"availabilityEnds": "2019-05-31T10:35:29Z",
"eligibleRegion": {
"@type": "Country",
"name": "US"
}
},
...
}
نوع جدار الدفع لإجراءات الاستماع
لتحديد نوع نظام حظر الاشتراك غير المدفوع للمحتوى في "إجراءات الاستماع"، استخدِم السمة
category
في
عنصر العرض:
"potentialAction": {
"@type":"ListenAction",
"target": { … },
"expectsAcceptanceOf":{
"@type":"Offer",
"category":"subscription",
"availabilityStarts": "2018-06-01T10:35:29Z",
"availabilityEnds": "2019-05-31T10:35:29Z",
"eligibleRegion": {
"@type":"Country",
"name":"US"
}
},
...
}
المنطقة الجغرافية
يجب تحديد المناطق الجغرافية التي يتوفّر فيها المحتوى. استخدِم إحدى السمتَين التاليتَين أو كلتاهما:
- سمة
eligibleRegion
لعنصر مواصفات الوصول إلى الإجراءات هذه السمة مطلوبة. - سمة
ineligibleRegion
لعنصر مواصفات الوصول إلى الإجراءات
يمكن للمستخدم الوصول إلى المحتوى إذا كان الموقع الجغرافي للجهاز ضمن أي منطقة
محدّدة في eligibleRegion
وليس ضمن أي منطقة مُحدّدة في
ineligibleRegion
.
تسمح السمتَان eligibleRegion
وineligibleRegion
بالقيمة التالية:
- قائمة بملفّات
Country
وCity
وState
- كائن
GeoShape
اطّلِع على القسم سماتGeoShape
لمعرفة المتطلبات التفصيلية. - قائمة بـ
GeoShape
عنصر
إذا كان المحتوى متاحًا على مستوى العالم، استخدِم القيمة الخاصة التالية لسمة
eligibleRegion
:
"eligibleRegion": "EARTH",
حالات استخدام سمة eligibleRegion
في ما يلي أمثلة على حالات استخدام السمة eligibleRegion
:
- المثال 1:
eligibleRegion
مع قائمة بالبلدان - المثال 2:
eligibleRegion
مع عنصرGeoShape
يحتوي على قائمة بالرموز البريدية - المثال 3:
eligibleRegion
مع عنصرGeoShape
يحتوي على قائمة برموز منطقة إعادة التوجيه للرمز البريدي حسب ترتيبه (FSA) - المثال 4:
eligibleRegion
مع عنصرGeoShape
يحتوي على معرّف منطقة سوق محددة - المثال 5:
eligibleRegion
مع قائمة بعناصرGeoShape
ويحتوي كلّ منها على معرّف منطقة تسويقية. - المثال 6:
ineligibleRegion
مع حظر الرموز البريدية
eligibleRegion
مع قائمة بالبلدان:
"actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "subscription", "requiresSubscription": { "@type": "MediaSubscription", "@id": "http://www.example.com/north_america_network/subscription", "name": "Example Subscription", "commonTier": true }, "eligibleRegion": [ { "@type": "Country", "name": "US" }, { "@type": "Country", "name": "CA" } ] }
eligibleRegion
مع عنصر GeoShape
يحتوي على
قائمة بالرموز البريدية:
"actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "subscription", "requiresSubscription": { "@type": "MediaSubscription", "@id": "http://www.example.com/local_tv_network/subscription", "name": "Example Subscription", "commonTier": true }, "eligibleRegion": { "@type": "GeoShape", "@id": "http://example.com/area1", "addressCountry": "US", "postalCode": [ "94118", "94119" ] } }
eligibleRegion
مع عنصر GeoShape
يحتوي
على قائمة برموز منطقة إعادة التوجيه للرمز البريدي حسب ترتيبه (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" ] } }
eligibleRegion
مع عنصر GeoShape
يحتوي
على معرّف منطقة مبيعات محددة:
"actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "subscription", "requiresSubscription": { "@type": "MediaSubscription", "@id": "http://www.example.com/abcd/subscription", "name": "Example Subscription", "commonTier": true }, "eligibleRegion":{ "@type": "GeoShape", "@id": "http://example.com/area3", "addressCountry": "US", "identifier": [ { "@type": "PropertyValue", "propertyID": "DMA_ID", "value": "501" } ] } }
eligibleRegion
مع قائمة بعناصر GeoShape
يحتوي كلّ منها على معرّف منطقة مبيعات محددة:
"actionAccessibilityRequirement" : { "@type" : "ActionAccessSpecification", "eligibleRegion" : [ { "@id" : "http://example.com/dma/601", "@type" : "GeoShape", "addressCountry" : "US", "identifier" : { "@type" : "PropertyValue", "propertyID" : "DMA_ID", "value" : "601" } }, { "@id" : "http://example.com/dma/602", "@type" : "GeoShape", "addressCountry" : "US", "identifier" : { "@type" : "PropertyValue", "propertyID" : "DMA_ID", "value" : "602" } } ] }
ineligibleRegion
مع حظر الرموز البريدية:
"actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "subscription", "requiresSubscription": { "@type": "MediaSubscription", "@id": "http://www.example.com/local_tv_network/subscription", "name": "Example Subscription", "commonTier": true }, "eligibleRegion": { "@type": "Country", "name": "US" }, "ineligibleRegion": { "@type": "GeoShape", "@id": "http://example.com/area1", "addressCountry": "US", "postalCode": [ "94118", "94119" ] } }
معرّف الإذن
يشير معرّف الإذن، entitlementId
، إلى سلسلة تمثّل
إمكانية الوصول إلى مجموعة من المحتوى في قائمة الوسائط. لتحديد ما إذا كان أحد المستخدمين
يملك إذن الوصول إلى المحتوى الخاص بك، تتّخذ Google الخطوات التالية:
- نُجري طلبًا عبر واجهة برمجة التطبيقات إلى نقطة نهاية الأذونات لتلقّي معرّفات إذن المستخدم.
- نبحث عن معرّفات الأذونات المطلوبة للمحتوى من خلاصة Media Actions.
- نطابق
entitlementId
الخاص بالمستخدم مع سمةidentifier
الخاصة بكائن اشتراك الوسائط في خلاصتك. إذا تطابقentitlementId
واحد على الأقل، نحدّد أنّه يمكن للمستخدم الوصول إلى المحتوى.

تنصح Google باستخدام الصيغة التالية لـ entitlementId
:
<domain name> + colon (:) + <access level to content>
أمثلة على بنية الجملة:
example.com:basic
example.com:premium
example.com:sports
مثال على معرّف الإذن
تحدّد خلاصة MediaExampleCompany أنّ Movie XYZ
تتطلّب
example.com:basic
entitlementId
، كما هو موضّح:
{ "@context": ["http://schema.org", {"@language": "en"}], "@type": "Movie", "@id": "www.example.com/movie_xyz", "url": "www.example.com/movie_xyz", "name": "Movie XYZ", "potentialAction": { "@type": "WatchAction", "target": [ … ], "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "subscription", "requiresSubscription": { "@type": "MediaSubscription", "@id": "http://www.example.com/basic_subscription", "name": "Basic subscription", "commonTier": true ... }, ... } }, ... }
حالات الاستخدام الشائعة للوصول
في ما يلي حالات الاستخدام الشائعة للوصول:
- مجاني (بدون الحاجة إلى تسجيل الدخول): يتوفّر محتوى التطبيق بدون الحاجة إلى تسجيل الدخول أو الاشتراك أو الشراء.
- مجاني (يجب تسجيل الدخول): يتطلب المحتوى تسجيل دخول المستخدمين، ولكن لا يتطلب اشتراكًا.
- الاشتراك في فئة واحدة: يجب الاشتراك لمشاهدة المحتوى. يمكن لجميع المشتركين الاستفادة من محتوى مماثل، سواء كان أفلامًا أو حلقات، بغض النظر عن بستهم الاشتراكية.
- الاشتراك المتعدّد المستويات: يتطلّب المحتوى الاشتراك. يمكن للمشتركين الوصول إلى محتوى مختلف، سواء كان أفلامًا أو حلقات، استنادًا إلى فئة اشتراكهم. على سبيل المثال، الفضة مقابل الذهب
- الاشتراك الإضافي: يتطلّب المحتوى اشتراكًا. يمكن للمشتركين إضافة محتوى حصري إلى الاشتراك العادي.
- الشراء لمرّة واحدة: يمكن شراء المحتوى، وبعد ذلك يمكن للمستخدم الوصول إليه إلى أجل غير مسمى.
- البث التلفزيوني المباشر: يتيح الاشتراك مشاهدة القنوات المحلية والوطنية والمدفوعة.
- الاشتراك في خدمة تابعة لجهة خارجية: يتطلّب المحتوى من المستخدم تسجيل الدخول باستخدام مقدّم خدمة الكابل.
تسجيل الدخول غير مطلوب
يتوفّر المحتوى بدون الحاجة إلى تسجيل الدخول أو الاشتراك.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "nologinrequired", "availabilityStarts": "2015-01-01T00:00Z", "availabilityEnds": "2015-12-31T00:00Z", "eligibleRegion": { "@type": "Country", "name": "US" } } }
- اضبط
category
علىnologinrequired
. - لا تُدرِج
expectAcceptanceOf
.
تسجيل الدخول مطلوب
يتطلّب المحتوى من المستخدمين تسجيل الدخول، ولكنّه لا يتطلّب اشتراكًا.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "free", "availabilityStarts": "2015-01-01T00:00Z", "availabilityEnds": "2015-12-31T00:00Z", "eligibleRegion": { "@type": "Country", "name": "US" } } }
- اضبط
category
علىfree
. - لا تُدرِج
expectAcceptanceOf
.
في نموذج الاشتراك المكوّن من فئة واحدة، يقدّم مقدّم الخدمة فئة اشتراك واحدة. يمكن لجميع المشتركين الوصول إلى المحتوى نفسه، سواء كان الأفلام أو الحلقات، بغض النظر عن حزمة الاشتراك التي اشتركوا فيها.
{ "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" } } }
في نموذج الاشتراكات المتعدّدة المستويات، يقدّم مقدّم الخدمة عدة مستويات اشتراك، مثل الذهبي والفضي و البرونزي. يمكن للمستخدمين الذين لديهم اشتراك في المستوى الأعلى الوصول إلى كل المحتوى في المستوى الأدنى. ومع ذلك، لا يمكن للمستخدمين الذين لديهم اشتراك في المستوى الأدنى الوصول إلى محتوى المستوى الأعلى.

إليك السيناريو التالي:
- اشتركت "منى" في المستوى الذهبي. تعرض نقطة نهاية الأذونات
المعرّفات
entitlementId
التالية:example.com:bronze
example.com:silver
example.com:gold
- اشترك "عادل" في المستوى البرونزية. تُعرِض نقطة نهاية
الأذونات
entitlementId
التالية:example.com:bronze
- توضّح خلاصة "إجراءات الوسائط" المتطلّبات التالية:
- يتطلب الفيلم (أ) استخدام
example.com:bronze
. - يتطلب الفيلم (ب) استخدام
example.com:silver
.
- يتطلب الفيلم (أ) استخدام
في هذا السيناريو، تحدّد Google مستويات الوصول التالية لكل من "منى" و"خالد":
- يمكن لكل من "سماح" و"سامح" الوصول إلى الفيلم "أ".
- يمكن لـ "سماح" الوصول إلى الفيلم "ب"، ولكن لا يمكن لـ "منير" ذلك.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "subscription", "requiresSubscription": { "@type": "MediaSubscription", "@id": "http://www.example.com/basic_subscription", "name": "Bronze", "commonTier": true ... }, ... } }
في نموذج الاشتراك في الإضافات، يسمح مقدّم الخدمة للمستخدمين ب توسيع نطاق أذوناتهم وإضافة قنوات إلى اشتراك أساسي. يمكن للمستخدمين إضافة أي عدد يريدونه من القنوات.

إليك السيناريو التالي:
- اشتركت "منى" في PRO وSportz بالإضافة إلى اشتراك
Basic. تعرِض نقطة نهاية الأذونات
معرّفات
entitlementId
التالية:example.com:basic
example.com:pro
example.com:sportz
- يمتلك "عادل" اشتراك Basic فقط. تُعرِض نقطة نهاية
الأذونات
entitlementId
التالية:example.com:basic
- توضّح خلاصة "إجراءات الوسائط" المتطلّبات التالية:
- يتطلب الفيلم (أ) استخدام
example.com:basic
. - يتطلب الفيلم (ب) استخدام
example.com:pro
.
- يتطلب الفيلم (أ) استخدام
في هذا السيناريو، تحدّد Google مستويات الوصول التالية لكلّ من "منى" و"خالد":
- يمكن لكل من "سماح" و"سامح" الوصول إلى الفيلم "أ".
- يمكن لـ "سماح" الوصول إلى الفيلم "ب"، ولكن لا يمكن لـ "منير" ذلك.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "subscription", "availabilityStarts": "2015-01-01T00:00Z", "availabilityEnds": "2015-12-31T00:00Z", "eligibleRegion": { "@type": "Country", "name": "US" "requiresSubscription": [ { "@type": "MediaSubscription", "@id": "https://www.example.com/package/basic", "name": "Basic", "sameAs": "https://www.example.com/package/basic", "commonTier": true }, { "@type": "MediaSubscription", "@id": "https://www.example.com/packages/basic/pro", "name": "PRO", "sameAs": "https://www.example.com/package/pro", "identifier": "example.com:pro", "commonTier": false }, { "@type": "MediaSubscription", "@id": "https://www.example.com/package/sportz", "name": "Sportz", "sameAs": "https://www.example.com/package/sports", "identifier": "example.com:sportz", "commonTier": false } } } }
الشراء
يتوفّر المحتوى لفترة غير محدودة بعد الشراء.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "purchase", "availabilityStarts": "2015-01-01T00:00Z", "availabilityEnds": "2015-12-31T00:00Z", "eligibleRegion": { "@type": "Country", "name": "US" }, "expectsAcceptanceOf": { "@type": "Offer", "price": 7.99, "priceCurrency": "USD", "seller": { "@type": "Organization", "name": "Example", "sameAs": "http://www.example.com/" } } } }
- اضبط
category
علىpurchase
. - أدرِج
expectAcceptanceOf
فيactionAccessibilityRequirement
للإشارة إلى سعر عملية الشراء.
استئجار
يتوفّر المحتوى لفترة زمنية محدودة بعد الشراء.
{ "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/" } } } }
- اضبط
category
علىrental
. - أدرِج
expectAcceptanceOf
فيactionAccessibilityRequirement
للإشارة إلى سعر الاستئجار.
في خلاصة "إجراءات الوسائط"، يمكنك حظر الوصول إلى قناة أو حدث بث مباشر استنادًا إلى شرطَي المستخدِم التاليَين:
-
الموقع الجغرافي لجهاز المستخدم
لتقييد الوصول إلى قناة التلفزيون، حدِّد المنطقة التي يمكن للمستخدمين الوصول إليها. ينطبق هذا الشرط عادةً على قنوات البث التلفزيوني المحلي.
-
حالة حساب المستخدم
إذا كان الوصول إلى قناة تلفزيونية يعتمد على إعدادات المستخدم على مستوى الحساب، استخدِم معرّفات الأذونات لمحاولة تمثيل القيود.
ينطبق هذا الشرط عادةً على حالات الاستخدام التالية:
- الحزمة: غالبًا ما يتم تضمين القنوات المحلية في الحِزم، ويختار المستخدمون الحزمة التي يريدون الاشتراك فيها.
- قنوات إضافية: تتطلّب بعض القنوات المدفوعة من المستخدمين إضافة قنوات إضافية إلى اشتراكاتهم بشكل انتقائي.
- الشبكة الرياضية الإقليمية (RSN): تكون الشبكات الرياضية الإقليمية عادةً مرتبطة بالموقع الجغرافي "للمنزل" الخاص بالمستخدم. يمكن للمستخدمين مشاهدة المحتوى على شبكة RSN حتى عند السفر خارج موقعهم الجغرافي "المحلي".
الاشتراك في خدمة تابعة لجهة خارجية
يتوفّر المحتوى للمشتركين من خدمة مختلفة.
{ "actionAccessibilityRequirement": { "@type": "ActionAccessSpecification", "category": "externalsubscription" "availabilityStarts": "2015-01-01T00:00Z", "availabilityEnds": "2015-12-31T00:00Z", "requiresSubscription":{ "@type": "MediaSubscription", "@id": "https://www.example.com/faq", "name": "Example", "sameAs": "https://www.example.com/faq", "authenticator": { "@type": "Organization", "name": "TVE" } }, "eligibleRegion": { "@type": "Country", "name": "US" } } }
- أضِف
authenticator
للإشارة إلى أنّ خدمة مختلفة تُجري مصادقة للمشتركين. على سبيل المثال، تتطلّب خدمة HBO GO اشتراكًا من مزوّد خدمة الكابل.
حزم الفئات الشائعة
يتوفّر محتوى الفئة العادية لجميع المشتركين بغض النظر عن
حزمة الاشتراك التي اشتركوا فيها. تنطبق الفئة الشائعة على جميع المحتوى الذي يحمل category
subscription
. لمزيد من المعلومات عن السمة category
، اطّلِع على القسم
نوع جدار الدفع.
لماذا يجب توفُّر حزمة من الفئة العادية؟
تقدّم منتجات Google المتعددة اقتراحات للمستخدمين بشأن البرامج التلفزيونية والأفلام، ويشمل ذلك "بحث Google" وAndroid TV و"مساعد Google". لتحديد توقعات العميل بشأن التكلفة، يجب أن تفهم Google المحتوى المتاح لجميع المشتركين من خلال استخدام الفئة العادية. يجب أن تفهم Google أيضًا نوع المحتوى المتاح للمشتركين في حِزم اشتراك معيّنة.
تنصح Google باستخدام العناوين المتاحة في الفئة العادية ما لم تكن تتيح استخدام entitlement API. تتيح واجهة برمجة التطبيقات لـ Google فهم العناوين غير المضمّنة في الفئة الشائعة التي يمكن لكل مستخدم معيّن الوصول إليها.
متى يجب إنشاء حزمة من المستوى العام؟
تكون حزمة الفئة المشتركة مطلوبة عندما تقدّم خدمتك محتوى متاحًا لجميع المشتركين. ويشمل ذلك الخدمات التي تقدّم حزمة واحدة فقط والخدمات التي تقدّم حِزمًا أو إضافات متعدّدة.
لا يحتاج مقدّمو المحتوى الذين لا يتوفّر لديهم محتوى لجميع المشتركين إلى إنشاء حزمة فئة مشتركة. ومن الأمثلة على ذلك مقدّمو الخدمات الذين يوفّرون محتوًى متناقضًا في جميع حِزمهم.
أمثلة على الفئات الشائعة
في ما يلي أمثلة على الفئة الشائعة.
الاشتراكات المتعدّدة الفئات
في نموذج الاشتراكات المتعدّدة المستويات، يقدّم مقدّم الخدمة اشتراكات لعدة مستويات، مثل مستويات الذهبي والفضي والبرونزي. يمكن للمستخدمين الذين لديهم اشتراك في المستوى الأعلى الوصول إلى كل المحتوى في المستويات الأدنى. لا يمكن للمستخدمين الذين لديهم اشتراك في المستوى الأدنى الوصول إلى المحتوى في المستوى العلوي. الصورة التالية هي مثال على بنية الحزمة.

في مثال الرمز البرمجي التالي، تكون الحزمة البرونزية هي الفئة المشتركة لأنّه يمكن لجميع المستخدِمين الوصول إلى كل المحتوى في هذه الفئة.
"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 } ],
الإضافات
في نموذج الاشتراك في الإضافات، يسمح مقدّم الخدمة للمستخدمين بتوسيع مزاياهم وإضافة قنوات إلى اشتراك أساسي. يمكن للمستخدمين إضافة أي عدد يريدونه من القنوات. الصورة التالية هي مثال على بنية الحزمة.

إذا كانت لديك قناة متاحة لجميع المستخدمين ولا يتم فرض تكلفة على القناة، يمكنك دمج الحزمة مع حزمة الفئة العادية.
في مثال الرمز البرمجي التالي، تكون الحزمة الأساسية هي الفئة المشتركة لأنّه يمكن لجميع المستخدِمين الوصول إلى كل المحتوى في هذه الحزمة.
"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 } ],
الحِزم التي تتضمّن محتوًى متداخلًا
في نموذج المحتوى الذي تتداخل فيه الحِزم، يبيع مقدّم الخدمة حِزمًا تتضمّن بعض المحتوى من حِزم أخرى. تمثل الصورة التالية مثالاً على بنية الحزمة.

في مثال الرمز البرمجي التالي، يقدّم مقدّم الخدمة ثلاث حِزم يتداخل فيها بعض المحتوى في جميع الحِزم. في هذه الحالة، يجب توفُّر حزمة رابعة represent التي تمثّل الفئة المشتركة. يجب أن يتضمّن كل المحتوى المتاح في جميع الحِزم الثلاث.
"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 } ],
الحِزم التي لا تتضمّن محتوًى متداخلًا
في نموذج المحتوى الذي لا تتداخل فيه جميع حِزم المحتوى، يبيع مقدّم الخدمة حِزمًا لا تتضمّن أي محتوى من حِزم أخرى. تمثل الصورة التالية مثالاً على بنية الحزمة.

في المثال التالي، يقدّم الموفّر ثلاث حزم بدون محتوى يتداخل في جميع الحِزم. ولا يلزم توفّر حزمة من المستوى المشترك.
"requiresSubscription": [ { "@type": "MediaSubscription", "@id": "https://www.example.com/package/1", "name": "Package 1", "sameAs": "https://www.example.com/package/1", "identifier": "example.com:package1", "commonTier": false }, { "@type": "MediaSubscription", "@id": "https://www.example.com/package/2", "name": "Package 2", "sameAs": "https://www.example.com/package/2", "identifier": "example.com:package2", "commonTier": false }, { "@type": "MediaSubscription", "@id": "https://www.example.com/package/3", "name": "Package 3", "sameAs": "https://www.example.com/package/3", "identifier": "example.com:package3", "commonTier": false } ],
نقطة نهاية "الإذن بالوصول"
استخدِم المعلومات الواردة في هذا القسم لاستضافة نقطة نهاية HTTPS تعرض الإذنَين المرتبطين بمستخدم معيّن.
المتطلبات الأساسية
قبل البدء، تأكَّد من أنّ خدمتك متوافقة مع عملية OAuth 2.0 مع Google.
الطلب
لتلقّي أذونات المستخدم، ترسل Google طلبًا يحتوي على رمز OAuth الخاص بالمستخدم. يجب أن تحدِّد نقطة النهاية المستخدم استنادًا إلى رمز تصويت OAuth هذا. انظر المثال التالي:
GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer <OAuthToken>
الردّ
يجب أن تعرض نقطة النهاية استجابة تتضمّن السمات التالية:
الموقع | |
---|---|
subscription |
مطلوب هذا حقل داخل الردّ الجذر. |
subscription.type |
مطلوب يمكن أن تحتوي هذه السمة على القيم التالية:
|
subscription.expiration_date |
اختياريّ تاريخ انتهاء صلاحية هذا الإذن، بالتنسيق ISO 8601، بما في ذلك المنطقة الزمنية لمزيد من التفاصيل، يُرجى الاطّلاع على تواريخ انتهاء الصلاحية. |
entitlements |
اختياريّ هذه خاصية جذر تحتوي على قيم |
entitlements.entitlement |
سمة مطلوبة إذا كان الوصول إلى قائمة المحتوى المتوفّر للبث يختلف حسب نوع الاشتراك. يحتوي هذا الموقع على |
entitlements.expiration_date |
اختياريّ تاريخ انتهاء صلاحية هذا الاشتراك بالتنسيق ISO 8601، بما في ذلك المنطقة الزمنية لمزيد من التفاصيل، يُرجى الاطّلاع على تواريخ انتهاء الصلاحية. |
تواريخ انتهاء الصلاحية
هناك خاصيتان في استجابة نقطة النهاية تتعاملان مع تواريخ انتهاء الصلاحية: subscription.expiration_date
وentitlements.expiration_date
. يمكنك تضمين أحدهما أو عدم تضمين أيّ منهما، ولكن ليس كليهما. ويعتمد النموذج الذي تستخدمه على
نموذج اشتراكك.
نموذج الاشتراك | |
---|---|
يتوفّر لجميع المشتركين إمكانية الوصول إلى كتالوج البث المباشر نفسه. | وبما أنّه ليس عليك تحديد السمة entitlements
، حدِّد subscription.expiration_date . |
يختلف إذن الوصول إلى كتالوج البث حسب تفاصيل اشتراك المستخدم. |
إذا كان نموذج الاشتراك يتضمّن فئات أو إضافات متعددة تنتهي صلاحيتها مع مرور الوقت، يمكنك اتّخاذ أحد الإجراءَين التاليَين:
|
أمثلة للردود
في ما يلي أمثلة على الردود لحالات الاشتراك المختلفة:
- اشتراك نشط
- اشتراك نشط بتاريخ انتهاء صلاحية
- بدون اشتراك
- اشتراكات نشطة في مستويات أو إضافات متعددة
الاشتراك النشط
يمتلك مستخدم اشتراكًا نشطًا في example.com. في هذه الحالة، يمكن لجميع المشتركين الوصول إلى كتالوج البث الكامل بغض النظر عن نوع اشتراكهم.
{ "subscription" : { "type": "ActiveSubscription", } }
اشتراك نشط بتاريخ انتهاء صلاحية
لدى أحد المستخدمين اشتراك نشط في example.com، ويحتوي الاشتراك على تاريخ انتهاء صلاحية. في هذه الحالة، يمكن لجميع المشتركين الوصول إلى كتالوج البث الكامل بغض النظر عن نوع اشتراكهم.
{ "subscription" : { "type": "ActiveSubscription", "expiration_date": "2019-11-10T10:00:00Z" } }
بدون اشتراك
لا يملك أحد المستخدمين اشتراكًا في example.com.
{ "subscription" : { "type": "InactiveSubscription" } }
الاشتراكات النشطة في مستويات أو إضافات متعددة
اشترك مستخدم في example.com:premium
حتى تاريخ معيّن.
{ "subscription" : { "type": "ActiveSubscription", } "entitlements": [ { "entitlement": "example.com:premium", "expiration": "2019-11-10T10:00:00Z" } ] }
الحدّ الأقصى لمعدّل الاستخدام
تُعدّل Google معلومات أذونات المستخدم كل ست ساعات كحد أقصى. لتجنُّب الزيادة المفاجئة في عدد طلبات البحث في الثانية (QPS)، توزّع Google طلبات البحث على نقطة النهاية بالتساوي بمرور الوقت. وبالتالي، يمكنك تقدير متوسّط عدد طلبات البحث في الثانية المتوقّع لنقطة النهاية باستخدام الصيغة التالية:
متوسّط عدد طلبات البحث المتوقّع في الثانية = <إجمالي عدد المستخدِمين> / 21,600 ثانية (6 ساعات × 60 دقيقة × 60 ثانية)
إذا كنت توفّر الدعم لعدد كبير من المستخدمين، يمكن أن تعدّل Google الفاصل الزمني الذي يبلغ 6 ساعات. إذا لزم الأمر، يُرجى التواصل مع Google لمناقشة عملية الضبط.
الاتصال بـ Google
عندما تكون نقطة النهاية جاهزة، تواصَل مع Google لإعلامها بعنوان URL لنقطة النهاية.
خصائص مواصفات الوصول إلى الإجراءات
راجِع القسم خصائص مواصفات الوصول إلى الإجراءات للحصول على معلومات مرجعية.