Guide du développeur de l'API FLEDGE

À qui s'adresse cet article ?

Cet article est une référence technique à l'itération actuelle de l'API Protected Audience expérimentale.

Qu'est-ce que Protected Audience ?

L'API Protected Audience est une proposition de la Privacy Sandbox destinée à répondre aux cas d'utilisation du remarketing et des audiences personnalisées. Elle est conçue de manière à ce que des tiers ne puissent pas l'utiliser pour suivre le comportement de navigation des utilisateurs sur les sites. L'API permet aux enchères sur l'appareil par le navigateur de choisir des annonces pertinentes pour les sites Web que l'utilisateur a déjà consultés.

Protected Audience est la première expérience à avoir été implémentée dans Chromium dans la famille de propositions TURTLEDOVE.

Le schéma ci-dessous présente le cycle de vie de FLEDGE:

Illustration offrant un aperçu de chaque étape du cycle de vie de FLEDGE
Cycle de vie de FLEDGE
.

Comment puis-je essayer Protected Audience ?

Démonstration de Protected Audience

Un tutoriel de déploiement de base de l'API Protected Audience sur les sites des annonceurs et des éditeurs est disponible sur protection-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 le débogage de l'API Protected Audience.

Participer à une phase d'évaluation de Protected Audience

Une évaluation de la pertinence et des mesures de la Privacy Sandbox a été mise à disposition dans la version bêta 101.0.4951.26 de Chrome et les versions ultérieures sur ordinateur pour les API Protected Audience, Topics et Attribution Reporting.

Pour y participer, demandez un jeton d'évaluation Origin Trial.

Une fois inscrit à l'essai, vous pouvez tester l'API JavaScript Protected Audience sur des pages fournissant un jeton d'essai valide. Par exemple, vous pouvez demander au navigateur de rejoindre un ou plusieurs groupes de centres d'intérêt, puis lancer une mise aux enchères pour sélectionner et afficher une annonce.

La démonstration de l'API Protected Audience fournit un exemple basique de déploiement de l'API Protected Audience de bout en bout.

Fournissez un jeton d'essai pour chaque page sur laquelle vous souhaitez exécuter le code de l'API Protected Audience:

  • En tant que balise Meta dans la section <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 par programmation:

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

Un iFrame exécutant un code Protected Audience (tel qu'un appel navigator.joinAdInterestGroup() par un propriétaire de groupe de centres d'intérêt) devra fournir un jeton correspondant à son origine.

La page Informations sur la première phase d'évaluation de l'API Protected Audience proposée fournit plus d'informations sur les objectifs du premier essai et explique les fonctionnalités compatibles.

Tester cette API

Vous pouvez tester Protected Audience pour un seul utilisateur dans la version bêta 101.0.4951.26 de Chrome ou version ultérieure sur ordinateur:

  • En activant toutes les API Ad Privacy sous chrome://settings/adPrivacy
  • En définissant des indicateurs à partir de la ligne de commande.

Afficher des annonces dans des cadres iFrame ou cloisonnés

Les annonces peuvent être affichées dans un <iframe> ou un <fencedframe>, selon les indicateurs définis.

Pour utiliser <fencedframe> afin d'afficher des annonces:

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

Pour utiliser <iframe> afin d'afficher des annonces:

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

Incluez l'indicateur BiddingAndScoringDebugReportingAPI pour activer les méthodes temporaires de création de rapports de perte/gagnement de débogage.

L'article Exécuter Chromium avec des indicateurs explique comment définir des indicateurs lors de l'exécution de Chrome et d'autres navigateurs basés sur Chromium à partir de la ligne de commande. La liste complète des indicateurs Protected Audience est disponible sur Chromium Code Search.

Quelles sont les fonctionnalités compatibles avec la dernière version de Chrome ?

L'API Protected Audience est disponible derrière les flags de fonctionnalité dans Chromium. Il s'agit d'une première expérience permettant de tester les fonctionnalités suivantes de la proposition Protected Audience:

  • Groupes de centres d'intérêt: stockés par le navigateur, avec les 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 les groupes de centres d'intérêt enregistrés et les signaux du vendeur.
  • Sélection des annonces sur l'appareil par le vendeur (SSP ou éditeur): basée sur les enchères aux enchères et les métadonnées des acheteurs.
  • Affichage des annonces dans une version temporairement assouplie des cadres cloisonnés: 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 de détails sur la compatibilité et les contraintes des fonctionnalités.

