Panduan developer FLEDGE API

Untuk siapa artikel ini?

Postingan ini adalah referensi teknis untuk iterasi Protected Audience API eksperimental saat ini.

Apa itu Protected Audience?

Protected Audience API adalah proposal Privacy Sandbox untuk menayangkan kasus penggunaan audiens kustom dan pemasaran ulang, yang dirancang agar tidak dapat digunakan oleh pihak ketiga untuk melacak perilaku penjelajahan pengguna di seluruh situs. API ini memungkinkan lelang di perangkat oleh browser, guna memilih iklan yang relevan untuk situs yang sebelumnya dikunjungi pengguna.

Protected Audience adalah eksperimen pertama yang akan diterapkan di Chromium dalam kelompok proposal TURTLEDOVE.

Diagram di bawah memberikan ringkasan siklus proses FLEDGE:

Ilustrasi yang memberikan ringkasan setiap tahap siklus proses FLEDGE
Siklus proses FLEDGE.

Bagaimana cara mencoba Protected Audience?

Demo Protected Audience

Panduan deployment Protected Audience dasar di seluruh situs pengiklan dan penayang tersedia di protected-audience-demo.web.app.

Video demo menjelaskan cara kerja kode demo, dan menunjukkan cara menggunakan Chrome DevTools untuk proses debug Protected Audience.

Ikut serta dalam uji coba origin Protected Audience

Uji coba origin Relevansi dan Pengukuran Privacy Sandbox telah tersedia di Chrome Beta 101.0.4951.26 dan yang lebih baru di desktop untuk Protected Audience, Topics, dan Attribution Reporting API.

Untuk berpartisipasi, daftarkan token uji coba origin.

Setelah berhasil mendaftar ke uji coba, Anda dapat mencoba Protected Audience JavaScript API di halaman yang menyediakan token uji coba yang valid: misalnya, untuk meminta browser bergabung dengan satu atau beberapa grup minat, lalu menjalankan lelang iklan untuk memilih dan menampilkan iklan.

Demo Protected Audience memberikan contoh dasar deployment Protected Audience yang menyeluruh.

Berikan token uji coba untuk setiap halaman tempat Anda ingin menjalankan kode Protected Audience API:

  • Sebagai tag meta di <head>:

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

  • Sebagai header HTTP:

    Origin-Trial: TOKEN_GOES_HERE

  • Dengan memberikan token secara terprogram:

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

iframe yang menjalankan kode Protected Audience—seperti panggilan navigator.joinAdInterestGroup() oleh pemilik grup minat—harus menyediakan token yang cocok dengan originnya.

Detail Uji Coba Origin Protected Audience yang Diusulkan memberikan detail selengkapnya tentang sasaran uji coba pertama dan menjelaskan fitur yang didukung.

Menguji dengan chrome://flags atau tombol fitur

Anda dapat menguji Protected Audience untuk satu pengguna di Chrome Beta 101.0.4951.26 dan yang lebih baru di desktop: * Dengan mengaktifkan chrome://flags/#privacy-sandbox-ads-apis. * Dengan menyetel flag dari command line.

Render iklan dalam iframe atau frame dengan fence

Iklan dapat dirender dalam <iframe> atau <fencedframe>, bergantung pada tanda yang ditetapkan.

Untuk menggunakan <fencedframe> guna merender iklan:

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

Untuk menggunakan <iframe> guna merender iklan:

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

Sertakan tanda BiddingAndScoringDebugReportingAPI untuk mengaktifkan metode pelaporan kerugian/menang debug sementara.

Menjalankan Chromium dengan flag menjelaskan cara menyetel tanda saat menjalankan Chrome dan browser berbasis Chromium lainnya dari command line. Daftar lengkap tanda Protected Audience tersedia dari Penelusuran Kode Chromium.

Fitur apa yang didukung di versi terbaru Chrome?

Protected Audience akan tersedia di belakang tombol fitur di Chromium sebagai eksperimen pertama untuk menguji fitur proposal Protected Audience berikut:

  • Grup minat: disimpan oleh browser, dengan metadata terkait untuk mengonfigurasi bidding dan rendering iklan.
  • Bidding di perangkat oleh pembeli (DSP atau pengiklan): berdasarkan grup minat yang disimpan dan sinyal dari penjual.
  • Pemilihan iklan di perangkat oleh penjual (SSP atau penayang): berdasarkan bid lelang dan metadata dari pembeli.
  • Rendering iklan dalam versi Fenced Frames yang disesuaikan untuk sementara: dengan akses jaringan dan logging yang diizinkan untuk rendering iklan.

Penjelasan API memberikan detail selengkapnya tentang dukungan dan batasan fitur.

Izin grup minat

Default dalam penerapan Protected Audience saat ini adalah memungkinkan pemanggilan joinAdInterestGroup() dari mana pun di halaman, bahkan dari iframe lintas-domain. Di masa mendatang, setelah pemilik situs memiliki waktu untuk menyesuaikan kebijakan izin iframe lintas domain, rencananya adalah melarang panggilan dari iframe lintas domain, seperti yang dijelaskan dalam penjelasan ini.

