متطلبات الوصول

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

الشكل 1. تساعد متطلبات الوصول المشتركين في الوصول إلى محتوى تطبيقك أو منصتك.

تحديد متطلبات الوصول إلى المحتوى

يجب تحديد متطلبات الوصول إلى كل حزمة محتوى في قائمة المحتوى. عند إجراء ذلك، ضع في اعتبارك الأسئلة التالية:

  • هل يحتاج المستخدمون إلى تسجيل الدخول إلى تطبيقك أو منصتك للوصول إلى المحتوى؟
  • هل يحتاج المستخدمون إلى اشتراك؟

    إجراءات المشاهدة فقط:

    • هل يحتاج المستخدمون إلى اشتراك من مقدّم خدمة خارجي؟
    • هل تقدّم اشتراكًا متعدّد المستويات أو اشتراكًا يتضمّن عدة حِزم أو اشتراكًا إضافيًا؟
  • إجراءات المشاهدة فقط: هل يحتاج المستخدمون إلى استئجار المحتوى أو شرائه؟

  • هل يتغيّر شرط الوصول بمرور الوقت؟

  • هل يعتمد شرط الوصول على الموقع الجغرافي للجهاز؟

أنواع القيود المفروضة على إمكانية الوصول

هناك نوعان من قيود الوصول:

نوع جدار الدفع

يمكنك حظر الوصول إلى المحتوى حسب نوع جدار الدفع. يوضّح الجدول التالي بالتفصيل أنواع بوابات الدفع المختلفة:

نوع جدار الدفع مثال الفئة
ولا يلزم إجراء أي عملية شراء أو تسجيل الدخول. Crackle nologinrequired
يجب أن يكون المستخدم مسجّلاً الدخول، ولكن لا يحتاج إلى اشتراك مدفوع. Vudu (AVOD) free
يجب أن يكون لدى المستخدم اشتراك نشط. لا يعتمد إذن الوصول على فئة الاشتراك. Netflix

subscription

يجب أن يكون لدى المستخدم اشتراك نشط. يعتمد الوصول إلى هذه الميزات على مستوى الاشتراك. Hulu (الإضافات)

subscription

يتوفّر المحتوى لفترة زمنية محدودة بعد الشراء. Vudu rental
يتوفّر المحتوى لفترة غير محدودة بعد الشراء. Vudu purchase
يتوفّر المحتوى من خلال اشتراك في خدمة تلفزيون الكابل. HBO Go externalSubscription

نوع جدار الدفع لإجراءات المشاهدة

لتحديد نوع جدار الدفع للمحتوى في "الإجراءات المتعلّقة بالمشاهدة"، استخدِم السمة category في مواصفات الوصول إلى الإجراءات:

"potentialAction": {
  "@type":"WatchAction",
  "target": {  },
  "actionAccessibilityRequirement": {
    "@type": "ActionAccessSpecification",
    "category": "subscription",
    "availabilityStarts": "2018-06-01T10:35:29Z",
    "availabilityEnds": "2019-05-31T10:35:29Z",
    "eligibleRegion": {
      "@type": "Country",
      "name": "US"
    }
  },
  ...
}

نوع جدار الدفع لإجراءات الاستماع

لتحديد نوع نظام حظر الاشتراك غير المدفوع للمحتوى في "إجراءات الاستماع"، استخدِم السمة category في عنصر العرض:

"potentialAction": {
  "@type":"ListenAction",
  "target": {  },
  "expectsAcceptanceOf":{
    "@type":"Offer",
    "category":"subscription",
    "availabilityStarts": "2018-06-01T10:35:29Z",
    "availabilityEnds": "2019-05-31T10:35:29Z",
    "eligibleRegion": {
      "@type":"Country",
      "name":"US"
    }
  },
  ...
}

المنطقة الجغرافية

يجب تحديد المناطق الجغرافية التي يتوفّر فيها المحتوى. استخدِم إحدى السمتَين التاليتَين أو كلتاهما:

يمكن للمستخدم الوصول إلى المحتوى إذا كان الموقع الجغرافي للجهاز ضمن أي منطقة محدّدة في eligibleRegion وليس ضمن أي منطقة مُحدّدة في ineligibleRegion.

تسمح السمتَان eligibleRegion وineligibleRegion بالقيمة التالية:

  • قائمة بملفّات 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 الخطوات التالية:

  1. نُجري طلبًا عبر واجهة برمجة التطبيقات إلى نقطة نهاية الأذونات لتلقّي معرّفات إذن المستخدم.
  2. نبحث عن معرّفات الأذونات المطلوبة للمحتوى من خلاصة Media Actions.
  3. نطابق entitlementId الخاص بالمستخدم مع سمة identifier الخاصة بكائن اشتراك الوسائط في خلاصتك. إذا تطابقentitlementId واحد على الأقل، نحدّد أنّه يمكن للمستخدم الوصول إلى المحتوى.
