À qui s'adresse cet article ?
Cet article est une référence technique sur l'itération actuelle de l'API Protected Audience expérimentale.
La présentation de l'API Protected Audience est un aperçu moins technique de la proposition, qui comprend également un glossaire.
La démonstration de Protected Audience explique comment déployer FLEDGE de manière basique.
La vidéo de démonstration de Protected Audience explique le fonctionnement du code de démonstration et montre comment utiliser les outils pour les développeurs Chrome pour déboguer Protected Audience.
Qu'est-ce que Protected Audience ?
L'API Protected Audience est une proposition de la Privacy Sandbox qui cible une audience personnalisée et les cas de remarketing. Elle est conçue pour empêcher les tiers de suivre les habitudes de navigation de l'utilisateur sur les sites. L'API permet au navigateur d'organiser des enchères sur l'appareil afin de choisir des annonces pertinentes pour les sites Web que l'utilisateur a déjà visités.
Protected Audience est le premier test à être implémenté dans Chromium dans la famille de propositions TURTLEDOVE.
Le schéma ci-dessous présente une vue d'ensemble du cycle de vie de FLEDGE:

Comment puis-je essayer Protected Audience ?
Démonstration de Protected Audience
Une procédure de déploiement de base de Protected Audience sur les sites des annonceurs et des éditeurs est disponible sur protected-audience-demo.web.app.
La vidéo de démonstration explique le fonctionnement du code de démonstration et montre comment utiliser les outils pour les développeurs Chrome pour déboguer Protected Audience.
Participer à une phase d'évaluation de Protected Audience
Une phase d'évaluation de la pertinence et de la mesure de la Privacy Sandbox a été mise à disposition dans Chrome Bêta 101.0.4951.26 et versions ultérieures sur ordinateur pour les API Protected Audience, Topics et Attribution Reporting.
Pour participer, inscrivez-vous pour obtenir un jeton d'essai de l'origine.
Une fois que vous vous êtes inscrit au programme d'évaluation, vous pouvez tester l'API JavaScript Protected Audience sur les pages qui fournissent un jeton d'évaluation valide: par exemple, pour demander au navigateur de rejoindre un ou plusieurs groupes de centres d'intérêt, puis d'exécuter une mise aux enchères d'annonces afin de sélectionner et d'afficher une annonce.
La démo Protected Audience fournit un exemple de base de déploiement de Protected Audience de bout en bout.
Fournissez un jeton d'essai pour chaque page sur laquelle vous souhaitez exécuter du code de l'API Protected Audience:
En tant que balise Meta dans <head>:
<meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">
En tant qu'en-tête HTTP:
Origin-Trial: TOKEN_GOES_HERE
En fournissant un jeton de manière programmatique:
const otMeta = document.createElement('meta'); otMeta.httpEquiv = 'origin-trial'; otMeta.content = 'TOKEN_GOES_HERE'; document.head.append(otMeta);
Un iframe exécutant du code Protected Audience (par exemple, un appel navigator.joinAdInterestGroup()
par le propriétaire d'un groupe de centres d'intérêt) doit fournir un jeton correspondant à son origine.
Proposed First Protected Audience Origin Trial Details (Détails du premier test d'origine de l'API Protected Audience) fournit plus d'informations sur les objectifs du premier test et explique les fonctionnalités compatibles.
Tester cette API
Vous pouvez tester Protected Audience pour un seul utilisateur dans Chrome Bêta 101.0.4951.26 ou version ultérieure sur ordinateur:
- En activant toutes les API de confidentialité des annonces sous
chrome://settings/adPrivacy
- En définissant des indicateurs à partir de la ligne de commande.
Afficher des annonces dans des iFrames ou des cadres cloisonnés
Les annonces peuvent être affichées dans un <iframe>
ou un <fencedframe>
, en fonction des indicateurs définis.
Pour utiliser <fencedframe>
pour afficher des annonces:
--enable-features=InterestGroupStorage,AdInterestGroupAPI,Fledge,FencedFrames
Pour utiliser <iframe>
pour afficher des annonces:
--enable-features=InterestGroupStorage,AdInterestGroupAPI,Fledge,AllowURNsInIframes --disable-features=FencedFrames
Incluez l'indicateur BiddingAndScoringDebugReportingAPI
pour activer les méthodes de création de rapports de perte/victoire de débogage temporaires.
Exécuter Chromium avec des indicateurs explique comment définir des indicateurs lorsque vous exécutez Chrome et d'autres navigateurs basés sur Chromium à partir de la ligne de commande. La liste complète des flags Protected Audience est disponible sur la recherche de code Chromium.
Quelles fonctionnalités sont compatibles avec la dernière version de Chrome ?
Protected Audience est disponible derrière des flags de fonctionnalité dans Chromium pour la première fois afin de tester les fonctionnalités suivantes de la proposition Protected Audience:
- Groupes d'intérêt: stockés par le navigateur, avec des métadonnées associées pour configurer les enchères et l'affichage des annonces.
- Enchères sur l'appareil par les acheteurs (DSP ou annonceur): basées sur des groupes d'intérêts stockés et des signaux du vendeur.
- Sélection d'annonces sur l'appareil par le vendeur (SSP ou éditeur): en fonction des enchères et des métadonnées des acheteurs.
- Affichage d'annonces dans une version temporairement allégée de Fenced Frames: l'accès au réseau et la journalisation sont autorisés pour l'affichage des annonces.
La vidéo d'explication de l'API fournit plus d'informations sur la compatibilité des fonctionnalités et les contraintes.
Autorisations des groupes d'intérêt
Par défaut, dans l'implémentation actuelle de Protected Audience, l'appel de joinAdInterestGroup()
est autorisé depuis n'importe quelle partie d'une page, même depuis des iFrames interdomaines. À l'avenir, une fois que les propriétaires de sites auront eu le temps d'ajuster leurs règles d'autorisation pour les iFrames interdomaines, il est prévu d'interdire les appels provenant d'iFrames interdomaines, comme indiqué dans la vidéo explicative.
Service clé-valeur
Dans le cadre d'une mise aux enchères d'annonces Protected Audience, le navigateur peut accéder à un service clés-valeurs qui renvoie des paires clé-valeur simples pour fournir des informations à un acheteur d'annonces, comme le budget de campagne restant. La proposition Protected Audience exige que ce serveur "n'effectue aucune journalisation au niveau des événements et n'implique aucun autre effet secondaire basé sur ces requêtes".
Le code du service de clé-valeur Protected Audience est désormais disponible dans un dépôt GitHub Privacy Sandbox. Ce service peut être utilisé par les développeurs Chrome et Android. Pour en savoir plus, consultez cet article de blog. Pour en savoir plus sur le service clé-valeur Protected Audience, consultez la présentation de l'API et la présentation du modèle de confiance.
Pour les tests initiaux, le modèle Bring Your Own Server (Apportez votre propre serveur) est utilisé. À long terme, les technologies publicitaires devront utiliser les services clé-valeur Open Source Protected Audience exécutés dans des environnements d'exécution sécurisés pour récupérer des données en temps réel.
Pour que l'écosystème ait suffisamment de temps pour effectuer des tests, nous ne prévoyons pas d'exiger l'utilisation des services de clés-valeurs ou des TEE open source avant la fin de la période d'abandon des cookies tiers. Nous leur donnerons un préavis suffisant pour qu'ils puissent commencer à tester et à adopter cette fonctionnalité avant cette transition.
Détecter la compatibilité des fonctionnalités
Avant d'utiliser l'API, vérifiez si elle est compatible avec le navigateur et disponible dans le document:
'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');
Comment désactiver Protected Audience ?
Vous pouvez bloquer l'accès à l'API Protected Audience en tant que propriétaire de site ou en tant qu'utilisateur individuel.
Comment les sites peuvent-ils contrôler l'accès ?
À terme, Protected Audience exigera que les sites définissent une règle d'autorisation pour que la fonctionnalité Protected Audience soit disponible. Cela permet de s'assurer que des tiers arbitraires ne peuvent pas utiliser l'API à l'insu d'un site. Toutefois, pour faciliter les tests lors du premier test d'origine, cette exigence est levée par défaut. Les sites qui souhaitent désactiver explicitement la fonctionnalité Protected Audience pendant la période de test peuvent utiliser le règlement sur les autorisations approprié pour bloquer l'accès.
Vous pouvez définir deux règles d'autorisation Protected Audience indépendamment:
join-ad-interest-group
active/désactive la fonctionnalité permettant d'ajouter un navigateur à des groupes de centres d'intérêtrun-ad-auction
active/désactive la fonctionnalité permettant d'exécuter une mise aux enchères sur l'appareil.
L'accès aux API Protected Audience peut être complètement désactivé dans les contextes propriétaires en spécifiant la règle d'autorisation suivante dans un en-tête de réponse HTTP:
Permissions-Policy: join-ad-interest-group=(), run-ad-auction=()
Vous pouvez désactiver l'utilisation des API dans un iFrame en ajoutant l'attribut allow
suivant à un élément iFrame:
<iframe src="https://example.com" allow="join-ad-interest-group 'none'; run-ad-auction 'none'"></iframe>
Pour en savoir plus, consultez la section Proposed First Protected Audience Origin Trial Permissions-Policy (Proposition de première règle permissions-policy pour la phase d'évaluation de l'origine Protected Audience).
Opposition expresse de l'utilisateur
Un utilisateur peut bloquer l'accès à l'API Protected Audience et à d'autres fonctionnalités de la Privacy Sandbox à l'aide de l'un des mécanismes suivants:
- Désactivez les essais de la Privacy Sandbox dans les paramètres de Chrome: Paramètres > Sécurité et confidentialité > Privacy Sandbox. Vous pouvez également y accéder à l'adresse
chrome://settings/adPrivacy
. - Désactivez les cookies tiers dans les paramètres Chrome: Paramètres > Confidentialité et sécurité.
- Définissez Cookies et autres données des sites sur "Bloquer les cookies tiers" ou "Bloquer tous les cookies" depuis
chrome://settings/cookies
. - Utilisez le mode navigation privée.
La présentation de Protected Audience fournit plus d'informations sur les éléments de conception de l'API et explique comment l'API cherche à atteindre des objectifs de confidentialité.
Déboguer les worklets Protected Audience
À partir de Chrome Canary 98.0.4718.0, vous pouvez déboguer les worklets Protected Audience dans les outils pour les développeurs Chrome.
La première étape consiste à définir des points d'arrêt via une nouvelle catégorie dans le volet Points d'arrêt de l'écouteur d'événements du panneau Sources.

