입찰 서비스는 Protected Audience(PA) 입찰을 용이하게 하기 위해 신뢰할 수 있는 실행 환경(TEE)에서 실행되는 광고 구매자 및 판매자를 위한 서비스 모음입니다. 이 개발자 가이드에서는 구매자가 Chrome의 입찰 PA 입찰과 통합하는 방법을 설명합니다.
개요
B&A 서비스로 Protected Audience 입찰에 참여하기 위해 구매자는 입찰 지연 시간을 개선하기 위해 페이로드를 최적화하도록 관심분야 그룹 (IG)을 업데이트합니다.
구매자는 다음과 같은 페이로드 최적화 작업을 실행해야 합니다.
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와 기기 내 관심분야 그룹 구성의 차이점은 다음과 같습니다.
필드 | B&A IG | 기기 내 IG | 입찰 페이로드에 포함됨 |
auctionServerRequestFlags |
중고 | 사용되지 않음 | 아니요 |
userBiddingSignals |
권장하지 않음 | 중고 | 아니요(omit-user-bidding-signals 플래그가 설정된 경우) |
ads 및 adComponents 의 adRenderId |
중고 | 사용되지 않음 | omit-ads 플래그가 설정된 경우 ads 의 adRenderId 는 페이로드의 browserSignals.prevWins 에서만 사용할 수 있습니다. adComponents 에 정의된 adRenderId 가 페이로드에 포함되지 않습니다.
|
ads 및 adComponents 의 renderURL |
중고 | 중고 | 아니요 |
ads 및 adComponents 의 metadata |
사용되지 않음 | 중고 | 아니요 |
ads 의 보고 ID |
중고 | 중고 | 아니요 |
auctionServerRequestFlags
필드를 사용하면 브라우저에 입찰 페이로드에서 일부 데이터를 생략하도록 지시하는 플래그를 설정할 수 있습니다.userBiddingSignals
값은 관심분야 그룹에서 정의할 수 있지만omit-user-bidding-signals
플래그를 사용하여 생략하는 것이 좋습니다. 생략된 신호는 K/V 서비스를 사용하여 제공할 수 있습니다.adRenderId
필드는 연결된renderURL
와 함께 설정되지만adRenderId
만 입찰 페이로드의 일부가 됩니다. 나중에 입찰 시간에generateBid()
에서 반환된 렌더링 URL은 IG에 정의된 렌더링 URL과 일치해야 합니다.- 보고 ID는 입찰 서버 IG에 정의되어 있지만 입찰 서버 입찰 페이로드에는 포함되지 않습니다. 나중에 입찰 시간에
generateBid()
에서 반환된 보고 ID는 IG에 정의된 렌더링 URL과 일치해야 합니다. ad.metadata
및 보고 ID는 입찰 페이로드에 포함되지 않으며 대신 신뢰할 수 있는 키/값 서비스 사용을 통해 이러한 데이터를 사용할 수 있습니다.
ads
의 renderURL
및 보고 ID는 입찰 요청 페이로드에 포함되지 않지만 관심분야 그룹 구성에 계속 정의됩니다. 브라우저가 입찰 서비스의 generateBid()
함수에서 반환된 렌더링 URL 및 보고 ID가 관심분야 그룹에 정의된 값과 일치하는지 확인하기 때문입니다.
할 일 joinAdInterestGroup()
개
joinAdInterestGroup()
호출을 위해 다음 작업을 실행해야 합니다.
서버 요청 플래그 설정
joinAdInterestGroup()
구성의 auctionServerRequestFlags
필드는 다음 플래그를 허용합니다.
플래그 | 설명 |
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'],
});
광고 렌더링 ID 설정
입찰 서비스에서 실행되는 generateBid()
함수 내에서 이러한 객체를 사용할 수 없습니다.ads
adComponents
누락된 광고 정보를 처리하기 위해 구매자는 관심분야 그룹 구성에서 각 광고와 연결된 식별자 (adRenderId
및 adComponentRenderId
)를 유지합니다. 식별자는 길이가 12바이트 이하인 DOMString이어야 합니다. 식별자가 Base64로 인코딩된 경우 길이가 12바이트 이하여야 합니다.
광고 렌더링 ID가 있는 관심분야 그룹의 예:
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
는 generateBid()
의 prevWins.browserSignals
에서 사용할 수 있습니다.
renderURL
는 요청 페이로드에 포함되지 않지만 generateBid()
에서 반환된 렌더링 URL은 관심분야 그룹 구성에 정의된 렌더링 URL과 일치해야 합니다. 광고 기술은 trustedBiddingSignals
에서 광고 메타데이터 및 기타 정보를 다시 전송할 수 있으므로 generateBid()
실행 중에 입찰에 대한 광고 렌더링 URL과 광고 구성요소 렌더링 URL이 생성될 수 있습니다.
관심분야 그룹 우선순위 설정
Chrome을 사용하면 구매자가 관심분야 그룹의 우선순위를 지정할 수 있습니다. 판매자가 설정한 구매자별 페이로드 크기 제한에 도달하면 관심분야 그룹 우선순위 값이 판매자를 위해 B&A 입찰 페이로드가 생성될 때 단일 구매자의 우선순위가 낮은 관심분야 그룹을 삭제하는 데 사용됩니다. 여러 구매자 간에 관심분야 그룹을 선택하는 경우 브라우저는 직렬화된 페이로드의 크기를 기준으로 결정합니다. 기본적으로 각 구매자에게 동일한 크기가 할당됩니다. 실제 우선순위 지정은 요청 페이로드가 생성될 때가 아니라 B&A 서버에서 이루어집니다.
우선순위는 입찰 시 구매자의 우선순위 벡터 (priorityVector
)와 판매자의 우선순위 신호 (prioritySignals
)를 사용하여 계산됩니다. 구매자는 판매자의 우선순위 신호를 재정의할 수 있습니다.
속성 | 설명 |
우선순위 벡터 | 구매자는 벡터를 K/V 서비스의 priorityVector 키 값으로 제공합니다. |
우선순위 신호 | 판매자는 입찰 구성의 priority_signals 를 설정하여 신호를 제공합니다. |
우선순위 신호 재정의 | 구매자는 입찰 구성의 PerBuyerConfig 의 priority_signals_overrides 필드에 재정의를 제공합니다. |
입찰 중에 브라우저는 우선순위에 대해 priorityVector
및 prioritySignals
의 일치하는 키의 희소 내적을 계산합니다. 다음 다이어그램에서 우선순위는 (4 * 2) + (3 * -1)
로 계산되며 이는 8 + -3
로 감소하므로 입찰 시 이 관심분야 그룹의 우선순위는 5
입니다.