Autorisations liées aux groupes de centres d'intérêt

Par défaut, l'implémentation actuelle de Protected Audience autorise l'appel de joinAdInterestGroup() depuis n'importe quel emplacement de la page, même à partir d'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 cadres iFrame inter-domaines, ils prévoient d'interdire les appels provenant d'iFrames interdomaines, comme indiqué dans le message d'explication.

Service clé-valeur

Lors des enchères publicitaires 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, telles que le budget de campagne restant. La proposition Protected Audience exige que ce serveur n'effectue aucune journalisation au niveau des événements et n'ait aucun autre effet secondaire basé sur ces requêtes.

Le code du service clé-valeur Protected Audience est désormais disponible dans un dépôt GitHub de la Privacy Sandbox. Ce service peut être utilisé par les développeurs Chrome et Android. Consultez l'annonce de blog pour connaître l'état d'avancement. Pour en savoir plus sur le service clé-valeur Protected Audience, consultez la présentation de l'API et celle du modèle de confiance.

Pour les tests initiaux, le modèle Bring Your Own Server est utilisé. À long terme, les technologies publicitaires devront utiliser les services clé-valeur Open Source Protected Audience qui s'exécutent dans des environnements d'exécution approuvés pour récupérer des données en temps réel.

Pour nous assurer que l'écosystème dispose de suffisamment de temps pour effectuer des tests, nous ne prévoyons pas d'exiger l'utilisation des TEE ou des services clés-valeurs Open Source avant quelque temps après l'abandon des cookies tiers. Nous informerons bien les développeurs qu'ils doivent commencer les tests et l'adoption 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 si elle est 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 puis-je 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, l'API Protected Audience exigera des sites qu'elle définisse des Règles d'autorisation pour permettre la disponibilité de cette fonctionnalité. Cela permettra de garantir que des tiers arbitraires ne peuvent pas utiliser l'API à l'insu d'un site. Toutefois, pour faciliter les tests lors de la première phase d'évaluation, cette exigence est annulée par défaut. Les sites qui souhaitent désactiver explicitement la fonctionnalité Protected Audience pendant la période de test peuvent utiliser les règles d'autorisation appropriées pour bloquer l'accès.

Il existe deux règles d'autorisation Protected Audience qui peuvent être définies indépendamment:

  • join-ad-interest-group active/désactive la fonctionnalité permettant d'ajouter un navigateur aux groupes de centres d'intérêt
  • run-ad-auction active/désactive la fonctionnalité permettant de lancer des enchères sur l'appareil

Vous pouvez désactiver complètement l'accès aux API Protected Audience 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>

La section Règles concernant les autorisations d'évaluation de la première phase d'évaluation de l'API Protected Audience proposée fournit plus de détails.

Désactivation par 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 Privacy Sandbox dans les paramètres de Chrome: Paramètres > Sécurité et confidentialité > Privacy Sandbox. Elle est également accessible à l'adresse chrome://settings/adPrivacy.
  • Désactivez les cookies tiers dans les paramètres de Chrome: Paramètres > Sécurité et confidentialité.
  • Dans chrome://settings/cookies, définissez Cookies et autres données des sites sur "Bloquer les cookies tiers" ou "Bloquer tous les cookies".
  • Utilisez le mode navigation privée.

La vidéo explicative de l'API Protected Audience fournit plus de détails sur les éléments de conception de l'API et explique comment l'API cherche à atteindre les objectifs de confidentialité.

Déboguer les Worklets Protected Audience

