שירותי בידינג ומכרזים (B&A) הם קבוצה של שירותים לקונים ולבעלי תוכן דיגיטלי שמפעילים בסביבת מחשוב אמינה (TEE) כדי להקל על מכרז של קהל מוגן (PA). במדריך למפתחים הזה מוסבר איך קונים יכולים לשלב מכרז B&A PA ב-Chrome.
סקירה כללית
כדי להשתתף במכרז של קהל מוגן באמצעות שירותי B&A, הקונה מעדכן את קבוצת האינטרסים (IG) כדי לבצע אופטימיזציה של עומס העבודה (payload) ולשפר את זמן האחזור במכרז.
הקונה נדרש לבצע את משימות האופטימיזציה הבאות של עומס העבודה:
- משימות ב-
joinAdInterestGroup()
- משימות ב-
generateBid()
קבוצת אינטרס בנושא B&A
בהמשך מופיעה דוגמה להגדרה של קבוצת תחומי עניין במכרז B&A PA עם אופטימיזציה של מטען נתונים:
navigator.joinAdInterestGroup({
name: 'example-ig',
owner: 'https://dsp.example',
// An ID is mapped to each render URL
ads: [
{
renderURL: 'https://dsp.example/ad.html',
adRenderId: '12345678' // 12 characters max,
buyerReportingId: 'brid123', // Optional
buyerAndSellerReportingId: 'bsrid123', // Optional
selectableBuyerAndSellerReportingId: ['sbsrid123', 'sbsrid456'], // Optional
},
],
adComponents: [
{
renderURL: 'https://dsp.example/ad-component.html',
adRenderId: 'abcdefgh'
},
],
// Flags are set to omit data in the B&A auction payload
auctionServerRequestFlags: ['omit-ads', 'omit-user-bidding-signals'],
// Data not included in the B&A auction payload can be fetched as trusted signals
// The following is an example of how the keys could look, but the actual
// implementation is up to the ad tech
trustedBiddingSignalsKeys: [
'exampleUserBiddingSignalsKey',
'exampleAdRenderIdKey',
'exampleAdMetadataKey',
'exampleAdReportingIdKey',
],
// Optionally, interest groups can be prioritized
priority: 0.0,
});
ההבדלים בין ההגדרות של 'בדיקה ובקרה' לבין ההגדרות של קבוצות תחומי עניין במכשיר הם:
שדות | B&A IG | אפליקציית IG במכשיר | כלול במטען הייעודי של מכרז B&A |
auctionServerRequestFlags |
משומש | לא בשימוש | לא |
userBiddingSignals |
לא מומלץ: | משומש | לא, אם הדגל omit-user-bidding-signals מוגדר |
adRenderId ב-ads וב-adComponents |
משומש | לא בשימוש | אם הדגל omit-ads מוגדר, השדה adRenderId ב-ads זמין רק ב-browserSignals.prevWins של עומס העבודה. adRenderId שהוגדר ב-adComponents לא נכלל במטען הייעודי.אם הדגל |
renderURL ב-ads וב-adComponents |
משומש | משומש | לא |
metadata ב-ads וב-adComponents |
לא בשימוש | משומש | לא |
מזהי דיווח ב-ads |
משומש | משומש | לא |
- השדה
auctionServerRequestFlags
מאפשר להגדיר דגלים שמורים לדפדפן להשמיט נתונים מסוימים ממטען הייעודי של מכרז B&A. - אפשר להגדיר את הערך
userBiddingSignals
בקבוצת האינטרסים, אבל מומלץ להשמיט אותו באמצעות הדגלomit-user-bidding-signals
. אפשר לספק את האותות שהושמט באמצעות שירות K/V. - השדה
adRenderId
מוגדר יחד עם השדהrenderURL
המשויך, אבל רק השדהadRenderId
יהפוך לחלק ממטען הנתונים של המכרז של B&A. כתובת ה-URL לעיבוד החזותי שתוחזר מ-generateBid()
בשלב מאוחר יותר במהלך המכרז חייבת להתאים לכתובת ה-URL לעיבוד החזותי שהוגדרה ב-IG. - מזהי הדיווח מוגדרים ב-IG של B&A, אבל הם לא כלולים בעומס הנתונים של המכרז ב-B&A. מזהה הדיווח שמוחזר מ-
generateBid()
מאוחר יותר במהלך המכרז חייב להתאים לכתובת ה-URL לעיבוד הגרפי שמוגדרת ב-IG. - מזהי
ad.metadata
ודיווח לא נכללים במטען הייעודי של מכרז B&A, ובמקום זאת הנתונים האלה הופכים לזמינים באמצעות השימוש בשירות המפתח/הערך המהימן.
שימו לב ש-renderURL
ופרטי הדיווח ב-ads
עדיין מוגדרים בתצורה של קבוצת האינטרסים, אבל הם לא נכללים בתוכן של בקשת המכרז, כי הדפדפן בודק שכתובת ה-URL לעיבוד ופרטי הדיווח שמוחזרים מהפונקציה generateBid()
של שירות הבידינג תואמים לערכים שהוגדרו בקבוצת האינטרסים.
joinAdInterestGroup()
משימות
צריך לבצע את הפעולות הבאות בקריאה ל-joinAdInterestGroup()
.
הגדרת דגלים לבקשות מהשרת
השדה auctionServerRequestFlags
של קובץ התצורה joinAdInterestGroup()
מקבל את הדגלים הבאים:
דגל | תיאור |
omit-user-bidding-signals |
הדגל omit-user-bidding-signals משמיט את האובייקט userBiddingSignals במטען הייעודי של המכרז.
אם הדגל לא מוגדר, הערך של |
omit-ads |
הדגל omit-ads מורה לדפדפן להשמיט את האובייקטים ads ו-adComponents במטען הייעודי של המכרז.הערך של אם הדגל לא מוגדר, השדות מומלץ מאוד לקונים לבחור את הדגל |
כדי לטפל בנתונים שהושמטו, מידע רלוונטי זמין ב-trustedBiddingSignals
. אפשר להשתמש בדגלים בנפרד, ולא חייבים להשתמש בהם יחד.
דוגמה לשימוש:
navigator.joinAdInterestGroup({
auctionServerRequestFlags: ['omit-user-bidding-signals', 'omit-ads'],
});
הגדרת מזהי רינדור של מודעות
כדי לצמצם את גודל המטען הייעודי (payload) של מכרז B&A, אובייקטים ads
ו-adComponents
של קבוצת האינטרסים לא נכללים, וכתוצאה מכך, האובייקטים האלה לא זמינים בתוך הפונקציה generateBid()
שפועלת ב-Bidding Service.
כדי לטפל במידע החסר על המודעות, הקונה שומר מזהה (adRenderId
ו-adComponentRenderId
) שמשויך לכל מודעה בהגדרה של קבוצת תחומי העניין. המזהה חייב להיות DOMString באורך 12 בייטים או פחות. אם המזהה מקודד ב-Base64, האורך שלו חייב להיות 12 בייטים או פחות.
דוגמה לקבוצת תחומי עניין עם מזהי עיבוד של מודעות:
navigator.joinAdInterestGroup({
ads: [
{
renderURL: 'https://dsp.example/ad.html',
adRenderId: '12345678' // 12 characters max
},
],
adComponents: [
{
renderURL: 'https://dsp.example/ad-component.html',
adComponentRenderId: 'abcdefgh'
},
],
});
ה-adRenderId
שמשויך למודעות יהיה זמין ב-prevWins.browserSignals
ב-generateBid()
.
למרות ש-renderURL
לא נכלל במטען הייעודי (payload) של הבקשה, כתובת ה-URL להצגה שמוצגת בחזרה מ-generateBid()
חייבת להתאים לכתובת ה-URL להצגה שמוגדרת בהגדרות של קבוצת האינטרסים. טכנאי הפרסום יכולים לשלוח בחזרה מטא-נתונים של מודעות ומידע נוסף ב-trustedBiddingSignals
, כדי שאפשר יהיה ליצור את כתובת ה-URL לעיבוד של המודעה ואת כתובת ה-URL לעיבוד של רכיב המודעה עבור הצעת המחיר במהלך הביצוע של generateBid()
.
הגדרת העדיפויות של קבוצות תחומי עניין
ב-Chrome, הקונים יכולים לתעדף קבוצות של תחומי עניין. אם מגיעים למגבלת הגודל של המטען הייעודי לכל קונה שהוגדרה על ידי המוכר, המערכת משתמשת בערכי העדיפות של קבוצות העניין כדי להסיר קבוצות עניין עם עדיפות נמוכה יותר לקונה יחיד כשיוצרים את המטען הייעודי של מכרז B&A עבור המוכר. כדי לבחור בין קבוצות של תחומי עניין של קונים שונים, הדפדפן מחליט על סמך גודל המטען השימושי בסדרת בייטים. כברירת מחדל, לכל קונה מוקצה גודל שווה. חשוב לדעת שהעדיפות בפועל מתבצעת בשרתים של B&A, ולא בזמן יצירת עומס העבודה של הבקשה.
העדיפות מחושבת בזמן המכרז באמצעות וקטורי העדיפות של הקונה (priorityVector
) ואותות העדיפות של המוכר (prioritySignals
). לקונה יש אפשרות לשנות את אות העדיפות של המוכר.
נכס | תיאור |
וקטור העדיפות | הקונה מספק את הווקטורים כערך של המפתח priorityVector משירות ה-K/V |
אותות בעדיפות גבוהה | המוכר מספק את האותות על ידי הגדרת priority_signals של הגדרת המכרז |
שינוי של אותות העדיפות | הקונה מספק את ההחרגה בשדה priority_signals_overrides של PerBuyerConfig בתצורת המכרז. |
במהלך המכרז, הדפדפן מחשב את המכפלה הסקלרית הדלה של המפתחות התואמים ב-priorityVector
וב-prioritySignals
כדי לקבוע את העדיפות. בתרשים הבא, העדיפות מחושבת לפי (4 * 2) + (3 * -1)
שמופחת ל-8 + -3
, כך שעדיפות קבוצת האינטרסים הזו בזמן המכרז היא 5
.

