FLEDGE API 개발자 가이드

이 도움말은 누구를 대상으로 하나요?

이 게시물은 실험용 Protected Audience API의 현재 반복 버전에 관한 기술 참고 자료입니다.

Protected Audience란 무엇인가요?

Protected Audience API는 리마케팅 및 맞춤 잠재고객 사용 사례를 제공하기 위한 개인 정보 보호 샌드박스 제안으로, 서드 파티가 사이트 전반에서 사용자 탐색 행동을 추적하는 데 사용할 수 없도록 설계되었습니다. 이 API를 사용하면 브라우저의 기기 내 입찰에서 사용자가 이전에 방문한 웹사이트와 관련성 높은 광고를 선택할 수 있습니다.

Protected Audience는 Chromium에서 TURTLEDOVE 제안서 제품군 내에서 구현되는 첫 번째 실험입니다.

아래 다이어그램은 FLEDGE 수명 주기를 간략히 보여줍니다.

FLEDGE 수명 주기의 각 단계에 관한 개요를 보여주는 그림
FLEDGE 수명 주기

Protected Audience를 사용해 보려면 어떻게 해야 하나요?

Protected Audience 데모

광고주 및 게시자 사이트 전반의 기본 Protected Audience 배포를 둘러보는 내용은 protected-audience-demo.web.app를 참고하세요.

데모 동영상에서는 데모 코드의 작동 방식을 설명하고 Protected Audience 디버깅에 Chrome DevTools를 사용하는 방법을 보여줍니다.

Protected Audience 오리진 트라이얼 참여

개인 정보 보호 샌드박스 관련성 및 측정 오리진 트라이얼이 데스크톱용 Chrome 베타 101.0.4951.26 이상에서 Protected Audience, Topics, Attribution Reporting API에 제공됩니다.

참여하려면 오리진 트라이얼 토큰에 등록하세요.

무료 체험에 등록되면 유효한 무료 체험 토큰을 제공하는 페이지에서 Protected Audience JavaScript API를 사용해 볼 수 있습니다. 예를 들어 브라우저에 하나 이상의 관심분야 그룹에 참여하도록 요청한 후 광고 입찰을 실행하여 광고를 선택하고 표시하도록 요청할 수 있습니다.

Protected Audience 데모는 엔드 투 엔드 Protected Audience 배포의 기본 예시를 제공합니다.

Protected Audience API 코드를 실행하려는 모든 페이지에 무료 체험 토큰을 제공하세요.

  • <head>에 메타 태그로 삽입:

    <meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">

  • HTTP 헤더로:

    Origin-Trial: TOKEN_GOES_HERE

  • 프로그래매틱 방식으로 토큰을 제공합니다.

    const otMeta = document.createElement('meta');
    otMeta.httpEquiv = 'origin-trial';
    otMeta.content = 'TOKEN_GOES_HERE';
    document.head.append(otMeta);
    

관심분야 그룹 소유자의 navigator.joinAdInterestGroup() 호출과 같이 Protected Audience 코드를 실행하는 iframe은 출처와 일치하는 토큰을 제공해야 합니다.

제안된 첫 번째 Protected Audience 오리진 트라이얼 세부정보는 첫 번째 시도의 목표에 대한 세부정보와 지원되는 기능을 설명합니다.

이 API 테스트

데스크톱의 Chrome 베타 101.0.4951.26 이상에서 단일 사용자에 대해 Protected Audience를 테스트할 수 있습니다.

  • chrome://settings/adPrivacy에서 모든 광고 개인 정보 보호 API를 사용 설정합니다.
  • 명령줄에서 플래그 설정

iframe 또는 분리 프레임에서 광고 렌더링

설정된 플래그에 따라 <iframe> 또는 <fencedframe>에서 광고를 렌더링할 수 있습니다.

<fencedframe>를 사용하여 광고를 렌더링하는 방법:

--enable-features=InterestGroupStorage,AdInterestGroupAPI,Fledge,FencedFrames

<iframe>를 사용하여 광고를 렌더링하는 방법:

--enable-features=InterestGroupStorage,AdInterestGroupAPI,Fledge,AllowURNsInIframes --disable-features=FencedFrames

BiddingAndScoringDebugReportingAPI 플래그를 포함하여 임시 디버그 손실/성공 보고 메서드를 사용 설정합니다.

플래그로 Chromium 실행에서는 명령줄에서 Chrome 및 기타 Chromium 기반 브라우저를 실행할 때 플래그를 설정하는 방법을 설명합니다. Protected Audience 플래그의 전체 목록은 Chromium 코드 검색에서 확인할 수 있습니다.

최신 버전의 Chrome에서 지원되는 기능은 무엇인가요?

Protected Audience는 Protected Audience 제안서의 다음 기능을 테스트하기 위한 첫 번째 실험으로 Chromium의 기능 플래그 뒤에 제공됩니다.

  • 관심분야 그룹: 브라우저에 의해 저장되며, 광고 입찰 및 렌더링을 구성하기 위해 관련 메타데이터와 함께 저장됩니다.
  • 구매자별 기기 내 입찰 (DSP 또는 광고주): 저장된 관심분야 그룹 및 판매자의 신호를 기반으로 합니다.
  • 판매자 (SSP 또는 게시자)의 기기 내 광고 선택: 입찰 입찰가 및 구매자의 메타데이터를 기반으로 합니다.
  • 일시적으로 완화된 버전의 펜스 프레임(Fenced Frames)에서 광고 렌더링: 광고 렌더링에 네트워크 액세스 및 로깅이 허용됩니다.

API 설명에서는 기능 지원 및 제약 조건을 자세히 설명합니다.

관심분야 그룹 권한

현재 Protected Audience 구현의 기본값은 교차 도메인 iframe에서도 페이지 내 모든 위치에서 joinAdInterestGroup() 호출을 허용하는 것입니다. 향후 사이트 소유자가 교차 도메인 iframe 권한 정책을 조정할 시간이 생기면 설명에서 설명한 대로 교차 도메인 iframe의 호출을 허용하지 않을 계획입니다.

키/값 서비스