Layanan Kunci/Nilai

Sebagai bagian dari lelang iklan Protected Audience, browser dapat mengakses layanan kunci/nilai yang menampilkan key-value pair sederhana untuk memberikan informasi kepada pembeli iklan, seperti sisa anggaran kampanye. Proposal Protected Audience mewajibkan bahwa server ini "tidak melakukan logging tingkat peristiwa dan tidak memiliki efek samping lain berdasarkan permintaan ini".

Kode layanan Kunci/Nilai Protected Audience kini tersedia di repositori GitHub Privacy Sandbox. Layanan ini dapat digunakan oleh developer Chrome dan Android. Lihat postingan blog pengumuman untuk mengetahui pembaruan statusnya. Pelajari lebih lanjut layanan Kunci/Nilai Protected Audience dari penjelasan API dan penjelasan model kepercayaan.

Untuk pengujian awal, model "Bring Your Own Server" digunakan. Dalam jangka panjang, teknologi iklan perlu menggunakan layanan Kunci/Nilai Protected Audience open source yang berjalan di lingkungan eksekusi tepercaya untuk mengambil data real-time.

Guna memastikan bahwa ekosistem memiliki waktu yang cukup untuk melakukan pengujian, kami tidak mengharuskan penggunaan layanan Kunci/Nilai atau TEE open source hingga beberapa saat setelah penghentian cookie pihak ketiga. Kami akan memberikan pemberitahuan penting bagi developer untuk memulai pengujian dan adopsi sebelum transisi ini berlangsung.

Mendeteksi dukungan fitur

Sebelum menggunakan API, periksa apakah API tersebut didukung oleh browser dan tersedia dalam dokumen:

'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');

Bagaimana cara memilih tidak ikut menggunakan Protected Audience?

Anda dapat memblokir akses ke Protected Audience API sebagai pemilik situs atau sebagai pengguna perorangan.

Bagaimana cara situs mengontrol akses?

Protected Audience nantinya akan mewajibkan situs untuk menetapkan Kebijakan Izin agar fungsi Protected Audience tersedia. Hal ini akan membantu memastikan bahwa pihak ketiga yang arbitrer tidak dapat menggunakan API tanpa sepengetahuan situs. Namun, untuk memfasilitasi pengujian selama uji coba origin pertama, persyaratan ini dibebaskan secara default. Situs yang ingin menonaktifkan fungsi Protected Audience secara eksplisit selama periode pengujian dapat menggunakan Kebijakan Izin yang relevan untuk memblokir akses.

Ada dua kebijakan izin Protected Audience yang dapat ditetapkan secara independen: * join-ad-interest-group mengaktifkan/menonaktifkan fungsi untuk menambahkan browser ke grup minat * run-ad-auction mengaktifkan/menonaktifkan fungsi untuk menjalankan lelang di perangkat

Akses ke Protected Audience API dapat dinonaktifkan sepenuhnya dalam konteks pihak pertama dengan menentukan kebijakan izin berikut di header respons HTTP:

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

Anda dapat menonaktifkan penggunaan API di iframe dengan menambahkan atribut allow berikut ke elemen iframe:

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

Bagian Kebijakan Izin Uji Coba Origin Protected Audience yang Diusulkan memberikan detail selengkapnya.

Pilihan tidak ikut dari pengguna

Pengguna dapat memblokir akses ke Protected Audience API dan fitur Privacy Sandbox lainnya menggunakan salah satu mekanisme berikut:

  • Nonaktifkan uji coba Privacy Sandbox di Setelan Chrome: Setelan > Keamanan dan privasi > Privacy Sandbox. Referensi ini juga dapat diakses di chrome://settings/adPrivacy.
  • Nonaktifkan cookie pihak ketiga di Setelan Chrome: Setelan > Keamanan dan privasi.
  • Tetapkan Cookie dan data situs lainnya ke "Blokir cookie pihak ketiga" atau "Blokir semua cookie" dari chrome://settings/cookies.
  • Gunakan mode Samaran.

Penjelasan Protected Audience memberikan detail lebih lanjut tentang elemen desain API dan menjelaskan cara API berusaha memenuhi sasaran privasi.

Men-debug worklet Protected Audience

Dari Chrome Canary 98.0.4718.0, Anda dapat men-debug worklet Protected Audience di dalam Chrome DevTools.

Langkah pertama adalah menetapkan titik henti sementara melalui kategori baru di panel Event Listener Breakpoints di panel Sources.

Screenshot
   DevTools di Chrome Canary, yang menandai panel Breakpoints Pemroses Peristiwa di panel Sumber.
   Awal Fase Bidding Bidder dipilih di bagian Worklet Lelang Iklan.

Saat titik henti sementara dipicu, eksekusi akan dijeda sebelum pernyataan pertama di tingkat teratas skrip worklet. Anda dapat menggunakan titik henti sementara atau perintah langkah reguler untuk membuka fungsi bidding/penskoran/pelaporan.

Skrip worklet aktif juga akan muncul di bawah panel Threads.