יש גם אותות נוספים שאפשר להשתמש בהם כדי לתעדף את הבדיקות והשיפורים:
Signal | תיאור |
deviceSignals.one |
הערך הוא תמיד 1, והוא שימושי להוספת קבוע למכפלת הבינארית. |
deviceSignals.ageInMinutes |
הערך מתאר את גיל קבוצת העניין (הזמן שחלף מאז ההצטרפות האחרונה לקבוצת העניין) בדקות כמספר שלם בין 0 ל-43,200. |
deviceSignals.ageInMinutesMax60 |
הערך מתאר את אותו הדבר כמו האות ageInMinutes , אבל הערך המקסימלי הוא 60. אם הקבוצה נוצרה לפני יותר משעה, הפונקציה מחזירה את הערך 60. |
deviceSignals.ageInHoursMax24 |
הערך מתאר את הגיל של קבוצת העניין בשעות, עד 24 שעות. אם הקבוצה נוצרה לפני יותר מיום, הפונקציה מחזירה את הערך 24. |
deviceSignals.ageInDaysMax30 |
הערך מתאר את הגיל של קבוצת העניין בימים, עד 30 ימים. אם הקבוצה נוצרה לפני יותר מ-30 יום, המערכת תחזיר את הערך 30. |
מידע נוסף זמין במאמר ההסבר ב-GitHub.
הגדרת אותות בידינג מהימנים
מאחר שחלק מהנתונים יושמטו ממטען העלונים של מכרז B&A, אפשר להשתמש בשירות המפתח/הערך כדי לספק את הנתונים שהושמטו כאותות בידינג מהימנים לפונקציה generateBid()
.
שירות K/V יכול לספק את הנתונים הבאים שהוחמצו:
userBiddingSignals
אם הרוכש משתמש בהmetadata
שמשויך לכל מודעהadRenderId
שמשויך לכל מודעה- מזהה דיווח