Protected Audience 광고 입찰의 일환으로 브라우저에서는 간단한 키-값 쌍을 반환하는 키/값 서비스에 액세스하여 잔여 캠페인 예산과 같은 정보를 광고 구매자에게 제공할 수 있습니다. Protected Audience 제안서에서는 이 서버가 '이벤트 수준 로깅을 실행하지 않고 이러한 요청에 기반한 다른 부작용이 없도록' 명령합니다.

이제 개인 정보 보호 샌드박스 GitHub 저장소에서 Protected Audience 키/값 서비스 코드를 사용할 수 있습니다. 이 서비스는 Chrome 및 Android 개발자가 사용할 수 있습니다. 상태 업데이트는 공지사항 블로그 게시물을 확인하세요. API 설명신뢰 모델 설명에서 Protected Audience 키/값 서비스에 관해 자세히 알아보세요.

초기 테스트에는 'Bring Your Own Server' 모델이 사용됩니다. 장기적으로 광고 기술은 실시간 데이터를 가져오기 위해 신뢰할 수 있는 실행 환경에서 실행되는 오픈소스 Protected Audience 키/값 서비스를 사용해야 합니다.

생태계에 충분한 테스트 시간을 확보하기 위해 서드 파티 쿠키가 지원 중단되기 전까지는 오픈소스 키/값 서비스(TEE) 사용을 요구하지 않을 것으로 예상됩니다. Google에서는 이 전환이 진행되기 전에 개발자에게 테스트와 채택을 시작하도록 충분히 공지할 예정입니다.

기능 지원 감지

API를 사용하기 전에 브라우저에서 API를 지원하고 문서에서 사용할 수 있는지 확인하세요.

'joinAdInterestGroup' in navigator &&
  document.featurePolicy.allowsFeature('join-ad-interest-group') &&
  document.featurePolicy.allowsFeature('run-ad-auction') ?
  console.log('navigator.joinAdInterestGroup() is supported on this page') :
  console.log('navigator.joinAdInterestGroup() is not supported on this page');

Protected Audience를 선택 해제하려면 어떻게 해야 하나요?

사이트 소유자 또는 개별 사용자가 Protected Audience API에 대한 액세스를 차단할 수 있습니다.

사이트에서 액세스를 어떻게 제어할 수 있나요?

Protected Audience는 향후 Protected Audience 기능을 사용할 수 있도록 사이트에서 권한 정책을 설정하도록 요구합니다. 이렇게 하면 임의의 제3자가 사이트 없이는 API를 사용할 수 없습니다. 하지만 첫 번째 오리진 트라이얼 동안 테스트를 용이하게 하기 위해 이 요구사항은 기본적으로 면제됩니다. 테스트 기간 동안 Protected Audience 기능을 명시적으로 사용 중지하려는 사이트는 관련 권한 정책을 사용하여 액세스를 차단할 수 있습니다.

독립적으로 설정할 수 있는 두 가지 Protected Audience 권한 정책이 있습니다.

  • join-ad-interest-group에서 관심분야 그룹에 브라우저를 추가하는 기능을 사용 설정/사용 중지합니다.
  • run-ad-auction는 기기 내 입찰을 실행하는 기능을 사용 설정/사용 중지합니다.

HTTP 응답 헤더에 다음 권한 정책을 지정하여 퍼스트 파티 컨텍스트에서 Protected Audience API에 대한 액세스를 완전히 사용 중지할 수 있습니다.

Permissions-Policy: join-ad-interest-group=(), run-ad-auction=()

iframe 요소에 다음 allow 속성을 추가하여 iframe에서 API를 사용 중지할 수 있습니다.

<iframe src="https://example.com" allow="join-ad-interest-group 'none'; run-ad-auction 'none'"></iframe>

자세한 내용은 제안된 첫 번째 Protected Audience 오리진 트라이얼 권한 정책 섹션을 참고하세요.

사용자 선택 해제

사용자는 다음 메커니즘 중 하나를 사용하여 Protected Audience API 및 기타 개인 정보 보호 샌드박스 기능에 대한 액세스를 차단할 수 있습니다.

  • Chrome 설정에서 개인 정보 보호 샌드박스 무료 체험 사용 중지: 설정 > 보안 및 개인 정보 보호 > 개인 정보 보호 샌드박스 chrome://settings/adPrivacy에서도 액세스할 수 있습니다.
  • Chrome 설정에서 서드 파티 쿠키 사용 중지: 설정 > 보안 및 개인 정보 보호
  • chrome://settings/cookies쿠키 및 기타 사이트 데이터를 '서드 파티 쿠키 차단' 또는 '모든 쿠키 차단'으로 설정합니다.
  • 시크릿 모드를 사용합니다.

Protected Audience 설명에서는 API 설계 요소에 관한 자세한 내용을 제공하고 API가 개인 정보 보호 목표를 달성하는 방법을 설명합니다.

Protected Audience 워크릿 디버그

Chrome Canary 98.0.4718.0부터 Chrome DevTools 내에서 Protected Audience 워크렛을 디버그할 수 있습니다.

첫 번째 단계는 Sources 패널의 Event Listener Breakpoints 창에서 새 카테고리를 통해 중단점을 설정하는 것입니다.

Sources 패널의 Event Listener Breakpoints 창이 강조 표시된 Chrome Canary의 DevTools 스크린샷
   광고 입찰 Worklet에서 입찰자 입찰 단계 시작이 선택되었습니다.

중단점이 트리거되면 Worklet 스크립트의 최상위 수준에서 첫 번째 문 전에 실행이 일시중지됩니다. 일반 중단점 또는 단계 명령어를 사용하여 입찰/점수/보고 함수 자체로 이동할 수 있습니다.

라이브 Worklet 스크립트도 Threads 패널 아래에 표시됩니다.

Chrome Canary의 DevTools 스크린샷으로, Sources 패널의 Threads 창이 강조 표시되어 있고, 일시중지된 현재 Worklet 스크립트가 표시되어 있습니다.