Screenshot
DevTools di Chrome Canary, yang menyoroti panel Threads di panel Sumber, yang menampilkan skrip
worklet saat ini yang telah dijeda.

Karena beberapa worklet dapat berjalan secara paralel, beberapa thread mungkin berakhir di status "dijeda" di sana; Anda dapat menggunakan daftar thread untuk beralih antar-thread, dan melanjutkan atau memeriksanya lebih dekat sesuai kebutuhan.

Mengamati peristiwa Protected Audience

Dari panel Application di Chrome DevTools, Anda dapat mengamati grup minat dan peristiwa lelang Protected Audience.

Jika Anda membuka situs belanja demo Protected Audience di browser yang mengaktifkan Protected Audience, DevTools akan menampilkan informasi tentang peristiwa join.

Panel
   Aplikasi DevTools di Chrome Canary, yang menampilkan informasi tentang peristiwa bergabung
   grup minat Protected Audience.

Sekarang, jika Anda membuka situs penayang demo Protected Audience di browser yang mengaktifkan Protected Audience, DevTools akan menampilkan informasi tentang peristiwa bid dan win.

Panel
   Aplikasi DevTools di Chrome Canary, yang menampilkan informasi tentang bid lelang Protected Audience dan
   peristiwa menang.

Bagaimana cara kerja Protected Audience API?

Dalam contoh ini, pengguna menjelajahi situs produsen sepeda kustom, kemudian mengunjungi situs berita dan melihat iklan sepeda baru dari produsen sepeda tersebut.

1. Pengguna mengunjungi situs pengiklan

Ilustrasi yang menampilkan
  seseorang yang mengunjungi situs produsen sepeda kustom melalui browser di laptopnya.

Bayangkan pengguna mengunjungi situs pembuat sepeda kustom (pengiklan dalam contoh ini) dan menghabiskan waktu di halaman produk untuk sepeda baja buatan tangan. Tindakan ini akan memberi peluang pemasaran ulang kepada produsen sepeda.

2. Browser pengguna diminta untuk menambahkan grup minat

Ilustrasi yang menampilkan seseorang sedang melihat situs di browser di laptopnya. Kode
  JavaScript joinAdInterestGroup() berjalan di browser.

Bagian Penjelasan: Grup Minat Catatan Browser

Platform sisi permintaan (DSP) pengiklan (atau pengiklan itu sendiri) memanggil navigator.joinAdInterestGroup() untuk meminta browser menambahkan grup minat ke daftar grup tempat browser menjadi anggota. Dalam contoh ini, grup diberi nama custom-bikes, dan pemiliknya adalah dsp.example. Pemilik grup minat (dalam hal ini, DSP) akan menjadi pembeli dalam lelang iklan yang dijelaskan pada langkah 4. Keanggotaan grup minat disimpan oleh browser, di perangkat pengguna, dan tidak dibagikan kepada vendor browser atau orang lain.

joinAdInterestGroup() memerlukan izin dari: * Situs yang sedang dikunjungi * Pemilik grup minat

Misalnya: malicious.example tidak boleh memanggil joinAdInterestGroup() dengan dsp.example sebagai pemilik tanpa izin dsp.example.

Izin dari situs yang sedang dikunjungi

Asal yang sama: Secara default, izin secara implisit diberikan untuk panggilan joinAdInterestGroup() dari asal yang sama dengan situs yang dikunjungi, yaitu dari asal yang sama dengan frame tingkat atas halaman saat ini. Situs dapat menggunakan perintah join-ad-interest-group header kebijakan izin Protected Audience untuk menonaktifkan panggilan joinAdInterestGroup().

Lintas origin: Memanggil joinAdInterestGroup() dari origin yang berbeda dengan halaman saat ini hanya dapat berhasil jika situs yang dikunjungi telah menetapkan kebijakan izin yang memungkinkan panggilan ke joinAdInterestGroup() dari iframe lintas origin.

Izin dari pemilik grup minat

Izin pemilik grup minat secara implisit diberikan dengan memanggil joinAdInterestGroup() dari iframe dengan asal yang sama seperti pemilik grup minat. Misalnya, iframe dsp.example dapat memanggil joinAdInterestGroup() untuk grup minat yang dimiliki oleh dsp.example.

Proposalnya adalah joinAdInterestGroup() dapat berjalan di halaman atau iframe di domain pemilik, atau didelegasikan ke domain lain yang disediakan menggunakan daftar di URL .well-known.

Menggunakan navigator.joinAdInterestGroup()

Berikut adalah contoh cara penggunaan 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);

Objek interestGroup yang diteruskan ke fungsi tidak boleh berukuran lebih dari 50 kiB. Jika tidak, panggilan akan gagal. Parameter kedua menentukan durasi grup minat, yang dibatasi hingga 30 hari. Panggilan yang berurutan akan menimpa nilai yang disimpan sebelumnya.

Properti grup minat