Lorsqu'un point d'arrêt se déclenche, l'exécution est interrompue avant la première instruction au niveau supérieur du script de worklet. Vous pouvez utiliser des points d'arrêt ou des commandes d'étape réguliers pour accéder à la fonction d'enchères/d'évaluation/de création de rapports elle-même.
Les scripts de worklet en cours d'exécution s'affichent également dans le panneau "Threads" (Fils de discussion).

Étant donné que certains worklets peuvent s'exécuter en parallèle, plusieurs threads peuvent se retrouver dans l'état "suspendu". Vous pouvez utiliser la liste des threads pour passer d'un thread à l'autre, et les reprendre ou les inspecter de plus près si nécessaire.
Observer les événements Protected Audience
Dans le panneau "Application" des outils pour les développeurs Chrome, vous pouvez observer les événements de mise aux enchères et les groupes de centres d'intérêt Protected Audience.
Si vous accédez au site de démonstration de shopping Protected Audience dans un navigateur avec Protected Audience activé, DevTools affiche des informations sur l'événement join
.

Si vous accédez au site de l'éditeur de démonstration Protected Audience dans un navigateur avec Protected Audience activé, DevTools affiche des informations sur les événements bid
et win
.

Comment fonctionne l'API Protected Audience ?
Dans cet exemple, un utilisateur parcourt le site Web d'un fabricant de vélos personnalisés, puis visite un site d'actualités et voit une annonce pour un nouveau vélo de ce fabricant.
1. Un utilisateur consulte le site d'un annonceur