일부 워크릿이 병렬로 실행될 수 있으므로 여러 스레드가 '일시중지됨' 상태로 끝날 수 있습니다. 스레드 목록을 사용하여 스레드 간에 전환하고 적절하게 재개하거나 더 면밀하게 검사할 수 있습니다.

Protected Audience 이벤트 관찰

Chrome DevTools의 애플리케이션 패널에서 Protected Audience 관심분야 그룹 및 입찰 이벤트를 관찰할 수 있습니다.

Protected Audience가 사용 설정된 브라우저에서 Protected Audience 데모 쇼핑 사이트를 방문하면 DevTools에 join 이벤트에 관한 정보가 표시됩니다.

Protected Audience 관심분야 그룹 가입 이벤트에 관한 정보가 표시된 Chrome Canary의 DevTools Application 패널

이제 Protected Audience가 사용 설정된 브라우저에서 Protected Audience 데모 게시자 사이트를 방문하면 DevTools에 bidwin 이벤트에 관한 정보가 표시됩니다.

Protected Audience 입찰 입찰 및 낙찰 이벤트에 관한 정보가 표시된 Chrome Canary의 DevTools Application 패널

Protected Audience API는 어떻게 작동하나요?

이 예시에서는 사용자가 커스텀 자전거 제조업체의 웹사이트를 둘러본 후 나중에 뉴스 웹사이트를 방문하고 자전거 제조업체의 새 자전거 광고를 보게 됩니다.

1. 사용자가 광고주 사이트를 방문합니다.

노트북의 브라우저로 맞춤 자전거 제조업체 사이트를 방문하는 사람을 보여주는 그림

사용자가 커스텀 자전거 제조업체 (이 예에서는 광고주)의 웹사이트를 방문하여 수제 스틸 자전거의 제품 페이지에서 시간을 보낸다고 가정해 보겠습니다. 이를 통해 자전거 제조사는 리마케팅 기회를 얻을 수 있습니다.

2. 사용자의 브라우저에 관심분야 그룹을 추가하라는 메시지가 표시됨

노트북으로 브라우저로 사이트를 보고 있는 사람을 보여주는 삽화 JavaScript 코드 joinAdInterestGroup()이 브라우저에서 실행되고 있습니다.

설명 섹션: 브라우저는 관심분야 그룹을 기록함

광고주의 수요측 플랫폼 (DSP) (또는 광고주 자체)은 navigator.joinAdInterestGroup()를 호출하여 브라우저가 속한 그룹 목록에 관심분야 그룹을 추가하도록 브라우저에 요청합니다. 이 예시에서 그룹 이름은 custom-bikes이고 소유자는 dsp.example입니다. 관심분야 그룹 소유자 (이 경우 DSP)는 4단계에서 설명하는 광고 입찰의 구매자가 됩니다. 관심분야 그룹 멤버십은 브라우저와 사용자 기기에 저장되며 브라우저 공급업체 또는 다른 누구와도 공유되지 않습니다.

joinAdInterestGroup()에 다음 권한이 필요합니다.

  • 방문 중인 사이트
  • 관심분야 그룹 소유자

예를 들어 malicious.exampledsp.example의 권한 없이 dsp.example를 소유자로 하여 joinAdInterestGroup()를 호출할 수 없어야 합니다.

방문 중인 사이트의 권한

동일한 출처: 기본적으로 방문 중인 사이트와 동일한 출처(즉, 현재 페이지의 최상위 프레임과 동일한 출처)의 joinAdInterestGroup() 호출에 대한 권한이 암시적으로 부여됩니다. 사이트에서 Protected Audience 권한 정책 헤더 join-ad-interest-group 지시어를 사용하여 joinAdInterestGroup() 호출을 사용 중지할 수 있습니다.

교차 출처: 현재 페이지와 다른 출처의 joinAdInterestGroup() 호출은 방문 중인 사이트에 교차 출처 iframe에서 joinAdInterestGroup() 호출을 허용하는 권한 정책을 설정한 경우에만 성공할 수 있습니다.

관심분야 그룹 소유자의 권한

관심분야 그룹 소유자 권한은 관심분야 그룹 소유자와 동일한 출처의 iframe에서 joinAdInterestGroup()를 호출하여 암시적으로 부여됩니다. 예를 들어 dsp.example iframe은 dsp.example에서 소유한 관심분야 그룹에 대해 joinAdInterestGroup()를 호출할 수 있습니다.

제안은 joinAdInterestGroup()를 소유자 도메인의 페이지 또는 iframe에서 실행하거나 .well-known URL의 목록을 사용하여 제공된 다른 도메인으로 위임할 수 있다는 것입니다.

navigator.joinAdInterestGroup() 사용

다음은 API를 사용하는 방법의 예입니다.

const interestGroup = {
  owner: 'https://dsp.example',
  name: 'custom-bikes',
  biddingLogicUrl: ...,
  biddingWasmHelperUrl: ...,
  dailyUpdateUrl: ...,
  trustedBiddingSignalsUrl: ...,
  trustedBiddingSignalsKeys: ['key1', 'key2'],
  userBiddingSignals: {...},
  ads: [bikeAd1, bikeAd2, bikeAd3],
  adComponents: [customBike1, customBike2, bikePedal, bikeFrame1, bikeFrame2],
};

navigator.joinAdInterestGroup(interestGroup, 7 * kSecsPerDay);

함수에 전달되는 interestGroup 객체의 크기는 50KiB 이하여야 하며, 그렇지 않으면 호출이 실패합니다. 두 번째 매개변수는 관심분야 그룹의 기간을 30일로 제한합니다. 연속적인 호출은 이전에 저장된 값을 덮어씁니다.

관심분야 그룹 속성