אחת מהגישות שאפשר לנקוט היא לכלול מזהה ייחודי במפתחות של אותות הבידינג המהימנים, ולאחר מכן לשלוח את הנתונים המשויכים לשרת כדי שאפשר יהיה לטעון אותם לשירות המפתח/ערך. עם זאת, ההטמעה בפועל היא באחריות חברת טכנולוגיית הפרסום, וה-API לא מגדיר הוראות.
בדוגמה הבאה מתוארת גישה אחת שאפשר ליישם:
const ad1RenderURL = 'https://dsp.example/ad-1.html';
const ad2RenderURL = 'https://dsp.example/ad-2.html';
const ad1RenderId = 'render-id-1';
const ad2RenderId = 'render-id-2';
const ad1ReportingId = 'reporting-id-1';
const ad2ReportingId = 'reporting-id-2';
// Generate a unique identifier
const id = crypto.randomUUID();
// Define the keys with the unique ID
const trustedSignalsKeyForIG = `interest-group-${id}`
// Set the keys in the interest group
navigator.joinAdInterestGroup({
// …
ads: [
{
renderURL: ad1RenderURL,
adRenderId: ad1RenderId,
buyerReportingId: ad1ReportingId
},
{
renderURL: ad2RenderURL,
adRenderId: ad2RenderId,
buyerReportingId: ad2ReportingId
},
],
trustedBiddingSignalsKeys: [
trustedSignalsKeyForIG
]
});
// Send the associated data to your server to be loaded into the Key/Value Service
fetch('https://dsp.example/kv/load', {
method: 'POST',
body: JSON.stringify({
id,
[trustedSignalsKeyForIG]: {
userBiddingSignals: {
favoriteColor: 'blue'
},
ads: [
{
renderURL: ad1RenderURL,
adRenderId: ad1RenderId,
buyerReportingId: ad1ReportingId,
metadata: {
color: 'red'
}
},
{
renderURL: ad2RenderURL,
adRenderId: ad2RenderId,
buyerReportingId: ad2ReportingId,
metadata: {
color: 'blue'
}
},
]
}
})
});
בדוגמה, מזהה ייחודי מוגדר ל-IG והופך לחלק ממפתח האותות המהימנים. המפתח של ה-IG והערכים המשויכים אליו נשלחים לשרת כדי להיטען בשירות המפתח/הערך. בשלב מאוחר יותר במהלך המכרז, הדפדפן מאחזר את האותות המהימנים ועושה אותם זמינים בפונקציה generateBid()
של הקונה.
אם צריך, החזרת אות עדכון של קבוצת תחומי עניין מ-K/V
המפתח updateIfOlderThanMs
של האותות המהימנים משמש לעדכון של קבוצת העניין מוקדם יותר מהמרווח היומי הרגיל. אם לא הצטרפו משתמשים לקבוצת העניין או שהיא לא עודכנה במשך פרק זמן שחורג מערך המילי-שניות שהוחזר למפתח updateIfOlderThanMs
, קבוצת העניין תתעדכן באמצעות מנגנון updateURL
. חשוב לדעת ש-Chrome לא יעדכן את קבוצות תחומי העניין בתדירות גבוהה יותר מפעם אחת בכל 10 דקות.
אם המכרז של B&A מחזיר מודעה מנצחת שלא תואמת לאחת מהמודעות שהוגדרו בקבוצת האינטרסים ששמורה בדפדפן, הדפדפן יפסול את המכרז. מנגנון updateIfOlderThanMs
יכול להיות שימושי כדי לוודא שהדפדפן ומכרז B&A מסכימים על קבוצת המודעות בקבוצת תחומי העניין.
מידע נוסף זמין במאמר הזה.
generateBid()
משימות
צריך לבצע את הפעולות הבאות בקריאה ל-generateBid()
.
קריאת אותות מהדפדפן
אובייקט browserSignals
שמוענק לקריאה generateBid()
של B&A נראה כך:
{
topWindowHostname: 'advertiser.example',
seller: 'https://ssp.example',
topLevelSeller: 'https://ssp-top.example',
joinCount: 5,
bidCount: 24,
recency: 1684134092,
// prevWins is [timeInSeconds, adRenderId]
prevWins: [
[9342, 'render-id-1'],
[1314521, 'render-id-2']
],
// Compiled WebAssembly code
wasmHelper: WebAssembly.Module
// Data-Version value from K/V response, if available
dataVersion: 1,
}
המאפיינים החדשים או המשוכתבים הבאים זמינים ב-browserSignals
:
נכס | תיאור |
prevWins |
prevWins הוא מערך של צמדי זמן ומודעה. הזמן מייצג את מספר השניות שחלפו מאז הזכייה הקודמת של המודעה המשויכת ב-30 הימים האחרונים.הוא שונה כך שיציג את האובייקט |
wasmHelper |
אובייקט הידור של הקוד שסופק מ-biddingWasmHelperURL . |
dataVersion |
שרת מהימן יכול לכלול כותרת תגובה מספרית מסוג Data-Version , שתהיה זמינה ב-generateBid() .מידע נוסף זמין במאמר ההסבר ב-GitHub. |
החזרת כתובת URL לעיבוד מ-generateBid()
מכיוון שאובייקט ads
מושמט מתוכן העל של המכרז ב-B&A, צריך ליצור מחדש את כתובת ה-URL לעיבוד הגרפי שמוחזרת מ-generateBid()
. אופן היצירה מחדש של כתובת ה-URL לעיבוד הוא נתון להטמעה שלכם, וכתובת ה-URL שתוחזר חייבת להתאים לכתובת ה-URL לעיבוד שהוגדרה בקבוצת האינטרסים.
אחת מהגישות האפשריות היא לשמור על כתובת URL בסיסית, ולאכלס את התבנית במידע מ-interestGroup
ומ-trustedBiddingSignals
.
בדוגמה הזו, אנחנו מגדירים 4 מודעות על סמך הצבע והמוצר:
await navigator.joinAdInterestGroup({
ads: [
{ renderURL: 'https://dsp.example/red-shirt-ad.html', adRenderId: 'arid1'},
{ renderURL: 'https://dsp.example/blue-shirt-ad.html', adRenderId: 'arid2'},
{ renderURL: 'https://dsp.example/red-pants-ad.html', adRenderId: 'arid3'},
{ renderURL: 'https://dsp.example/blue-pants-ad.html', adRenderId: 'arid4'},
],
trustedBiddingSignalKeys: [
'userBiddingSignals-someUniqueId',
// ...and more
]
})
לאחר מכן שולחים את הצבע המועדף על המשתמש ואת פרטי המוצר כדי שייטמעו בשירות המפתח/הערך:
fetch('https://dsp.example/kv/load', {
body: JSON.stringify({
'userBiddingSignals-someUniqueId': {
favoriteColor: 'blue',
favoriteProduct: 'shirt'
}
})
})
בשלב מאוחר יותר, כשהמכרז יתבצע, אותות הבידינג המהימנים יהיו זמינים ב-generateBid()
, וניתן יהיה להשתמש במידע הזה כדי לשחזר את כתובת ה-URL:
function generateBid(..., trustedBiddingSignals, browserSignals) {
const { userBiddingSignals } = trustedBiddingSignals
const { favoriteColor, favoriteProduct } = userBiddingSignals
return {
bid: 1,
render: `https://dsp.example/${favoriteColor}-${favoriteProduct}-ad.html`
}
}
החזרת מזהי דיווח מ-generateBid()
מאחר שמזהי הדיווח לא נכללים במטען הייעודי של המכרז של B&A, המזהה הופך להיות זמין ל-generateBid()
באמצעות אותות בידינג מהימנים. אחרי שנקבע איזה מזהה דיווח ישמש, מזהה הדיווח שנבחר מוחזר מ-generateBid()
. המזהים שמוחזרים חייבים להיות זהים למזהים שהוגדרו בקבוצת האינטרסים.
בדוגמה הזו, נבחרה מודעה 1 ומזהה הרינדור המשויך לה מוחזר מ-generateBid()
:
generateBid(..., trustedBiddingSignals, …) {
const { ad1ReportingId, ad2reportingId } = trustedBiddingSignals;
// ...
return {
bid: 1,
render: 'https://dsp.example/ad-1.html'
buyerReportingId: ad1reportingId
}
}
המזהה לצורכי דיווח שהוחזר יהיה זמין ב-reportWin()
עד buyerReportingSignals
:
reportWin(..., buyerReportingSignals) {
const { buyerReportingId } = buyerReportingSignals;
}
אם הערך buyerReportingId
לא מוחזר מ-generateBid()
, הערך interestGroupName
יהיה זמין ב-buyerReportingSignals
במקום ב-buyerReportingId
.
מידע נוסף זמין במדריך בנושא מזהה דיווח.
השלבים הבאים
המשאבים הבאים זמינים לכם
מידע נוסף
- מידע נוסף על הגדרות המכרזים של B&A ב-Chrome
- כדי לערוך ניסויים עם Protected Audience באמצעות בדיקות A/B, אפשר לפעול לפי ההוראות בcodelab לבדיקות מקומיות מקצה לקצה.
יש לך שאלות?
- אם יש לכם שאלה לגבי שירותי בידינג ומכרזים, אתם יכולים לפתוח פנייה במאגר של שירותי בידינג ומכרזים.
- אם יש לכם שאלה כללית לגבי ארגז החול לפרטיות, אתם יכולים לפתוח פנייה במאגר privacy-sandbox-dev-support .