Properti Wajib Contoh Role
owner Wajib 'https://dsp.example' Asal pemilik grup minat.
name Wajib 'custom-bikes' Nama grup minat.
biddingLogicUrl** Opsional* 'https://dsp.example/bid/custom-bikes/bid.js' URL untuk JavaScript bidding yang dijalankan di worklet.
biddingWasmHelperUrl** Opsional* 'https://dsp.example/bid/custom-bikes/bid.wasm' URL untuk kode WebAssembly yang didorong dari biddingLogicUrl.
dailyUpdateUrl** Opsional 'https://dsp.example/bid/custom-bikes/update' URL yang menampilkan JSON untuk memperbarui atribut grup minat. (Lihat Memperbarui grup minat.)
trustedBiddingSignalsUrl** Opsional 'https://dsp.example/trusted/bidding-signals' URL dasar untuk permintaan nilai kunci ke server tepercaya bidder.
trustedBiddingSignalsKeys Opsional ['key1', 'key2' ...] Kunci untuk permintaan ke server tepercaya nilai kunci.
userBiddingSignals Opsional {...} Metadata tambahan yang dapat digunakan pemilik selama bidding.
ads Opsional* [bikeAd1, bikeAd2, bikeAd3] Iklan yang mungkin ditampilkan untuk grup minat ini.
adComponents Opsional [customBike1, customBike2, bikePedal, bikeFrame1, bikeFrame2] Komponen untuk iklan yang terdiri dari beberapa bagian.

* Semua properti bersifat opsional kecuali untuk owner dan name. Properti biddingLogicUrl dan ads bersifat opsional, tetapi diperlukan untuk berpartisipasi dalam lelang. Mungkin terdapat kasus penggunaan pembuatan grup minat tanpa properti ini: misalnya, pemilik grup minat mungkin ingin menambahkan browser ke grup minat untuk kampanye yang belum berjalan, atau untuk penggunaan lainnya di masa mendatang, atau mungkin telah kehabisan anggaran iklan untuk sementara.

** URL biddingLogicUrl, biddingWasmHelperUrl, dailyUpdateUrl dan trustedBiddingSignalsUrl harus memiliki origin yang sama dengan pemilik. URL ads dan adComponents tidak memiliki batasan tersebut.

Memperbarui atribut grup minat

dailyUpdateUrl menentukan server web yang menampilkan JSON yang menentukan properti grup minat, yang sesuai dengan objek grup minat yang diteruskan ke navigator.joinAdInterestGroup(). Hal ini memberikan mekanisme bagi pemilik grup untuk memperbarui atribut grup minat secara berkala. Dalam implementasi saat ini, atribut berikut dapat diubah:

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

Kolom apa pun yang tidak ditentukan dalam JSON tidak akan ditimpa. Hanya kolom yang ditentukan dalam JSON yang akan diperbarui, sedangkan memanggil navigator.joinAdInterestGroup() akan menimpa grup minat yang sudah ada.

Update adalah upaya terbaik, dan dapat gagal dalam kondisi berikut: * Waktu tunggu permintaan jaringan habis (saat ini 30 detik). * Kegagalan jaringan lainnya. * Kegagalan penguraian JSON.

Update juga dapat dibatalkan jika terlalu banyak waktu yang berdekatan yang dihabiskan untuk mengupdate, meskipun hal ini tidak akan menerapkan pembatasan kapasitas pada update yang dibatalkan (sisa). Pembaruan dibatasi kapasitasnya hingga maksimum satu per hari. Update yang gagal karena error jaringan akan dicoba lagi setelah satu jam, dan update yang gagal karena koneksi internet terputus akan segera dicoba lagi saat terhubung kembali.

Pembaruan manual

Pembaruan pada grup minat yang dimiliki oleh asal frame saat ini dapat dipicu secara manual melalui navigator.updateAdInterestGroups(). Pembatasan kapasitas mencegah update terlalu sering terjadi: panggilan berulang ke navigator.updateAdInterestGroups() tidak melakukan apa pun hingga periode batas kapasitas (saat ini satu hari) berlalu. Batas kapasitas akan direset jika navigator.joinAdInterestGroup() dipanggil lagi untuk owner dan name grup minat yang sama.

Update otomatis

Semua grup minat yang dimuat untuk lelang akan otomatis diperbarui setelah lelang selesai, tunduk pada batas kapasitas yang sama seperti pembaruan manual. Untuk setiap pemilik dengan setidaknya satu grup minat yang berpartisipasi dalam lelang, navigator.updateAdInterestGroups() dipanggil dari iframe yang asalnya cocok dengan pemilik tersebut.

Menentukan iklan untuk grup minat

Objek ads dan adComponents menyertakan URL untuk materi iklan dan, jika perlu, metadata arbitrer yang dapat digunakan pada waktu bidding. Contoh:

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

Bagaimana cara pembeli mengajukan bid?

Skrip di biddingLogicUrl yang disediakan oleh pemilik grup minat harus menyertakan fungsi generateBid(). Saat penjual ruang iklan memanggil navigator.runAdAuction(), fungsi generatedBid() dipanggil satu kali untuk setiap grup minat tempat browser menjadi anggotanya, jika pemilik grup minat diundang untuk melakukan bidding. Dengan kata lain, generateBid() dipanggil sekali untuk setiap iklan kandidat. Penjual menyediakan properti decisionLogicUrl pada parameter konfigurasi lelang yang diteruskan ke navigator.runAdAuction(). Kode di URL ini harus menyertakan fungsi scoreAd(), yang dijalankan untuk setiap bidder dalam lelang, untuk menilai setiap bid yang ditampilkan oleh generateBid().