속성 필수 예시 역할
owner 필수 'https://dsp.example' 관심분야 그룹 소유자의 출처입니다.
name 필수 'custom-bikes' 관심분야 그룹의 이름입니다.
biddingLogicUrl** 선택사항* 'https://dsp.example/bid/custom-bikes/bid.js' Worklet에서 실행되는 입찰 JavaScript의 URL입니다.
biddingWasmHelperUrl** 선택사항* 'https://dsp.example/bid/custom-bikes/bid.wasm' biddingLogicUrl에서 구동되는 WebAssembly 코드의 URL
dailyUpdateUrl** 선택사항 'https://dsp.example/bid/custom-bikes/update' JSON을 반환하여 관심분야 그룹 속성을 업데이트하는 URL입니다. 관심분야 그룹 업데이트를 참고하세요.
trustedBiddingSignalsUrl** 선택사항 'https://dsp.example/trusted/bidding-signals' 입찰자의 신뢰할 수 있는 서버에 대한 키-값 요청의 기본 URL입니다.
trustedBiddingSignalsKeys 선택사항 ['key1', 'key2' ...] 키-값 신뢰할 수 있는 서버에 대한 요청의 키입니다.
userBiddingSignals 선택사항 {...} 소유자가 입찰 중에 사용할 수 있는 추가 메타데이터입니다.
ads 선택사항* [bikeAd1, bikeAd2, bikeAd3] 이 관심분야 그룹에 대해 렌더링할 수 있는 광고입니다.
adComponents 선택사항 [customBike1, customBike2, bikePedal, bikeFrame1, bikeFrame2] 여러 부분으로 구성된 광고의 구성요소입니다.

* ownername를 제외한 모든 속성은 선택사항입니다. biddingLogicUrlads 속성은 선택사항이지만 입찰에 참여하려면 필수입니다. 이러한 속성 없이 관심분야 그룹을 만드는 사용 사례가 있을 수 있습니다. 예를 들어 관심분야 그룹 소유자가 아직 운영되지 않는 캠페인의 관심분야 그룹에 브라우저를 추가하려고 하거나, 향후 다른 용도로 사용할 경우, 광고 예산이 일시적으로 소진되었을 수 있습니다.

** biddingLogicUrl, biddingWasmHelperUrl, dailyUpdateUrl, trustedBiddingSignalsUrl URL의 출처는 소유자와 동일해야 합니다. adsadComponents URL에는 이러한 제약 조건이 없습니다.

관심분야 그룹 속성 업데이트

dailyUpdateUrl는 관심분야 그룹 속성을 정의하는 JSON을 반환하는 웹 서버를 지정합니다. 이 속성은 navigator.joinAdInterestGroup()에 전달된 관심분야 그룹 객체에 해당합니다. 이는 그룹 소유자가 관심분야 그룹의 속성을 주기적으로 업데이트할 수 있는 메커니즘을 제공합니다. 현재 구현에서는 다음 속성을 변경할 수 있습니다.

  • biddingLogicUrl
  • biddingWasmHelperUrl
  • trustedBiddingSignalsUrl
  • trustedBiddingSignalsKeys
  • ads
  • priority

JSON에서 지정되지 않은 필드는 덮어쓰지 않고 JSON에서 지정된 필드만 업데이트됩니다. navigator.joinAdInterestGroup()를 호출하면 기존 관심분야 그룹을 덮어씁니다.

업데이트는 최선의 방법이며 다음과 같은 조건에서 실패할 수 있습니다.

  • 네트워크 요청 제한 시간 (현재 30초)
  • 기타 네트워크 오류입니다.
  • JSON 파싱에 실패했습니다.

업데이트에 너무 많은 시간이 소요된 경우에도 업데이트를 취소할 수 있습니다. 다만 취소된 (남은) 업데이트에 비율 제한이 적용되지는 않습니다. 업데이트 비율은 하루에 최대 1회로 제한됩니다. 네트워크 오류로 인해 실패한 업데이트는 1시간 후에 재시도되며, 인터넷 연결이 끊겨 실패한 업데이트는 재연결 시 즉시 재시도됩니다.

수동 업데이트

현재 프레임의 출처가 소유한 관심분야 그룹의 업데이트는 navigator.updateAdInterestGroups()를 통해 수동으로 트리거할 수 있습니다. 비율 제한을 사용하면 업데이트가 너무 자주 발생하는 것을 방지할 수 있습니다. navigator.updateAdInterestGroups()의 반복 호출은 비율 제한 기간 (현재 1일)이 지날 때까지 아무 작업도 하지 않습니다. 동일한 관심분야 그룹 ownername에 대해 navigator.joinAdInterestGroup()를 다시 호출하면 비율 한도가 재설정됩니다.

자동 업데이트

입찰을 위해 로드된 모든 관심분야 그룹은 입찰이 완료된 후 자동으로 업데이트되며 수동 업데이트와 동일한 비율 제한이 적용됩니다. 입찰에 참여하는 관심분야 그룹이 하나 이상 있는 각 소유자의 경우 이는 출처가 해당 소유자와 일치하는 iframe에서 navigator.updateAdInterestGroups()가 호출되는 것과 같습니다.

관심분야 그룹에 광고 지정하기

adsadComponents 객체에는 광고 소재의 URL과 입찰 시 사용할 수 있는 임의 메타데이터(선택사항)가 포함됩니다. 예를 들면 다음과 같습니다.

{
  renderUrl: 'https://cdn.example/.../bikeAd1.html',
  metadata: bikeAd1metadata // optional
}

구매자는 어떻게 입찰하나요?

관심분야 그룹 소유자가 제공한 biddingLogicUrl의 스크립트는 generateBid() 함수를 포함해야 합니다. 광고 공간 판매자가 navigator.runAdAuction()를 호출하면 관심분야 그룹 소유자가 입찰에 초대받은 경우 브라우저가 속한 관심분야 그룹별로 generatedBid() 함수가 한 번씩 호출됩니다. 즉, generateBid()는 각 조합 광고에 한 번씩 호출됩니다. 판매자는 navigator.runAdAuction()에 전달된 입찰 구성 매개변수에 decisionLogicUrl 속성을 제공합니다. 이 URL의 코드에는 generateBid()에서 반환된 각 입찰에 점수를 매기기 위해 입찰에서 각 입찰자에 대해 실행되는 scoreAd() 함수가 포함되어야 합니다.

광고 공간 구매자가 제공한 biddingLogicUrl의 스크립트는 generateBid() 함수를 포함해야 합니다. 이 함수는 각 조합 광고에 대해 한 번씩 호출됩니다. runAdAuction()는 각 광고와 연결된 입찰 및 메타데이터를 개별적으로 확인한 후 광고에 호감도 점수를 수치로 할당합니다.

