דרישות לקבלת גישה

משתמשים מעדיפים לצפות או להאזין לתוכן שכבר יש להם גישה אליו, כמו התוכן שכבר נרכש במסגרת המינוי שלהם. אם Google תדע לאיזה תוכן המשתמש יכול לגשת באפליקציה או בפלטפורמה שלכם, היא תוכל ליצור תוצאת חיפוש או תגובה טובה יותר כדי להפנות את המשתמש לתוכן הזה.

איור 1. דרישות הגישה עוזרות למנויים לגשת לתוכן באפליקציה או בפלטפורמה שלכם.

זיהוי הדרישות לגישה לתוכן

עליכם לציין את דרישת הגישה לכל חבילת תוכן בקטלוג. כשעושים זאת, כדאי לשקול את השאלות הבאות:

  • האם המשתמשים צריכים להתחבר לאפליקציה או לפלטפורמה כדי לגשת לתוכן?
  • האם המשתמשים צריכים מינוי?

    פעולות צפייה בלבד:

    • האם המשתמשים צריכים מינוי מספק שירות חיצוני?
    • האם אתם מציעים מינוי מדורג, מינוי עם כמה חבילות או מינוי עם תוספים?
  • פעולות צפייה בלבד: האם המשתמשים צריכים לשכור או לרכוש את התוכן?

  • האם דרישת הגישה משתנה לאורך זמן?

  • האם דרישת הגישה תלויה במיקום המכשיר?

סוגי הגבלות הגישה

יש שני סוגים של הגבלות גישה:

סוג חומת התשלום

אתם יכולים להגביל את הגישה לתוכן לפי סוג חומת התשלום. בטבלה הבאה מפורטים הסוגים השונים של מחסומי תשלום:

סוג חומת התשלום דוגמה קטגוריה
אין צורך ברכישה או בהתחברות. רשרוש 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 מאפשרים את הערכים הבאים:

אם התוכן זמין בכל העולם, צריך להשתמש בערך המיוחד הבא בשדה eligibleRegion:

"eligibleRegion": "EARTH",

תרחישים לדוגמה של eligibleRegion

ריכזנו כאן כמה דוגמאות לתרחישים לדוגמה של המאפיין eligibleRegion:

  • דוגמה 1: eligibleRegion עם רשימת מדינות.
  • דוגמה 2: eligibleRegion עם אובייקט GeoShape שמכיל רשימה של מיקודים.
  • דוגמה 3: eligibleRegion עם אובייקט GeoShape שמכיל רשימה של קודי FSA (Forward Sortation Area).
  • דוגמה 4: eligibleRegion עם אובייקט GeoShape שמכיל מזהה DMA.
  • דוגמה 5: eligibleRegion עם רשימה של אובייקטים מסוג GeoShape. כל אחת מהן מכילה מזהה DMA.
  • דוגמה 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 (Forward Sortation Area):


"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 שמכיל מזהה 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"
      }
    ]
  }
}

eligibleRegion עם רשימה של אובייקטים מסוג GeoShape. כל אחת מהן מכילה מזהה 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"
         }
      }
   ]
}

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. אנחנו מבצעים קריאה ל-API לנקודת הקצה של ההרשאות כדי לקבל את מזהי ההרשאות של המשתמש.
  2. אנחנו מחפשים את מזהי ההרשאות הנדרשים של התוכן בפיד של פעולות המדיה.
  3. אנחנו מתאימים את הערך של entitlementId של המשתמש למאפיין identifier של האובייקט media subscription בפיד. אם לפחות אחד מה-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
        ...
      },
      ...
    }
  },
  ...
}

תרחישים נפוצים לדוגמה לגישה

אלה תרחישים נפוצים לדוגמה של גישה:

  • חינם (אין צורך בהתחברות): התוכן זמין ללא התחברות, מינוי או רכישה.
  • חינם (נדרשת כניסה): כדי לצפות בתוכן, המשתמשים צריכים להתחבר לחשבון, אבל לא נדרש מינוי.
  • מינוי ברמה אחת: התוכן זמין רק למנויים. כל המנויים יכולים לגשת לאותו תוכן, בין אם מדובר בסרטים ובין אם מדובר בפרקים, ללא קשר לחבילת המינוי שלהם.
  • מינוי בכמה רמות: כדי לצפות בתוכן נדרש מינוי. המנויים יכולים לגשת לתוכן שונה, בין אם מדובר בסרטים או בפרקים, בהתאם לרמת המינוי שלהם. לדוגמה, Silver לעומת Gold.
  • מינוי לתוסף: כדי לגשת לתוכן נדרש מינוי. המנויים יכולים להוסיף תוכן פרימיום בנוסף למינוי הרגיל שלהם.
  • רכישה חד-פעמית: אפשר לרכוש את התוכן, ואז המשתמש יכול לגשת אליו ללא הגבלת זמן.
  • טלוויזיה בשידור חי: המינוי כולל גישה לערוצים מקומיים, לאומיים וערוצי פרימיום.
  • מינויים של צד שלישי: כדי לצפות בתוכן, המשתמש צריך להתחבר באמצעות ספק הכבלים שלו.