B&A에서 우선순위를 지정하는 데 사용할 수 있는 추가 신호도 있습니다.
신호 | 설명 |
deviceSignals.one |
값은 항상 1이며 내적에 상수를 추가하는 데 유용합니다. |
deviceSignals.ageInMinutes |
이 값은 관심분야 그룹의 기간(최근 관심분야 그룹 가입 후 경과 시간)을 0~43,200 사이의 정수로 나타냅니다(단위: 분). |
deviceSignals.ageInMinutesMax60 |
이 값은 ageInMinutes 신호와 동일하게 설명되지만 최대 60으로 제한됩니다. 그룹이 1시간 이상 지난 경우 60이 반환됩니다. |
deviceSignals.ageInHoursMax24 |
이 값은 관심분야 그룹의 연령을 시간으로 나타내며 최대 24시간까지 지정할 수 있습니다. 그룹이 1일 이상 지난 경우 24가 반환됩니다. |
deviceSignals.ageInDaysMax30 |
이 값은 관심분야 그룹의 기간을 일 단위로 나타내며 최대 30일입니다. 그룹이 30일 이상 지난 경우 30이 반환됩니다. |
자세한 내용은 GitHub의 설명을 참고하세요.
신뢰할 수 있는 입찰 신호 설정
일부 데이터는 입찰 입찰 페이로드에서 생략되므로 키/값 서비스를 사용하여 생략된 데이터를 신뢰할 수 있는 입찰 신호로 generateBid()
함수에 제공할 수 있습니다.
K/V 서비스에서 생략된 다음 데이터를 제공할 수 있습니다.
userBiddingSignals
(구매자가 사용한 경우)- 각 광고와 연결된
metadata
- 각 광고와 연결된
adRenderId
- 보고 ID