generateBid(interestGroup, auctionSignals, perBuyerSignals,
    trustedBiddingSignals, browserSignals) {
  ...
  return {
    ad: adObject,
    bid: bidValue,
    render: renderUrl,
    adComponents: [adComponentRenderUrl1, ...]
   };
}

generateBid()는 다음 인수를 사용합니다.

  • interestGroup
    광고 구매자가 joinAdInterestGroup()에 전달한 객체입니다. 관심분야 그룹은 dailyUpdateUrl를 통해 업데이트될 수 있습니다.

  • auctionSignals
    광고 공간 판매자navigator.runAdAuction()에 전달하는 입찰 구성 인수의 속성입니다. 페이지 컨텍스트 (예: 광고 크기 및 게시자 ID), 입찰 유형 (단일 가격 또는 2순위 가격), 기타 메타데이터에 관한 정보를 제공합니다.

  • perBuyerSignals
    auctionSignals와 마찬가지로 판매자가 navigator.runAdAuction()에 전달한 입찰 구성 인수의 속성입니다. 판매자가 구매자 서버에 대해 실시간 입찰 호출을 실행하고 응답을 다시 파이핑하는 SSP이거나 게시자 페이지가 구매자의 서버에 직접 연결되는 경우, 이를 통해 구매자 서버에서 페이지에 관한 문맥 신호를 제공할 수 있습니다. 이러한 경우 구매자는 변조 방지를 위해 generateBid() 내에서 이러한 신호의 암호화 서명을 확인하는 것이 좋습니다.

  • trustedBiddingSignals
    키가 관심분야 그룹의 trustedBiddingSignalsKeys이고 값이 trustedBiddingSignals 요청에서 반환되는 객체입니다.

  • browserSignals
    브라우저에서 생성한 객체로, 페이지 컨텍스트에 관한 정보 (예: 판매자가 가짜일 수 있는 현재 페이지의 hostname) 및 관심분야 그룹 자체에 관한 데이터 (예: 기기 내 최대 게재빈도 설정을 위해 그룹이 이전에 낙찰된 시기의 기록)를 포함할 수 있습니다.

browserSignals 객체에는 다음과 같은 속성이 있습니다.

{
  topWindowHostname: 'publisher.example',
  seller: 'https://ssp.example',
  joinCount: 3,
  bidCount: 17,
  prevWins: [[time1,ad1],[time2,ad2],...],
  wasmHelper: ... /* WebAssembly.Module object based on interest group's biddingWasmHelperUrl. */
  dataVersion: 1, /* Data-Version value from the buyer's Key/Value service response(s). */
}

generateBid()의 코드는 bid 값을 계산하기 위해 함수 매개변수의 속성을 사용할 수 있습니다. 예를 들면 다음과 같습니다.

function generateBid(interestGroup, auctionSignals, perBuyerSignals,
    trustedBiddingSignals, browserSignals) {
  return {
    ...
    bid: auctionSignals.is_above_the_fold ? perBuyerSignals.atf_value : perBuyerSignals.btf_value,
    ...
  }
}