الشكل 2. يتطابق أحد معرّفات أذونات المستخدم مع معرّف الأذونات المطلوب للمحتوى.

تنصح 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"
    }
  }
}

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

الشكل 3. نموذج اشتراك متعدّد المستويات وطريقة عرضه للامتيازات

إليك السيناريو التالي:

  • اشتركت "منى" في المستوى الذهبي. تعرض نقطة نهاية الأذونات المعرّفات 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
      ...
    },
    ...
  }
}

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

الشكل 4. نموذج اشتراك في الإضافات وطريقة تمثيله للحقوق

إليك السيناريو التالي:

  • اشتركت "منى" في 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 فهم العناوين غير المضمّنة في الفئة الشائعة التي يمكن لكل مستخدم معيّن الوصول إليها.

متى يجب إنشاء حزمة من المستوى العام؟

تكون حزمة الفئة المشتركة مطلوبة عندما تقدّم خدمتك محتوى متاحًا لجميع المشتركين. ويشمل ذلك الخدمات التي تقدّم حزمة واحدة فقط والخدمات التي تقدّم حِزمًا أو إضافات متعدّدة.

لا يحتاج مقدّمو المحتوى الذين لا يتوفّر لديهم محتوى لجميع المشتركين إلى إنشاء حزمة فئة مشتركة. ومن الأمثلة على ذلك مقدّمو الخدمات الذين يوفّرون محتوًى متناقضًا في جميع حِزمهم.

أمثلة على الفئات الشائعة

في ما يلي أمثلة على الفئة الشائعة.

الاشتراكات المتعدّدة الفئات

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

تتضمّن الفئة الذهبية كل محتوى الفئة الفضية التي تتضمّن بدورها كل محتوى الفئة البرونزية.
الشكل 5. بنية حزمة الاشتراكات المتعدّدة الفئات

في مثال الرمز البرمجي التالي، تكون الحزمة البرونزية هي الفئة المشتركة لأنّه يمكن لجميع المستخدِمين الوصول إلى كل المحتوى في هذه الفئة.

"requiresSubscription": [
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/bronze",
      "name": "Bronze",
      "sameAs": "https://www.example.com/package/bronze",
      "commonTier": true
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/silver",
      "name": "Silver",
      "sameAs": "https://www.example.com/package/silver",
      "identifier": "example.com:silver",
      "commonTier": false
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/gold",
      "name": "Gold",
      "sameAs": "https://www.example.com/package/gold",
      "identifier": "example.com:gold",
      "commonTier": false
    }
  ],

الإضافات

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

يبدأ كل مستخدم باشتراك في قناة Basic، ويمكنه اختيار إضافة
            أي مجموعة من قنوات PRO وSportz وMoviemax.
الشكل 6. بنية حزمة الاشتراك في الإضافات

إذا كانت لديك قناة متاحة لجميع المستخدمين ولا يتم فرض تكلفة على القناة، يمكنك دمج الحزمة مع حزمة الفئة العادية.

في مثال الرمز البرمجي التالي، تكون الحزمة الأساسية هي الفئة المشتركة لأنّه يمكن لجميع المستخدِمين الوصول إلى كل المحتوى في هذه الحزمة.

"requiresSubscription": [
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/basic",
      "name": "Basic",
      "sameAs": "https://www.example.com/package/basic",
      "commonTier": true
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/packages/basic/pro",
      "name": "PRO",
      "sameAs": "https://www.example.com/package/pro",
      "identifier": "example.com:pro",
      "commonTier": false
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/sportz",
      "name": "Sportz",
      "sameAs": "https://www.example.com/package/sports",
      "identifier": "example.com:sportz",
      "commonTier": false
    },
    {
      "@type": "MediaSubscription",
      "@id": "https://www.example.com/package/moviemax",
      "name": "Moviemax",
      "sameAs": "https://www.example.com/package/moviemax",
      "identifier": "example.com:moviemax",
      "commonTier": false
    }
  ],

الحِزم التي تتضمّن محتوًى متداخلًا

في نموذج المحتوى الذي تتداخل فيه الحِزم، يبيع مقدّم الخدمة حِزمًا تتضمّن بعض المحتوى من حِزم أخرى. تمثل الصورة التالية مثالاً على بنية الحزمة.

مخطّط Venn البياني الذي يتداخل فيه الحِزم 1 و2 و3 ويحمل
            التصنيف &quot;المستوى المشترك&quot;
الشكل 7. بنية الحزمة التي تتضمّن محتوى متداخلًا

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

الحِزم التي لا تتضمّن محتوًى متداخلًا

في نموذج المحتوى الذي لا تتداخل فيه جميع حِزم المحتوى، يبيع مقدّم الخدمة حِزمًا لا تتضمّن أي محتوى من حِزم أخرى. تمثل الصورة التالية مثالاً على بنية الحزمة.