לא נדרשת התחברות

התוכן זמין ללא התחברות או מינוי.


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

במודל של מינוי מדורג, לספק השירות יש כמה רמות של מינויים, כמו Gold,‏ Silver ו-Bronze. משתמשים עם מינוי ברמה העליונה יכולים לגשת לכל התוכן ברמה התחתונה. עם זאת, משתמשים עם מינוי ברמה נמוכה יותר לא יכולים לגשת לתוכן ברמה גבוהה יותר.

איור 3. מודל מינוי מדורג ומידת ההרשאות שלו.

למשל, נבחן את התרחיש הבא:

  • דנה נרשמת למינוי ברמה Gold. נקודת הקצה של ההרשאות מחזירה את המזהים הבאים של entitlementId:
    • example.com:bronze
    • example.com:silver
    • example.com:gold
  • יוסי מנוי לרמה ברונזה. נקודת הקצה של ההרשאות מחזירה את entitlementId הבא:
    • example.com:bronze
  • בדרישות הבאות מפורט מה צריך לכלול בפיד של פעולות שקשורות לתוכן:
    • לסרט א' נדרש example.com:bronze.
    • לסרט ב נדרש example.com:silver.

בתרחיש הזה, Google קובעת את רמות הגישה הבאות ל-Jane ול-John:

  • גם ליוני וגם ללי יש גישה לסרט א'.
  • לרחל יש גישה לסרט ב', אבל למשה אין.
{
  "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 קובעת את רמות הגישה הבאות ל-Jane ול-John:

  • גם ליוני וגם ללי יש גישה לסרט א'.
  • לרחל יש גישה לסרט ב', אבל למשה אין.
{
  "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 Assistant. כדי לקבוע את הציפיות של המשתמשים לגבי העלות, Google צריכה להבין איזה תוכן זמין לכל המנויים באמצעות המינוי ברמה המשותפת. Google צריכה גם להבין איזה תוכן זמין למנויים עם חבילות מינויים ספציפיות.

Google ממליצה על כותרים שזמינים ברמה הנפוצה, אלא אם אתם תומכים ב-entitlement API. ה-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
    }
  ],

חבילות עם תוכן חופף

במודל תוכן שבו לחבילות יש תוכן חופף, ספק השירות מוכר חבילות שכוללות תוכן מחלק מהחבילות האחרות. בתמונה הבאה מופיעה דוגמה למבנה החבילה.

דיאגרמת ון שבה החפיפה בין חבילות 1, 2 ו-3 מסומנת בתווית &#39;רמה משותפת&#39;.
איור 7. מבנה חבילה עם תוכן חופף.

בדוגמת הקוד הבאה, הספק מציע שלוש חבילות שבהן חלק מהתוכן חופף בכל החבילות. במקרה כזה, נדרשת חבילה רביעית שמייצגת את הרמה המשותפת. הוא חייב לכלול את כל התוכן שזמין בכל שלוש החבילות.

"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 מפזרת את השאילתות לנקודת הקצה שלכם באופן שווה לאורך זמן. לכן, אפשר להעריך את הערך הממוצע הצפוי של QPS בנקודת הקצה באמצעות הנוסחה הבאה:

מספר הבקשות לשנייה הממוצע הצפוי = <מספר המשתמשים הכולל> / 21,600 שניות (6 שעות x 60 דקות x 60 שניות)

אם אתם תומכים במספר גדול של משתמשים, Google יכולה לשנות את מרווח הזמן של 6 השעות. אם צריך, אפשר לפנות אל Google כדי לדון בהגדרה.

צור קשר עם Google

כשנקודת הקצה מוכנה, פונים אל Google כדי לעדכן אותה לגבי כתובת ה-URL של נקודת הקצה.

מאפייני מפרט הגישה לפעולה

למידע נוסף, ראו הקטע מאפייני מפרט הגישה לפעולה.