취할 수 있는 한 가지 방법은 신뢰할 수 있는 입찰 신호 키에 고유 식별자를 포함한 다음 키/값 서비스에 로드될 수 있도록 연결된 데이터를 서버로 전송하는 것입니다. 그러나 실제 구현은 광고 기술에 따라 다르며 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분마다 한 번 이상 관심분야 그룹을 업데이트하지 않습니다.
입찰에서 낙찰된 광고가 브라우저에 저장된 관심분야 그룹에 정의된 광고 중 하나와 일치하지 않으면 브라우저에서 입찰에 실패합니다. updateIfOlderThanMs
메커니즘은 브라우저와 B&A 입찰이 관심분야 그룹의 광고 집합에 동의하도록 하는 데 유용할 수 있습니다.
자세한 내용은 설명을 참고하세요.
할 일 generateBid()
개
generateBid()
호출을 위해 다음 작업을 실행해야 합니다.
브라우저 신호 읽기
B&A generateBid()
호출에 전달된 browserSignals
객체는 다음과 같습니다.
{
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 |
신뢰할 수 있는 서버는 선택적으로 generateBid() 에서 사용할 수 있는 숫자 Data-Version 응답 헤더를 포함할 수 있습니다.자세한 내용은 GitHub의 설명을 참고하세요. |
generateBid()
에서 렌더링 URL 반환
ads
객체는 입찰 페이로드에서 생략되므로 generateBid()
에서 반환된 렌더링 URL을 다시 만들어야 합니다. 렌더링 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()
에서 보고 ID 반환
보고 ID는 입찰 서버 입찰 페이로드에 포함되지 않으므로 신뢰할 수 있는 입찰 신호를 통해 generateBid()
에서 ID를 사용할 수 있습니다. 사용할 보고 ID가 결정되면 선택한 보고 ID가 generateBid()
에서 반환됩니다. 반환된 ID는 관심분야 그룹에 정의된 ID와 일치해야 합니다.
이 예시에서는 광고 1이 선택되고 연결된 렌더링 ID가 generateBid()
에서 반환됩니다.
generateBid(..., trustedBiddingSignals, …) {
const { ad1ReportingId, ad2reportingId } = trustedBiddingSignals;
// ...
return {
bid: 1,
render: 'https://dsp.example/ad-1.html'
buyerReportingId: ad1reportingId
}
}
반환된 보고 ID는 buyerReportingSignals
를 통해 reportWin()
에서 사용할 수 있습니다.
reportWin(..., buyerReportingSignals) {
const { buyerReportingId } = buyerReportingSignals;
}
buyerReportingId
이 generateBid()
에서 반환되지 않으면 buyerReportingSignals
에서 buyerReportingId
대신 interestGroupName
값을 사용할 수 있습니다.
자세한 내용은 보고서 ID 가이드를 참고하세요.
다음 단계
다음 리소스를 사용할 수 있습니다.
자세히 알아보기
- Chrome의 입찰 구성에 대해 자세히 알아보기
- 엔드 투 엔드 로컬 테스트 Codelab에 따라 B&A를 사용한 Protected Audience를 실험해 보세요.
궁금한 점이 있으신가요?
- 입찰 서비스에 관해 궁금한 점이 있으면 입찰 서비스 저장소에서 문제를 열어 문의하세요.
- 개인 정보 보호 샌드박스에 관한 일반적인 질문이 있는 경우 privacy-sandbox-dev-support 저장소에서 문제를 여세요.