입찰 서비스 (B&A)는 Protected Audience (PA) 입찰을 촉진하기 위해 신뢰할 수 있는 실행 환경 (TEE)에서 실행되는 광고 구매자 및 판매자를 위한 서비스 집합입니다. 이 개발자 가이드에서는 구매자가 Chrome용 B&A PA 입찰과 통합하는 방법을 설명합니다.
개요
B&A 서비스로 Protected Audience 입찰에 참여하기 위해 구매자는 관심분야 그룹 (IG)을 업데이트하여 입찰 지연 시간을 개선하도록 페이로드를 최적화합니다.
다음 페이로드 최적화 작업은 구매자가 필요로 합니다.
joinAdInterestGroup()tasksgenerateBid()tasks
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 | B&A 경매 페이로드에 포함됨 |
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필드를 사용하면 브라우저가 B&A 입찰 페이로드에서 일부 데이터를 생략하도록 지시하는 플래그를 설정할 수 있습니다.userBiddingSignals값은 관심분야 그룹에서 정의할 수 있지만omit-user-bidding-signals플래그를 사용하여 생략하는 것이 좋습니다. 누락된 신호는 K/V 서비스를 사용하여 제공할 수 있습니다.adRenderId필드는 연결된renderURL와 함께 설정되지만adRenderId만 B&A 입찰 페이로드의 일부가 됩니다. 나중에 입찰 시간에generateBid()에서 반환된 렌더링 URL은 IG에 정의된 렌더링 URL과 일치해야 합니다.- 보고 ID는 B&A IG에 정의되어 있지만 B&A 입찰 페이로드에는 포함되지 않습니다. 나중에 입찰 시간에
generateBid()에서 반환된 보고 ID는 IG에 정의된 렌더링 URL과 일치해야 합니다. ad.metadata및 보고 ID는 B&A 입찰 페이로드에 포함되지 않으며 대신 신뢰할 수 있는 키/값 서비스 사용을 통해 해당 데이터를 사용할 수 있습니다.
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 설정
B&A 입찰 페이로드의 크기를 줄이기 위해 관심분야 그룹의 ads 및 adComponents 객체가 생략되므로 입찰 서비스에서 실행되는 generateBid() 함수 내에서 이러한 객체를 사용할 수 없습니다.
누락된 광고 정보를 처리하기 위해 구매자는 관심분야 그룹 구성의 각 광고와 연결된 식별자 (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시간입니다. 그룹이 생성된 지 하루가 지났다면 24가 반환됩니다. |
deviceSignals.ageInDaysMax30 |
이 값은 관심분류군의 연령을 일수로 설명하며 최대 30일입니다. 그룹이 30일 이상 된 경우 30이 반환됩니다. |
자세한 내용은 GitHub의 설명을 참고하세요.
신뢰할 수 있는 입찰 신호 설정
일부 데이터는 B&A 입찰 페이로드에서 생략되므로 키/값 서비스를 사용하여 생략된 데이터를 신뢰할 수 있는 입찰 신호로 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분에 한 번 이상 관심분야 그룹을 업데이트하지 않습니다.
B&A 입찰에서 브라우저에 저장된 관심분야 그룹에 정의된 광고 중 하나와 일치하지 않는 낙찰 광고가 반환되면 브라우저에서 입찰에 실패합니다. 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 객체가 B&A 입찰 페이로드에서 생략되므로 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는 B&A 입찰 페이로드에 포함되지 않으므로 신뢰할 수 있는 입찰 신호를 통해 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;
}
generateBid()에서 buyerReportingId이 반환되지 않으면 interestGroupName 값은 buyerReportingId 대신 buyerReportingSignals에서 사용할 수 있습니다.
자세한 내용은 보고 ID 가이드를 참고하세요.
다음 단계
다음 리소스를 사용할 수 있습니다.
자세히 알아보기
- Chrome의 B&A 경매 구성 자세히 알아보기
- 엔드 투 엔드 로컬 테스트 Codelab에 따라 B&A로 Protected Audience를 실험합니다.
궁금한 점이 있으신가요?
- 입찰 및 경매 서비스에 관해 궁금한 점이 있으면 B&A 서비스 저장소에서 문제를 여세요.