Imaginons qu'un utilisateur visite le site Web d'un fabricant de vélos sur mesure (l'annonceur dans cet exemple) et passe un certain temps sur la page produit d'un vélo en acier fait main. Cela offre au fabricant de vélos une opportunité de remarketing.
2. Le navigateur de l'utilisateur est invité à ajouter un groupe d'intérêts

Section d'explication:Les navigateurs enregistrent les groupes de centres d'intérêt
La plate-forme côté demande (DSP) de l'annonceur (ou l'annonceur lui-même) appelle navigator.joinAdInterestGroup()
pour demander au navigateur d'ajouter un groupe de centres d'intérêt à la liste des groupes dont il est membre. Dans cet exemple, le groupe est nommé custom-bikes
et le propriétaire est dsp.example
. Le propriétaire du groupe d'intérêts (dans ce cas, la DSP) est un acheteur lors de l'enchère publicitaire décrite à l'étape 4.
L'appartenance à un groupe de centres d'intérêt est stockée par le navigateur, sur l'appareil de l'utilisateur, et n'est pas partagée avec le fournisseur du navigateur ni avec un tiers.
joinAdInterestGroup()
nécessite l'autorisation de:
- Site consulté
- Propriétaire du groupe d'intérêt
Par exemple, malicious.example
ne doit pas pouvoir appeler joinAdInterestGroup()
avec dsp.example
comme propriétaire sans l'autorisation de dsp.example
.
Autorisation du site consulté
Même origine: par défaut, l'autorisation est implicitement accordée pour les appels joinAdInterestGroup()
provenant de la même origine que le site visité, c'est-à-dire de la même origine que le frame de niveau supérieur de la page actuelle. Les sites peuvent utiliser la directive join-ad-interest-group
de l'en-tête de règles d'autorisation Protected Audience pour désactiver les appels joinAdInterestGroup()
.
Multi-origine: l'appel de joinAdInterestGroup()
à partir d'origines différentes de la page actuelle ne peut aboutir que si le site visité a défini une stratégie d'autorisation qui autorise les appels à joinAdInterestGroup()
à partir d'iFrames multi-origines.
Autorisation du propriétaire du groupe de centres d'intérêt
L'autorisation du propriétaire du groupe de centres d'intérêt est accordée implicitement en appelant joinAdInterestGroup()
à partir d'un iframe ayant la même origine que celle du propriétaire du groupe de centres d'intérêt. Par exemple, un iframe dsp.example
peut appeler joinAdInterestGroup()
pour les groupes de centres d'intérêt appartenant à dsp.example
.
La proposition est que joinAdInterestGroup()
puisse s'exécuter dans une page ou une iFrame dans le domaine du propriétaire, ou être délégué à d'autres domaines fournis à l'aide d'une liste à une URL .well-known
.
Utiliser navigator.joinAdInterestGroup()
Voici un exemple d'utilisation de l'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);
L'objet interestGroup
transmis à la fonction ne doit pas dépasser 50 ko, sinon l'appel échouera. Le deuxième paramètre spécifie la durée du groupe de centres d'intérêt, limitée à 30 jours. Les appels successifs écrasent les valeurs précédemment stockées.
Propriétés du groupe d'intérêt
Propriété | Obligatoire | Exemple | Rôle |
---|---|---|---|
owner |
Obligatoire | 'https://dsp.example' |
Origine du propriétaire du groupe d'intérêts. |
name |
Obligatoire | 'custom-bikes' |
Nom du groupe de centres d'intérêt. |
biddingLogicUrl ** |
Facultatif* | 'https://dsp.example/bid/custom-bikes/bid.js' |
URL du code JavaScript d'enchères exécuté dans un worklet. |
biddingWasmHelperUrl ** |
Facultatif* | 'https://dsp.example/bid/custom-bikes/bid.wasm' |
URL du code WebAssembly exécuté à partir de biddingLogicUrl . |
dailyUpdateUrl ** |
Facultatif | 'https://dsp.example/bid/custom-bikes/update' |
URL qui renvoie un code JSON pour mettre à jour les attributs des groupes de centres d'intérêt. (voir Mettre à jour le groupe de centres d'intérêt). |
trustedBiddingSignalsUrl ** |
Facultatif | 'https://dsp.example/trusted/bidding-signals' |
URL de base pour les requêtes de clés-valeurs adressées au serveur approuvé de l'enchérisseur. |
trustedBiddingSignalsKeys |
Facultatif | ['key1', 'key2' ...] |
Clés pour les requêtes envoyées au serveur approuvé de clés-valeurs. |
userBiddingSignals |
Facultatif | {...} |
Métadonnées supplémentaires que le propriétaire peut utiliser lors des enchères. |
ads |
Facultatif* | [bikeAd1, bikeAd2, bikeAd3] |
Annonces susceptibles d'être diffusées pour ce groupe de centres d'intérêt |
adComponents |
Facultatif | [customBike1, customBike2, bikePedal, bikeFrame1, bikeFrame2] |
Composants des annonces composées de plusieurs éléments. |
* Toutes les propriétés sont facultatives, sauf owner
et name
. Les propriétés biddingLogicUrl
et ads
sont facultatives, mais obligatoires pour participer à une mise aux enchères. Il peut y avoir des cas d'utilisation pour créer un groupe de centres d'intérêt sans ces propriétés: par exemple, le propriétaire d'un groupe de centres d'intérêt peut vouloir ajouter un navigateur à un groupe de centres d'intérêt pour une campagne qui n'est pas encore diffusée, ou pour une autre utilisation future, ou il peut avoir temporairement épuisé son budget publicitaire.
** Les URL biddingLogicUrl
, biddingWasmHelperUrl
, dailyUpdateUrl
et trustedBiddingSignalsUrl
doivent avoir la même origine que le propriétaire. Les URL ads
et adComponents
ne sont pas soumises à cette contrainte.
Modifier les attributs des groupes de centres d'intérêt
dailyUpdateUrl
spécifie un serveur Web qui renvoie un code JSON définissant les propriétés du groupe de centres d'intérêt, correspondant à l'objet de groupe de centres d'intérêt transmis à navigator.joinAdInterestGroup()
. Cela permet au propriétaire du groupe de mettre à jour périodiquement les attributs du groupe de centres d'intérêt. Dans l'implémentation actuelle, les attributs suivants peuvent être modifiés:
biddingLogicUrl
biddingWasmHelperUrl
trustedBiddingSignalsUrl
trustedBiddingSignalsKeys
ads
priority
Aucun champ non spécifié dans le fichier JSON ne sera écrasé (seuls les champs spécifiés dans le fichier JSON seront mis à jour), tandis que l'appel de navigator.joinAdInterestGroup()
écrase tout groupe de centres d'intérêt existant.
Les mises à jour sont effectuées dans la mesure du possible et peuvent échouer dans les cas suivants:
- Délai avant expiration de la requête réseau (actuellement 30 secondes).
- Autre erreur réseau.
- Échec de l'analyse JSON.
Les mises à jour peuvent également être annulées si trop de temps consécutif a été consacré à la mise à jour, mais cela n'impose aucune limitation de débit aux mises à jour annulées (restantes). Les mises à jour sont limitées à une par jour. Les mises à jour qui échouent en raison d'erreurs réseau sont réessayées au bout d'une heure, et celles qui échouent en raison d'une déconnexion d'Internet sont réessayées immédiatement lors de la reconnexion.
Mises à jour manuelles
Les mises à jour des groupes de centres d'intérêt appartenant à l'origine du frame actuel peuvent être déclenchées manuellement via navigator.updateAdInterestGroups()
. La limitation du débit empêche les mises à jour de se produire trop fréquemment : les appels répétés à navigator.updateAdInterestGroups()
ne sont pas effectués tant que la période de limitation du débit (actuellement un jour) n'est pas écoulée. La limite de débit est réinitialisée si navigator.joinAdInterestGroup()
est appelé à nouveau pour le même groupe de centres d'intérêt owner
et name
.
Mises à jour automatiques
Tous les groupes de centres d'intérêt chargés pour une mise aux enchères sont mis à jour automatiquement une fois la mise aux enchères terminée, et sont soumis aux mêmes limites de débit que les mises à jour manuelles. Pour chaque propriétaire disposant d'au moins un groupe de centres d'intérêt participant à une mise aux enchères, il est comme si navigator.updateAdInterestGroups()
était appelé à partir d'un iFrame dont l'origine correspond à ce propriétaire.
Spécifier des annonces pour un groupe de centres d'intérêt
Les objets ads
et adComponents
incluent une URL pour une création publicitaire et, éventuellement, des métadonnées arbitraires pouvant être utilisées au moment des enchères. Exemple :
{
renderUrl: 'https://cdn.example/.../bikeAd1.html',
metadata: bikeAd1metadata // optional
}
Comment les acheteurs définissent-ils des enchères ?
Le script situé à biddingLogicUrl
fourni par le propriétaire d'un groupe de centres d'intérêt doit inclure une fonction generateBid()
. Lorsqu'un vendeur d'espace publicitaire appelle navigator.runAdAuction()
, la fonction generatedBid()
est appelée une fois pour chacun des groupes de centres d'intérêt dont le navigateur est membre, si le propriétaire du groupe de centres d'intérêt est invité à définir une enchère. En d'autres termes, generateBid()
est appelé une fois pour chaque annonce candidate. Le vendeur fournit une propriété decisionLogicUrl
sur le paramètre de configuration des enchères transmis à navigator.runAdAuction()
. Le code de cette URL doit inclure une fonction scoreAd()
, qui est exécutée pour chaque enchérisseur de l'enchère, afin d'évaluer chacune des enchères renvoyées par generateBid()
.
Le script situé à biddingLogicUrl
fourni par un acheteur d'espace publicitaire doit inclure une fonction generateBid()
.
Cette fonction est appelée une fois pour chaque annonce candidate. runAdAuction()
vérifie individuellement chaque annonce, ainsi que son enchère et ses métadonnées associées, puis attribue à l'annonce un score de désirabilité numérique.
generateBid(interestGroup, auctionSignals, perBuyerSignals,
trustedBiddingSignals, browserSignals) {
...
return {
ad: adObject,
bid: bidValue,
render: renderUrl,
adComponents: [adComponentRenderUrl1, ...]
};
}
generateBid()
utilise les arguments suivants :
interestGroup
Objet transmis àjoinAdInterestGroup()
par l'acheteur d'annonces. (Le groupe de centres d'intérêt peut être mis à jour viadailyUpdateUrl
.)auctionSignals
Propriété de l'argument config d'enchères transmise ànavigator.runAdAuction()
par le vendeur d'espace publicitaire. Il fournit des informations sur le contexte de la page (taille de l'annonce et ID de l'éditeur, par exemple), le type d'enchères (au premier ou au second prix) et d'autres métadonnées.perBuyerSignals
Comme pourauctionSignals
, propriété de l'argument configuration des enchères transmise ànavigator.runAdAuction()
par le vendeur. Cela peut fournir des signaux contextuels du serveur de l'acheteur sur la page, si le vendeur est une SSP qui effectue un appel d'enchères en temps réel aux serveurs de l'acheteur et renvoie la réponse, ou si la page de l'éditeur contacte directement le serveur de l'acheteur. Si tel est le cas, l'acheteur peut souhaiter vérifier une signature cryptographique de ces signaux dans generateBid() pour se protéger contre la falsification.trustedBiddingSignals
Objet dont les clés sont lestrustedBiddingSignalsKeys
du groupe de centres d'intérêt et dont les valeurs sont renvoyées dans la requêtetrustedBiddingSignals
.browserSignals
Objet construit par le navigateur, qui peut inclure des informations sur le contexte de la page (telles que l'hostname
de la page actuelle, que le vendeur pourrait falsifier) et des données pour le groupe d'intérêt lui-même (telles qu'un enregistrement de la date à laquelle le groupe a remporté une mise aux enchères précédemment, pour permettre le plafonnement de la fréquence sur l'appareil).
L'objet browserSignals
présente les propriétés suivantes:
{
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). */
}
Pour calculer une valeur bid
, le code en generateBid()
peut utiliser les propriétés des paramètres de la fonction. Exemple :
function generateBid(interestGroup, auctionSignals, perBuyerSignals,
trustedBiddingSignals, browserSignals) {
return {
...
bid: auctionSignals.is_above_the_fold ? perBuyerSignals.atf_value : perBuyerSignals.btf_value,
...
}
}
generateBid()
renvoie un objet avec quatre propriétés:
ad
Métadonnées arbitraires sur l'annonce, telles que les informations que le vendeur s'attend à obtenir sur cette enchère ou cette création publicitaire. Le vendeur](/resources/glossary#ssp) utilise ces informations dans ses enchères et sa décision concernant la création publicitaire. Le vendeur utilise ces informations dans sa logique d'enchères et de prise de décision.bid
Enchère numérique qui sera soumise aux enchères. Le vendeur doit pouvoir comparer les enchères de différents acheteurs. Par conséquent, les enchères doivent être exprimées dans une unité choisie par le vendeur (par exemple, "USD par mille"). Si l'enchère est nulle ou négative, ce groupe de centres d'intérêt ne participera pas du tout à la mise aux enchères du vendeur. Grâce à ce mécanisme, l'acheteur peut implémenter des règles d'annonceur pour déterminer où ses annonces peuvent ou non s'afficher.render
URL ou liste d'URL qui seront utilisées pour afficher la création si cette enchère remporte la mise aux enchères. (Voir la section Annonces composées de plusieurs éléments dans la présentation de l'API.) La valeur doit correspondre à l'renderUrl
de l'une des annonces définies pour le groupe de centres d'intérêt.adComponents
Liste facultative de 20 composants maximum pour les annonces composées de plusieurs éléments, extraite de la propriétéadComponents
de l'argument de groupe d'intérêts transmis ànavigator.joinAdInterestGroup()
.
Demander à un navigateur de quitter un groupe de centres d'intérêt
Le propriétaire d'un groupe de centres d'intérêt peut demander la suppression d'un navigateur de ce groupe. En d'autres termes, le navigateur est invité à supprimer le groupe de centres d'intérêt de la liste des groupes dont il est membre.
navigator.leaveAdInterestGroup({
owner: 'https://dsp.example',
name: 'custom-bikes'
});
Si un utilisateur revient sur le site qui a demandé au navigateur d'ajouter un groupe de centres d'intérêt, le propriétaire du groupe peut appeler la fonction navigator.leaveAdInterestGroup()
pour demander au navigateur de supprimer le groupe.
Le code d'une annonce peut également appeler cette fonction pour son groupe de centres d'intérêt.
3. L'utilisateur consulte un site qui vend de l'espace publicitaire.