generateBid()는 다음 4가지 속성이 있는 객체를 반환합니다.

  • ad
    광고에 대한 임의의 메타데이터(예: 판매자가 이 입찰 또는 광고 소재에 관해 학습할 것으로 예상하는 정보) 판매자](/privacy-sandbox/resources/glossary#ssp)는 입찰 및 결정 광고 소재에 이 정보를 사용합니다. 판매자는 이 정보를 입찰 및 결정 로직에서 사용합니다.

  • bid
    입찰에 참여할 숫자로 된 입찰가입니다. 판매자는 다양한 구매자의 입찰가를 비교할 수 있는 위치에 있어야 하므로 입찰가는 판매자가 선택한 일부 단위(예: '1, 000달러(USD)')여야 합니다. 입찰가가 0이거나 음수이면 이 관심분야 그룹은 판매자의 입찰에 전혀 참여하지 않습니다. 이 메커니즘을 통해 구매자는 광고 게재 여부에 대한 광고주 규칙을 구현할 수 있습니다.

  • render
    입찰에서 낙찰된 경우 광고 소재를 렌더링하는 데 사용되는 URL 또는 URL 목록입니다. (API 설명에서 여러 부분으로 구성된 광고를 참고하세요.) 이 값은 관심분야 그룹에 정의된 광고 중 하나의 renderUrl와 일치해야 합니다.

  • adComponents
    navigator.joinAdInterestGroup()에 전달된 관심분야 그룹 인수의 adComponents 속성에서 가져온 여러 부분으로 구성된 광고를 위한 최대 20개의 구성요소(선택사항) 목록입니다.

브라우저에 관심분야 그룹 탈퇴 요청

관심분야 그룹 소유자는 관심분야 그룹에서 브라우저를 삭제하도록 요청할 수 있습니다. 즉, 브라우저에는 속한 그룹의 목록에서 관심분야 그룹을 삭제하라는 메시지가 표시됩니다.

navigator.leaveAdInterestGroup({
  owner: 'https://dsp.example',
  name: 'custom-bikes'
});

사용자가 브라우저에 관심분야 그룹 추가를 요청한 사이트를 다시 방문하면 관심분야 그룹 소유자는 navigator.leaveAdInterestGroup() 함수를 호출하여 브라우저에 관심분야 그룹을 삭제하도록 요청할 수 있습니다. 광고 코드는 관심분야 그룹에 대해서도 이 함수를 호출할 수 있습니다.

3. 사용자가 광고 공간을 판매하는 사이트를 방문합니다.

노트북의 브라우저로 뉴스 웹사이트를 방문하는 사람을 보여주는 삽화 사이트에
  빈 광고 슬롯이 있습니다.

나중에 사용자는 광고 공간을 판매하는 사이트(이 예에서는 뉴스 웹사이트)를 방문합니다. 이 사이트에는 실시간 입찰을 사용하여 프로그래매틱 방식으로 판매하는 광고 인벤토리가 있습니다.

4. 광고 입찰은 브라우저에서 실행됩니다.

노트북으로 브라우저에서 뉴스 웹사이트를 보고 있는 사람을 보여주는 삽화 Protected Audience API를 사용하는 광고 입찰이 진행 중입니다.

설명 섹션: 판매자가 기기 내 입찰 진행

광고 입찰은 게시자의 SSP에 의해 또는 게시자에 의해 실행될 가능성이 높습니다. 입찰의 목적은 현재 페이지에서 사용 가능한 단일 광고 슬롯에 가장 적합한 광고를 선택하는 것입니다. 입찰에서는 광고 공간 구매자 및 키/값 서비스의 판매자와 함께 브라우저가 속한 관심분야 그룹을 고려합니다.

광고 공간 판매자navigator.runAdAuction()를 호출하여 광고 입찰을 시작하도록 사용자의 브라우저에 요청합니다.

예를 들면 다음과 같습니다.

const auctionConfig = {
  seller: 'https://ssp.example',
  decisionLogicUrl: ...,
  trustedScoringSignalsUrl: ...,
  interestGroupBuyers: ['https://dsp.example', 'https://buyer2.example', ...],
  auctionSignals: {...},
  sellerSignals: {...},
  sellerTimeout: 100,
  perBuyerSignals: {
    'https://dsp.example': {...},
    'https://another-buyer.example': {...},
    ...
  },
  perBuyerTimeouts: {
    'https://dsp.example': 50,
    'https://another-buyer.example': 200,
    '*': 150,
    ...
  },
  componentAuctions: [
    {
      'seller': 'https://some-other-ssp.example',
      'decisionLogicUrl': ...,
      ...
    },
    ...
  ]
};

const auctionResultPromise = navigator.runAdAuction(auctionConfig);

runAdAuction()는 광고 입찰 결과를 나타내는 URN (urn:uuid:<something>)으로 확인되는 프로미스를 반환합니다. 이는 렌더링을 위해 분리 프레임으로 전달될 때만 브라우저에서 디코딩될 수 있습니다. 게시자 페이지는 낙찰된 광고를 검사할 수 없습니다.

decisionLogicUrl 스크립트는 각 개별 광고와 연결된 입찰 및 메타데이터를 한 번에 하나씩 고려한 다음 바람직한 수치 점수를 할당합니다.

숙박 시설 auctionConfig

속성 필수 예시 역할
seller 필수 'https://ssp.example' 판매자의 출발지입니다.
decisionLogicUrl 필수 'https://ssp.example/auction-decision-logic.js' 입찰 Worklet JavaScript의 URL입니다.
trustedScoringSignalsUrl 선택사항 'https://ssp.example/scoring-signals' 판매자의 신뢰할 수 있는 서버 URL입니다.
interestGroupBuyers* 필수 ['https://dsp.example', 'https://buyer2.example', ...] 입찰에 입찰하도록 요청된 모든 관심분야 그룹 소유자의 출처입니다.
auctionSignals 선택사항 {...} 페이지 문맥, 입찰 유형 등에 대한 판매자 정보
sellerSignals 선택사항 {...} 게시자 설정, 문맥 광고 요청 등에 기반한 정보입니다.
sellerTimeout 선택사항 100 판매자 scoreAd() 스크립트의 최대 런타임 (밀리초)입니다.
perBuyerSignals 선택사항 {'https://dsp.example': {...},
  'https://another-buyer.example': {...},
...}
서버에서 각 특정 구매자를 위한 페이지에 대한 문맥 시그널
perBuyerTimeouts 선택사항 50 특정 구매자의 generateBid() 스크립트의 최대 런타임 (밀리초)입니다.
componentAuctions 선택사항 [{'seller': 'https://www.some-other-ssp.com',
  'decisionLogicUrl': ..., ...},
  ...]
구성요소 입찰의 추가 구성

* 판매자는 모든 관심분야 그룹이 입찰할 수 있도록 interestGroupBuyers: '*'를 지정할 수 있습니다. 그런 다음 관심분야 그룹 소유자 포함 이외의 기준에 따라 광고가 승인되거나 거부됩니다. 예를 들어 판매자는 광고 소재를 검토하여 정책을 준수하는지 확인할 수 있습니다.

** additionalBids는 현재 Protected Audience의 구현에서 지원되지 않습니다. 자세한 내용은 Protected Audience 설명의 입찰 참여자 섹션을 참고하세요.

광고는 어떻게 선택되나요?

decisionLogicUrl의 코드 (runAdAuction()에 전달된 입찰 구성 객체의 속성)에는 scoreAd() 함수가 포함되어야 합니다. 이러한 확인은 각 광고에 한 번씩 실행되어 타당성을 판단합니다.

scoreAd(adMetadata, bid, auctionConfig, trustedScoringSignals, browserSignals) {
  ...
  return desirabilityScoreForThisAd;
}

scoreAd()는 다음 인수를 사용합니다.

  • adMetadata
    구매자가 제공하는 임의의 메타데이터입니다.
  • bid
    숫자 입찰가입니다.
  • auctionConfig
    navigator.runAdAuction()에 전달되는 입찰 구성 객체입니다.
  • trustedScoringSignals
    입찰 시 판매자의 신뢰할 수 있는 서버에서 가져온 값으로, 광고에 대한 판매자의 의견을 나타냅니다.
  • browserSignals
    브라우저가 알고 있고 판매자의 입찰 스크립트에서 확인할 수 있는 정보를 포함하는 브라우저에서 생성하는 객체입니다.
{
  topWindowHostname: 'publisher.example',
  interestGroupOwner: 'https://dsp.example',
  renderUrl: 'https://cdn.example/render',
  adComponents: ['https://cdn.com/ad-component-1', ...],
  biddingDurationMsec: 12,
  dataVersion: 1 /* Data-Version value from the seller's Key/Value service response. */
}

판매자는 입찰이 시작되기 전에 사용 가능한 광고 슬롯에 가장 적합한 문맥 광고를 찾습니다. scoreAd() 로직의 일부는 문맥 최우수 조합을 이길 수 없는 광고를 거부하는 것입니다.

5. 판매자와 참여 구매자가 키/값 서비스에서 실시간 데이터를 수신합니다.

노트북으로 브라우저에서 뉴스 웹사이트를 보고 있는 사람을 보여주는 삽화 Protected Audience API를 사용하는 광고 입찰이 진행되고, 참여자가 키/값 서비스에서 데이터를 가져옵니다.

설명자 섹션: Protected Audience 키/값 서비스에서 실시간 데이터 가져오기.

광고 입찰 중에 광고 공간 판매자navigator.runAdAuction()에 전달된 입찰 구성 인수의 trustedScoringSignalsUrl 속성과 입찰에 포함된 모든 관심분야 그룹의 adsadComponents 필드에 있는 모든 항목의 renderUrl 속성 키를 사용하여 키/값 서비스에 요청을 보내 특정 광고 소재에 관한 실시간 데이터를 가져올 수 있습니다.

마찬가지로 광고 공간 구매자navigator.joinAdInterestGroup()에 전달된 관심분야 그룹 인수의 trustedBiddingSignalsUrltrustedBiddingSignalsKeys 속성을 사용하여 키/값 서비스에서 실시간 데이터를 요청할 수 있습니다.

runAdAuction()가 호출되면 브라우저에서는 각 광고 구매자의 신뢰할 수 있는 서버에 요청을 보냅니다. 이 요청의 URL은 다음과 같습니다.

https://kv-service.example/getvalues?hostname=publisher.example&keys=key1,key2
  • 기본 URL은 trustedBiddingSignalsUrl에서 가져옵니다.
  • hostname는 브라우저에서 제공합니다.
  • keys 값은 trustedBiddingSignalsKeys에서 가져옵니다.

이 요청에 대한 응답은 각 키에 대한 값을 제공하는 JSON 객체입니다.

6. 낙찰된 광고가 표시됩니다.

노트북으로 브라우저에서 뉴스 웹사이트를 보고 있는 사람을 보여주는 삽화 자전거 광고 (20% 할인)가 표시됩니다. 위에 자물쇠가 표시되어 분리 프레임에 광고가 표시된다는 것을 나타냅니다.

설명 섹션: 브라우저는 낙찰된 광고를 렌더링함

앞에서 설명한 것처럼 runAdAuction()에서 반환된 프로미스는 URN으로 확인되어 렌더링을 위해 분리 프레임에 전달되고 사이트는 낙찰된 광고를 표시합니다.

7. 입찰 결과가 보고됩니다.

설명 동영상 섹션: 이벤트 수준 보고 (현재)

판매자 보고서 결과

설명 섹션: 렌더링에 대한 판매자 보고

decisionLogicUrl에서 제공된 판매자의 JavaScript (scoreAd()도 제공함)에는 reportResult() 함수를 포함하여 입찰 결과를 보고할 수 있습니다.

reportResult(auctionConfig, browserSignals) {
  ...
  return signalsForWinner;
}

이 함수에 전달되는 인수는 다음과 같습니다.

  • auctionConfig
    navigator.runAdAuction()에 전달되는 입찰 구성 객체입니다.

  • browserSignals
    입찰에 대한 정보를 제공하여 브라우저에서 생성한 객체입니다. 예를 들면 다음과 같습니다.

    {
      'topWindowHostname': 'publisher.example',
      'interestGroupOwner': 'https://dsp.example',
      'renderUrl': 'https://cdn.example/url-of-winning-creative.wbn',
      'bid:' <bidValue>,
      'desirability': <winningAdScore>
    }
    

이 함수의 반환 값은 낙찰자의 reportWin() 함수에 대한 sellerSignals 인수로 사용됩니다.

낙찰자 보고서 결과

설명 섹션: 렌더링 및 광고 이벤트에 대한 구매자 보고

낙찰자의 JavaScript (generateBid()도 제공함)는 reportWin() 함수를 포함하여 입찰 결과를 보고할 수 있습니다.

reportWin(auctionSignals, perBuyerSignals, sellerSignals, browserSignals) {
  ...
}

이 함수에 전달되는 인수는 다음과 같습니다.

  • auctionSignalsperBuyerSignals
    낙찰되는 입찰자의 generateBid()에 동일한 값이 전달됩니다.
  • sellerSignals
    reportResult()의 반환 값으로, 판매자가 구매자에게 정보를 전달할 수 있는 기회를 제공합니다.
  • browserSignals
    입찰에 대한 정보를 제공하여 브라우저에서 생성한 객체입니다. 예를 들면 다음과 같습니다.

    {
      'topWindowHostname': 'publisher.example',
      'seller': 'https://ssp.example',
      'interestGroupOwner': 'https://dsp.example',
      'interestGroupName': 'custom-bikes',
      'renderUrl': 'https://cdn.example/winning-creative.wbn',
      'bid:' <bidValue>
    }
    

일시적인 손실/낙찰 보고 구현

일시적으로 Chrome에서 입찰 보고를 위해 다음 두 가지 방법을 사용할 수 있습니다.

  • forDebuggingOnly.reportAdAuctionLoss()
  • forDebuggingOnly.reportAdAuctionWin()

이러한 메서드는 각각 입찰이 완료된 후 가져올 URL인 단일 인수를 사용합니다. scoreAd()generateBid()에서 서로 다른 URL 인수를 사용하여 여러 번 호출할 수 있습니다.

Chrome은 입찰이 완료될 때까지만 디버그 손실/낙찰 보고서를 전송합니다. 입찰이 취소되면 (예: 새 탐색으로 인해) 보고서가 생성되지 않습니다.

이 방법은 Chrome에서 기본적으로 사용할 수 있습니다. 메서드를 테스트하려면 chrome://settings/adPrivacy에서 모든 광고 개인 정보 보호 API를 사용 설정합니다. 명령줄 플래그로 Chrome을 실행하여 Protected Audience를 사용 설정하는 경우 BiddingAndScoringDebugReportingAPI 플래그를 포함하여 메서드를 명시적으로 사용 설정해야 합니다. 플래그가 사용 설정되지 않은 경우 메서드는 계속 사용할 수 있지만 아무것도 하지 않습니다.

8. 광고 클릭이 보고됨

뉴스 웹사이트에서 펜스된 프레임 안의 자전거 광고를 클릭하는 사람을 보여주는 삽화에는 신고 데이터가 판매자와 구매자에게 전달됩니다.

분리 프레임에서 렌더링된 광고의 클릭이 보고됩니다. 작동 방식에 관한 자세한 내용은 분리 프레임 광고 보고를 참고하세요.



아래의 다이어그램은 Protected Audience 광고 입찰의 각 단계를 간략히 보여줍니다.

Protected Audience 광고 입찰의 각 단계에 대한 개요를 보여주는 그림


Protected Audience와 TURTLEDOVE의 차이점은 무엇인가요?

Protected Audience는 TURTLEDOVE 제안서군 내에서 Chromium에서 구현되는 첫 번째 실험입니다.

Protected Audience는 TURTLEDOVE의 대략적인 원칙을 따릅니다. 일부 온라인 광고는 이전에 광고주 또는 광고 네트워크와 상호작용했던 잠재 관심 사용자에게 광고를 게재하는 것을 기반으로 합니다. 지금까지는 광고주가 특정 사용자가 웹사이트를 탐색할 때 이러한 방식을 이용해 왔으며, 이는 오늘날의 웹에서 가장 중요한 개인 정보 보호 문제입니다.

TURTLEDOVE는 이 사용 사례를 해결하기 위한 새로운 API를 제공하는 동시에 몇 가지 주요 개인 정보 보호 개선사항을 제공하기 위해 노력하고 있습니다.

  • 광고주가 아닌 브라우저는 광고주가 사람이 생각하는 관심사에 관한 정보를 보유합니다.
  • 광고주는 관심분야를 기반으로 광고를 게재할 수 있지만 이러한 관심분야를 개인에 관한 다른 정보, 특히 사용자의 신원이나 방문 중인 페이지와 결합할 수는 없습니다.

Protected Audience는 TURTLEDOVE와 API를 사용할 개발자에게 더 나은 서비스를 제공하기 위한 수정 제안 모음에서 나왔습니다.

  • SPARROW에서 Criteo신뢰할 수 있는 실행 환경(TEE)에서 실행되는('게이트키퍼') 서비스 모델을 추가할 것을 제안했습니다. Protected Audience에는 실시간 데이터 조회 및 집계된 보고를 위해 TEE를 더 제한적으로 사용하는 것이 포함됩니다.
  • NextRoll의 TERN 및 Magnite PARRROT 제안서에서는 구매자와 판매자가 기기 내 입찰에서 가졌던 다양한 역할을 설명했습니다. Protected Audience의 광고 입찰/점수 산정 흐름은 이 작업을 기반으로 합니다.
  • RTB House의 결과 기반제품 수준 TURTLEDOVE 수정은 익명성 모델과 기기 내 입찰의 맞춤설정 기능을 개선했습니다.
  • PARAKEET은 브라우저와 광고 기술 제공업체 사이의 TEE에서 실행되는 프록시 서버를 사용하여 광고 요청을 익명처리하고 개인 정보 보호 속성을 적용하는 TURTLEDOVE와 유사한 광고 서비스에 관한 Microsoft의 제안입니다. Protected Audience는 이 프록시 모델을 채택하지 않았습니다. Google은 향후 작업을 지원하기 위해 PARAKEET 및 Protected Audience용 JavaScript API를 일관성 있게 제공하여 두 제안의 가장 우수한 기능을 추가로 결합할 예정입니다.

Protected Audience는 아직 웹사이트의 광고 네트워크가 사용자에게 표시되는 광고를 학습하는 것을 차단하지 않습니다. 시간이 지남에 따라 API의 비공개 상태가 되도록 수정할 것으로 예상됩니다.

어떤 브라우저 구성을 사용할 수 있나요?

사용자는 chrome://settings/adPrivacy에서 최상위 설정을 사용 설정하거나 사용 중지하여 Chrome의 개인 정보 보호 샌드박스 무료 체험판 참여를 조정할 수 있습니다. 초기 테스트 중에 사용자는 이 대략적인 개인 정보 보호 샌드박스 설정을 사용하여 Protected Audience를 선택 해제할 수 있습니다. Chrome은 사용자가 자신이 방문한 웹사이트 전반에 걸쳐 자신이 추가된 관심분야 그룹 목록을 보고 관리할 수 있도록 할 계획입니다. 개인 정보 보호 샌드박스 기술 자체와 마찬가지로 사용자 설정은 사용자, 규제 기관 등의 의견에 따라 발전할 수 있습니다.

Google은 Protected Audience 제안서가 진행됨에 따라 테스트 및 의견을 기반으로 Chrome에서 사용 가능한 설정을 계속 업데이트할 예정입니다. 앞으로 Protected Audience 및 관련 데이터를 관리하기 위해 보다 세분화된 설정을 제공할 계획입니다.

사용자가 시크릿 모드로 탐색할 때는 API 호출자가 그룹 멤버십에 액세스할 수 없으며 사용자가 사이트 데이터를 지우면 멤버십이 삭제됩니다.



참여 및 의견 공유

지원받기

구현, 데모 또는 문서에 관해 질문하려면 다음 안내를 따르세요.

Chrome에서의 Protected Audience API 구현과 관련된 버그 및 문제: * API에 관해 보고된 기존 문제를 확인합니다. * crbug.com/new에서 새로운 문제를 신고합니다.

업데이트 소식 받기

  • API의 상태 변경 알림을 받으려면 개발자용 메일링 리스트에 가입하세요.
  • API에서 진행 중인 모든 토론을 자세히 살펴보려면 GitHub의 제안서 페이지에서 보기 버튼을 클릭하세요. 이렇게 하려면 GitHub 계정을 만들거나 있어야 합니다.
  • 개인 정보 보호 샌드박스에 관한 전반적인 업데이트를 받으려면 RSS 피드[개인 정보 보호 샌드박스 진행 상황]를 구독하세요.

자세히 알아보기


사진: 레이 헤네시, Unsplash