Skrip di biddingLogicUrl yang disediakan oleh pembeli ruang iklan harus menyertakan fungsi generateBid(). Fungsi ini dipanggil sekali untuk setiap iklan kandidat. runAdAuction() memeriksa setiap iklan satu per satu, beserta bid dan metadatanya yang terkait, lalu menetapkan skor keinginan numerik pada iklan.

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

generateBid() menggunakan argumen berikut:

  • interestGroup
    Objek yang diteruskan ke joinAdInterestGroup() oleh pembeli iklan. (Grup minat dapat diperbarui melalui dailyUpdateUrl.)

  • auctionSignals
    Properti argumen konfigurasi lelang yang diteruskan ke navigator.runAdAuction() oleh penjual ruang iklan. Atribut ini memberikan informasi tentang konteks halaman (seperti ukuran iklan dan ID penayang), jenis lelang (harga pertama atau harga kedua), dan metadata lainnya.

  • perBuyerSignals
    Seperti halnya auctionSignals, properti argumen konfigurasi lelang yang diteruskan ke navigator.runAdAuction() oleh penjual. Hal ini dapat memberikan sinyal kontekstual dari server pembeli tentang halaman, jika penjual adalah SSP yang melakukan panggilan bidding real-time ke server pembeli dan menyalurkan respons kembali, atau jika halaman penayang menghubungi server pembeli secara langsung. Jika demikian, pembeli dapat memeriksa tanda tangan kriptografi sinyal tersebut di dalam generateBid() sebagai perlindungan terhadap modifikasi tidak sah.

  • trustedBiddingSignals
    Objek yang kuncinya adalah trustedBiddingSignalsKeys untuk grup minat, dan yang nilainya ditampilkan dalam permintaan trustedBiddingSignals.

  • browserSignals
    Objek yang dibuat oleh browser, yang dapat mencakup informasi tentang konteks halaman (seperti hostname halaman saat ini, yang dapat dipalsukan penjual) dan data untuk grup minat itu sendiri (seperti data kapan grup sebelumnya memenangkan lelang, untuk memungkinkan pembatasan frekuensi di perangkat).

Objek browserSignals memiliki properti berikut:

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

Untuk menghitung nilai bid, kode dalam generateBid() dapat menggunakan properti parameter fungsi. Contoh:

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

