FLEDGE API 개발자 가이드

이 도움말의 대상

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

Protected Audience란 무엇인가요?

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

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

아래 다이어그램은 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 Code Search에서 확인할 수 있습니다.

최신 버전의 Chrome에서는 어떤 기능이 지원되나요?

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

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

기능 지원 및 제약 조건에 관한 자세한 내용은 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를 사용하지 않아도 될 것으로 예상됩니다. 이 전환이 이루어지기 전에 개발자가 테스트 및 채택을 시작할 수 있도록 충분한 사전 공지사항을 제공할 예정입니다.

기능 감지 지원

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를 사용하려면 사이트에서 권한 정책을 설정해야 합니다. 이렇게 하면 사이트의 인지 없이 임의의 서드 파티가 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 워크렛을 디버그할 수 있습니다.

첫 번째 단계는 소스 패널의 이벤트 리스너 중단점 창에 있는 새 카테고리를 통해 중단점을 설정하는 것입니다.

Chrome Canary의 DevTools 스크린샷으로, 소스 패널의 이벤트 리스너 중단점 창이 강조 표시되어 있습니다.
   광고 입찰 Worklet에서 입찰자 입찰 단계 시작이 선택됩니다.

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

실시간 워크렛 스크립트도 스레드 패널 아래에 표시됩니다.

Chrome Canary의 DevTools 스크린샷으로, 소스 패널의 스레드 창이 강조 표시되어 있으며 일시중지된 현재 워크렛 스크립트가 표시되어 있습니다.

일부 워크렛은 동시에 실행될 수 있으므로 여러 스레드가 '일시중지됨' 상태가 될 수 있습니다. 스레드 목록을 사용하여 스레드 간에 전환하고 적절한 경우 스레드를 다시 시작하거나 더 자세히 검사할 수 있습니다.

Protected Audience 이벤트 관찰

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

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

Protected Audience 관심분야 그룹 가입 이벤트에 관한 정보를 보여주는 Chrome Canary의 DevTools 애플리케이션 패널

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

Chrome Canary의 DevTools 애플리케이션 패널로, Protected Audience 입찰가 및 낙찰 이벤트에 관한 정보를 보여줍니다.

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' 워크렛에서 실행되는 입찰 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에는 이러한 제약 조건이 없습니다.

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

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

  • 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). */
}

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

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

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

  • ad
    판매자가 이 입찰 또는 광고 소재에 관해 알아볼 것으로 예상되는 정보와 같은 광고에 관한 임의의 메타데이터입니다. 판매자](/resources/glossary#ssp)는 입찰 및 광고 소재 결정에 이 정보를 사용합니다. 판매자는 입찰 및 결정 로직에 이 정보를 사용합니다.

  • bid
    입찰에 참여할 숫자 입찰입니다. 판매자는 여러 구매자의 입찰가를 비교할 수 있어야 하므로 입찰가는 판매자가 선택한 단위 (예: '천 개당 미화')로 표시되어야 합니다. 입찰가가 0 또는 음수인 경우 이 관심분야 그룹은 판매자의 입찰에 전혀 참여하지 않습니다. 이 메커니즘을 통해 구매자는 광고가 게재되거나 게재되지 않을 수 있는 위치에 대한 광고주 규칙을 구현할 수 있습니다.

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

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

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

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

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' 입찰 워크렛 JavaScript의 URL입니다.
trustedScoringSignalsUrl 선택사항 'https://ssp.example/scoring-signals' 판매자의 신뢰할 수 있는 서버의 URL입니다.
interestGroupBuyers* 필수 ['https://dsp.example', 'https://buyer2.example', ...] 입찰에 참여하도록 요청된 모든 관심분야 그룹 소유자의 출처입니다.
auctionSignals 선택사항 {...} 페이지 컨텍스트, 입찰 유형 등에 관한 판매자 정보
sellerSignals 선택사항 {...} 게시자 설정, 문맥 광고 요청 등을 기반으로 하는 정보
sellerTimeout 선택사항 100 판매자의 scoreAd() 스크립트의 최대 런타임 (ms)입니다.
perBuyerSignals 선택사항 {'https://dsp.example': {...},
  'https://another-buyer.example': {...},
...}
서버에서 각 특정 구매자의 페이지에 관한 문맥 신호
perBuyerTimeouts 선택사항 50 특정 구매자의 generateBid() 스크립트의 최대 런타임 (ms)입니다.
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를 사용 설정하세요. Protected Audience를 사용 설정하기 위해 명령줄 플래그를 사용하여 Chrome을 실행하는 경우 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레이 헤네시