Plus tard, l'utilisateur consulte un site qui vend de l'espace publicitaire, par exemple un site d'actualités. Le site dispose d'un inventaire publicitaire, qu'il vend de façon programmatique à l'aide d'enchères en temps réel.
4. Une mise aux enchères publicitaires est effectuée dans le navigateur

Section d'explication:Les vendeurs exécutent des enchères sur l'appareil
L'enchère publicitaire est probablement gérée par le SSP de l'éditeur ou par l'éditeur lui-même. L'objectif de la mise aux enchères est de sélectionner l'annonce la plus appropriée pour un seul espace publicitaire disponible sur la page actuelle. Les enchères tiennent compte des groupes de centres d'intérêt auxquels le navigateur appartient, ainsi que des données des acheteurs d'espaces publicitaires et des vendeurs des services clé-valeur.
Le vendeur d'espace publicitaire envoie une requête au navigateur de l'utilisateur pour lancer une mise aux enchères d'annonces en appelant navigator.runAdAuction()
.
Exemple :
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()
renvoie une promesse qui se résout en URN (urn:uuid:<something>
) qui représente le résultat de l'enchère publicitaire. Le navigateur ne peut le décoder que lorsqu'il est transmis à un cadre clôturé pour l'affichage. La page de l'éditeur ne peut pas inspecter l'annonce gagnante.
Le script decisionLogicUrl
examine chaque annonce individuelle, ainsi que son enchère et ses métadonnées associées, une par une, puis lui attribue un score de désirabilité numérique.
auctionConfig
établissements
Propriété | Obligatoire | Exemple | Rôle |
---|---|---|---|
seller |
Obligatoire | 'https://ssp.example' |
Origine du vendeur. |
decisionLogicUrl |
Obligatoire | 'https://ssp.example/auction-decision-logic.js' |
URL du code JavaScript du worklet d'enchères. |
trustedScoringSignalsUrl |
Facultatif | 'https://ssp.example/scoring-signals' |
URL du serveur de confiance du vendeur. |
interestGroupBuyers* |
Obligatoire | ['https://dsp.example', 'https://buyer2.example', ...] |
Origines de tous les propriétaires de groupes de centres d'intérêt invités à définir une enchère lors de la mise aux enchères. |
auctionSignals |
Facultatif | {...} |
Informations sur le contexte de la page, le type d'enchères, etc. |
sellerSignals |
Facultatif | {...} |
Informations basées sur les paramètres de l'éditeur, sur l'envoi d'une demande d'annonce contextuelle, etc. |
sellerTimeout |
Facultatif | 100 |
Durée d'exécution maximale (ms) du script scoreAd() du vendeur. |
perBuyerSignals |
Facultatif | {'https://dsp.example': {...}, |
Signaux contextuels sur la page pour chaque acheteur spécifique, à partir de son serveur. |
perBuyerTimeouts |
Facultatif | 50 |
Durée d'exécution maximale (en ms) des scripts generateBid() d'un acheteur spécifique. |
componentAuctions |
Facultatif | [{'seller': 'https://www.some-other-ssp.com', |
Configurations supplémentaires pour les enchères de composants. |
* Le vendeur peut spécifier interestGroupBuyers: '*'
pour autoriser tous les groupes de centres d'intérêt à définir des enchères.
Les annonces sont ensuite acceptées ou refusées en fonction d'autres critères que l'inclusion du propriétaire du groupe d'intérêt.
Par exemple, le vendeur peut examiner les créations publicitaires pour vérifier qu'elles respectent ses règles.
** additionalBids
n'est pas compatible avec l'implémentation actuelle de Protected Audience. Pour en savoir plus, consultez la section Participants aux enchères de la présentation de l'API Protected Audience.
Comment les annonces sont-elles sélectionnées ?
Le code de decisionLogicUrl
(propriété de l'objet de configuration des enchères transmis à runAdAuction()
) doit inclure une fonction scoreAd()
. Cette opération est exécutée une fois pour chaque annonce afin de déterminer son attrait.
scoreAd(adMetadata, bid, auctionConfig, trustedScoringSignals, browserSignals) {
...
return desirabilityScoreForThisAd;
}
scoreAd()
utilise les arguments suivants :
adMetadata
Métadonnées arbitraires fournies par l'acheteur.bid
Valeur d'enchère numérique.auctionConfig
Objet de configuration des enchères transmis ànavigator.runAdAuction()
.trustedScoringSignals
Valeurs récupérées au moment des enchères à partir du serveur approuvé du vendeur, représentant l'opinion du vendeur sur l'annonce.browserSignals
Objet créé par le navigateur, y compris les informations que le navigateur connaît et que le script d'enchères du vendeur peut vouloir vérifier:
{
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. */
}
Avant le début d'une mise aux enchères, le vendeur trouve la meilleure annonce contextuelle pour l'espace publicitaire disponible. Une partie de la logique scoreAd()
consiste à rejeter toute annonce qui ne peut pas battre l'annonce gagnante basée sur le contexte.
5. Le vendeur et les acheteurs participants reçoivent des données en temps réel du service clés-valeurs.

Section d'explication:Récupérer des données en temps réel à partir du service clés-valeurs Protected Audience
Lors d'enchères publicitaires, le vendeur d'espaces publicitaires peut obtenir des données en temps réel sur des créations publicitaires spécifiques en envoyant une requête à un service clés-valeurs à l'aide de la propriété trustedScoringSignalsUrl
de l'argument configuration des enchères transmis à navigator.runAdAuction()
, ainsi que des clés des propriétés renderUrl
de toutes les entrées des champs ads
et adComponents
de tous les groupes de centres d'intérêt de l'enchère.
De même, un acheteur d'espace publicitaire peut demander des données en temps réel au service clés-valeurs à l'aide des propriétés trustedBiddingSignalsUrl
et trustedBiddingSignalsKeys
de l'argument de groupe d'intérêts transmis à navigator.joinAdInterestGroup()
.
Lorsque runAdAuction()
est appelé, le navigateur envoie une requête au serveur de confiance de chaque acheteur d'annonces. L'URL de la requête peut se présenter comme suit:
https://kv-service.example/getvalues?hostname=publisher.example&keys=key1,key2
- L'URL de base provient de
trustedBiddingSignalsUrl
. hostname
est fourni par le navigateur.- La valeur
keys
est extraite detrustedBiddingSignalsKeys
.
La réponse à cette requête est un objet JSON fournissant des valeurs pour chacune des clés.
6. L'annonce gagnante est diffusée

Section d'explication:Les navigateurs affichent l'annonce gagnante
Comme décrit précédemment, la promesse renvoyée par runAdAuction()
se résout en URN, qui est transmise à un cadre clôturé pour le rendu, et le site affiche l'annonce gagnante.
7. Le résultat de l'enchère est enregistré
Section d'explication:Rapports au niveau des événements (pour le moment)
Résultat du rapport du vendeur
Section d'explication:Rapports sur le rendu pour les marchands
Le code JavaScript du vendeur fourni à decisionLogicUrl
(qui a également fourni scoreAd()
) peut inclure une fonction reportResult()
pour signaler le résultat de l'enchère.
reportResult(auctionConfig, browserSignals) {
...
return signalsForWinner;
}
Les arguments transmis à cette fonction sont les suivants:
auctionConfig
Objet de configuration des enchères transmis ànavigator.runAdAuction()
.browserSignals
Objet créé par le navigateur et fournissant des informations sur l'enchère. Par exemple:{ 'topWindowHostname': 'publisher.example', 'interestGroupOwner': 'https://dsp.example', 'renderUrl': 'https://cdn.example/url-of-winning-creative.wbn', 'bid:' <bidValue>, 'desirability': <winningAdScore> }
La valeur renvoyée par cette fonction est utilisée comme argument sellerSignals
pour la fonction reportWin()
de l'enchérisseur gagnant.
Résultat du rapport sur l'enchérisseur gagnant
Section d'explication:Rapports de l'acheteur sur les événements de rendu et d'annonce
Le code JavaScript de l'enchérisseur gagnant (qui a également fourni generateBid()
) peut inclure une fonction reportWin()
pour signaler le résultat de l'enchère.
reportWin(auctionSignals, perBuyerSignals, sellerSignals, browserSignals) {
...
}
Les arguments transmis à cette fonction sont les suivants:
auctionSignals
etperBuyerSignals
Les mêmes valeurs transmises àgenerateBid()
pour l'enchérisseur gagnant.sellerSignals
Valeur renvoyée parreportResult()
, qui permet au vendeur de transmettre des informations à l'acheteur.browserSignals
Objet créé par le navigateur et fournissant des informations sur l'enchère. Par exemple:{ 'topWindowHostname': 'publisher.example', 'seller': 'https://ssp.example', 'interestGroupOwner': 'https://dsp.example', 'interestGroupName': 'custom-bikes', 'renderUrl': 'https://cdn.example/winning-creative.wbn', 'bid:' <bidValue> }
Implémentation temporaire des rapports sur les gains/pertes
Deux méthodes sont temporairement disponibles dans Chrome pour créer des rapports sur les enchères:
forDebuggingOnly.reportAdAuctionLoss()
forDebuggingOnly.reportAdAuctionWin()
Chacune de ces méthodes accepte un seul argument: une URL à extraire une fois l'enchère terminée. Ils peuvent être appelés plusieurs fois, à la fois dans scoreAd()
et generateBid()
, avec différents arguments d'URL.
Chrome n'envoie des rapports de débogage sur les pertes/gains que lorsqu'une enchère est exécutée jusqu'à son terme. Si une mise aux enchères est annulée (par exemple, en raison d'une nouvelle navigation), aucun rapport ne sera généré.
Ces méthodes sont disponibles par défaut dans Chrome. Pour pouvoir tester les méthodes, activez toutes les API de confidentialité des annonces sous chrome://settings/adPrivacy
. Si vous exécutez Chrome avec des indicateurs de ligne de commande pour activer l'API Protected Audience, vous devez activer explicitement les méthodes en incluant l'indicateur BiddingAndScoringDebugReportingAPI
. Si l'indicateur n'est pas activé, les méthodes restent disponibles, mais ne font rien.
8. Un clic sur une annonce est enregistré

Un clic sur une annonce affichée dans un cadre délimité est enregistré. Pour en savoir plus sur le fonctionnement de ce processus, consultez la section Rapports sur les annonces avec cadres délimités.
Le schéma ci-dessous décrit chaque étape d'une enchère publicitaire Protected Audience:

Quelle est la différence entre Protected Audience et TURTLEDOVE ?
Protected Audience est le premier test à être implémenté dans Chromium dans la famille de propositions TURTLEDOVE.
Protected Audience suit les principes généraux de TURTLEDOVE. Certaines publicités en ligne sont basées sur la diffusion d'une annonce auprès d'une personne potentiellement intéressée qui a déjà interagi avec l'annonceur ou le réseau publicitaire. Historiquement, l'annonceur reconnaissait une personne spécifique lorsqu'elle naviguait sur des sites Web, ce qui constitue un problème de confidentialité majeur sur le Web d'aujourd'hui.
L'initiative TURTLEDOVE vise à proposer une nouvelle API pour répondre à ce cas d'utilisation, tout en offrant des avancées clés en matière de confidentialité:
- C'est le navigateur, et non l'annonceur, qui détient les informations sur les centres d'intérêt supposés d'une personne.
- Les annonceurs peuvent diffuser des annonces en fonction d'un centre d'intérêt, mais ne peuvent pas combiner ce centre d'intérêt avec d'autres informations sur une personne, en particulier son identité ou la page qu'elle consulte.
Protected Audience est né de TURTLEDOVE et d'un ensemble de propositions de modifications associées pour mieux servir les développeurs qui utiliseraient l'API:
- Dans SPARROW, Criteo a proposé d'ajouter un modèle de service (appelé "Gatekeeper") exécuté dans un environnement d'exécution sécurisé (TEE). Protected Audience inclut une utilisation plus limitée des TEE, pour la recherche de données en temps réel et les rapports agrégés.
- Les propositions TERN de NextRoll et PARRROT de Magnite décrivaient les différents rôles des acheteurs et des vendeurs dans les enchères sur l'appareil. Le flux d'enchères/d'évaluation des annonces de Protected Audience est basé sur ce travail.
- Les modifications TURTLEDOVE basées sur les résultats et au niveau du produit de RTB House ont amélioré le modèle d'anonymat et les fonctionnalités de personnalisation des enchères sur l'appareil.
- PARAKEET est la proposition de Microsoft pour un service publicitaire semblable à TURTLEDOVE qui s'appuie sur un serveur proxy exécuté dans un TEE entre le navigateur et les fournisseurs de technologie publicitaire, afin d'anonymiser les requêtes publicitaires et de mettre en œuvre des propriétés de confidentialité. Protected Audience n'a pas adopté ce modèle de proxy. Nous alignons les API JavaScript pour PARAKEET et Protected Audience afin de faciliter les futurs travaux visant à combiner davantage les meilleures fonctionnalités des deux propositions.
Protected Audience n'empêche pas encore le réseau publicitaire d'un site Web d'apprendre quelles annonces un utilisateur voit. Nous prévoyons de modifier l'API pour qu'elle devienne plus privée au fil du temps.
Quelle configuration de navigateur est disponible ?
Les utilisateurs peuvent ajuster leur participation aux essais de la Privacy Sandbox dans Chrome en activant ou en désactivant le paramètre de niveau supérieur dans chrome://settings/adPrivacy
. Lors des tests initiaux, les utilisateurs pourront utiliser ce paramètre de la Privacy Sandbox de haut niveau pour désactiver Protected Audience. Chrome prévoit de permettre aux utilisateurs de consulter et de gérer la liste des groupes de centres d'intérêt auxquels ils ont été ajoutés sur les sites Web qu'ils ont consultés. Comme pour les technologies de la Privacy Sandbox elles-mêmes, les paramètres utilisateur peuvent évoluer en fonction des commentaires des utilisateurs, des autorités de régulation et d'autres personnes.
Nous continuerons de mettre à jour les paramètres disponibles dans Chrome à mesure que la proposition Protected Audience évoluera, en fonction des tests et des commentaires. À l'avenir, nous prévoyons de proposer des paramètres plus précis pour gérer Protected Audience et les données associées.
Les appelants d'API ne peuvent pas accéder à l'appartenance au groupe lorsque les utilisateurs naviguent en mode navigation privée. L'appartenance est supprimée lorsque les utilisateurs effacent leurs données de site.
Interagir et envoyer des commentaires
- GitHub: lisez la proposition, posez des questions et suivez la discussion.
- W3C: discutez des cas d'utilisation dans différents secteurs dans le groupe d'activités "Improving Web Advertising" (Améliorer la publicité en ligne).
- Assistance pour les développeurs: posez des questions et participez aux discussions sur le dépôt d'assistance pour les développeurs de la Privacy Sandbox.
- Liste de diffusion FLEDGE: fledge-api-announce fournit des annonces et des informations sur l'API.
- Rejoignez les appels planifiés pour Protected Audience (toutes les deux semaines). Tout le monde est le bienvenu. Pour participer, assurez-vous d'abord de rejoindre le groupe de discussion Google Workspace Influenceurs. Vous pouvez participer activement ou simplement écouter.
- Utilisez le formulaire de commentaires de la Privacy Sandbox pour partager vos commentaires de manière privée avec l'équipe Chrome en dehors des forums publics.
Obtenir de l'aide
Pour poser une question sur votre implémentation, la démo ou la documentation:
- Ouvrez un nouveau problème dans le dépôt privacy-sandbox-dev-support. Veillez à sélectionner le modèle de problème pour Protected Audience.
- Signalez un problème dans le dépôt de code de démonstration sur GitHub.
- Pour toute question plus générale sur la façon de répondre à vos cas d'utilisation avec l'API, envoyez un problème dans le dépôt de propositions.
Pour les bugs et les problèmes liés à l'implémentation de l'API Protected Audience dans Chrome : * Affichez les problèmes existants signalés pour l'API. * Signalez un nouveau problème sur crbug.com/new.
Recevoir les dernières informations
- Pour être informé des modifications d'état dans l'API, rejoignez la liste de diffusion pour les développeurs.
- Pour suivre de près toutes les discussions en cours sur l'API, cliquez sur le bouton Follow (Suivre) sur la page de la proposition sur GitHub. Pour ce faire, vous devez disposer d'un compte GitHub ou en créer un.
- Pour recevoir des informations générales sur la Privacy Sandbox, abonnez-vous au flux RSS [Progress in the Privacy Sandbox].
En savoir plus
- API Protected Audience: présentation moins technique de la proposition.
- Démonstration de Protected Audience: présentation d'un déploiement de base de Protected Audience.
- Vidéo de démonstration de Protected Audience : explique le code de démonstration et montre comment utiliser les outils pour les développeurs Chrome pour le débogage de Protected Audience.
- Présentation technique de l'API Protected Audience
- Présentation de la Privacy Sandbox
- Intent de création de prototype
Photo de Ray Hennessy sur Unsplash.