generateBid() menampilkan objek dengan empat properti:

  • ad
    Metadata arbitrer tentang iklan, seperti informasi yang diharapkan penjual untuk mempelajari bid atau materi iklan ini. Penjual](/privacy-sandbox/resources/glosarium#ssp) menggunakan informasi ini dalam materi iklan lelang dan keputusannya. Penjual menggunakan informasi ini dalam logika keputusan dan lelang.

  • bid
    Bid numerik yang akan memasuki lelang. Penjual harus berada dalam posisi untuk membandingkan bid dari pembeli yang berbeda.Oleh karena itu, bid harus berada di beberapa unit yang dipilih penjual (mis. "USD per seribu"). Jika bid nol atau negatif, grup minat ini sama sekali tidak akan berpartisipasi dalam lelang penjual. Dengan mekanisme ini, pembeli dapat menerapkan aturan pengiklan di tempat iklan mereka mungkin muncul atau tidak.

  • render
    URL, atau daftar URL, yang akan digunakan untuk merender materi iklan jika bid ini memenangkan lelang. (Lihat Iklan yang Terdiri dari Beberapa Bagian di penjelasan API.) Nilainya harus cocok dengan renderUrl salah satu iklan yang ditentukan untuk grup minat.

  • adComponents
    Daftar opsional hingga 20 komponen untuk iklan yang terdiri dari beberapa bagian, diambil dari properti adComponents argumen grup minat yang diteruskan ke navigator.joinAdInterestGroup().

Meminta browser keluar dari grup minat

Pemilik grup minat dapat meminta agar browser dihapus dari grup minat. Dengan kata lain, browser diminta untuk menghapus grup minat dari daftar grup minat tersebut menjadi anggota.

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

Jika pengguna kembali ke situs yang meminta browser untuk menambahkan grup minat, pemilik grup minat dapat memanggil fungsi navigator.leaveAdInterestGroup() untuk meminta browser menghapus grup minat. Kode untuk iklan juga dapat memanggil fungsi ini untuk grup minatnya.

3. Pengguna mengunjungi situs yang menjual ruang iklan

Ilustrasi yang menampilkan seseorang mengunjungi situs berita melalui browser di laptopnya. Situs
  memiliki slot iklan yang kosong.

Kemudian, pengguna mengunjungi situs yang menjual ruang iklan, dalam contoh ini situs berita. Situs memiliki inventaris iklan, yang dijual secara terprogram menggunakan bidding real-time.

4. Lelang iklan berjalan di browser

Ilustrasi yang menampilkan seseorang sedang melihat situs berita di browser di laptopnya. Lelang
  iklan menggunakan Protected Audience API sedang berlangsung.

Bagian Penjelasan: Penjual Menjalankan Lelang di Perangkat

Lelang iklan kemungkinan akan dijalankan oleh SSP penayang, atau penayang itu sendiri. Tujuan lelang adalah memilih iklan yang paling sesuai untuk satu slot iklan yang tersedia di halaman saat ini. Lelang ini memperhitungkan grup minat yang menjadi anggota browser, bersama dengan data dari pembeli dan penjual ruang iklan dari layanan Kunci/Nilai.

Penjual ruang iklan membuat permintaan ke browser pengguna untuk memulai lelang iklan dengan memanggil navigator.runAdAuction().

Contoh:

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() menampilkan promise yang di-resolve ke URN (urn:uuid:<something>) yang mewakili hasil lelang iklan. Kunci ini hanya dapat didekode oleh browser saat diteruskan ke frame dengan fence untuk rendering: halaman penayang tidak dapat memeriksa iklan pemenang.

Skrip decisionLogicUrl mempertimbangkan setiap iklan, beserta bid dan metadata yang terkait, satu per satu, lalu menetapkan skor keinginan numerik padanya.

auctionConfig properti

Properti Wajib Contoh Role
seller Wajib 'https://ssp.example' Asal penjual.
decisionLogicUrl Wajib 'https://ssp.example/auction-decision-logic.js' URL untuk JavaScript worklet lelang.
trustedScoringSignalsUrl Opsional 'https://ssp.example/scoring-signals' URL server tepercaya penjual.
interestGroupBuyers* Wajib ['https://dsp.example', 'https://buyer2.example', ...] Asal semua pemilik grup minat yang diminta untuk melakukan bidding dalam lelang.
auctionSignals Opsional {...} Informasi penjual tentang konteks halaman, jenis lelang, dll.
sellerSignals Opsional {...} Informasi berdasarkan setelan penayang, pembuatan permintaan iklan kontekstual, dll.
sellerTimeout Opsional 100 Runtime maksimum (md) skrip scoreAd() penjual.
perBuyerSignals Opsional {'https://dsp.example': {...},
  'https://another-buyer.example': {...},
...}
Sinyal kontekstual tentang halaman untuk setiap pembeli tertentu, dari server mereka.
perBuyerTimeouts Opsional 50 Runtime maksimum (md) skrip generateBid() pembeli tertentu.
componentAuctions Opsional [{'seller': 'https://www.some-other-ssp.com',
  'decisionLogicUrl': ..., ...},
  ...]
Konfigurasi tambahan untuk lelang komponen.

* Penjual dapat menetapkan interestGroupBuyers: '*' untuk mengizinkan semua grup minat untuk mengajukan bid. Iklan kemudian diterima atau ditolak berdasarkan kriteria selain penyertaan pemilik grup minat. Misalnya, penjual dapat meninjau materi iklan untuk memastikan kepatuhannya terhadap kebijakannya.

** additionalBids tidak didukung dalam penerapan Protected Audience saat ini. Baca bagian Peserta Lelang di penjelasan Protected Audience untuk informasi selengkapnya.

Bagaimana cara iklan dipilih?

Kode di decisionLogicUrl (properti objek konfigurasi lelang yang diteruskan ke runAdAuction()) harus menyertakan fungsi scoreAd(). Proses ini dijalankan sekali untuk setiap iklan guna menentukan keinginan mereka.

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

scoreAd() menggunakan argumen berikut: * adMetadata
Metadata arbitrer yang disediakan oleh pembeli. * bid
Nilai bid numerik. * auctionConfig
Objek konfigurasi lelang yang diteruskan ke navigator.runAdAuction(). * trustedScoringSignals
Nilai yang diambil pada waktu lelang dari server tepercaya penjual, yang mewakili pendapat penjual tentang iklan tersebut. * browserSignals
Objek yang dibuat oleh browser, termasuk informasi yang diketahui browser dan yang mungkin ingin diverifikasi oleh skrip lelang penjual:

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

Sebelum lelang dimulai, penjual menemukan iklan kontekstual terbaik untuk slot iklan yang tersedia. Bagian dari logika scoreAd()-nya adalah menolak iklan yang tidak dapat mengalahkan pemenang kontekstual.

5. Penjual dan pembeli yang berpartisipasi menerima data real time dari layanan Kunci/Nilai

Ilustrasi yang menampilkan seseorang sedang melihat situs berita di browser di laptopnya. Lelang
  iklan menggunakan Protected Audience API sedang berlangsung, dengan peserta mendapatkan data dari layanan Kunci/Nilai.

Bagian penjelasan: Mengambil Data Real-Time dari layanan Kunci/Nilai Protected Audience.

Selama lelang iklan, penjual ruang iklan dapat memperoleh data realtime tentang materi iklan tertentu dengan membuat permintaan ke layanan Kunci/Nilai menggunakan properti trustedScoringSignalsUrl dari argumen konfigurasi lelang yang diteruskan ke navigator.runAdAuction(), bersama dengan kunci dari properti renderUrl semua entri di kolom ads dan adComponents dari semua grup minat dalam lelang.

Demikian pula, pembeli ruang iklan dapat meminta data real-time dari layanan Kunci/Nilai menggunakan properti trustedBiddingSignalsUrl dan trustedBiddingSignalsKeys dari argumen grup minat yang diteruskan ke navigator.joinAdInterestGroup().

Saat runAdAuction() dipanggil, browser akan membuat permintaan ke setiap server tepercaya pembeli iklan. URL untuk permintaan akan terlihat seperti ini:

https://kv-service.example/getvalues?hostname=publisher.example&keys=key1,key2
  • URL dasar berasal dari trustedBiddingSignalsUrl.
  • hostname disediakan oleh browser.
  • Nilai keys diambil dari trustedBiddingSignalsKeys.

Respons terhadap permintaan ini adalah objek JSON yang memberikan nilai untuk setiap kunci.

6. Iklan pemenang ditampilkan

Ilustrasi yang menampilkan seseorang sedang melihat situs berita di browser di laptopnya. Iklan
  sepeda (diskon 20%) ditampilkan—dengan kunci di atas untuk menunjukkan bahwa iklan ditampilkan dalam
  frame dengan fence.

Bagian Penjelasan: Browser Merender Iklan Pemenang

Seperti yang dijelaskan sebelumnya: promise yang ditampilkan oleh runAdAuction() di-resolve ke URN yang diteruskan ke frame dengan fence untuk rendering, dan situs akan menampilkan iklan pemenang.

7. Hasil lelang dilaporkan

Bagian Penjelasan: Pelaporan Tingkat Peristiwa (untuk saat ini)

Hasil laporan penjual

Bagian Penjelasan: Pelaporan Penjual tentang Render

JavaScript penjual yang disediakan di decisionLogicUrl (yang juga menyediakan scoreAd()) dapat menyertakan fungsi reportResult() untuk melaporkan hasil lelang.

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

Argumen yang diteruskan ke fungsi ini adalah:

  • auctionConfig
    Objek konfigurasi lelang yang diteruskan ke navigator.runAdAuction().

  • browserSignals
    Objek yang dibuat oleh browser yang menyediakan informasi tentang lelang. Contoh:

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

Nilai yang ditampilkan dari fungsi ini digunakan sebagai argumen sellerSignals untuk fungsi reportWin() bid bidder yang menang.

Hasil laporan bidder pemenang

Bagian Penjelasan: Pelaporan Pembeli tentang Render dan Peristiwa Iklan

JavaScript bidder yang menang (yang juga menyediakan generateBid()) dapat menyertakan fungsi reportWin() untuk melaporkan hasil lelang.

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

Argumen yang diteruskan ke fungsi ini adalah:

  • auctionSignals dan perBuyerSignals
    Nilai yang sama diteruskan ke generateBid() untuk bidder yang menang.
  • sellerSignals
    Nilai hasil reportResult(), yang memberi penjual peluang untuk meneruskan informasi kepada pembeli.
  • browserSignals
    Objek yang dibuat oleh browser yang menyediakan informasi tentang lelang. Contoh:

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

Penerapan pelaporan kerugian/kemenangan sementara

Ada dua metode yang tersedia sementara di Chrome untuk pelaporan lelang:

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

Masing-masing metode ini mengambil satu argumen: URL yang akan diambil setelah lelang selesai. Fungsi tersebut dapat dipanggil beberapa kali, di scoreAd() dan generateBid(), dengan argumen URL yang berbeda.

Chrome hanya mengirimkan laporan kalah/menang debug saat lelang berjalan hingga selesai. Jika lelang dibatalkan (misalnya, karena navigasi baru) tidak ada laporan yang akan dibuat.

Metode ini tersedia secara default di Chrome jika chrome://flags/#privacy-sandbox-ads-apis diaktifkan. Namun, jika menjalankan Chrome dengan tanda command line untuk mengaktifkan Protected Audience, Anda harus mengaktifkan metode secara eksplisit dengan menyertakan tanda BiddingAndScoringDebugReportingAPI. Jika tanda tidak diaktifkan, metode akan tetap tersedia, tetapi tidak melakukan apa pun.

8. Klik iklan dilaporkan

Ilustrasi yang menampilkan
  seseorang mengklik iklan sepeda, di dalam bingkai berpagar, di situs berita, dengan data
  laporan yang ditujukan ke penjual dan pembeli.

Klik pada iklan yang dirender dalam frame dengan fence dilaporkan. Untuk mempelajari cara kerjanya lebih lanjut, lihat Pelaporan Iklan Frame dengan Fence.



Diagram di bawah menguraikan setiap tahap lelang iklan Protected Audience:

Ilustrasi yang memberikan ringkasan setiap tahap lelang iklan Protected Audience


Apa perbedaan antara Protected Audience dan TURTLEDOVE?

Protected Audience adalah eksperimen pertama yang akan diterapkan di Chromium dalam kelompok proposal TURTLEDOVE.

Protected Audience mengikuti prinsip umum TURTLEDOVE. Sebagian iklan online didasarkan pada menampilkan iklan kepada orang yang berpotensi tertarik dan pernah berinteraksi dengan pengiklan atau jaringan iklan. Secara historis, hal ini telah dilakukan oleh pengiklan dalam mengenali orang tertentu saat menjelajahi situs web, yang merupakan masalah privasi utama pada web saat ini.

Upaya TURTLEDOVE adalah tentang menawarkan API baru untuk mengatasi kasus penggunaan ini sekaligus menawarkan beberapa kemajuan privasi utama:

  • Browser, bukan pengiklan, yang menyimpan informasi tentang hal yang menurut pengiklan menarik bagi seseorang.
  • Pengiklan dapat menayangkan iklan berdasarkan minat, tetapi tidak dapat menggabungkan minat tersebut dengan informasi lain tentang seseorang — khususnya, siapa mereka atau halaman apa yang mereka kunjungi.

Protected Audience berkembang dari TURTLEDOVE dan kumpulan proposal terkait untuk modifikasi agar dapat memberikan pelayanan yang lebih baik kepada developer yang akan menggunakan API:

  • Di SPARROW: Criteo mengusulkan penambahan model layanan ("Gatekeeper") yang berjalan di trusted execution environment (TEE). Protected Audience mencakup penggunaan TEE yang lebih terbatas, untuk pencarian data real-time dan pelaporan gabungan.
  • Proposal TERN dan PARRROT NextRoll menjelaskan berbagai peran yang dimiliki pembeli dan penjual dalam lelang di perangkat. Alur bidding/penskoran iklan Protected Audience didasarkan pada pekerjaan ini.
  • Modifikasi TURTLEDOVE Berbasis hasil dan Tingkat produk dari RTB House meningkatkan kemampuan personalisasi dan model anonimitas lelang di perangkat
  • ParaKEET adalah proposal Microsoft untuk layanan iklan mirip TURTLEDOVE yang mengandalkan server proxy yang berjalan di TEE antara browser dan penyedia teknologi iklan, untuk menganonimkan permintaan iklan dan menerapkan properti privasi. Protected Audience belum menerapkan model proxy ini. Kami akan menyelaraskan JavaScript API untuk ParaKEET dan Protected Audience, guna mendukung upaya di masa mendatang untuk lebih menggabungkan fitur terbaik dari kedua proposal.

Protected Audience belum mencegah jaringan iklan situs mempelajari iklan mana yang dilihat pengguna. Kami berharap dapat memodifikasi API agar menjadi lebih pribadi dari waktu ke waktu.

Apa konfigurasi browser yang tersedia?

Pengguna dapat menyesuaikan partisipasi mereka untuk uji coba Privacy Sandbox di Chrome dengan mengaktifkan atau menonaktifkan setelan tingkat teratas di chrome://settings/adPrivacy. Selama pengujian awal, pengguna akan dapat menggunakan setelan Privacy Sandbox tingkat tinggi ini untuk memilih tidak menggunakan Protected Audience. Chrome berencana mengizinkan pengguna melihat dan mengelola daftar grup minat yang telah ditambahkan ke seluruh situs web yang telah mereka kunjungi. Seperti teknologi Privacy Sandbox, setelan pengguna dapat berkembang dengan masukan dari pengguna, badan pengatur, dan lainnya.

Kami akan terus memperbarui setelan yang tersedia di Chrome seiring berlangsungnya proposal Protected Audience, berdasarkan pengujian dan masukan. Ke depannya, kami berencana menawarkan setelan yang lebih terperinci untuk mengelola Protected Audience dan data terkait.

Pemanggil API tidak dapat mengakses keanggotaan grup saat pengguna menjelajah dalam mode Samaran, dan langganan akan dihapus saat pengguna menghapus data situs mereka.



Berinteraksi dan memberikan masukan

Mendapatkan dukungan

Untuk mengajukan pertanyaan tentang implementasi Anda, tentang demo, atau tentang dokumentasi: * Buka masalah baru di repositori privacy-sandbox-dev-support. Pastikan Anda memilih template masalah untuk Protected Audience. * Ajukan masalah di repo kode demo di GitHub. * Untuk pertanyaan yang lebih umum tentang cara menangani kasus penggunaan Anda dengan API, ajukan masalah di repositori proposal.

Untuk bug dan masalah terkait implementasi Protected Audience API di Chrome: * Lihat masalah yang ada yang dilaporkan untuk API. * Ajukan masalah baru di crbug.com/new.

Mendapatkan info terbaru

  • Agar mendapatkan notifikasi tentang perubahan status di API, bergabunglah dengan milis untuk developer.
  • Untuk mengikuti semua diskusi berkelanjutan tentang API dengan cermat, klik tombol Watch di halaman proposal di GitHub. Untuk melakukannya, Anda harus memiliki atau membuat akun GitHub.
  • Untuk mendapatkan info terbaru secara keseluruhan tentang Privacy Sandbox, berlangganan feed RSS [Progress in the Privacy Sandbox].

Cari tahu selengkapnya


Foto oleh Ray Hennessy di Unsplash.