À partir de Chrome Canary 98.0.4718.0, il est possible de 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 Event Listener Breakpoints (Points d'arrêt de l'écouteur d'événements) du panneau Sources.

Capture d&#39;écran des outils de développement dans Chrome Canary, avec le volet &quot;Points d&#39;arrêt de l&#39;écouteur d&#39;événements&quot; mis en surbrillance dans le panneau &quot;Sources&quot;.
   Le début de la phase d&#39;enchères de l&#39;enchérisseur est sélectionné sous Worklet d&#39;enchères publicitaires.

Lorsqu'un point d'arrêt est déclenché, l'exécution est suspendue avant la première instruction au niveau supérieur du script du Worklet. Vous pouvez utiliser des points d'arrêt ou des commandes d'étape standards pour accéder à la fonction d'enchères/d'évaluation/de création de rapports.

Les scripts de Worklet actifs s'affichent également dans le panneau "Fils de discussion".

Capture d&#39;écran des outils de développement dans Chrome Canary, avec le volet &quot;Threads&quot; encadré dans le panneau &quot;Sources&quot; et montrant le script du Worklet actuel qui a été mis en pause.

Étant donné que certains Worklets peuvent s'exécuter en parallèle, plusieurs threads peuvent se retrouver à l'état "mis en pause". Vous pouvez utiliser la liste de 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 de groupes d'intérêt de l'API Protected Audience.

Si vous consultez le site d'achat de démonstration de l'API Protected Audience dans un navigateur où Protected Audience est activé, les outils de développement affichent des informations sur l'événement join.

Panneau &quot;Application des outils de développement&quot; dans Chrome Canary affichant des informations sur un événement de participation à un groupe de centres d&#39;intérêt Protected Audience

Désormais, si vous consultez le site de l'éditeur de démonstration de l'API Protected Audience dans un navigateur où Protected Audience est activé, les outils de développement affichent des informations sur les événements bid et win.

Panneau &quot;Application des outils de développement&quot; dans Chrome Canary affichant des informations sur les enchères et les victoires lors de la mise aux enchères Protected Audience

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 Web d'actualités. Une annonce pour un nouveau vélo du fabricant lui est présentée.

1. Un utilisateur consulte le site d'un annonceur.

Illustration représentant une personne visitant le site d&#39;un fabricant de vélos personnalisés dans le navigateur de son ordinateur portable.

Imaginez qu'un utilisateur visite le site Web d'un fabricant de vélos personnalisés (l'annonceur dans cet exemple) et passe du temps sur la page produit d'un vélo en acier fait main. Le fabricant de vélos dispose ainsi d'une opportunité de remarketing.

2. Le navigateur de l'utilisateur est invité à ajouter un groupe de centres d'intérêt

Illustration représentant une personne qui consulte un site dans un navigateur sur son ordinateur portable. Le code JavaScript joinAdInterestGroup() est exécuté dans le navigateur.

Section explicative: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 fait partie. Dans cet exemple, le groupe est nommé custom-bikes et le propriétaire est dsp.example. Le propriétaire du groupe d'intérêt (dans ce cas, la DSP) sera un acheteur dans les enchères publicitaires décrites à 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 partagée avec le fournisseur du navigateur ni avec personne d'autre.

joinAdInterestGroup() a besoin de l'autorisation de:

  • Le site visité
  • Le propriétaire du groupe de centres 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 consulté, c'est-à-dire de la même origine que le cadre de premier niveau de la page actuelle. Les sites peuvent utiliser une instruction join-ad-interest-group de l'en-tête de règle d'autorisation Protected Audience pour désactiver les appels joinAdInterestGroup().

Origine croisée: l'appel de joinAdInterestGroup() à partir d'origines différentes de la page actuelle ne peut réussir que si le site consulté a défini une règle d'autorisation qui autorise les appels à joinAdInterestGroup() depuis des iFrames multi-origines.

Autorisation du propriétaire du groupe de centres d'intérêt

L'autorisation de propriétaire d'un 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() peut s'exécuter sur une page ou un iFrame du domaine du propriétaire, ou être délégué à d'autres domaines fournis à l'aide d'une liste à une URL .well-known.

Utiliser navigateur.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);

La taille de l'objet interestGroup transmis à la fonction ne doit pas dépasser 50 Kio, sinon l'appel échouera. Le deuxième paramètre spécifie la durée du groupe d'intérêt, qui est limitée à 30 jours. Les appels successifs écrasent les valeurs précédemment stockées.

Propriétés des groupes de centres d'intérêt

Propriété Obligatoire Exemple Rôle
owner Obligatoire 'https://dsp.example' Origine du propriétaire du groupe de centres d'intérêt.
name Obligatoire 'custom-bikes' Nom du groupe de centres d'intérêt.
biddingLogicUrl** Facultatif* 'https://dsp.example/bid/custom-bikes/bid.js' URL pour l'exécution du code JavaScript d'enchères dans le Worklet.
biddingWasmHelperUrl** Facultatif* 'https://dsp.example/bid/custom-bikes/bid.wasm' URL du code WebAssembly généré par biddingLogicUrl.
dailyUpdateUrl** Facultatif 'https://dsp.example/bid/custom-bikes/update' URL qui renvoie un fichier 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 demandes de clé-valeur envoyées au serveur de confiance de l'enchérisseur.
trustedBiddingSignalsKeys Facultatif ['key1', 'key2' ...] Clés pour les requêtes adressées à un serveur de confiance clé-valeur.
userBiddingSignals Facultatif {...} Métadonnées supplémentaires que le propriétaire peut utiliser lors de la définition 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 d'annonces composées de plusieurs éléments.

* Toutes les propriétés sont facultatives, à l'exception de owner et name. Les propriétés biddingLogicUrl et ads sont facultatives, mais obligatoires pour participer à une mise aux enchères. Il est possible de 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 souhaiter ajouter un navigateur à un groupe de centres d'intérêt pour une campagne qui n'est pas encore diffusée ou pour toute autre utilisation ultérieure. Il peut aussi 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.

Mettre à jour les attributs des groupes de centres d'intérêt

dailyUpdateUrl spécifie un serveur Web qui renvoie un fichier JSON définissant les propriétés des groupes de centres d'intérêt, correspondant à l'objet de groupe d'intérêt transmis à navigator.joinAdInterestGroup(). Le propriétaire du groupe dispose ainsi d'un mécanisme lui permettant de mettre à jour périodiquement les attributs du groupe de centres d'intérêt. Dans la mise en œuvre actuelle, les attributs suivants peuvent être modifiés:

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

Tout champ non spécifié dans le fichier JSON ne sera pas écrasé (seuls les champs spécifiés dans le fichier JSON seront mis à jour), tandis que l'appel de navigator.joinAdInterestGroup() écrasera tout groupe d'intérêt existant.

Les mises à jour reposent sur le principe du "meilleur effort" et peuvent échouer dans les conditions suivantes:

  • Délai avant expiration de la requête réseau (30 secondes actuellement).
  • Autre défaillance du réseau.
  • Échec de l'analyse JSON.

Les mises à jour peuvent également être annulées si elles ont dépassé la durée maximale de mise à jour contiguë, même si cela n'impose aucune limitation du débit pour les mises à jour annulées (résidentes). Les mises à jour sont limitées à une mise à jour par jour au maximum. Les mises à jour qui échouent en raison d'erreurs réseau sont relancées au bout d'une heure, et celles qui échouent en raison d'une déconnexion d'Internet font l'objet d'une nouvelle tentative immédiatement lors de la reconnexion.

Mises à jour manuelles

Les mises à jour des groupes 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 trop fréquentes : les appels répétés à navigator.updateAdInterestGroups() n'ont aucun effet tant que la période de limitation du débit (un jour actuellement) n'est pas écoulée. La limite du taux est réinitialisée si navigator.joinAdInterestGroup() est rappelé pour le même groupe d'intérêt owner et name.

Mises à jour automatiques

Tous les groupes d'intérêt chargés pour une mise aux enchères sont mis à jour automatiquement une fois l'enchère terminée, sous réserve des mêmes limites de taux que les mises à jour manuelles. Pour chaque propriétaire avec au moins un groupe de centres d'intérêt participant à une mise aux enchères, c'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 qui peuvent être utilisées au moment de l'enchère. Exemple :

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

Comment les acheteurs définissent-ils des enchères ?

Le script biddingLogicUrl fourni par un propriétaire de groupe 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é à enchérir. En d'autres termes, generateBid() est appelé une fois pour chaque annonce candidate. Le vendeur fournit une propriété decisionLogicUrl pour le paramètre de configuration de l'enchère transmis à navigator.runAdAuction(). Le code à cette URL doit inclure une fonction scoreAd(), qui est exécutée pour chaque enchérisseur participant aux enchères, pour évaluer chacune des enchères renvoyées par generateBid().

Le script 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 l'enchère et les 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. Vous pouvez mettre à jour le groupe de centres d'intérêt via dailyUpdateUrl.

  • auctionSignals
    Propriété de l'argument auction config transmise à navigator.runAdAuction() par le vendeur de l'espace publicitaire. Elle fournit des informations sur le contexte de la page (comme la taille de l'annonce et la référence éditeur), le type d'enchères (premier ou second prix) et d'autres métadonnées.

  • perBuyerSignals
    Comme pour auctionSignals, il s'agit d'une propriété de l'argument de configuration des enchères transmise à navigator.runAdAuction() par le vendeur. Cela peut fournir des signaux contextuels du serveur de l'acheteur concernant la page, si le vendeur est une SSP qui effectue un appel d'enchères en temps réel vers les 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 vérifier une signature cryptographique de ces signaux dans generateBid() afin d'assurer une protection contre la falsification.

  • trustedBiddingSignals
    Objet dont les clés correspondent aux trustedBiddingSignalsKeys du groupe de centres d'intérêt et dont les valeurs sont renvoyées dans la requête trustedBiddingSignals.

  • browserSignals
    Objet créé par le navigateur, qui peut inclure des informations sur le contexte de la page (comme l'hostname de la page actuelle, que le vendeur pourrait falsifier autrement) et des données concernant le groupe d'intérêt lui-même (comme un enregistrement de la date à laquelle le groupe a précédemment remporté une enchère, pour permettre la limitation de la fréquence d'exposition sur l'appareil).

L'objet browserSignals possède 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 dans 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 concernant l'annonce, telles que les informations que le vendeur s'attend à obtenir sur cette enchère ou cette création publicitaire. Le vendeur](/privacy-sandbox/resources/glossary#ssp) utilise ces informations dans sa création d'annonce d'enchères et de décision. Le vendeur utilise ces informations dans sa logique d'enchères et de décision.

  • bid
    Enchère numérique qui participera à la mise aux enchères. Le vendeur doit être en mesure de 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 d'intérêt ne participera pas du tout à la mise aux enchères du vendeur. Ce mécanisme permet à l'acheteur d'appliquer les règles de l'annonceur aux emplacements où ses annonces peuvent être diffusées ou non.

  • 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. Consultez la section Annonces composées de plusieurs éléments dans la description de l'API. La valeur doit correspondre à l'identifiant 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 des annonces composées de plusieurs éléments, extraite de la propriété adComponents de l'argument de groupe d'intérêt 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 qu'un navigateur soit supprimé d'un groupe de centres d'intérêt. En d'autres termes, le navigateur est invité à supprimer le groupe de centres d'intérêt de la liste dont il fait partie.

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 peut appeler la fonction navigator.leaveAdInterestGroup() pour demander au navigateur de supprimer le groupe de centres d'intérêt. Le code d'une annonce peut également appeler cette fonction pour son groupe de centres d'intérêt.

3. Il consulte un site qui vend de l'espace publicitaire.

Illustration représentant une personne visitant un site Web d&#39;actualités dans le navigateur de son ordinateur portable Le site comporte un espace publicitaire vide.

Plus tard, l'utilisateur visite un site qui vend des espaces publicitaires, dans cet exemple un site Web d'actualités. Le site dispose d'un inventaire publicitaire, qu'il vend de manière programmatique à l'aide des enchères en temps réel.

4. Mise en concurrence des annonces effectuée dans le navigateur

Illustration représentant une personne qui consulte un site Web d&#39;actualités dans le navigateur de son ordinateur portable. Une enchère publicitaire est en cours à l&#39;aide de l&#39;API Protected Audience.

Section explicative:Les vendeurs effectuent des enchères sur l'appareil

Les enchères publicitaires sont susceptibles d'être effectuées par la SSP de l'éditeur ou par l'éditeur lui-même. L'objectif de l'enchère est de sélectionner l'annonce la plus appropriée pour un seul espace publicitaire disponible sur la page active. La mise aux enchères prend en compte les groupes de centres d'intérêt auxquels le navigateur appartient, ainsi que les données des acheteurs de l'espace publicitaire et des vendeurs des services clé-valeur.

Le vendeur d'espace publicitaire envoie une demande au navigateur de l'utilisateur pour lancer une enchère publicitaire 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 renvoie à un URN (urn:uuid:<something>) qui représente le résultat des enchères publicitaires. Celui-ci ne peut être décodé par le navigateur que lorsqu'il est transmis à un cadre cloisonné pour l'affichage: la page de l'éditeur ne peut pas inspecter l'annonce gagnante.

Le script decisionLogicUrl examine une par une chaque annonce, ainsi que l'enchère et les métadonnées associées, puis lui attribue un score de désirabilité numérique.

auctionConfig de propriétés

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 à enchérir dans l'enchère.
auctionSignals Facultatif {...} Informations sur le vendeur concernant le contexte de la page, le type d'enchères, etc.
sellerSignals Facultatif {...} Informations basées sur les paramètres de l'éditeur, 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': {...},
  'https://another-buyer.example': {...},
...}
Signaux contextuels concernant la page de chaque acheteur, provenant de leur serveur.
perBuyerTimeouts Facultatif 50 Durée d'exécution maximale (ms) des scripts generateBid() d'un acheteur spécifique.
componentAuctions Facultatif [{'seller': 'https://www.some-other-ssp.com',
  'decisionLogicUrl': ..., ...},
  ...]
Autres configurations pour les enchères de composants.

* Le vendeur peut spécifier interestGroupBuyers: '*' pour autoriser tous les groupes d'intérêt à définir des enchères. Les annonces sont ensuite acceptées ou refusées en fonction de critères autres que l'inclusion du propriétaire du groupe de centres d'intérêt. Par exemple, le vendeur peut examiner les créations publicitaires pour s'assurer 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 dans la vidéo d'explication de l'API Protected Audience.

Comment les annonces sont-elles sélectionnées ?

Le code decisionLogicUrl (une 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 si elle est intéressante.

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 de l'enchère à partir du serveur de confiance 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 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 enchère, le vendeur trouve la meilleure annonce contextuelle pour l'espace publicitaire disponible. Une partie de sa logique scoreAd() consiste à refuser toute annonce qui ne peut pas battre la variante contextuelle gagnante.

5. Le vendeur et les acheteurs participants reçoivent des données en temps réel du service clé-valeur.

Illustration représentant une personne qui consulte un site Web d&#39;actualités dans le navigateur de son ordinateur portable. Une enchère publicitaire est en cours à l&#39;aide de l&#39;API Protected Audience, et un participant obtient des données du service clé-valeur.

Section explicative:Récupérer des données en temps réel à partir du service clé-valeur Protected Audience

Lors d'enchères publicitaires, le vendeur de l'espace publicitaire peut obtenir des données en temps réel sur des créations spécifiques en envoyant une demande à un service clé-valeur à l'aide de la propriété trustedScoringSignalsUrl de l'argument de configuration des enchères transmise à 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 d'intérêt participant à l'enchère.

De même, un acheteur d'espace publicitaire peut demander des données en temps réel au service clé-valeur à l'aide des propriétés trustedBiddingSignalsUrl et trustedBiddingSignalsKeys de l'argument de groupe d'intérêt transmis à navigator.joinAdInterestGroup().

Lorsque la méthode runAdAuction() est appelée, le navigateur envoie une demande 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.
  • Le hostname est fourni par le navigateur.
  • La valeur keys est issue de trustedBiddingSignalsKeys.

La réponse à cette requête est un objet JSON qui fournit des valeurs pour chacune des clés.

6. L'annonce gagnante s'affiche.

Illustration représentant une personne qui consulte un site Web d&#39;actualités dans le navigateur de son ordinateur portable. Une annonce pour un vélo (20% de remise) s&#39;affiche. Un cadenas est affiché en haut pour indiquer qu&#39;elle est diffusée dans un cadre clôturé.

Section explicative:Les navigateurs diffusent l'annonce gagnante

Comme décrit précédemment, la promesse renvoyée par runAdAuction() renvoie un URN qui est transmis à un frame cloisonné pour l'affichage, et le site affiche l'annonce gagnante.

7. Le résultat de l'enchère est indiqué

Section explicative:Rapports au niveau des événements (pour l'instant)

Résultat des rapports du vendeur

Section explicative:Rapports sur l'affichage du vendeur

Le code JavaScript du vendeur fourni sur decisionLogicUrl (qui a également fourni scoreAd()) peut inclure une fonction reportResult() pour générer un rapport sur 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 construit par le navigateur et fournissant des informations sur l'enchère. 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 des rapports sur l'enchérisseur ayant remporté l'enchère

Section explicative:Créer des rapports d'acheteur sur l'affichage et les événements d'annonce

Le code JavaScript de l'enchérisseur gagnant (qui a également fourni generateBid()) peut inclure une fonction reportWin() pour indiquer le résultat de la mise aux enchères.

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

Les arguments transmis à cette fonction sont les suivants:

  • auctionSignals et perBuyerSignals
    Les mêmes valeurs ont été transmises à generateBid() pour l'enchérisseur gagnant.
  • sellerSignals
    Valeur renvoyée de reportResult(), qui permet au vendeur de transmettre des informations à l'acheteur.
  • browserSignals
    Objet construit par le navigateur et fournissant des informations sur l'enchère. 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 de rapports de perte/gagnement

Pour créer des rapports sur les enchères, deux méthodes sont disponibles temporairement dans Chrome:

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

Chacune de ces méthodes utilise un seul argument: une URL à récupérer une fois l'enchère terminée. Elles peuvent être appelées plusieurs fois, dans scoreAd() et generateBid(), avec des arguments d'URL différents.

Chrome n'envoie des rapports de débogage de perte/gagnement que lorsqu'une enchère est terminée. Si une mise aux enchères est annulée (en raison d'une nouvelle navigation, par exemple), aucun rapport n'est généré.

Ces méthodes sont disponibles par défaut dans Chrome. Pour pouvoir tester les méthodes, activez toutes les API Ad Privacy sous chrome://settings/adPrivacy. Si vous exécutez Chrome avec des indicateurs de ligne de commande pour activer Protected Audience, vous devez activer explicitement les méthodes en incluant l'option BiddingAndScoringDebugReportingAPI. Si l'option n'est pas activée, les méthodes restent disponibles, mais ne font rien.

8. Un clic sur une annonce est enregistré

Illustration représentant une personne qui clique sur une annonce pour un vélo, dans un cadre clôturé, sur un site Web d&#39;actualités, avec des données de rapport transmises au vendeur et aux acheteurs.

Un clic sur une annonce affichée dans un cadre cloisonné est enregistré. Pour en savoir plus sur ce fonctionnement, consultez Rapports sur les annonces avec cadres cloisonnés.



Le diagramme ci-dessous décrit chaque étape d'une enchère publicitaire Protected Audience:

Illustration offrant un aperçu de chaque étape d&#39;une enchère publicitaire Protected Audience


Quelle est la différence entre Protected Audience et TURTLEDOVE ?

Protected Audience est la première expérience à avoir été implémentée dans Chromium au sein de la famille de propositions TURTLEDOVE.

Protected Audience suit les principes généraux de TURTLEDOVE. Certaines publicités en ligne reposent sur la diffusion d'une annonce auprès d'une personne potentiellement intéressée ayant déjà interagi avec l'annonceur ou le réseau publicitaire. Jusqu'à présent, l'annonceur avait l'habitude d'identifier une personne spécifique lorsqu'elle parcourait des sites Web. C'est une préoccupation majeure pour le Web d'aujourd'hui.

L'initiative TURTLEDOVE consiste à proposer une nouvelle API pour répondre à ce cas d'utilisation tout en offrant des avancées clés en termes de confidentialité:

  • C'est le navigateur, et non l'annonceur, qui conserve les informations sur ce qui, selon l'annonceur, est intéressé par l'utilisateur.
  • Les annonceurs peuvent diffuser des annonces en fonction d'un centre d'intérêt, mais ne peuvent pas le combiner à d'autres informations sur une personne, en particulier son identité ou la page qu'il consulte.

Protected Audience est né de TURTLEDOVE et d'un ensemble de propositions de modifications associées afin de mieux répondre aux besoins des développeurs qui utiliseront l'API:

  • Dans SPARROW : Criteo a proposé d'ajouter un modèle de service ("Gatekeeper") s'exécutant 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 la création de 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 l'enchère 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 de type 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 demandes d'annonces et d'appliquer les propriétés de confidentialité. Protected Audience n'a pas adopté ce modèle de proxy. Nous harmonisons les API JavaScript pour PARAKEET et Protected Audience afin de faciliter les futurs travaux visant à combiner davantage les meilleures fonctionnalités des deux propositions.

L'API Protected Audience n'empêche pas encore le réseau publicitaire d'un site Web d'identifier les annonces qu'un utilisateur voit. Nous prévoyons de modifier l'API pour la rendre plus privée au fil du temps.

Quelle est la configuration de navigateur disponible ?

Les utilisateurs peuvent modifier leur participation aux essais de la Privacy Sandbox dans Chrome en activant ou en désactivant le paramètre de premier niveau dans chrome://settings/adPrivacy. Lors des premiers tests, 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 organismes de réglementation et d'autres personnes.

Nous continuerons de mettre à jour les paramètres disponibles dans Chrome à mesure de l'avancement de la proposition Protected Audience, sur la base de tests et de 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'adhésion est supprimée lorsque les utilisateurs effacent les données de leur site.



Interagir et partager des commentaires

Obtenir de l'aide

Pour toute question concernant votre implémentation, la démonstration ou la documentation:

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 à l'adresse crbug.com/new.

Recevoir les dernières informations

En savoir plus


Photo de Ray Hennessy sur Unsplash.