تكون الحِزم 1 و2 و3 منفصلة تمامًا.
الشكل 8. بنية الحزمة التي لا تتضمّن محتوى متداخل

في المثال التالي، يقدّم الموفّر ثلاث حزم بدون محتوى يتداخل في جميع الحِزم. ولا يلزم توفّر حزمة من المستوى المشترك.

"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

مطلوب

يمكن أن تحتوي هذه السمة على القيم التالية:

  • ActiveSubscription: لدى المستخدم اشتراك نشِط لدى مقدّم الخدمة.
  • ActiveTrial: لدى المستخدم فترة تجريبية نشطة لموفّر الخدمة.
  • InactiveSubscription: ليس لدى المستخدم اشتراك نشِط أو فترة تجريبية نشِطة.
subscription.expiration_date

اختياريّ

تاريخ انتهاء صلاحية هذا الإذن، بالتنسيق ISO 8601، بما في ذلك المنطقة الزمنية لمزيد من التفاصيل، يُرجى الاطّلاع على تواريخ انتهاء الصلاحية.

entitlements

اختياريّ

هذه خاصية جذر تحتوي على قيم entitlementId التي يملكها المستخدِم.

entitlements.entitlement

سمة مطلوبة إذا كان الوصول إلى قائمة المحتوى المتوفّر للبث يختلف حسب نوع الاشتراك.

يحتوي هذا الموقع على entitlementId. لمزيد من المعلومات، يُرجى الاطّلاع على معرّف الإذن.

entitlements.expiration_date

اختياريّ

تاريخ انتهاء صلاحية هذا الاشتراك بالتنسيق ISO 8601، بما في ذلك المنطقة الزمنية لمزيد من التفاصيل، يُرجى الاطّلاع على تواريخ انتهاء الصلاحية.

تواريخ انتهاء الصلاحية

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

نموذج الاشتراك
يتوفّر لجميع المشتركين إمكانية الوصول إلى كتالوج البث المباشر نفسه. وبما أنّه ليس عليك تحديد السمة entitlements ، حدِّد subscription.expiration_date.

يختلف إذن الوصول إلى كتالوج البث حسب تفاصيل اشتراك المستخدم.

إذا كان نموذج الاشتراك يتضمّن فئات أو إضافات متعددة تنتهي صلاحيتها مع مرور الوقت، يمكنك اتّخاذ أحد الإجراءَين التاليَين:

  • إذا كانت جميع قيم entitlements.entitlement تنتهي صلاحيتها في الوقت نفسه، حدِّد subscription.expiration_date.
  • إذا كانت بعض قيم entitlements.entitlement تنتهي صلاحيتها في أوقات مختلفة، حدِّد entitlements.expiration_date.

أمثلة للردود

في ما يلي أمثلة على الردود لحالات الاشتراك المختلفة:

  • اشتراك نشط
  • اشتراك نشط بتاريخ انتهاء صلاحية
  • بدون اشتراك
  • اشتراكات نشطة في مستويات أو إضافات متعددة

الاشتراك النشط

يمتلك مستخدم اشتراكًا نشطًا في example.com. في هذه الحالة، يمكن لجميع المشتركين الوصول إلى كتالوج البث الكامل بغض النظر عن نوع اشتراكهم.


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

اشتراك نشط بتاريخ انتهاء صلاحية

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


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

بدون اشتراك

لا يملك أحد المستخدمين اشتراكًا في example.com.


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

الاشتراكات النشطة في مستويات أو إضافات متعددة

اشترك مستخدم في example.com:premium حتى تاريخ معيّن.


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

الحدّ الأقصى لمعدّل الاستخدام

تُعدّل Google معلومات أذونات المستخدم كل ست ساعات كحد أقصى. لتجنُّب الزيادة المفاجئة في عدد طلبات البحث في الثانية (QPS)، توزّع Google طلبات البحث على نقطة النهاية بالتساوي بمرور الوقت. وبالتالي، يمكنك تقدير متوسّط عدد طلبات البحث في الثانية المتوقّع لنقطة النهاية باستخدام الصيغة التالية:

متوسّط عدد طلبات البحث المتوقّع في الثانية = <إجمالي عدد المستخدِمين> / 21,600 ثانية (6 ساعات × 60 دقيقة × 60 ثانية)

إذا كنت توفّر الدعم لعدد كبير من المستخدمين، يمكن أن تعدّل Google الفاصل الزمني الذي يبلغ 6 ساعات. إذا لزم الأمر، يُرجى التواصل مع Google لمناقشة عملية الضبط.

الاتصال بـ Google

عندما تكون نقطة النهاية جاهزة، تواصَل مع Google لإعلامها بعنوان URL لنقطة النهاية.

خصائص مواصفات الوصول إلى الإجراءات

راجِع القسم خصائص مواصفات الوصول إلى الإجراءات للحصول على معلومات مرجعية.